Hello community,

here is the log from the commit of package python-django-reversion for 
openSUSE:Factory checked in at 2019-12-07 15:07:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-reversion (Old)
 and      /work/SRC/openSUSE:Factory/.python-django-reversion.new.4691 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-django-reversion"

Sat Dec  7 15:07:07 2019 rev:11 rq:754684 version:3.0.5

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-django-reversion/python-django-reversion.changes
  2019-05-22 15:42:08.482427028 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-django-reversion.new.4691/python-django-reversion.changes
        2019-12-07 15:07:27.483863225 +0100
@@ -1,0 +2,16 @@
+Fri Dec  6 13:42:03 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Fix the requires on the Django as it really works with > 1.11 and
+  does not support python 2 anymore
+
+-------------------------------------------------------------------
+Thu Dec  5 23:22:25 UTC 2019 - Martin Herkt <[email protected]>
+
+- Update to 3.0.5:
+  * Improved performance of `get_deleted` for large datasets.
+  * Django 3.0 compatibility.
+  * Drops Django <= 1.11 compatibility.
+  * Fixed errors in manageement commands when
+    `django.contrib.admin` is not in `INSTALLED_APPS`.
+
+-------------------------------------------------------------------

Old:
----
  django-reversion-3.0.4.tar.gz

New:
----
  django-reversion-3.0.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-django-reversion.spec ++++++
--- /var/tmp/diff_new_pack.l0sUko/_old  2019-12-07 15:07:32.119862568 +0100
+++ /var/tmp/diff_new_pack.l0sUko/_new  2019-12-07 15:07:32.123862568 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-django-reversion
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,18 +17,21 @@
 
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
+%define skip_python2 1
 Name:           python-django-reversion
-Version:        3.0.4
+Version:        3.0.5
 Release:        0
 Summary:        A Django extension that provides version control for model 
instances
 License:        BSD-3-Clause
-Group:          Development/Languages/Python
 URL:            http://github.com/etianen/django-reversion
 Source:         
https://files.pythonhosted.org/packages/source/d/django-reversion/django-reversion-%{version}.tar.gz
+BuildRequires:  %{python_module Django > 1.11}
+BuildRequires:  %{python_module mysqlclient}
+BuildRequires:  %{python_module psycopg2}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-Requires:       python-Django
+Requires:       python-Django > 1.11
 Obsoletes:      python-django-reversion-doc
 Obsoletes:      python-django-reversion-lang
 BuildArch:      noarch
@@ -52,6 +55,10 @@
 %python_install
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
+%check
+# Tests need running PGSQL and MYSQL
+#%%python_expand PYTHONPATH=%{buildroot}%{$python_sitelib} $python 
tests/manage.py test tests
+
 %files %{python_files}
 %doc README.rst CHANGELOG.rst
 %license LICENSE

++++++ django-reversion-3.0.4.tar.gz -> django-reversion-3.0.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/CHANGELOG.rst 
new/django-reversion-3.0.5/CHANGELOG.rst
--- old/django-reversion-3.0.4/CHANGELOG.rst    2019-05-22 10:39:00.000000000 
+0200
+++ new/django-reversion-3.0.5/CHANGELOG.rst    2019-12-02 19:23:48.000000000 
+0100
@@ -3,6 +3,14 @@
 django-reversion changelog
 ==========================
 
+3.0.5 - 02/12/2019
+
+- Improved performance of `get_deleted` for large datasets (@jeremy-engel).
+- Django 3.0 compatibility (@claudep).
+- Drops Django <= 1.11 compatibility (@claudep).
+- Fixed errors in manageement commands when `django.contrib.admin` is not in 
`INSTALLED_APPS` (@irtimir).
+
+
 3.0.4 - 22/05/2019
 ------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/PKG-INFO 
new/django-reversion-3.0.5/PKG-INFO
--- old/django-reversion-3.0.4/PKG-INFO 2019-05-22 10:39:50.000000000 +0200
+++ new/django-reversion-3.0.5/PKG-INFO 2019-12-02 19:24:32.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-reversion
-Version: 3.0.4
+Version: 3.0.5
 Summary: An extension to the Django web framework that provides version 
control for model instances.
 Home-page: http://github.com/etianen/django-reversion
 Author: Dave Hall
@@ -14,8 +14,7 @@
 Classifier: License :: OSI Approved :: BSD License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
 Classifier: Framework :: Django
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/README.rst 
new/django-reversion-3.0.5/README.rst
--- old/django-reversion-3.0.4/README.rst       2019-05-22 10:39:00.000000000 
+0200
+++ new/django-reversion-3.0.5/README.rst       2019-12-02 19:23:48.000000000 
+0100
@@ -11,7 +11,7 @@
 Requirements
 ============
 
