From 37db54b9ddbd6bf2c58874bba800d4c425cb8a5a Mon Sep 17 00:00:00 2001 From: Jan Pieter Waagmeester Date: Sat, 2 Dec 2017 20:02:42 +0100 Subject: [PATCH] Dropping django 1.9 and 1.10 and set proper 2.0 version (#31) * Dropping old django: WIP 1/n * Second pass of django version dropping cleanup --- .travis.yml | 5 +---- CHANGELOG.md | 2 +- README.md | 4 ++-- docs/conf.py | 2 +- docs/index.rst | 6 +++--- docs/pages/management.rst | 11 ----------- docs/pages/performance.rst | 4 ++-- docs/pages/settings.rst | 3 +-- docs/requirements.txt | 1 + modeltrans/compat.py | 39 -------------------------------------- modeltrans/fields.py | 14 ++++---------- modeltrans/manager.py | 4 ++-- setup.py | 2 +- tox.ini | 8 +++----- 14 files changed, 22 insertions(+), 83 deletions(-) delete mode 100644 modeltrans/compat.py diff --git a/.travis.yml b/.travis.yml index 23e76e3..041ff7a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,12 +20,9 @@ script: matrix: include: - - { python: 2.7, env: TOXENV=py27-1.10 } - { python: 2.7, env: TOXENV=py27-1.11 } - - { python: 3.4, env: TOXENV=py34-1.10 } - { python: 3.4, env: TOXENV=py34-1.11 } - { python: 3.4, env: TOXENV=py34-2.0 } - - { python: 3.5, env: TOXENV=py35-1.10 } - { python: 3.5, env: TOXENV=py35-1.11 } - { python: 3.5, env: TOXENV=py35-2.0 } - { python: 3.5, env: TOXENV=py35-master } @@ -33,7 +30,7 @@ matrix: - { python: 3.6, env: TOXENV=py36-master } - { python: 3.5, env: TOXENV=isort } - { python: 3.5, env: TOXENV=migrate } - - { python: 2.7, env: TOXENV=docs } + - { python: 3.6, env: TOXENV=docs } # we allow failures for versions which are not yet released: allow_failures: diff --git a/CHANGELOG.md b/CHANGELOG.md index ff8dd5b..95ecd48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # django-modeltrans change log ## master - + - Dropped support for Django 1.9 and 1.10. ## 0.2.0 (2017-11-13) - No annotations are made while ordering anymore, instead, expressions are passed onto the original `order_by()` method. diff --git a/README.md b/README.md index 0876783..560b27c 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,8 @@ Translates Django model fields in a `JSONField` using a registration approach. # Features/requirements - Uses one `django.contrib.postgres.JSONField` (PostgreSQL jsonb field) per model. -- Django 1.9, 1.10, 1.11 (with their supported python versions) -- PostgreSQL >= 9.4 and Psycopg2 >= 2.5.4. +- Django 1.11, 2.0 (with their supported python versions) +- PostgreSQL >= 9.5 and Psycopg2 >= 2.5.4. - [Available on pypi](https://pypi.python.org/pypi/django-modeltrans) - [Documentation](http://django-modeltrans.readthedocs.io/en/latest/) diff --git a/docs/conf.py b/docs/conf.py index 02d6177..9f00dc8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -14,7 +14,7 @@ project = 'django-modeltrans' with open('../modeltrans/__init__.py', 'rb') as f: - release = re.search('__version__ = \'(.+?)\'', f.read()).group(1) + release = str(re.search('__version__ = \'(.+?)\'', f.read().decode('utf-8')).group(1)) version = release.rpartition('.')[0] diff --git a/docs/index.rst b/docs/index.rst index a1d4af2..61ab731 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -5,13 +5,13 @@ django-modeltrans - Translate model fields using a `JSONField` ============================================================== - Uses one `django.contrib.postgres.JSONField` (PostgreSQL jsonb field) for every record. -- Django 1.9, 1.10, 1.11 -- PostgreSQL >= 9.4 and Psycopg2 >= 2.5.4. +- Django 1.11 and 2.0 (with their supported python versions) +- PostgreSQL >= 9.5 and Psycopg2 >= 2.5.4. About the app: - `Available on pypi `_ -- Tested with python 2.7, 3.3, 3.4, 3.5 and Django 1.8, 1.9, `Travis CI `_ +- Tested using `Travis CI `_ - `Documentation on readthedocs.org `_ - `Bug tracker `_ diff --git a/docs/pages/management.rst b/docs/pages/management.rst index cdf17e4..2b7b22a 100644 --- a/docs/pages/management.rst +++ b/docs/pages/management.rst @@ -16,14 +16,3 @@ Only to migrate data from the fields managed by django-modeltranslation to the JSON field managed by django-modeltrans. Explained in more detail in :ref:`modeltranslation_migration` - - -.. _add_gin_index: - -Adding GIN indexes to the JSON field ------------------------------------- - -Syntax: ``./manage.py i18n_make_indexes `` - -In Django 1.11 and later, a GIN index is automatically added with the -``i18n``-field. For 1.9 and 1.10 you can use this command. diff --git a/docs/pages/performance.rst b/docs/pages/performance.rst index 9f77141..3efa9cf 100644 --- a/docs/pages/performance.rst +++ b/docs/pages/performance.rst @@ -5,5 +5,5 @@ Adding gin indexes ++++++++++++++++++ In order to perform well while performing filtering or ordering on translated values, -the ``i18n``-field need a GIN index. For django 1.11 and later, the index is added -automatically, for django 1.9 and 1.10, refer to :ref:`add_gin_index`. +the ``i18n``-field need a GIN index. The index is added automatically, for every +supported Django version. diff --git a/docs/pages/settings.rst b/docs/pages/settings.rst index 66620f3..6550271 100644 --- a/docs/pages/settings.rst +++ b/docs/pages/settings.rst @@ -41,7 +41,6 @@ If configured like this:: ------------------------- Boolean signalling django-modeltrans to create a `GinIndex `_ for each ``i18n`` field. -Support for ``GinIndex`` is added in django 1.11, for previous versions, -use :ref:`add_gin_index`. +Can be disabled to allow customization. ``True`` by default. diff --git a/docs/requirements.txt b/docs/requirements.txt index a6d6f8d..9d11cfa 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,4 +1,5 @@ Sphinx==1.6.2 +Django sphinx_rtd_theme recommonmark psycopg2 diff --git a/modeltrans/compat.py b/modeltrans/compat.py deleted file mode 100644 index f972175..0000000 --- a/modeltrans/compat.py +++ /dev/null @@ -1,39 +0,0 @@ - -try: - from django.contrib.postgres.fields.jsonb import KeyTextTransform -except ImportError: - from django.contrib.postgres.fields.jsonb import Transform - from django.db.models import TextField - - # django 1.11 implementation of KeyTextTransform for django 1.10 and 1.9 - # remove when support for django 1.9 and 1.0 is dropped - - class KeyTransform(Transform): - operator = '->' - nested_operator = '#>' - - def __init__(self, key_name, *args, **kwargs): - super(KeyTransform, self).__init__(*args, **kwargs) - self.key_name = key_name - - def as_sql(self, compiler, connection): - key_transforms = [self.key_name] - previous = self.lhs - while isinstance(previous, KeyTransform): - key_transforms.insert(0, previous.key_name) - previous = previous.lhs - lhs, params = compiler.compile(previous) - if len(key_transforms) > 1: - return "(%s %s %%s)" % (lhs, self.nested_operator), [key_transforms] + params - try: - int(self.key_name) - except ValueError: - lookup = "'%s'" % self.key_name - else: - lookup = "%s" % self.key_name - return "(%s %s %s)" % (lhs, self.operator, lookup), params - - class KeyTextTransform(KeyTransform): - operator = '->>' - nested_operator = '#>>' - _output_field = TextField() diff --git a/modeltrans/fields.py b/modeltrans/fields.py index a739e11..0cddab5 100644 --- a/modeltrans/fields.py +++ b/modeltrans/fields.py @@ -1,12 +1,11 @@ # -*- coding: utf-8 -*- -from django.contrib.postgres.fields import JSONField +from django.contrib.postgres.fields.jsonb import JSONField, KeyTextTransform from django.core.exceptions import ImproperlyConfigured from django.db.models import fields from django.db.models.functions import Cast, Coalesce from django.utils.translation import ugettext as _ -from .compat import KeyTextTransform from .conf import get_create_gin_setting, get_default_language, get_fallback_chain from .utils import build_localized_fieldname, get_i18n_index_name, get_language @@ -249,13 +248,8 @@ def contribute_to_class(self, cls, name): raise ImproperlyConfigured('{} must have name "i18n"'.format(self.__class__.__name__)) if get_create_gin_setting(): - # If used with Django 1.11 and later, this will add a GinIndex() for the i18n column. - try: - from django.contrib.postgres.indexes import GinIndex - index_name = get_i18n_index_name(cls) - cls._meta.indexes.append(GinIndex(fields=['i18n'], name=index_name)) - except ImportError: # noqa - # remove if support for django 1.9 and 1.10 is dropped. - pass + from django.contrib.postgres.indexes import GinIndex + index_name = get_i18n_index_name(cls) + cls._meta.indexes.append(GinIndex(fields=['i18n'], name=index_name)) super(TranslationField, self).contribute_to_class(cls, name) diff --git a/modeltrans/manager.py b/modeltrans/manager.py index cb8d463..85f5db8 100644 --- a/modeltrans/manager.py +++ b/modeltrans/manager.py @@ -244,7 +244,7 @@ def annotate(self, *args, **kwargs): ''' Patch annotate to allow the use of translated field names in annotations. - https://docs.djangoproject.com/en/1.11/ref/models/querysets/#annotate + https://docs.djangoproject.com/en/stable/ref/models/querysets/#annotate ''' args = [self._rewrite_expression(a) for a in args] kwargs = {alias: self._rewrite_expression(expr) for alias, expr in kwargs.items()} @@ -256,7 +256,7 @@ def create(self, **kwargs): Patch the create method to allow adding the value for a translated field using `Model.objects.create(..., title_nl='...')`. - https://docs.djangoproject.com/en/1.11/ref/models/querysets/#create + https://docs.djangoproject.com/en/stable/ref/models/querysets/#create ''' return super(MultilingualQuerySet, self).create( **transform_translatable_fields(self.model, kwargs) diff --git a/setup.py b/setup.py index b086315..665b3cc 100755 --- a/setup.py +++ b/setup.py @@ -35,7 +35,7 @@ packages=find_packages(exclude=['tests.*', 'tests', 'example.*', 'example']), include_package_data=True, # declarations in MANIFEST.in - install_requires=['Django>=1.10'], + install_requires=['Django>=1.11'], classifiers=[ 'Environment :: Web Environment', diff --git a/tox.ini b/tox.ini index 7387303..0d08766 100644 --- a/tox.ini +++ b/tox.ini @@ -2,7 +2,7 @@ [tox] args_are_paths = false envlist = - {py27,py34,py35}-{1.9,1.10,1.11}, + {py27,py34,py35}-{1.11}, {py34,py35,py36}-{2.0}, {py35,py36}-{master}, migrate @@ -26,10 +26,8 @@ commands = coverage run ./manage.py test --no-input coverage html deps = - 1.9: Django>=1.9,<1.10 - 1.10: Django>=1.10,<1.11 1.11: Django>=1.11,<2.0 - 2.0: Django==2.0b1 + 2.0: Django>=2.0,<2.1 master: https://github.com/django/django/archive/master.tar.gz psycopg2 coverage @@ -67,7 +65,7 @@ basepython = python3.5 commands = make isort [testenv:docs] -basepython = python2.7 +basepython = python3.6 whitelist_externals = make changedir = docs commands = make html