2014-05-11 01:12:36 +01:00
|
|
|
# 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.
|
2014-05-11 01:45:42 +01:00
|
|
|
try:
|
|
|
|
from collections import namedtuple
|
|
|
|
except ImportError:
|
2017-02-14 21:57:56 +00:00
|
|
|
try:
|
|
|
|
from ucollections import namedtuple
|
|
|
|
except ImportError:
|
|
|
|
import sys
|
|
|
|
print("SKIP")
|
|
|
|
sys.exit()
|
2014-05-11 01:12:36 +01:00
|
|
|
|
2014-12-20 15:37:40 +00:00
|
|
|
_DefragResultBase = namedtuple('DefragResult', [ 'foo', 'bar' ])
|
2014-05-11 01:12:36 +01:00
|
|
|
|
|
|
|
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")
|