-- Python 2.7 or later
+- Python 3.5 or later
 - Django 1.11 or later
 
 Features
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/django_reversion.egg-info/PKG-INFO 
new/django-reversion-3.0.5/django_reversion.egg-info/PKG-INFO
--- old/django-reversion-3.0.4/django_reversion.egg-info/PKG-INFO       
2019-05-22 10:39:50.000000000 +0200
+++ new/django-reversion-3.0.5/django_reversion.egg-info/PKG-INFO       
2019-12-02 19:24:32.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-reversion
-Version: 3.0.4
+Version: 3.0.5
 Summary: An extension to the Django web framework that provides version 
control for model instances.
 Home-page: http://github.com/etianen/django-reversion
 Author: Dave Hall
@@ -14,8 +14,7 @@
 Classifier: License :: OSI Approved :: BSD License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2.7
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
 Classifier: Framework :: Django
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/django_reversion.egg-info/SOURCES.txt 
new/django-reversion-3.0.5/django_reversion.egg-info/SOURCES.txt
--- old/django-reversion-3.0.4/django_reversion.egg-info/SOURCES.txt    
2019-05-22 10:39:50.000000000 +0200
+++ new/django-reversion-3.0.5/django_reversion.egg-info/SOURCES.txt    
2019-12-02 19:24:32.000000000 +0100
@@ -16,7 +16,6 @@
 docs/commands.rst
 docs/common-problems.rst
 docs/conf.py
-docs/django-versions.rst
 docs/errors.rst
 docs/index.rst
 docs/middleware.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/docs/admin.rst 
new/django-reversion-3.0.5/docs/admin.rst
--- old/django-reversion-3.0.4/docs/admin.rst   2019-05-22 10:39:00.000000000 
+0200
+++ new/django-reversion-3.0.5/docs/admin.rst   2019-12-02 19:23:48.000000000 
+0100
@@ -100,7 +100,7 @@
 
         def reversion_register(self, model, **options):
             options["exclude"] = ("some_field",)
-            super(YourModelAdmin, self).reversion_register(model, **options)
+            super().reversion_register(model, **options)
 
     ``model``
         The model that will be registered with django-reversion.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/docs/api.rst 
new/django-reversion-3.0.5/docs/api.rst
--- old/django-reversion-3.0.4/docs/api.rst     2019-05-22 10:39:00.000000000 
+0200
+++ new/django-reversion-3.0.5/docs/api.rst     2019-12-02 19:23:48.000000000 
+0100
@@ -81,10 +81,10 @@
     assert len(versions) == 2
 
     # Check the serialized data for the first version.
-    assert versions[1].field_dict["name"] = "obj v1"
+    assert versions[1].field_dict["name"] == "obj v1"
 
     # Check the serialized data for the second version.
-    assert versions[0].field_dict["name"] = "obj v2"
+    assert versions[0].field_dict["name"] == "obj v2"
 
 
 Revision metadata
@@ -95,13 +95,13 @@
 .. code:: python
 
     # Check the revision metadata for the first revision.
-    assert versions[1].revision.comment = "Created revision 1"
-    assert versions[1].revision.user = request.user
+    assert versions[1].revision.comment == "Created revision 1"
+    assert versions[1].revision.user == request.user
     assert isinstance(versions[1].revision.date_created, datetime.datetime)
 
     # Check the revision metadata for the second revision.
-    assert versions[0].revision.comment = "Created revision 2"
-    assert versions[0].revision.user = request.user
+    assert versions[0].revision.comment == "Created revision 2"
+    assert versions[0].revision.user == request.user
     assert isinstance(versions[0].revision.date_created, datetime.datetime)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/docs/django-versions.rst 
new/django-reversion-3.0.5/docs/django-versions.rst
--- old/django-reversion-3.0.4/docs/django-versions.rst 2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/docs/django-versions.rst 1970-01-01 
01:00:00.000000000 +0100
@@ -1,18 +0,0 @@
-.. _django-versions:
-
-Compatible Django versions
-==========================
-
-django-reversion aims to stay compatible with the latest LTS release of 
Django, along with more recent releases. See :ref:`changelog`.
-
-Older versions of Django require an older version of django-reversion to be 
installed.
-
-==============  =================
-Django version  Reversion release
-==============  =================
-1.11+           3.x
-1.8             2.x
-==============  =================
-
-.. Warning::
-    Older versions of django-reversion receive very limited support. It's 
advised to upgrade your Django to remain compatible with the latest release of 
django-reversion.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/docs/index.rst 
new/django-reversion-3.0.5/docs/index.rst
--- old/django-reversion-3.0.4/docs/index.rst   2019-05-22 10:39:00.000000000 
+0200
+++ new/django-reversion-3.0.5/docs/index.rst   2019-12-02 19:23:48.000000000 
+0100
@@ -24,9 +24,6 @@
 2.  Add ``'reversion'`` to ``INSTALLED_APPS``.
 3.  Run ``manage.py migrate``.
 
-.. Important::
-    See :ref:`django-versions` if you're not using the latest release of 
Django.
-
 
 Admin integration
 -----------------
