[03/11] Add support for django-filter 1.1

Message ID 20180624195557.19909-3-stephen@that.guru
State Accepted
Headers show
Series
  • [01/11] REST: Check.user is not read-only
Related show

Commit Message

Stephen Finucane June 24, 2018, 7:55 p.m.
There's one warning to handle here.

Signed-off-by: Stephen Finucane <stephen@that.guru>
---
 README.rst                                      |  2 +-
 patchwork/api/filters.py                        |  5 +++--
 patchwork/compat.py                             | 17 +++++++++++++++++
 .../django-filter-1-1-6a6b0ab8cbe0faca.yaml     |  6 ++++++
 requirements-dev.txt                            |  2 +-
 requirements-prod.txt                           |  2 +-
 tox.ini                                         |  3 ++-
 7 files changed, 31 insertions(+), 6 deletions(-)
 create mode 100644 releasenotes/notes/django-filter-1-1-6a6b0ab8cbe0faca.yaml

Comments

Daniel Axtens July 12, 2018, 12:32 a.m. | #1
Stephen Finucane <stephen@that.guru> writes:

LGTM. I want to hold of on a formal review because I have very limited
knowledge of django-filters and haven't done any testing yet.

> +# NAME_FIELD
> +#
> +# The django-filter library renamed 'Filter.name' to 'Filter.field_name' in
> +# 1.1.
> +#
> +# https://django-filter.readthedocs.io/en/master/guide/migration.html\
> +#   #migrating-to-2-0
Personally I'd just go for a long line here but I'm not very fussed.

Regards,
Daniel

> +
> +if settings.ENABLE_REST_API:
> +    import django_filters  # noqa
> +
> +    if django_filters.VERSION >= (1, 1):
> +        NAME_FIELD = 'field_name'
> +    else:
> +        NAME_FIELD = 'name'
> +
> +
>  # reverse, reverse_lazy
>  #
>  # The reverse and reverse_lazy functions have been moved to django.urls in
> diff --git a/releasenotes/notes/django-filter-1-1-6a6b0ab8cbe0faca.yaml b/releasenotes/notes/django-filter-1-1-6a6b0ab8cbe0faca.yaml
> new file mode 100644
> index 00000000..3beb9c08
> --- /dev/null
> +++ b/releasenotes/notes/django-filter-1-1-6a6b0ab8cbe0faca.yaml
> @@ -0,0 +1,6 @@
> +---
> +upgrade:
> +  - |
> +    `django-filter 1.1
> +    <https://github.com/carltongibson/django-filter/releases/tag/1.1.0>`_ is
> +    now supported.
> diff --git a/requirements-dev.txt b/requirements-dev.txt
> index b12246dd..1d58df71 100644
> --- a/requirements-dev.txt
> +++ b/requirements-dev.txt
> @@ -1,4 +1,4 @@
>  Django>=1.8,<2.0
>  djangorestframework>=3.4,<3.9
> -django-filter>=1.0,<1.1
> +django-filter>=1.0,<1.2
>  -r requirements-test.txt
> diff --git a/requirements-prod.txt b/requirements-prod.txt
> index 42ff8ecd..59e2c1e6 100644
> --- a/requirements-prod.txt
> +++ b/requirements-prod.txt
> @@ -1,5 +1,5 @@
>  Django>=1.8,<2.0
>  djangorestframework>=3.4,<3.9
> -django-filter>=1.0,<1.1
> +django-filter>=1.0,<1.2
>  psycopg2>=2.7,<2.8
>  sqlparse==0.2.4
> diff --git a/tox.ini b/tox.ini
> index c1bc64e3..9aac8247 100644
> --- a/tox.ini
> +++ b/tox.ini
> @@ -13,7 +13,8 @@ deps =
>      django{18,19}: djangorestframework>=3.4,<3.7
>      django110: djangorestframework>=3.4,<3.9
>      django111: djangorestframework>=3.6,<3.9
> -    django{18,19,110,111}: django-filter>=1.0,<1.1
> +    django18: django-filter>=1.0,<1.1
> +    django{19,110,111}: django-filter>=1.0,<1.2
>  setenv =
>      DJANGO_SETTINGS_MODULE = patchwork.settings.dev
>      PYTHONDONTWRITEBYTECODE = 1
> -- 
> 2.17.1
>
> _______________________________________________
> Patchwork mailing list
> Patchwork@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/patchwork

Patch

diff --git a/README.rst b/README.rst
index ddc4b981..94ac32c3 100644
--- a/README.rst
+++ b/README.rst
@@ -47,7 +47,7 @@  Requirements
 
 - Django REST Framework (3.4 - 3.8)
 
