Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-django-filter for 
openSUSE:Factory checked in at 2021-03-18 22:55:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-filter (Old)
 and      /work/SRC/openSUSE:Factory/.python-django-filter.new.2401 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-django-filter"

Thu Mar 18 22:55:51 2021 rev:6 rq:879943 version:2.4.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-django-filter/python-django-filter.changes    
    2020-06-10 00:50:24.795258458 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-django-filter.new.2401/python-django-filter.changes
      2021-03-18 22:55:52.731591215 +0100
@@ -1,0 +2,9 @@
+Mon Mar 15 12:25:35 UTC 2021 - Mark??ta Machov?? <mmach...@suse.com>
+
+- update to 2.4.0
+  * Added a MaxValueValidator to the form field for NumberFilter. 
+    This prevents a potential DoS attack if numbers with very large 
+    exponents were subsequently converted to integers.
+  * Added testing against Django 3.1 and Python 3.9.
+
+-------------------------------------------------------------------

Old:
----
  django-filter-2.3.0.tar.gz

New:
----
  django-filter-2.4.0.tar.gz

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

Other differences:
------------------
++++++ python-django-filter.spec ++++++
--- /var/tmp/diff_new_pack.JDFEif/_old  2021-03-18 22:55:53.239591736 +0100
+++ /var/tmp/diff_new_pack.JDFEif/_new  2021-03-18 22:55:53.243591740 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-django-filter
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,21 +19,21 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-django-filter
-Version:        2.3.0
+Version:        2.4.0
 Release:        0
 Summary:        Reusable Django app to allow users to filter queryset 
dynamically
 License:        BSD-3-Clause
 Group:          Development/Libraries/Python
 URL:            https://github.com/carltongibson/django-filter
 Source:         
https://files.pythonhosted.org/packages/source/d/django-filter/django-filter-%{version}.tar.gz
-BuildRequires:  %{python_module Django}
+BuildRequires:  %{python_module Django >= 2.2}
 BuildRequires:  %{python_module django-crispy-forms}
 BuildRequires:  %{python_module djangorestframework}
 BuildRequires:  %{python_module mock}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-Requires:       python-Django
+Requires:       python-Django >= 2.2
 Requires:       python-djangorestframework
 Recommends:     python-django-crispy-forms
 BuildArch:      noarch

++++++ django-filter-2.3.0.tar.gz -> django-filter-2.4.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/CHANGES.rst 
new/django-filter-2.4.0/CHANGES.rst
--- old/django-filter-2.3.0/CHANGES.rst 2020-06-05 16:37:06.000000000 +0200
+++ new/django-filter-2.4.0/CHANGES.rst 2020-09-27 10:57:44.000000000 +0200
@@ -1,3 +1,20 @@
+Version 2.4.0 (2020-9-27)
+--------------------------
+
+* SECURITY: Added a ``MaxValueValidator`` to the form field for
+  ``NumberFilter``. This prevents a potential DoS attack if numbers with very
+  large exponents were subsequently converted to integers.
+
+  The default limit value for the validator is ``1e50``.
+
+  The new ``NumberFilter.get_max_validator()`` allows customising the used
+  validator, and may return ``None`` to disable the validation entirely.
+
+* Added testing against Django 3.1 and Python 3.9.
+
+  In addition tests against Django main development branch are now required to
+  pass.
+
 Version 2.3.0 (2020-6-5)
 ------------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/PKG-INFO 
new/django-filter-2.4.0/PKG-INFO
--- old/django-filter-2.3.0/PKG-INFO    2020-06-05 16:45:54.000000000 +0200
+++ new/django-filter-2.4.0/PKG-INFO    2020-09-27 11:08:50.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: django-filter
-Version: 2.3.0
+Version: 2.4.0
 Summary: Django-filter is a reusable Django application for allowing users to 
filter querysets dynamically.
 Home-page: https://github.com/carltongibson/django-filter/tree/master
 Author: Alex Gaynor
@@ -31,8 +31,8 @@
         Requirements
         ------------
         