@@ -53,7 +50,6 @@
 .. toctree::
    :maxdepth: 1
 
-   django-versions
    common-problems
    changelog
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/docs/middleware.rst 
new/django-reversion-3.0.5/docs/middleware.rst
--- old/django-reversion-3.0.4/docs/middleware.rst      2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/docs/middleware.rst      2019-12-02 
19:23:48.000000000 +0100
@@ -13,7 +13,7 @@
 
 The request user will also be added to the revision metadata.
 
-To enable ``RevisionMiddleware``, add 
``'reversion.middleware.RevisionMiddleware'`` to your ``MIDDLEWARE_CLASSES`` 
setting. For Django >= 1.10, add it to your ``MIDDLEWARE`` setting.
+To enable ``RevisionMiddleware``, add 
``'reversion.middleware.RevisionMiddleware'`` to your ``MIDDLEWARE`` setting.
 
 .. Warning::
     This will wrap every request that meets the specified criterion in a 
database transaction. For best performance, consider marking individual views 
instead.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/reversion/__init__.py 
new/django-reversion-3.0.5/reversion/__init__.py
--- old/django-reversion-3.0.4/reversion/__init__.py    2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/reversion/__init__.py    2019-12-02 
19:23:48.000000000 +0100
@@ -36,4 +36,4 @@
         get_registered_models,
     )
 
-__version__ = VERSION = (3, 0, 4)
+__version__ = VERSION = (3, 0, 5)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/reversion/admin.py 
new/django-reversion-3.0.5/reversion/admin.py
--- old/django-reversion-3.0.4/reversion/admin.py       2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/reversion/admin.py       2019-12-02 
19:23:48.000000000 +0100
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-import json
 from contextlib import contextmanager
 from django.db import models, transaction, connection
 from django.conf.urls import url
@@ -64,25 +62,18 @@
 
     # Messages.
 
-    def log_addition(self, request, object, change_message=None):
-        change_message = change_message or _("Initial version.")
+    def log_addition(self, request, object, message):
+        change_message = message or _("Initial version.")
+        entry = super().log_addition(request, object, change_message)
         if is_active():
-            # If https://code.djangoproject.com/ticket/27218 is implemented, we
-            # could first call super() and get the change_message from the 
returned
-            # LogEntry.
-            if isinstance(change_message, list):
-                set_comment(json.dumps(change_message))
-            else:
-                set_comment(change_message)
-        super(VersionAdmin, self).log_addition(request, object, change_message)
+            set_comment(entry.get_change_message())
+        return entry
 
     def log_change(self, request, object, message):
+        entry = super().log_change(request, object, message)
         if is_active():
-            if isinstance(message, list):
-                set_comment(json.dumps(message))
-            else:
-                set_comment(message)
-        super(VersionAdmin, self).log_change(request, object, message)
+            set_comment(entry.get_change_message())
+        return entry
 
     # Auto-registration.
 
@@ -128,7 +119,7 @@
         return inline_model, follow_field
 
     def __init__(self, *args, **kwargs):
-        super(VersionAdmin, self).__init__(*args, **kwargs)
+        super().__init__(*args, **kwargs)
         # Automatically register models if required.
         if not is_registered(self.model):
             inline_fields = ()
@@ -141,7 +132,7 @@
             self._reversion_autoregister(self.model, inline_fields)
 
     def get_urls(self):
-        urls = super(VersionAdmin, self).get_urls()
+        urls = super().get_urls()
         admin_site = self.admin_site
         opts = self.model._meta
         info = opts.app_label, opts.model_name,
@@ -156,11 +147,11 @@
 
     def add_view(self, request, form_url='', extra_context=None):
         with self.create_revision(request):
-            return super(VersionAdmin, self).add_view(request, form_url, 
extra_context)
+            return super().add_view(request, form_url, extra_context)
 
     def change_view(self, request, object_id, form_url='', extra_context=None):
         with self.create_revision(request):
-            return super(VersionAdmin, self).change_view(request, object_id, 
form_url, extra_context)
+            return super().change_view(request, object_id, form_url, 
extra_context)
 
     def _reversion_revisionform_view(self, request, version, template_name, 
extra_context=None):
         # Check that database transactions are supported.
@@ -233,7 +224,7 @@
                 "has_change_permission": self.has_change_permission(request),
             }
             context.update(extra_context or {})
-            return super(VersionAdmin, self).changelist_view(request, context)
+            return super().changelist_view(request, context)
 
     def recoverlist_view(self, request, extra_context=None):
         """Displays a deleted model to allow recovery."""
@@ -289,4 +280,4 @@
         # Compile the context.
         context = {"action_list": action_list}
         context.update(extra_context or {})
-        return super(VersionAdmin, self).history_view(request, object_id, 
context)
+        return super().history_view(request, object_id, context)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/reversion/management/commands/__init__.py 
new/django-reversion-3.0.5/reversion/management/commands/__init__.py
--- old/django-reversion-3.0.4/reversion/management/commands/__init__.py        
2019-05-22 10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/reversion/management/commands/__init__.py        
2019-12-02 19:23:48.000000000 +0100
@@ -1,5 +1,5 @@
-from __future__ import unicode_literals
 from django.apps import apps
