Esempio n. 1
0
 def _object_version(self):
     version_options = _get_options(self._model)
     data = self.serialized_data
     data = force_str(data.encode("utf8"))
     try:
         return list(
             serializers.deserialize(
                 self.format,
                 data,
                 ignorenonexistent=True,
                 use_natural_foreign_keys=version_options.
                 use_natural_foreign_keys))[0]
     except DeserializationError:
         raise RevertError(
             ugettext(
                 "Could not load %(object_repr)s version - incompatible version data."
             ) % {
                 "object_repr": self.object_repr,
             })
     except serializers.SerializerDoesNotExist:
         raise RevertError(
             ugettext(
                 "Could not load %(object_repr)s version - unknown serializer %(format)s."
             ) % {
                 "object_repr": self.object_repr,
                 "format": self.format,
             })
Esempio n. 2
0
def get_object_version(model, data, object_repr, format):
    version_options = _get_options(model)
    data = force_str(data.encode('utf8'))
    try:
        return list(
            serializers.deserialize(format,
                                    data,
                                    ignorenonexistent=True,
                                    use_natural_foreign_keys=version_options.
                                    use_natural_foreign_keys))[0]
    except DeserializationError:
        raise RevertError(
            ugettext(
                'Could not load %(object_repr)s version - incompatible version data.'
            ) % {
                'object_repr': object_repr,
            })
    except serializers.SerializerDoesNotExist:
        raise RevertError(
            ugettext(
                'Could not load %(object_repr)s version - unknown serializer %(format)s.'
            ) % {
                'object_repr': object_repr,
                'format': format,
            })
Esempio n. 3
0
 def object_version(self):
     """The stored version of the model."""
     data = self.serialized_data
     data = force_text(data.encode("utf8"))
     try:
         return list(serializers.deserialize(self.format, data, ignorenonexistent=True))[0]
     except serializers.DeserializationError:
         raise RevertError(ugettext("Could not load %(object_repr)s version - incompatible version data.") % {
             "object_repr": self.object_repr,
         })
     except serializers.SerializerDoesNotExist:
         raise RevertError(ugettext("Could not load %(object_repr)s version - unknown serializer %(format)s.") % {
             "object_repr": self.object_repr,
             "format": self.format,
         })
Esempio n. 4
0
 def do_revert(versions):
     unreverted_versions = []
     for version in versions:
         try:
             version.revert()
         except IntegrityError:
             unreverted_versions.append(version)
     if len(unreverted_versions) == len(versions):
         raise RevertError(
             "Could not revert revision, due to database integrity errors."
         )
     if unreverted_versions:
         do_revert(unreverted_versions)
Esempio n. 5
0
 def _object_version(self):
     try:
         return list(
             serializers.deserialize('python',
                                     self.data,
                                     ignorenonexistent=True))[0]
     except DeserializationError:
         raise RevertError(
             ugettext(
                 'Could not load %(object_repr)s version - incompatible version data.'
             ) % {
                 'object_repr': self.object_repr,
             })
Esempio n. 6
0
def _safe_revert(versions):
    unreverted_versions = []
    for version in versions:
        try:
            with transaction.atomic(using=version.db):
                version.revert()
        except (IntegrityError, ObjectDoesNotExist):
            unreverted_versions.append(version)
    if len(unreverted_versions) == len(versions):
        raise RevertError(gettext("Could not save %(object_repr)s version - missing dependency.") % {
            "object_repr": unreverted_versions[0],
        })
    if unreverted_versions:
        _safe_revert(unreverted_versions)
Esempio n. 7
0
def safe_revert(versions):
    """
    Attempts to revert the given models contained in the give versions.

    This method will attempt to resolve dependencies between the versions to revert
    them in the correct order to avoid database integrity errors.
    """
    unreverted_versions = []
    for version in versions:
        try:
            with transaction.atomic():
                version.revert()
        except (IntegrityError, ObjectDoesNotExist):  # pragma: no cover
            unreverted_versions.append(version)
    if len(unreverted_versions) == len(versions):  # pragma: no cover
        raise RevertError(
            "Could not revert revision, due to database integrity errors.")
    if unreverted_versions:  # pragma: no cover
        safe_revert(unreverted_versions)
Esempio n. 8
0
def safe_revert(versions):
    """
    Attempts to revert the given models contained in the give versions.

    This method will attempt to resolve dependencies between the versions to revert
    them in the correct order to avoid database integrity errors.
    """
    unreverted_versions = []
    for version in versions:
        try:
            with transaction.atomic(using=version.db):
                version.revert()
        except (IntegrityError, ObjectDoesNotExist):
            unreverted_versions.append(version)
    if len(unreverted_versions) == len(versions):
        raise RevertError(ugettext("Could not save %(object_repr)s version - missing dependency.") % {
            "object_repr": unreverted_versions[0],
        })
    if unreverted_versions:
        safe_revert(unreverted_versions)