-        * **Python**: 3.5, 3.6, 3.7, 3.8
-        * **Django**: 2.2, 3.0
+        * **Python**: 3.5, 3.6, 3.7, 3.8, 3.9
+        * **Django**: 2.2, 3.0, 3.1
         * **DRF**: 3.10+
         
         From Version 2.0 Django Filter is Python 3 only.
@@ -126,11 +126,13 @@
 Classifier: Framework :: Django
 Classifier: Framework :: Django :: 2.2
 Classifier: Framework :: Django :: 3.0
+Classifier: Framework :: Django :: 3.1
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
 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: Programming Language :: Python :: 3.9
 Classifier: Framework :: Django
 Requires-Python: >=3.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/README.rst 
new/django-filter-2.4.0/README.rst
--- old/django-filter-2.3.0/README.rst  2020-05-14 14:31:54.000000000 +0200
+++ new/django-filter-2.4.0/README.rst  2020-09-26 19:13:46.000000000 +0200
@@ -21,8 +21,8 @@
 Requirements
 ------------
 
-* **Python**: 3.5, 3.6, 3.7, 3.8
-* **Django**: 2.2, 3.0
+* **Python**: 3.5, 3.6, 3.7, 3.8, 3.9
+* **Django**: 2.2, 3.0, 3.1
 * **DRF**: 3.10+
 
 From Version 2.0 Django Filter is Python 3 only.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/django_filter.egg-info/PKG-INFO 
new/django-filter-2.4.0/django_filter.egg-info/PKG-INFO
--- old/django-filter-2.3.0/django_filter.egg-info/PKG-INFO     2020-06-05 
16:45:54.000000000 +0200
+++ new/django-filter-2.4.0/django_filter.egg-info/PKG-INFO     2020-09-27 
11:08:49.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: django-filter
-Version: 2.3.0
+Version: 2.4.0
 Summary: Django-filter is a reusable Django application for allowing users to 
filter querysets dynamically.
 Home-page: https://github.com/carltongibson/django-filter/tree/master
 Author: Alex Gaynor
@@ -31,8 +31,8 @@
         Requirements
         ------------
         
-        * **Python**: 3.5, 3.6, 3.7, 3.8
-        * **Django**: 2.2, 3.0
+        * **Python**: 3.5, 3.6, 3.7, 3.8, 3.9
+        * **Django**: 2.2, 3.0, 3.1
         * **DRF**: 3.10+
         
         From Version 2.0 Django Filter is Python 3 only.
@@ -126,11 +126,13 @@
 Classifier: Framework :: Django
 Classifier: Framework :: Django :: 2.2
 Classifier: Framework :: Django :: 3.0
+Classifier: Framework :: Django :: 3.1
 Classifier: Programming Language :: Python
 Classifier: Programming Language :: Python :: 3
 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: Programming Language :: Python :: 3.9
 Classifier: Framework :: Django
 Requires-Python: >=3.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/django_filters/__init__.py 
new/django-filter-2.4.0/django_filters/__init__.py
--- old/django-filter-2.3.0/django_filters/__init__.py  2020-06-05 
16:37:10.000000000 +0200
+++ new/django-filter-2.4.0/django_filters/__init__.py  2020-09-27 
10:57:29.000000000 +0200
@@ -10,7 +10,7 @@
     from . import rest_framework
 del pkgutil
 
-__version__ = '2.3.0'
+__version__ = '2.4.0'
 
 
 def parse_version(version):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/django_filters/fields.py 
new/django-filter-2.4.0/django_filters/fields.py
--- old/django-filter-2.3.0/django_filters/fields.py    2020-05-14 
16:41:13.000000000 +0200
+++ new/django-filter-2.4.0/django_filters/fields.py    2020-09-26 
19:13:46.000000000 +0200
@@ -224,10 +224,7 @@
             yield ("", self.field.empty_label)
         if self.field.null_label is not None:
             yield (self.field.null_value, self.field.null_label)
-
-        # Python 2 lacks 'yield from'
-        for choice in self.choices:
-            yield choice
+        yield from self.choices
 
     def __len__(self):
         add = 1 if self.field.empty_label is not None else 0
@@ -247,10 +244,7 @@
             yield next(iterable)
         if self.field.null_label is not None:
             yield (self.field.null_value, self.field.null_label)