+from django.conf import settings
 from django.contrib import admin
 from django.core.management.base import BaseCommand, CommandError
 from reversion.revisions import is_registered
@@ -8,7 +8,7 @@
 class BaseRevisionCommand(BaseCommand):
 
     def add_arguments(self, parser):
-        super(BaseRevisionCommand, self).add_arguments(parser)
+        super().add_arguments(parser)
         parser.add_argument(
             "app_label",
             metavar="app_label",
@@ -28,7 +28,8 @@
 
     def get_models(self, options):
         # Load admin classes.
-        admin.autodiscover()
+        if "django.contrib.admin" in settings.INSTALLED_APPS:
+            admin.autodiscover()
         # Get options.
         app_labels = options["app_label"]
         # Parse model classes.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/reversion/management/commands/createinitialrevisions.py
 
new/django-reversion-3.0.5/reversion/management/commands/createinitialrevisions.py
--- 
old/django-reversion-3.0.4/reversion/management/commands/createinitialrevisions.py
  2019-05-22 10:39:00.000000000 +0200
+++ 
new/django-reversion-3.0.5/reversion/management/commands/createinitialrevisions.py
  2019-12-02 19:23:48.000000000 +0100
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 import json
 
 from django.apps import apps
@@ -15,7 +13,7 @@
     help = "Creates initial revisions for a given app [and model]."
 
     def add_arguments(self, parser):
-        super(Command, self).add_arguments(parser)
+        super().add_arguments(parser)
         parser.add_argument(
             "--comment",
             action="store",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/reversion/management/commands/deleterevisions.py 
new/django-reversion-3.0.5/reversion/management/commands/deleterevisions.py
--- old/django-reversion-3.0.4/reversion/management/commands/deleterevisions.py 
2019-05-22 10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/reversion/management/commands/deleterevisions.py 
2019-12-02 19:23:48.000000000 +0100
@@ -1,4 +1,3 @@
-from __future__ import unicode_literals
 from datetime import timedelta
 from django.db import transaction, models, router
 from django.utils import timezone
@@ -11,7 +10,7 @@
     help = "Deletes revisions for a given app [and model]."
 
     def add_arguments(self, parser):
-        super(Command, self).add_arguments(parser)
+        super().add_arguments(parser)
         parser.add_argument(
             "--days",
             default=0,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/reversion/middleware.py 
new/django-reversion-3.0.5/reversion/middleware.py
--- old/django-reversion-3.0.4/reversion/middleware.py  2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/reversion/middleware.py  2019-12-02 
19:23:48.000000000 +0100
@@ -1,9 +1,7 @@
-import sys
-from reversion.revisions import create_revision as create_revision_base
-from reversion.views import _request_creates_revision, _set_user_from_request, 
create_revision
+from reversion.views import _request_creates_revision, create_revision
 
 
-class RevisionMiddleware(object):
+class RevisionMiddleware:
 
     """Wraps the entire request in a revision."""
 
@@ -13,43 +11,16 @@
 
     atomic = True
 
-    def __init__(self, get_response=None):
-        super(RevisionMiddleware, self).__init__()
-        # Support Django 1.10 middleware.
-        if get_response is not None:
-            self.get_response = create_revision(
-                manage_manually=self.manage_manually,
-                using=self.using,
-                atomic=self.atomic,
-                request_creates_revision=self.request_creates_revision
-            )(get_response)
+    def __init__(self, get_response):
+        self.get_response = create_revision(
+            manage_manually=self.manage_manually,
+            using=self.using,
+            atomic=self.atomic,
+            request_creates_revision=self.request_creates_revision
+        )(get_response)
 
     def request_creates_revision(self, request):
         return _request_creates_revision(request)
 
-    def process_request(self, request):
-        if self.request_creates_revision(request):
-            context = create_revision_base(
-                manage_manually=self.manage_manually,
-                using=self.using,
-                atomic=self.atomic
-            )
-            context.__enter__()
-            if not hasattr(request, "_revision_middleware"):
-                setattr(request, "_revision_middleware", {})
-            request._revision_middleware[self] = context
-
-    def _close_revision(self, request, is_exception):
-        if self in getattr(request, "_revision_middleware", {}):
-            _set_user_from_request(request)
-            request._revision_middleware.pop(self).__exit__(*sys.exc_info() if 
is_exception else (None, None, None))
-
-    def process_response(self, request, response):
-        self._close_revision(request, False)
-        return response
-
-    def process_exception(self, request, exception):
-        self._close_revision(request, True)
-
     def __call__(self, request):
         return self.get_response(request)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/reversion/migrations/0001_squashed_0004_auto_20160611_1202.py
 
new/django-reversion-3.0.5/reversion/migrations/0001_squashed_0004_auto_20160611_1202.py
--- 
old/django-reversion-3.0.4/reversion/migrations/0001_squashed_0004_auto_20160611_1202.py
    2019-05-22 10:39:00.000000000 +0200
+++ 
new/django-reversion-3.0.5/reversion/migrations/0001_squashed_0004_auto_20160611_1202.py
    2019-12-02 19:23:48.000000000 +0100
@@ -1,7 +1,4 @@
-# -*- coding: utf-8 -*-
 # Generated by Django 1.9.7 on 2016-06-06 13:22
-from __future__ import unicode_literals
-
 from django.conf import settings
 from django.db import migrations, models
 import django.db.models.deletion
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/reversion/models.py 
new/django-reversion-3.0.5/reversion/models.py
--- old/django-reversion-3.0.4/reversion/models.py      2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/reversion/models.py      2019-12-02 
19:23:48.000000000 +0100
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from collections import defaultdict
 from itertools import chain, groupby
 
@@ -12,8 +10,8 @@
 from django.core.serializers.base import DeserializationError
 from django.db import IntegrityError, connections, models, router, transaction
 from django.db.models.deletion import Collector
-from django.db.models.expressions import RawSQL
-from django.utils.encoding import force_text, python_2_unicode_compatible
+from django.db.models.functions import Cast
+from django.utils.encoding import force_text
 from django.utils.functional import cached_property
 from django.utils.translation import ugettext
 from django.utils.translation import ugettext_lazy as _
@@ -39,7 +37,6 @@
         _safe_revert(unreverted_versions)
 
 
-@python_2_unicode_compatible
 class Revision(models.Model):
 
     """A group of related serialized versions."""
@@ -114,12 +111,6 @@
         ordering = ("-pk",)
 
 
-class SubquerySQL(RawSQL):
-
-    def as_sql(self, compiler, connection):
-        return self.sql, self.params
-
-
 class VersionQuerySet(models.QuerySet):
 
     def get_for_model(self, model, model_db=None):
@@ -139,33 +130,22 @@
         return self.get_for_object_reference(obj.__class__, obj.pk, 
model_db=model_db)
 
     def get_deleted(self, model, model_db=None):
-        # Try to do a faster JOIN.
         model_db = model_db or router.db_for_write(model)
         connection = connections[self.db]
         if self.db == model_db and connection.vendor in ("sqlite", 
"postgresql", "oracle"):
-            content_type = _get_content_type(model, self.db)
-            subquery = SubquerySQL(
-                """
-                SELECT MAX(V.{id})
-                FROM {version} V
-                LEFT JOIN {model} ON V.{object_id} = CAST({model}.{model_id} 
as {str})
-                WHERE
-                    V.{db} = %s AND
-                    V.{content_type_id} = %s AND
-                    {model}.{model_id} IS NULL
-                GROUP BY V.{object_id}
-                """.format(
-                    id=connection.ops.quote_name("id"),
-                    version=connection.ops.quote_name(Version._meta.db_table),
-                    model=connection.ops.quote_name(model._meta.db_table),
-                    
model_id=connection.ops.quote_name(model._meta.pk.db_column or 
model._meta.pk.attname),
-                    object_id=connection.ops.quote_name("object_id"),
-                    
str=Version._meta.get_field("object_id").db_type(connection),
-                    db=connection.ops.quote_name("db"),
-                    
content_type_id=connection.ops.quote_name("content_type_id"),
-                ),
-                (model_db, content_type.id),
-                output_field=Version._meta.pk,
+            model_qs = (
+                model._default_manager
+                .using(model_db)
+                .annotate(_pk_to_object_id=Cast("pk", 
Version._meta.get_field("object_id")))
+                .filter(_pk_to_object_id=models.OuterRef("object_id"))
+            )
+            subquery = (
+                self.get_for_model(model, model_db=model_db)
+                .annotate(pk_not_exists=~models.Exists(model_qs))
+                .filter(pk_not_exists=True)
+                .values("object_id")
+                .annotate(latest_pk=models.Max("pk"))
+                .values("latest_pk")
             )
         else:
             # We have to use a slow subquery.
@@ -177,9 +157,7 @@
                 latest_pk=models.Max("pk")
             ).order_by().values_list("latest_pk", flat=True)
         # Perform the subquery.
-        return self.filter(
-            pk__in=subquery,
-        )
+        return self.filter(pk__in=subquery)
 
     def get_unique(self):
         last_key = None
@@ -190,7 +168,6 @@
             last_key = key
 
 
-@python_2_unicode_compatible
 class Version(models.Model):
 
     """A saved version of a database model."""
@@ -328,11 +305,11 @@
     template = "%(function)s(%(expressions)s as %(db_type)s)"
 
     def __init__(self, expression):
-        super(_Str, self).__init__(expression, output_field=models.TextField())
+        super().__init__(expression, output_field=models.TextField())
 
     def as_sql(self, compiler, connection):
         self.extra["db_type"] = self.output_field.db_type(connection)
-        return super(_Str, self).as_sql(compiler, connection)
+        return super().as_sql(compiler, connection)
 
 
 def _safe_subquery(method, left_query, left_field_name, right_subquery, 
right_field_name):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/reversion/revisions.py 
new/django-reversion-3.0.5/reversion/revisions.py
--- old/django-reversion-3.0.4/reversion/revisions.py   2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/reversion/revisions.py   2019-12-02 
19:23:48.000000000 +0100
@@ -1,4 +1,3 @@
-from __future__ import unicode_literals
 from collections import namedtuple, defaultdict
 from contextlib import contextmanager
 from functools import wraps
@@ -10,7 +9,7 @@
 from django.db.models.query import QuerySet
 from django.db.models.signals import post_save, m2m_changed
 from django.utils.encoding import force_text
-from django.utils import timezone, six
+from django.utils import timezone
 from reversion.errors import RevisionManagementError, RegistrationError
 from reversion.signals import pre_revision_commit, post_revision_commit
 
@@ -355,7 +354,7 @@
     opts = model._meta.concrete_model._meta
     for field in opts.local_many_to_many:
         m2m_model = field.remote_field.through
-        if isinstance(m2m_model, six.string_types):
+        if isinstance(m2m_model, str):
             if "." not in m2m_model:
                 m2m_model = "{app_label}.{m2m_model}".format(
                     app_label=opts.app_label,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/reversion/views.py 
new/django-reversion-3.0.5/reversion/views.py
--- old/django-reversion-3.0.4/reversion/views.py       2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/reversion/views.py       2019-12-02 
19:23:48.000000000 +0100
@@ -61,7 +61,7 @@
     revision_atomic = True
 
     def __init__(self, *args, **kwargs):
-        super(RevisionMixin, self).__init__(*args, **kwargs)
+        super().__init__(*args, **kwargs)
         self.dispatch = create_revision(
             manage_manually=self.revision_manage_manually,
             using=self.revision_using,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/setup.py 
new/django-reversion-3.0.5/setup.py
--- old/django-reversion-3.0.4/setup.py 2019-05-22 10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/setup.py 2019-12-02 19:23:48.000000000 +0100
@@ -37,10 +37,9 @@
         "License :: OSI Approved :: BSD License",
         "Operating System :: OS Independent",
         "Programming Language :: Python",
-        'Programming Language :: Python :: 2.7',
-        'Programming Language :: Python :: 3.5',
         'Programming Language :: Python :: 3.6',
         'Programming Language :: Python :: 3.7',
+        'Programming Language :: Python :: 3.8',
         "Framework :: Django",
     ]
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/tests/manage.py 
new/django-reversion-3.0.5/tests/manage.py
--- old/django-reversion-3.0.4/tests/manage.py  2019-05-22 10:39:00.000000000 
+0200
+++ new/django-reversion-3.0.5/tests/manage.py  2019-12-02 19:23:48.000000000 
+0100
@@ -6,17 +6,10 @@
     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test_project.settings")
     try:
         from django.core.management import execute_from_command_line
-    except ImportError:
-        # The above import may fail for some other reason. Ensure that the
-        # issue is really that Django is missing to avoid masking other
-        # exceptions on Python 2.
-        try:
-            import django  # noqa
-        except ImportError:
-            raise ImportError(
-                "Couldn't import Django. Are you sure it's installed and "
-                "available on your PYTHONPATH environment variable? Did you "
-                "forget to activate a virtual environment?"
-            )
-        raise
+    except ImportError as exc:
+        raise ImportError(
+            "Couldn't import Django. Are you sure it's installed and "
+            "available on your PYTHONPATH environment variable? Did you "
+            "forget to activate a virtual environment?"
+        ) from exc
     execute_from_command_line(sys.argv)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/tests/test_app/migrations/0001_initial.py 
new/django-reversion-3.0.5/tests/test_app/migrations/0001_initial.py
--- old/django-reversion-3.0.4/tests/test_app/migrations/0001_initial.py        
2019-05-22 10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/tests/test_app/migrations/0001_initial.py        
2019-12-02 19:23:48.000000000 +0100
@@ -1,7 +1,4 @@
-# -*- coding: utf-8 -*-
 # Generated by Django 1.9.7 on 2016-06-14 10:27
-from __future__ import unicode_literals
-
 from django.db import migrations, models
 import django.db.models.deletion
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/tests/test_app/tests/base.py 
new/django-reversion-3.0.5/tests/test_app/tests/base.py
--- old/django-reversion-3.0.4/tests/test_app/tests/base.py     2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/tests/test_app/tests/base.py     2019-12-02 
19:23:48.000000000 +0100
@@ -1,4 +1,7 @@
 from datetime import timedelta
+from importlib import import_module, reload
+from io import StringIO
+
 from django.conf import settings
 from django.contrib.auth.models import User
 from django.core.management import call_command
@@ -6,15 +9,10 @@
 from django.test import TestCase, TransactionTestCase
 from django.test.utils import override_settings
 from django.utils import timezone
-from django.utils.six import StringIO, assertRegex
+
 import reversion
 from reversion.models import Revision, Version
 from test_app.models import TestModel, TestModelParent
-from importlib import import_module
-try:
-    from importlib import reload
-except ImportError:  # Python 2.7
-    pass
 
 
 # Test helpers.
@@ -28,12 +26,12 @@
         clear_url_caches()
 
     def setUp(self):
-        super(TestBaseMixin, self).setUp()
+        super().setUp()
         for model in list(reversion.get_registered_models()):
             reversion.unregister(model)
 
     def tearDown(self):
-        super(TestBaseMixin, self).tearDown()
+        super().tearDown()
         for model in list(reversion.get_registered_models()):
             reversion.unregister(model)
 
@@ -48,7 +46,7 @@
         revision = Version.objects.using(using).get_for_object(objects[0], 
model_db=model_db).get().revision
         self.assertEqual(revision.user, user)
         if hasattr(comment, 'pattern'):
-            assertRegex(self, revision.get_comment(), comment)
+            self.assertRegex(revision.get_comment(), comment)
         elif comment is not None:  # Allow a wildcard comment.
             self.assertEqual(revision.get_comment(), comment)
         self.assertAlmostEqual(revision.date_created, date_created or 
timezone.now(), delta=timedelta(seconds=1))
@@ -81,14 +79,14 @@
 class TestModelMixin(object):
 
     def setUp(self):
-        super(TestModelMixin, self).setUp()
+        super().setUp()
         reversion.register(TestModel)
 
 
 class TestModelParentMixin(TestModelMixin):
 
     def setUp(self):
-        super(TestModelParentMixin, self).setUp()
+        super().setUp()
         reversion.register(TestModelParent, follow=("testmodel_ptr",))
 
 
@@ -96,7 +94,7 @@
 class UserMixin(TestBase):
 
     def setUp(self):
-        super(UserMixin, self).setUp()
+        super().setUp()
         self.user = User(username="test", is_staff=True, is_superuser=True)
         self.user.set_password("password")
         self.user.save()
@@ -105,5 +103,5 @@
 class LoginMixin(UserMixin):
 
     def setUp(self):
-        super(LoginMixin, self).setUp()
+        super().setUp()
         self.client.login(username="test", password="password")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/tests/test_app/tests/test_admin.py 
new/django-reversion-3.0.5/tests/test_app/tests/test_admin.py
--- old/django-reversion-3.0.4/tests/test_app/tests/test_admin.py       
2019-05-22 10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/tests/test_app/tests/test_admin.py       
2019-12-02 19:23:48.000000000 +0100
@@ -12,12 +12,12 @@
 class AdminMixin(TestBase):
 
     def setUp(self):
-        super(AdminMixin, self).setUp()
+        super().setUp()
         admin.site.register(TestModelParent, VersionAdmin)
         self.reloadUrls()
 
     def tearDown(self):
-        super(AdminMixin, self).tearDown()
+        super().tearDown()
         admin.site.unregister(TestModelParent)
         self.reloadUrls()
 
@@ -40,9 +40,7 @@
         })
         obj = TestModelParent.objects.get()
         self.assertSingleRevision(
-            (obj, obj.testmodel_ptr), user=self.user,
-            # Django 1.8 gives "Initial version.", Django > 1.8 "Added."
-            comment=re.compile(r"(Initial version\.|Added\.)")
+            (obj, obj.testmodel_ptr), user=self.user, comment="Added."
         )
 
 
@@ -56,7 +54,8 @@
         })
         self.assertSingleRevision(
             (obj, obj.testmodel_ptr), user=self.user,
-            comment="Changed name and parent_name."
+            # Django 3.0 changed formatting a bit.
+            comment=re.compile(r"Changed [nN]ame and [pP]arent[ _]name\.")
         )
 
 
