From 07c9314fd34eff9923bdb732c6454edd61f0453a Mon Sep 17 00:00:00 2001 From: Fabre Florian Date: Thu, 23 Jan 2020 06:13:59 +0100 Subject: [PATCH] Add official support for Django 2.2. Improve coverage --- .travis.yml | 60 +++++++++++-------------------------------- picklefield/fields.py | 9 ++----- setup.py | 1 + tests/models.py | 1 + tests/tests.py | 1 + tox.ini | 20 ++++++++++----- 6 files changed, 33 insertions(+), 59 deletions(-) diff --git a/.travis.yml b/.travis.yml index ce8b071..ec59a30 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,54 +1,24 @@ -dist: trusty +dist: bionic sudo: false language: python -env: - matrix: - - TOXENV=flake8 - - TOXENV=isort cache: pip -matrix: +python: + - 2.7 + - 3.5 + - 3.6 + - 3.7 + - 3.8 +stages: + - lint + - test +jobs: fast_finish: true include: - - python: 2.7 - env: TOXENV=py27-1.11 - - python: 3.4 - env: TOXENV=py34-1.11 - - python: 3.4 - env: TOXENV=py34-2.0 - - python: 3.5 - env: TOXENV=py35-1.11 - - python: 3.5 - env: TOXENV=py35-2.0 - - python: 3.5 - env: TOXENV=py35-2.1 - - python: 3.5 - env: TOXENV=py35-master - - python: 3.6 - env: TOXENV=py36-1.11 - - python: 3.6 - env: TOXENV=py36-2.0 - - python: 3.6 - env: TOXENV=py36-2.1 - - python: 3.6 - env: TOXENV=py36-master - - python: 3.7 - env: TOXENV=py37-2.0 - dist: xenial - sudo: true - - python: 3.7 - env: TOXENV=py37-2.1 - dist: xenial - sudo: true - - python: 3.7 - env: TOXENV=py37-master - dist: xenial - sudo: true - allow_failures: - - env: TOXENV=py35-master - - env: TOXENV=py36-master - - env: TOXENV=py37-master + - { stage: lint, env: TOXENV=flake8, python: 3.6 } + - { stage: lint, env: TOXENV=isort, python: 3.6 } + install: -- pip install tox coveralls +- pip install tox coveralls tox-travis script: - tox after_success: diff --git a/picklefield/fields.py b/picklefield/fields.py index ef811d3..070418d 100644 --- a/picklefield/fields.py +++ b/picklefield/fields.py @@ -4,7 +4,6 @@ from copy import deepcopy from zlib import compress, decompress -import django from django.core import checks from django.db import models from django.utils.encoding import force_text @@ -170,12 +169,8 @@ def pre_save(self, model_instance, add): value = super(PickledObjectField, self).pre_save(model_instance, add) return wrap_conflictual_object(value) - if django.VERSION < (2, 0): - def from_db_value(self, value, expression, connection, context): - return self.to_python(value) - else: - def from_db_value(self, value, expression, connection): - return self.to_python(value) + def from_db_value(self, value, expression, connection, context=None): + return self.to_python(value) def get_db_prep_value(self, value, connection=None, prepared=False): """ diff --git a/setup.py b/setup.py index 68fa527..cd6af00 100644 --- a/setup.py +++ b/setup.py @@ -23,6 +23,7 @@ 'Framework :: Django :: 1.11', 'Framework :: Django :: 2.0', 'Framework :: Django :: 2.1', + 'Framework :: Django :: 2.2', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', diff --git a/tests/models.py b/tests/models.py index cc10344..3c80b6e 100644 --- a/tests/models.py +++ b/tests/models.py @@ -27,6 +27,7 @@ class TestingModel(models.Model): default_pickle_field = PickledObjectField(default=(D1, S1, T1, L1)) callable_pickle_field = PickledObjectField(default=date.today) non_copying_field = PickledObjectField(copy=False, default=TestCopyDataType('boom!')) + nullable_pickle_field = PickledObjectField(null=True) class MinimalTestingModel(models.Model): diff --git a/tests/tests.py b/tests/tests.py index 6afe920..b733391 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -35,6 +35,7 @@ def test_data_integrity(self): # the same data, even thought it's stored differently in the DB. self.assertEqual(value, model_test.pickle_field) self.assertEqual(value, model_test.compressed_pickle_field) + self.assertEqual(None, model_test.nullable_pickle_field) # Make sure we can also retrieve the model model_test.save() model_test.delete() diff --git a/tox.ini b/tox.ini index fcd5535..7c56fbf 100644 --- a/tox.ini +++ b/tox.ini @@ -4,11 +4,15 @@ args_are_paths = false envlist = flake8, isort, - py27-1.11, - py34-{1.11,2.0}, - py35-{1.11,2.0,2.1,master}, - py36-{1.11,2.0,2.1,master}, - py37-{1.11,2.0,2.1,master} + py{27,34,35,36,37,38}-1.11, + py{35,36,37,38}-{2.0,2.1,2.2,master} + +[tox:travis] +3.4 = py34 +3.5 = py35 +3.6 = py36 +3.7 = py37 +3.8 = py38 [testenv] basepython = @@ -17,15 +21,17 @@ basepython = py35: python3.5 py36: python3.6 py37: python3.7 + py38: python3.8 usedevelop = true commands = - {envpython} -R -Wonce {envbindir}/coverage run -m django test -v2 --settings=tests.settings {posargs} - coverage report + {envpython} -R -Wonce {envbindir}/coverage run --branch -m django test -v2 --settings=tests.settings {posargs} + coverage report -m deps = coverage 1.11: Django>=1.11,<2.0 2.0: Django>=2.0,<2.1 2.1: Django>=2.1,<2.2 + 2.2: Django>=2.2,<3.0 master: https://github.com/django/django/archive/master.tar.gz [testenv:flake8]