-
-        # Python 2 lacks 'yield from'
-        for value in iterable:
-            yield value
+        yield from iterable
 
     def __len__(self):
         add = 1 if self.field.null_label is not None else 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/django_filters/filters.py 
new/django-filter-2.4.0/django_filters/filters.py
--- old/django-filter-2.3.0/django_filters/filters.py   2020-05-14 
16:43:55.000000000 +0200
+++ new/django-filter-2.4.0/django_filters/filters.py   2020-09-26 
19:13:46.000000000 +0200
@@ -2,6 +2,7 @@
 from datetime import timedelta
 
 from django import forms
+from django.core.validators import MaxValueValidator
 from django.db.models import Q
 from django.db.models.constants import LOOKUP_SEP
 from django.forms.utils import pretty_name
@@ -357,6 +358,23 @@
 class NumberFilter(Filter):
     field_class = forms.DecimalField
 
+    def get_max_validator(self):
+        """
+        Return a MaxValueValidator for the field, or None to disable.
+        """
+        return MaxValueValidator(1e50)
+
+    @property
+    def field(self):
+        if not hasattr(self, '_field'):
+            field = super().field
+            max_validator = self.get_max_validator()
+            if max_validator:
+                field.validators.append(max_validator)
+
+            self._field = field
+        return self._field
+
 
 class NumericRangeFilter(Filter):
     field_class = RangeField
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/django_filters/utils.py 
new/django-filter-2.4.0/django_filters/utils.py
--- old/django-filter-2.3.0/django_filters/utils.py     2020-05-14 
14:31:54.000000000 +0200
+++ new/django-filter-2.4.0/django_filters/utils.py     2020-09-26 
19:13:46.000000000 +0200
@@ -309,7 +309,7 @@
     """
     # it's necessary to lazily import the exception, as it can otherwise create
     # an import loop when importing django_filters inside the project settings.
-    from rest_framework.exceptions import ValidationError, ErrorDetail
+    from rest_framework.exceptions import ErrorDetail, ValidationError
 
     exc = OrderedDict(
         (key, [ErrorDetail(e.message % (e.params or ()), code=e.code)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/docs/conf.py 
new/django-filter-2.4.0/docs/conf.py
--- old/django-filter-2.3.0/docs/conf.py        2020-06-05 16:35:23.000000000 
+0200
+++ new/django-filter-2.4.0/docs/conf.py        2020-09-26 19:37:07.000000000 
+0200
@@ -13,6 +13,8 @@
 
 import sys, os
 
+from django_filters import __version__
+
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
 # documentation root, use os.path.abspath to make it absolute, like shown here.
@@ -41,16 +43,16 @@
 
 # General information about the project.
 project = u'django-filter'
-copyright = u'2019, Alex Gaynor, Carlton Gibson and others.'
+copyright = u'2020, Alex Gaynor, Carlton Gibson and others.'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 #
 # The short X.Y version.
-version = '2.3'
+version = __version__
 # The full version, including alpha/beta/rc tags.
-release = '2.3.0'
+release = __version__
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/docs/dev/tests.txt 
new/django-filter-2.4.0/docs/dev/tests.txt
--- old/django-filter-2.3.0/docs/dev/tests.txt  2017-10-19 11:26:45.000000000 
+0200
+++ new/django-filter-2.4.0/docs/dev/tests.txt  2020-09-26 19:13:46.000000000 
+0200
@@ -81,7 +81,7 @@
     # or
 
     $ pip install isort
-    $ isort --check-only --recursive django_filters tests
+    $ isort --check --diff django_filters tests
 
 To sort the imports, simply remove the ``--check-only`` option.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/docs/guide/install.txt 
new/django-filter-2.4.0/docs/guide/install.txt
--- old/django-filter-2.3.0/docs/guide/install.txt      2020-05-14 
14:31:54.000000000 +0200
+++ new/django-filter-2.4.0/docs/guide/install.txt      2020-09-26 
19:13:46.000000000 +0200
@@ -30,5 +30,5 @@
 
 
 * **Python**: 3.5, 3.6, 3.7, 3.8
-* **Django**: 2.2, 3.0
+* **Django**: 2.2, 3.0, 3.1
 * **DRF**: 3.10+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/docs/guide/usage.txt 
new/django-filter-2.4.0/docs/guide/usage.txt
--- old/django-filter-2.3.0/docs/guide/usage.txt        2020-03-04 
20:56:36.000000000 +0100
+++ new/django-filter-2.4.0/docs/guide/usage.txt        2020-09-26 
19:13:46.000000000 +0200
@@ -176,7 +176,7 @@
 
 .. note::
 
-    It is not guaranteed that a `request` will be provied to the `FilterSet`
+    It is not guaranteed that a `request` will be provided to the `FilterSet`
     instance. Any code depending on a request should handle the `None` case.
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/docs/ref/filters.txt 
new/django-filter-2.4.0/docs/ref/filters.txt
--- old/django-filter-2.3.0/docs/ref/filters.txt        2020-05-14 
14:31:54.000000000 +0200
+++ new/django-filter-2.4.0/docs/ref/filters.txt        2020-09-26 
19:21:12.000000000 +0200
@@ -426,6 +426,12 @@
 Filters based on a numerical value, used with ``IntegerField``, ``FloatField``,
 and ``DecimalField`` by default.
 
+.. method:: NumberFilter.get_max_validator()
+
+    Return a ``MaxValueValidator`` instance that will be added to
+    ``field.validators``. By default uses a limit value of ``1e50``. Return
+    ``None`` to disable maximum value validation.
+
 ``NumericRangeFilter``
 ~~~~~~~~~~~~~~~~~~~~~~
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/requirements/maintainer.txt 
new/django-filter-2.4.0/requirements/maintainer.txt
--- old/django-filter-2.3.0/requirements/maintainer.txt 2020-03-04 
20:05:12.000000000 +0100
+++ new/django-filter-2.4.0/requirements/maintainer.txt 2020-09-26 
19:46:42.000000000 +0200
@@ -2,11 +2,10 @@
 argh==0.26.1
 Babel==2.2.0
 backports.ssl-match-hostname==3.4.0.2
-bumpversion==0.5.3
 certifi==2015.9.6.2
 docutils==0.12
 funcsigs==0.4
-Jinja2==2.8
+Jinja2>=2.10.1
 livereload==2.4.0
 MarkupSafe==0.23
 pathtools==0.1.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/setup.cfg 
new/django-filter-2.4.0/setup.cfg
--- old/django-filter-2.3.0/setup.cfg   2020-06-05 16:45:54.000000000 +0200
+++ new/django-filter-2.4.0/setup.cfg   2020-09-27 11:08:50.000000000 +0200
@@ -5,7 +5,7 @@
 skip = .tox
 atomic = true
 multi_line_output = 3
-known_standard_library = mock
+extra_standard_library = mock
 known_third_party = django,pytz,rest_framework
 known_first_party = django_filters
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/setup.py 
new/django-filter-2.4.0/setup.py
--- old/django-filter-2.3.0/setup.py    2020-06-05 16:35:31.000000000 +0200
+++ new/django-filter-2.4.0/setup.py    2020-09-27 11:08:45.000000000 +0200
@@ -2,29 +2,32 @@
 import sys
 from setuptools import setup, find_packages
 
+# FIXME: Main module requires django to be present, so cannot run setup.py in
+# clean environment.
+# from django_filters import __version__
+__version__ = '2.4.0'
+
 f = open('README.rst')
 readme = f.read()
 f.close()
 
-version = '2.3.0'
-
 if sys.argv[-1] == 'publish':
-    if os.system("pip freeze | grep wheel"):
-        print("wheel not installed.\nUse `pip install wheel`.\nExiting.")
-        sys.exit()
-    if os.system("pip freeze | grep twine"):
-        print("twine not installed.\nUse `pip install twine`.\nExiting.")
-        sys.exit()
+#     if os.system("pip freeze | grep wheel"):
+#         print("wheel not installed.\nUse `pip install wheel`.\nExiting.")
+#         sys.exit()
+#     if os.system("pip freeze | grep twine"):
+#         print("twine not installed.\nUse `pip install twine`.\nExiting.")
+#         sys.exit()
     os.system("python setup.py sdist bdist_wheel")
     os.system("twine upload dist/*")
     print("You probably want to also tag the version now:")
-    print("  git tag -a %s -m 'version %s'" % (version, version))
+    print("  git tag -a %s -m 'version %s'" % (__version__, __version__))
     print("  git push --tags")
     sys.exit()
 
 setup(
     name='django-filter',
-    version=version,
+    version=__version__,
     description=('Django-filter is a reusable Django application for allowing'
                  ' users to filter querysets dynamically.'),
     long_description=readme,
@@ -45,12 +48,14 @@
         'Framework :: Django',
         'Framework :: Django :: 2.2',
         'Framework :: Django :: 3.0',
+        'Framework :: Django :: 3.1',
         'Programming Language :: Python',
         'Programming Language :: Python :: 3',
         'Programming Language :: Python :: 3.5',
         'Programming Language :: Python :: 3.6',
         'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
+        'Programming Language :: Python :: 3.9',
         'Framework :: Django',
     ],
     zip_safe=False,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/tests/models.py 
new/django-filter-2.4.0/tests/models.py
--- old/django-filter-2.3.0/tests/models.py     2020-03-04 20:05:12.000000000 
+0100
+++ new/django-filter-2.4.0/tests/models.py     2020-09-26 19:13:46.000000000 
+0200
@@ -47,7 +47,7 @@
     status = models.IntegerField(choices=STATUS_CHOICES, default=0)
 
     is_active = models.BooleanField(default=False)
-    is_employed = models.NullBooleanField(default=False)
+    is_employed = models.BooleanField(null=True, default=False)
 
     favorite_books = models.ManyToManyField('Book', related_name='lovers')
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-filter-2.3.0/tests/rest_framework/test_integration.py 
new/django-filter-2.4.0/tests/rest_framework/test_integration.py
--- old/django-filter-2.3.0/tests/rest_framework/test_integration.py    
2018-07-13 11:44:46.000000000 +0200
+++ new/django-filter-2.4.0/tests/rest_framework/test_integration.py    
2020-09-26 19:13:46.000000000 +0200
@@ -1,10 +1,9 @@
 import datetime
 from decimal import Decimal
 
-from django.conf.urls import url
 from django.test import TestCase
 from django.test.utils import override_settings
-from django.urls import reverse
+from django.urls import path, reverse
 from django.utils.dateparse import parse_date
 from rest_framework import generics, serializers, status
 from rest_framework.test import APIRequestFactory
@@ -111,9 +110,9 @@
 
 
 urlpatterns = [
-    url(r'^(?P<pk>\d+)/$', FilterClassDetailView.as_view(), 
name='detail-view'),
-    url(r'^$', FilterClassRootView.as_view(), name='root-view'),
-    url(r'^get-queryset/$', GetQuerysetView.as_view(), 
name='get-queryset-view'),
+    path('<int:pk>/', FilterClassDetailView.as_view(), name='detail-view'),
+    path('', FilterClassRootView.as_view(), name='root-view'),
+    path('get-queryset/', GetQuerysetView.as_view(), name='get-queryset-view'),
 ]
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/tests/test_filterset.py 
new/django-filter-2.4.0/tests/test_filterset.py
--- old/django-filter-2.3.0/tests/test_filterset.py     2020-03-04 
20:59:02.000000000 +0100
+++ new/django-filter-2.4.0/tests/test_filterset.py     2020-09-26 
19:13:46.000000000 +0200
@@ -43,13 +43,6 @@
 from .utils import MockQuerySet
 
 
-def checkItemsEqual(L1, L2):
-    """
-    TestCase.assertItemsEqual() is not available in Python 2.6.
-    """
-    return len(L1) == len(L2) and sorted(L1) == sorted(L2)
-
-
 class HelperMethodsTests(TestCase):
 
     @unittest.skip('todo')
@@ -433,7 +426,7 @@
         self.assertEqual(len(F.base_filters), 3)
 
         expected_list = ['price', 'price__gte', 'price__lte', ]
-        self.assertTrue(checkItemsEqual(list(F.base_filters), expected_list))
+        self.assertCountEqual(list(F.base_filters), expected_list)
 
     @override_settings(FILTERS_DEFAULT_LOOKUP_EXPR='lte')
     def test_meta_fields_dictionary_derived_other_default_lookup(self):
@@ -447,7 +440,7 @@
         self.assertEqual(len(F.base_filters), 3)
 
         expected_list = ['price__exact', 'price__gte', 'price', ]
-        self.assertTrue(checkItemsEqual(list(F.base_filters), expected_list))
+        self.assertCountEqual(list(F.base_filters), expected_list)
 
     def test_meta_fields_containing_autofield(self):
         class F(FilterSet):
@@ -476,7 +469,7 @@
         self.assertEqual(len(F.base_filters), 2)
 
         expected_list = ['id', 'username']
-        self.assertTrue(checkItemsEqual(list(F.base_filters), expected_list))
+        self.assertCountEqual(list(F.base_filters), expected_list)
 
     def test_meta_fields_list_containing_unknown_fields(self):
         msg = ("'Meta.fields' must not contain non-model field names: "
@@ -683,7 +676,7 @@
         self.assertEqual(len(F.base_filters), 2)
 
         expected_list = ['published', 'published__year']
-        self.assertTrue(checkItemsEqual(list(F.base_filters), expected_list))
+        self.assertCountEqual(list(F.base_filters), expected_list)
 
     def test_declared_filter_multiple_inheritance(self):
         class A(FilterSet):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/tests/test_forms.py 
new/django-filter-2.4.0/tests/test_forms.py
--- old/django-filter-2.3.0/tests/test_forms.py 2017-10-24 11:14:54.000000000 
+0200
+++ new/django-filter-2.4.0/tests/test_forms.py 2020-09-26 19:13:46.000000000 
+0200
@@ -255,3 +255,17 @@
         self.assertFalse(f.is_valid())
         self.assertEqual(f.data, {'price': 'four dollars'})
         self.assertEqual(f.errors, {'price': ['Enter a number.']})
+
+    def test_number_filter_max_value_validation(self):
+        class F(FilterSet):
+            class Meta:
+                model = Book
+                fields = ['average_rating']
+
+        f = F({'average_rating': '1E1001'})
+        self.assertTrue(f.is_bound)
+        self.assertFalse(f.is_valid())
+        self.assertEqual(
+            f.errors,
+            {'average_rating': ['Ensure this value is less than or equal to 
1e+50.']}
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/tests/urls.py 
new/django-filter-2.4.0/tests/urls.py
--- old/django-filter-2.3.0/tests/urls.py       2018-07-13 11:44:46.000000000 
+0200
+++ new/django-filter-2.4.0/tests/urls.py       2020-09-26 19:13:46.000000000 
+0200
@@ -1,4 +1,4 @@
-from django.conf.urls import url
+from django.urls import path
 
 from django_filters.views import FilterView, object_filter
 
@@ -10,6 +10,6 @@
 
 
 urlpatterns = [
-    url(r'^books-legacy/$', object_filter, {'model': Book, 'extra_context': 
{'foo': _foo, 'bar': 'foo'}}),
-    url(r'^books/$', FilterView.as_view(model=Book)),
+    path('books-legacy/', object_filter, {'model': Book, 'extra_context': 
{'foo': _foo, 'bar': 'foo'}}),
+    path('books/', FilterView.as_view(model=Book)),
 ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-filter-2.3.0/tests/utils.py 
new/django-filter-2.4.0/tests/utils.py
--- old/django-filter-2.3.0/tests/utils.py      2018-07-13 11:45:02.000000000 
+0200
+++ new/django-filter-2.4.0/tests/utils.py      2020-09-26 19:13:46.000000000 
+0200
@@ -3,13 +3,19 @@
 from django.db import models
 
 
+class QuerySet(models.QuerySet):
+
+    def __bool__(self):
+        return True
+
+
 class MockQuerySet:
     """
     Generate a mock that is suitably similar to a QuerySet
     """
 
     def __new__(self):
-        m = mock.Mock(spec_set=models.QuerySet())
+        m = mock.Mock(spec_set=QuerySet())
         m.filter.return_value = m
         m.all.return_value = m
         return m

Reply via email to