@@ -71,7 +70,7 @@
 class AdminRevisionViewTest(LoginMixin, AdminMixin, TestBase):
 
     def setUp(self):
-        super(AdminRevisionViewTest, self).setUp()
+        super().setUp()
         with reversion.create_revision():
             self.obj = TestModelParent.objects.create()
         with reversion.create_revision():
@@ -132,7 +131,7 @@
 class AdminRecoverViewTest(LoginMixin, AdminMixin, TestBase):
 
     def setUp(self):
-        super(AdminRecoverViewTest, self).setUp()
+        super().setUp()
         with reversion.create_revision():
             obj = TestModelParent.objects.create()
         obj.delete()
@@ -189,12 +188,12 @@
 class AdminQuotingTest(LoginMixin, AdminMixin, TestBase):
 
     def setUp(self):
-        super(AdminQuotingTest, self).setUp()
+        super().setUp()
         admin.site.register(TestModelEscapePK, VersionAdmin)
         self.reloadUrls()
 
     def tearDown(self):
-        super(AdminQuotingTest, self).tearDown()
+        super().tearDown()
         admin.site.unregister(TestModelEscapePK)
         self.reloadUrls()
 
@@ -240,12 +239,12 @@
 class AdminRegisterInlineTest(TestBase):
 
     def setUp(self):
