| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- # Inspired by urlparse.py from CPython 3.3 stdlib
- # There was a bug in MicroPython that under some conditions class stored
- # in instance attribute later was returned "bound" as if it was a method,
- # which caused class constructor to receive extra argument.
- try:
- from collections import namedtuple
- except ImportError:
- try:
- from ucollections import namedtuple
- except ImportError:
- print("SKIP")
- raise SystemExit
- _DefragResultBase = namedtuple('DefragResult', [ 'foo', 'bar' ])
- class _ResultMixinStr(object):
- def encode(self):
- return self._encoded_counterpart(*(x.encode() for x in self))
- class _ResultMixinBytes(object):
- def decode(self):
- return self._decoded_counterpart(*(x.decode() for x in self))
- class DefragResult(_DefragResultBase, _ResultMixinStr):
- pass
- class DefragResultBytes(_DefragResultBase, _ResultMixinBytes):
- pass
- DefragResult._encoded_counterpart = DefragResultBytes
- DefragResultBytes._decoded_counterpart = DefragResult
- # Due to differences in type and native subclass printing,
- # the best thing we can do here is to just test that no exceptions
- # happen
- #print(DefragResult, DefragResult._encoded_counterpart)
- #print(DefragResultBytes, DefragResultBytes._decoded_counterpart)
- o1 = DefragResult("a", "b")
- #print(o1, type(o1))
- o2 = DefragResultBytes("a", "b")
- #print(o2, type(o2))
- #print(o1._encoded_counterpart)
- _o1 = o1.encode()
- print(_o1[0], _o1[1])
- #print(_o1, type(_o1))
- print("All's ok")
|