diff --git a/.travis.yml b/.travis.yml index ce8b071..e84cde9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,54 +1,28 @@ -dist: trusty +dist: bionic sudo: false language: python -env: - matrix: - - TOXENV=flake8 - - TOXENV=isort cache: pip -matrix: +env: + - DJANGO="1.11" + - DJANGO="2.0" + - DJANGO="2.1" + - DJANGO="2.2" +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 + - { stage: lint, env: TOXENV=flake8, python: 3.6 } + - { stage: lint, env: TOXENV=isort, python: 3.6 } allow_failures: - - env: TOXENV=py35-master - - env: TOXENV=py36-master - - env: TOXENV=py37-master + - env: TOXENV=py35-master + - env: TOXENV=py36-master + - env: TOXENV=py37-master + - env: TOXENV=py38-master + 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..6eb73fa 100644 --- a/picklefield/fields.py +++ b/picklefield/fields.py @@ -170,12 +170,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..1b0101b 100644 --- a/tox.ini +++ b/tox.ini @@ -4,11 +4,16 @@ 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} + +[travis:env] +DJANGO = + 1.11: 1.11 + 2.0: 2.0 + 2.1: 2.1 + 2.2: 2.2 + master: master [testenv] basepython = @@ -17,15 +22,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]