-        super(AdminRegisterInlineTest, self).setUp()
+        super().setUp()
         admin.site.register(TestModelParent, TestModelParentAdmin)
         self.reloadUrls()
 
     def tearDown(self):
-        super(AdminRegisterInlineTest, self).tearDown()
+        super().tearDown()
         admin.site.unregister(TestModelParent)
         self.reloadUrls()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/tests/test_app/tests/test_api.py 
new/django-reversion-3.0.5/tests/test_app/tests/test_api.py
--- old/django-reversion-3.0.4/tests/test_app/tests/test_api.py 2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/tests/test_app/tests/test_api.py 2019-12-02 
19:23:48.000000000 +0100
@@ -1,4 +1,6 @@
 from datetime import timedelta
+from unittest.mock import MagicMock
+
 from django.contrib.auth.models import User
 from django.db import models
 from django.db.transaction import get_connection
@@ -7,11 +9,6 @@
 from test_app.models import TestModel, TestModelRelated, TestModelThrough, 
TestModelParent, TestMeta
 from test_app.tests.base import TestBase, TestBaseTransaction, TestModelMixin, 
UserMixin
 
-try:
-    from unittest.mock import MagicMock
-except ImportError:
-    from mock import MagicMock
-
 
 class SaveTest(TestModelMixin, TestBase):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/tests/test_app/tests/test_middleware.py 
