From b2aad8da313471235376c83af5d9388c96c6d70a Mon Sep 17 00:00:00 2001 From: Tomas Date: Tue, 24 Sep 2019 10:44:30 +0200 Subject: [PATCH] Adding back compatibility --- .travis.yml | 65 ++++++++++ README.rst | 18 +-- example/app/test_msf.py | 29 ++++- example/app/views.py | 7 +- example/example/urls.py | 57 ++++++--- example/run_tests.py | 7 +- multiselectfield/db/fields.py | 5 +- setup.py | 6 +- tox.ini | 219 +++++++++++++++++++++++++++++++++- 9 files changed, 373 insertions(+), 40 deletions(-) diff --git a/.travis.yml b/.travis.yml index 873d9f2..41e573e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,27 +1,92 @@ language: python python: + - "2.6" - "2.7" + - "3.3" - "3.4" - "3.5" - "3.6" env: + - DJANGO_VERSION='Django>=1.4,<1.5' + - DJANGO_VERSION='Django>=1.5,<1.6' + - DJANGO_VERSION='Django>=1.6,<1.7' + - DJANGO_VERSION='Django>=1.7,<1.8' + - DJANGO_VERSION='Django>=1.8,<1.9' + - DJANGO_VERSION='Django>=1.9,<1.10' + - DJANGO_VERSION='Django>=1.10,<1.11' - DJANGO_VERSION='Django>=1.11,<2.0' - DJANGO_VERSION='Django>=2.0,<2.1' - DJANGO_VERSION='Django>=2.1,<2.2' - DJANGO_VERSION='https://github.com/django/django/archive/master.tar.gz' matrix: exclude: + - python: "2.6" + env: DJANGO_VERSION='Django>=1.7,<1.8' + - python: "2.6" + env: DJANGO_VERSION='Django>=1.8,<1.9' + - python: "2.6" + env: DJANGO_VERSION='Django>=1.9,<1.10' + - python: "2.6" + env: DJANGO_VERSION='Django>=1.10,<1.11' + - python: "2.6" + env: DJANGO_VERSION='Django>=1.11,<2.0' + - python: "2.6" + env: DJANGO_VERSION='https://github.com/django/django/archive/master.tar.gz' - python: "2.7" + env: DJANGO_VERSION='https://github.com/django/django/archive/master.tar.gz' + - python: "3.3" + env: DJANGO_VERSION='Django>=1.4,<1.5' + - python: "3.3" + env: DJANGO_VERSION='Django>=1.5,<1.6' + - python: "3.3" + env: DJANGO_VERSION='Django>=1.9,<1.10' + - python: "3.3" + env: DJANGO_VERSION='Django>=1.10,<1.11' + - python: "3.3" + env: DJANGO_VERSION='Django>=1.11,<2.0' + - python: "3.3" env: DJANGO_VERSION='Django>=2.0,<2.1' - python: "2.7" env: DJANGO_VERSION='Django>=2.1,<2.2' - python: "2.7" env: DJANGO_VERSION='https://github.com/django/django/archive/master.tar.gz' + - python: "3.4" + env: DJANGO_VERSION='Django>=1.4,<1.5' + - python: "3.4" + env: DJANGO_VERSION='Django>=1.5,<1.6' + - python: "3.4" + env: DJANGO_VERSION='Django>=1.6,<1.7' - python: "3.4" env: DJANGO_VERSION='Django>=2.1,<2.2' - python: "2.7" env: DJANGO_VERSION='https://github.com/django/django/archive/master.tar.gz' + - python: "3.5" + env: DJANGO_VERSION='Django>=1.4,<1.5' + - python: "3.5" + env: DJANGO_VERSION='Django>=1.5,<1.6' + - python: "3.5" + env: DJANGO_VERSION='Django>=1.6,<1.7' + - python: "3.5" + env: DJANGO_VERSION='Django>=1.7,<1.8' + - python: "3.5" + env: DJANGO_VERSION='Django>=2.1,<=2.2' + - python: "3.6" + env: DJANGO_VERSION='Django>=1.4,<1.5' + - python: "3.6" + env: DJANGO_VERSION='Django>=1.5,<1.6' + - python: "3.6" + env: DJANGO_VERSION='Django>=1.6,<1.7' + - python: "3.6" + env: DJANGO_VERSION='Django>=1.7,<1.8' + - python: "3.6" + env: DJANGO_VERSION='Django>=1.8,<1.9' + - python: "3.6" + env: DJANGO_VERSION='Django>=1.9,<1.10' + - python: "3.6" + env: DJANGO_VERSION='Django>=1.10,<1.11' + - python: "3.6" + env: DJANGO_VERSION='Django>=2.1,<=2.2' allow_failures: - env: DJANGO_VERSION='https://github.com/django/django/archive/master.tar.gz' diff --git a/README.rst b/README.rst index 628dbad..fb5d7ac 100644 --- a/README.rst +++ b/README.rst @@ -14,9 +14,9 @@ A new model field and form field. With this you can get a multiple select from a This egg is inspired by this `snippet `_. -Supported Python versions: 2.7, 3.4+ +Supported Python versions: 2.6, 2.7, 3.3+ -Supported Django versions: 1.11-2.0+ +Supported Django versions: 1.4-2.0+ Installation ============ @@ -35,25 +35,25 @@ Configure your models.py .. code-block:: python from multiselectfield import MultiSelectField - + # ... - + MY_CHOICES = (('item_key1', 'Item title 1.1'), ('item_key2', 'Item title 1.2'), ('item_key3', 'Item title 1.3'), ('item_key4', 'Item title 1.4'), ('item_key5', 'Item title 1.5')) - + MY_CHOICES2 = ((1, 'Item title 2.1'), (2, 'Item title 2.2'), (3, 'Item title 2.3'), (4, 'Item title 2.4'), (5, 'Item title 2.5')) - + class MyModel(models.Model): - + # ..... - + my_field = MultiSelectField(choices=MY_CHOICES) my_field2 = MultiSelectField(choices=MY_CHOICES2, max_choices=3, @@ -103,7 +103,7 @@ Django REST Framework comes with a ``MultipleChoiceField`` that works perfectly .. code-block:: python from rest_framework import fields, serializers - + from myapp.models import MY_CHOICES, MY_CHOICES2 class MyModelSerializer(serializers.HyperlinkedModelSerializer): diff --git a/example/app/test_msf.py b/example/app/test_msf.py index dc057ee..ccec10e 100644 --- a/example/app/test_msf.py +++ b/example/app/test_msf.py @@ -32,8 +32,12 @@ else: u = str -def get_field(model, name): - return model._meta.get_field(name) +if VERSION < (1, 9): + def get_field(model, name): + return model._meta.get_field_by_name(name)[0] +else: + def get_field(model, name): + return model._meta.get_field(name) class MultiSelectTestCase(TestCase): @@ -73,8 +77,12 @@ class MultiSelectTestCase(TestCase): # call Field.from_db_field, it simply returns a Python representation # of the data in the database (which in our case is a string of # comma-separated values). The bug was fixed in Django 1.8+. - self.assertListEqual(tag_list_list, [['sex', 'work', 'happy']]) - self.assertListEqual(categories_list_list, [['1', '3', '5']]) + if VERSION >= (1, 6) and VERSION < (1, 8): + self.assertStringEqual(tag_list_list, [u('sex,work,happy')]) + self.assertStringEqual(categories_list_list, [u('1,3,5')]) + else: + self.assertListEqual(tag_list_list, [['sex', 'work', 'happy']]) + self.assertListEqual(categories_list_list, [['1', '3', '5']]) def test_form(self): form_class = modelform_factory(Book, fields=('title', 'tags', 'categories')) @@ -131,17 +139,28 @@ class MultiSelectTestCase(TestCase): self.assertEqual(len(form_class.base_fields), 1) form = form_class(initial={'published_in': ['BC', 'AK']}) - expected_html = u("""