-- Django Filters (1.0)
+- Django Filters (1.0 - 1.1)
 
 Development Installation
 ------------------------
diff --git a/patchwork/api/filters.py b/patchwork/api/filters.py
index 73353d90..ddf527fd 100644
--- a/patchwork/api/filters.py
+++ b/patchwork/api/filters.py
@@ -26,6 +26,7 @@  from django_filters import ModelMultipleChoiceFilter
 from django.forms import ModelMultipleChoiceField as BaseMultipleChoiceField
 from django.forms.widgets import MultipleHiddenInput
 
+from patchwork.compat import NAME_FIELD
 from patchwork.models import Bundle
 from patchwork.models import Check
 from patchwork.models import CoverLetter
@@ -151,8 +152,8 @@  class UserFilter(ModelMultipleChoiceFilter):
 class TimestampMixin(FilterSet):
 
     # TODO(stephenfin): These should filter on a 'updated_at' field instead
-    before = IsoDateTimeFilter(name='date', lookup_expr='lt')
-    since = IsoDateTimeFilter(name='date', lookup_expr='gte')
+    before = IsoDateTimeFilter(lookup_expr='lt', **{NAME_FIELD: 'date'})
+    since = IsoDateTimeFilter(lookup_expr='gte', **{NAME_FIELD: 'date'})
 
 
 class SeriesFilterSet(TimestampMixin, FilterSet):
diff --git a/patchwork/compat.py b/patchwork/compat.py
index 38caa4e8..e74e9264 100644
--- a/patchwork/compat.py
+++ b/patchwork/compat.py
@@ -41,6 +41,23 @@  if settings.ENABLE_REST_API:
         from rest_framework.filters import DjangoFilterBackend  # noqa
 
 
+# NAME_FIELD
+#
+# The django-filter library renamed 'Filter.name' to 'Filter.field_name' in
+# 1.1.
+#
+# https://django-filter.readthedocs.io/en/master/guide/migration.html\
+#   #migrating-to-2-0
+
+if settings.ENABLE_REST_API:
+    import django_filters  # noqa
+
+    if django_filters.VERSION >= (1, 1):
+        NAME_FIELD = 'field_name'
+    else:
+        NAME_FIELD = 'name'
+
+
 # reverse, reverse_lazy
 #
 # The reverse and reverse_lazy functions have been moved to django.urls in
diff --git a/releasenotes/notes/django-filter-1-1-6a6b0ab8cbe0faca.yaml b/releasenotes/notes/django-filter-1-1-6a6b0ab8cbe0faca.yaml
new file mode 100644
index 00000000..3beb9c08
--- /dev/null
+++ b/releasenotes/notes/django-filter-1-1-6a6b0ab8cbe0faca.yaml
@@ -0,0 +1,6 @@ 
+---
+upgrade:
+  - |
+    `django-filter 1.1
+    <https://github.com/carltongibson/django-filter/releases/tag/1.1.0>`_ is
+    now supported.
diff --git a/requirements-dev.txt b/requirements-dev.txt
index b12246dd..1d58df71 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,4 +1,4 @@ 
 Django>=1.8,<2.0
 djangorestframework>=3.4,<3.9
-django-filter>=1.0,<1.1
+django-filter>=1.0,<1.2
 -r requirements-test.txt
diff --git a/requirements-prod.txt b/requirements-prod.txt
index 42ff8ecd..59e2c1e6 100644
--- a/requirements-prod.txt
+++ b/requirements-prod.txt
@@ -1,5 +1,5 @@ 
 Django>=1.8,<2.0
 djangorestframework>=3.4,<3.9
-django-filter>=1.0,<1.1
+django-filter>=1.0,<1.2
 psycopg2>=2.7,<2.8
 sqlparse==0.2.4
diff --git a/tox.ini b/tox.ini
index c1bc64e3..9aac8247 100644
--- a/tox.ini
+++ b/tox.ini
@@ -13,7 +13,8 @@  deps =
     django{18,19}: djangorestframework>=3.4,<3.7
     django110: djangorestframework>=3.4,<3.9
     django111: djangorestframework>=3.6,<3.9
-    django{18,19,110,111}: django-filter>=1.0,<1.1
+    django18: django-filter>=1.0,<1.1
+    django{19,110,111}: django-filter>=1.0,<1.2
 setenv =
     DJANGO_SETTINGS_MODULE = patchwork.settings.dev
     PYTHONDONTWRITEBYTECODE = 1