new/django-reversion-3.0.5/tests/test_app/tests/test_middleware.py
--- old/django-reversion-3.0.4/tests/test_app/tests/test_middleware.py  
2019-05-22 10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/tests/test_app/tests/test_middleware.py  
2019-12-02 19:23:48.000000000 +0100
@@ -6,7 +6,6 @@
 
 use_middleware = override_settings(
     MIDDLEWARE=settings.MIDDLEWARE + 
["reversion.middleware.RevisionMiddleware"],
-    MIDDLEWARE_CLASSES=settings.MIDDLEWARE_CLASSES + 
["reversion.middleware.RevisionMiddleware"],
 )
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/tests/test_app/tests/test_models.py 
new/django-reversion-3.0.5/tests/test_app/tests/test_models.py
--- old/django-reversion-3.0.4/tests/test_app/tests/test_models.py      
2019-05-22 10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/tests/test_app/tests/test_models.py      
2019-12-02 19:23:48.000000000 +0100
@@ -1,4 +1,3 @@
-from django.utils.encoding import force_text
 import reversion
 from reversion.models import Version
 from test_app.models import (
@@ -177,8 +176,8 @@
         obj_1.delete()
         pk_2 = obj_2.pk
         obj_2.delete()
-        self.assertEqual(Version.objects.get_deleted(TestModel)[0].object_id, 
force_text(pk_2))
-        self.assertEqual(Version.objects.get_deleted(TestModel)[1].object_id, 
force_text(pk_1))
+        self.assertEqual(Version.objects.get_deleted(TestModel)[0].object_id, 
str(pk_2))
+        self.assertEqual(Version.objects.get_deleted(TestModel)[1].object_id, 
str(pk_1))
 
     def testGetDeletedPostgres(self):
         with reversion.create_revision(using="postgres"):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-reversion-3.0.4/tests/test_app/views.py 
new/django-reversion-3.0.5/tests/test_app/views.py
--- old/django-reversion-3.0.4/tests/test_app/views.py  2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/tests/test_app/views.py  2019-12-02 
19:23:48.000000000 +0100
@@ -22,7 +22,7 @@
 
     def revision_request_creates_revision(self, request):
         silent = request.META.get("HTTP_X_NOREVISION", "false") == "true"
-        return super(RevisionMixinView, 
self).revision_request_creates_revision(request) and not silent
+        return super().revision_request_creates_revision(request) and not 
silent
 
     def dispatch(self, request):
         return save_obj_view(request)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-reversion-3.0.4/tests/test_project/settings.py 
new/django-reversion-3.0.5/tests/test_project/settings.py
--- old/django-reversion-3.0.4/tests/test_project/settings.py   2019-05-22 
10:39:00.000000000 +0200
+++ new/django-reversion-3.0.5/tests/test_project/settings.py   2019-12-02 
19:23:48.000000000 +0100
@@ -42,7 +42,7 @@
     "test_app",
 ]
 
-MIDDLEWARE = MIDDLEWARE_CLASSES = [
+MIDDLEWARE = [
     "django.middleware.security.SecurityMiddleware",
     "django.contrib.sessions.middleware.SessionMiddleware",
     "django.middleware.common.CommonMiddleware",


Reply via email to