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, })
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, })
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, })
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)
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, })
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)
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)
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)