|
@ -159,7 +159,7 @@ def binary(obj): |
|
|
return obj.decode('utf-8') |
|
|
return obj.decode('utf-8') |
|
|
return unicode(obj) |
|
|
return unicode(obj) |
|
|
else: |
|
|
else: |
|
|
return bytes(obj) |
|
|
return bytes(obj, 'utf-8') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def with_equality(field): |
|
|
def with_equality(field): |
|
@ -199,11 +199,14 @@ class ModelMeta(type): |
|
|
dct = {k: v for k, v in six.iteritems(dct) if k not in fields} |
|
|
dct = {k: v for k, v in six.iteritems(dct) if k not in fields} |
|
|
|
|
|
|
|
|
if SlottedModel and any(map(lambda k: issubclass(k, SlottedModel), parents)): |
|
|
if SlottedModel and any(map(lambda k: issubclass(k, SlottedModel), parents)): |
|
|
bases = set(k for k, v in six.iteritems(dct) if isinstance(v, CachedSlotProperty)) |
|
|
# Bases conflict with slots, now it's fine on py2 since it replaces it, on py3 that doesn't work are they even needed? |
|
|
|
|
|
# bases = set(k for k, v in six.iteritems(dct) if isinstance(v, CachedSlotProperty)) |
|
|
if '__slots__' in dct: |
|
|
if '__slots__' in dct: |
|
|
dct['__slots__'] = tuple(set(dct['__slots__']) | set(fields.keys()) | bases) |
|
|
# dct['__slots__'] = tuple(set(dct['__slots__']) | set(fields.keys()) | bases) |
|
|
|
|
|
dct['__slots__'] = tuple(set(dct['__slots__']) | set(fields.keys())) |
|
|
else: |
|
|
else: |
|
|
dct['__slots__'] = tuple(fields.keys()) + tuple(bases) |
|
|
# dct['__slots__'] = tuple(fields.keys()) + tuple(bases) |
|
|
|
|
|
dct['__slots__'] = tuple(fields.keys()) |
|
|
|
|
|
|
|
|
dct['_fields'] = fields |
|
|
dct['_fields'] = fields |
|
|
return super(ModelMeta, cls).__new__(cls, name, parents, dct) |
|
|
return super(ModelMeta, cls).__new__(cls, name, parents, dct) |
|
|