Update support python 2.7

This commit is contained in:
Eugene Savchenko 2018-08-04 00:09:01 +03:00
parent 6880725615
commit 0daa0adf29

View File

@ -942,11 +942,11 @@ class ModelSerializer(Serializer):
""" """
if not len(fields): if not len(fields):
fields = '__all__' fields = '__all__'
meta = getattr(cls, 'Meta', type('Meta', (), {})) meta = getattr(cls, 'Meta', type(str('Meta'), (object,), {}))
return type(cls.__name__, (cls,), { return type(cls.__name__, (cls, object), {
'Meta': type('Meta', (meta,), { six.text_type('Meta'): type(str('Meta'), (meta, object), {
'fields': fields, six.text_type('fields'): fields,
'exclude': None six.text_type('exclude'): None
}) })
}) })
@ -973,7 +973,7 @@ class ModelSerializer(Serializer):
class UserViewSet(viewsets.ModelViewSet): class UserViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer.meta_exclude('products') serializer_class = UserSerializer.meta_exclude('products')
""" """
meta = getattr(cls, 'Meta', type('Meta', (), {})) meta = getattr(cls, 'Meta', type(str('Meta'), (object,), {}))
meta_fields = getattr(meta, 'fields', None) meta_fields = getattr(meta, 'fields', None)
exclude_props = [] exclude_props = []
if isinstance(meta_fields, list) or isinstance(meta_fields, tuple): if isinstance(meta_fields, list) or isinstance(meta_fields, tuple):
@ -983,13 +983,14 @@ class ModelSerializer(Serializer):
meta_fields = None meta_fields = None
exclude_props = [key for key, prop in cls._declared_fields.items() if isinstance(prop, Field)] exclude_props = [key for key, prop in cls._declared_fields.items() if isinstance(prop, Field)]
exclude = list(filter(lambda f: f not in exclude_props, exclude)) exclude = list(filter(lambda f: f not in exclude_props, exclude))
return type(cls.__name__, (cls,), { cls_dict = {
'Meta': type('Meta', (meta,), { 'Meta': type(str('Meta'), (meta, object), {
'fields': meta_fields, six.text_type('fields'): meta_fields,
'exclude': exclude six.text_type('exclude'): exclude
}), })
**{field: None for field in exclude_props} }
}) cls_dict.update({field: None for field in exclude_props})
return type(cls.__name__, (cls, object), cls_dict)
@classmethod @classmethod
def meta_preset(cls, name): def meta_preset(cls, name):
@ -1023,12 +1024,12 @@ class ModelSerializer(Serializer):
class UserViewSet(viewsets.ModelViewSet): class UserViewSet(viewsets.ModelViewSet):
serializer_class = UserSerializer.meta_preset('light') serializer_class = UserSerializer.meta_preset('light')
""" """
meta = getattr(cls, 'Meta', type('Meta', (), {})) meta = getattr(cls, 'Meta', type(str('Meta'), (), {}))
presets = getattr(meta, 'presets', {}) presets = getattr(meta, 'presets', {})
preset = presets.get(name, None) preset = presets.get(name, None)
assert preset is not None, ('Preset of `%s` with `%s` name doesn\'t exist.' % (cls.__name__, name)) assert preset is not None, ('Preset of `%s` with `%s` name doesn\'t exist.' % (cls.__name__, name))
return type(cls.__name__, (cls,), { return type(cls.__name__, (cls,), {
'Meta': type('Meta', (meta,), preset) str('Meta'): type(str('Meta'), (meta, object), preset)
}) })
# Default `create` and `update` behavior... # Default `create` and `update` behavior...