diff options
author | django-bot <ops@djangoproject.com> | 2022-02-03 20:24:19 +0100 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-02-07 20:37:05 +0100 |
commit | 9c19aff7c7561e3a82978a272ecdaad40dda5c00 (patch) | |
tree | f0506b668a013d0063e5fba3dbf4863b466713ba /django/core/serializers/python.py | |
parent | f68fa8b45dfac545cfc4111d4e52804c86db68d3 (diff) | |
download | django-9c19aff7c7561e3a82978a272ecdaad40dda5c00.tar.gz |
Refs #33476 -- Reformatted code with Black.
Diffstat (limited to 'django/core/serializers/python.py')
-rw-r--r-- | django/core/serializers/python.py | 66 |
1 files changed, 47 insertions, 19 deletions
diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py index 0ceb676e90..a3918bf9d2 100644 --- a/django/core/serializers/python.py +++ b/django/core/serializers/python.py @@ -32,10 +32,10 @@ class Serializer(base.Serializer): self._current = None def get_dump_object(self, obj): - data = {'model': str(obj._meta)} - if not self.use_natural_primary_keys or not hasattr(obj, 'natural_key'): + data = {"model": str(obj._meta)} + if not self.use_natural_primary_keys or not hasattr(obj, "natural_key"): data["pk"] = self._value_from_field(obj, obj._meta.pk) - data['fields'] = self._current + data["fields"] = self._current return data def _value_from_field(self, obj, field): @@ -49,7 +49,9 @@ class Serializer(base.Serializer): self._current[field.name] = self._value_from_field(obj, field) def handle_fk_field(self, obj, field): - if self.use_natural_foreign_keys and hasattr(field.remote_field.model, 'natural_key'): + if self.use_natural_foreign_keys and hasattr( + field.remote_field.model, "natural_key" + ): related = getattr(obj, field.name) if related: value = related.natural_key() @@ -61,13 +63,19 @@ class Serializer(base.Serializer): def handle_m2m_field(self, obj, field): if field.remote_field.through._meta.auto_created: - if self.use_natural_foreign_keys and hasattr(field.remote_field.model, 'natural_key'): + if self.use_natural_foreign_keys and hasattr( + field.remote_field.model, "natural_key" + ): + def m2m_value(value): return value.natural_key() + else: + def m2m_value(value): return self._value_from_field(value, value._meta.pk) - m2m_iter = getattr(obj, '_prefetched_objects_cache', {}).get( + + m2m_iter = getattr(obj, "_prefetched_objects_cache", {}).get( field.name, getattr(obj, field.name).iterator(), ) @@ -77,14 +85,16 @@ class Serializer(base.Serializer): return self.objects -def Deserializer(object_list, *, using=DEFAULT_DB_ALIAS, ignorenonexistent=False, **options): +def Deserializer( + object_list, *, using=DEFAULT_DB_ALIAS, ignorenonexistent=False, **options +): """ Deserialize simple Python objects back into Django ORM instances. It's expected that you pass the Python objects themselves (instead of a stream or a string) to the constructor """ - handle_forward_references = options.pop('handle_forward_references', False) + handle_forward_references = options.pop("handle_forward_references", False) field_names_cache = {} # Model: <list of field_names> for d in object_list: @@ -97,11 +107,13 @@ def Deserializer(object_list, *, using=DEFAULT_DB_ALIAS, ignorenonexistent=False else: raise data = {} - if 'pk' in d: + if "pk" in d: try: - data[Model._meta.pk.attname] = Model._meta.pk.to_python(d.get('pk')) + data[Model._meta.pk.attname] = Model._meta.pk.to_python(d.get("pk")) except Exception as e: - raise base.DeserializationError.WithData(e, d['model'], d.get('pk'), None) + raise base.DeserializationError.WithData( + e, d["model"], d.get("pk"), None + ) m2m_data = {} deferred_fields = {} @@ -119,21 +131,33 @@ def Deserializer(object_list, *, using=DEFAULT_DB_ALIAS, ignorenonexistent=False field = Model._meta.get_field(field_name) # Handle M2M relations - if field.remote_field and isinstance(field.remote_field, models.ManyToManyRel): + if field.remote_field and isinstance( + field.remote_field, models.ManyToManyRel + ): try: - values = base.deserialize_m2m_values(field, field_value, using, handle_forward_references) + values = base.deserialize_m2m_values( + field, field_value, using, handle_forward_references + ) except base.M2MDeserializationError as e: - raise base.DeserializationError.WithData(e.original_exc, d['model'], d.get('pk'), e.pk) + raise base.DeserializationError.WithData( + e.original_exc, d["model"], d.get("pk"), e.pk + ) if values == base.DEFER_FIELD: deferred_fields[field] = field_value else: m2m_data[field.name] = values # Handle FK fields - elif field.remote_field and isinstance(field.remote_field, models.ManyToOneRel): + elif field.remote_field and isinstance( + field.remote_field, models.ManyToOneRel + ): try: - value = base.deserialize_fk_value(field, field_value, using, handle_forward_references) + value = base.deserialize_fk_value( + field, field_value, using, handle_forward_references + ) except Exception as e: - raise base.DeserializationError.WithData(e, d['model'], d.get('pk'), field_value) + raise base.DeserializationError.WithData( + e, d["model"], d.get("pk"), field_value + ) if value == base.DEFER_FIELD: deferred_fields[field] = field_value else: @@ -143,7 +167,9 @@ def Deserializer(object_list, *, using=DEFAULT_DB_ALIAS, ignorenonexistent=False try: data[field.name] = field.to_python(field_value) except Exception as e: - raise base.DeserializationError.WithData(e, d['model'], d.get('pk'), field_value) + raise base.DeserializationError.WithData( + e, d["model"], d.get("pk"), field_value + ) obj = base.build_instance(Model, data, using) yield base.DeserializedObject(obj, m2m_data, deferred_fields) @@ -154,4 +180,6 @@ def _get_model(model_identifier): try: return apps.get_model(model_identifier) except (LookupError, TypeError): - raise base.DeserializationError("Invalid model identifier: '%s'" % model_identifier) + raise base.DeserializationError( + "Invalid model identifier: '%s'" % model_identifier + ) |