Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 27 additions & 47 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,55 +1,35 @@
sudo: false

language: python

python:
- 2.7
- 3.3
- 3.4
- 3.5
python: 3.5

env:
- DJANGO=1.6
- DJANGO=1.7
- DJANGO=1.8
- DJANGO==1.9rc1

matrix:
exclude:
- python: 3.3
env: DJANGO==1.9rc1
- python: 3.5
env: DJANGO=1.6
- python: 3.5
env: DJANGO=1.7
include:
- python: 3.4
env: DJANGO=1.8 COVERAGE=true COVERALLS_REPO_TOKEN=LdECqqwg7eelQx9w8gvooUZCFIaCqGZCv
allow_failures:
- env: COVERAGE=true
matrix:
- ENV=py27-django15
- ENV=py27-django16
- ENV=py27-django17
- ENV=py27-django18
- ENV=py27-django19
- ENV=py27-django110
- ENV=py27-django111
- ENV=py33-django15
- ENV=py33-django16
- ENV=py33-django17
- ENV=py33-django18
- ENV=py34-django15
- ENV=py34-django16
- ENV=py34-django17
- ENV=py34-django18
- ENV=py34-django19
- ENV=py34-django110
- ENV=py34-django111
- ENV=py35-django18
- ENV=py35-django19
- ENV=py35-django110
- ENV=py35-django111
- ENV=coverage

install:
- pip install -U pip setuptools
- pip install flake8
- if [[ $DJANGO =~ = ]]; then
pip install --pre --quiet "Django=$DJANGO";
else
pip install --quiet "Django>=$DJANGO,<$DJANGO.99";
fi
- make install

script:
- make flake8
- make test

after_script:
- if [ "$COVERAGE" == "true" ]; then
pip install --quiet python-coveralls;
make coverage;
coverage report;
coveralls --ignore-errors;
fi
- pip install tox

notifications:
email:
- [email protected]
script: tox -e $ENV
2 changes: 2 additions & 0 deletions django_enumfield/db/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,15 @@ def set_enum(self, new_value):
old_value = new_value
# Update private enum attribute with new value
setattr(self, private_att_name, new_value)
self.__dict__[att_name] = new_value
# Run validation for new value.
validators.validate_valid_transition(enum, old_value, new_value)

def get_enum(self):
return getattr(self, private_att_name)

def delete_enum(self):
self.__dict__[att_name] = None
return setattr(self, private_att_name, None)

if not sender._meta.abstract:
Expand Down
1 change: 1 addition & 0 deletions django_enumfield/tests/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class PersonStatus(Enum):


class Person(models.Model):
example = models.CharField(max_length=100, default='foo')
status = EnumField(PersonStatus, default=PersonStatus.ALIVE)

def save(self, *args, **kwargs):
Expand Down
18 changes: 18 additions & 0 deletions django_enumfield/tests/test_enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,24 @@ def test_enum_field_del_save(self):
self.assertEqual(beer.state, None)
self.assertEqual(beer.style, BeerStyle.STOUT)

def test_enum_field_modelform_create(self):
class PersonForm(ModelForm):
class Meta:
model = Person
fields = ('status',)

request_factory = RequestFactory()
request = request_factory.post('', data={'status': '2'})
form = PersonForm(request.POST)
self.assertTrue(isinstance(form.fields['status'], TypedChoiceField))
self.assertTrue(form.is_valid())
person = form.save()
self.assertTrue(person.status, PersonStatus.DEAD)

request = request_factory.post('', data={'status': '99'})
form = PersonForm(request.POST, instance=person)
self.assertFalse(form.is_valid())

def test_enum_field_modelform(self):
person = Person.objects.create()

Expand Down
1 change: 1 addition & 0 deletions django_enumfield/tests/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
urlpatterns = ()
94 changes: 30 additions & 64 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,67 +1,33 @@
[tox]
envlist = py27_django15, py27_django16, py27_django17, py27_django18,
py33_django15, py33_django16, py33_django17, py33_django18,
py34_django15, py34_django16, py34_django17, py34_django18
envlist =
py{27,34}-django{15,16,17,18,19,110,111}
py33-django{15,16,17,18}
py35-django{18,19,110,111}
coverage
skip_missing_interpreters = true

[testenv]
commands = {envpython} setup.py test

[testenv:py27_django15]
basepython = python2.7
deps =
Django==1.5.7

[testenv:py27_django16]
basepython = python2.7
deps =
Django==1.6.4

[testenv:py27_django17]
basepython = python2.7
deps =
Django==1.7.1

[testenv:py27_django18]
basepython = python2.7
deps =
Django==1.8.1

[testenv:py33_django15]
basepython = python3.3
deps =
Django==1.5.7

[testenv:py33_django16]
basepython = python3.3
deps =
Django==1.6.4

[testenv:py33_django17]
basepython = python3.3
deps =
Django==1.7.1

[testenv:py33_django18]
basepython = python3.3
deps =
Django==1.8.1

[testenv:py34_django15]
basepython = python3.4
deps =
Django==1.5.7

[testenv:py34_django16]
basepython = python3.4
deps =
Django==1.6.4

[testenv:py34_django17]
basepython = python3.4
deps =
Django==1.7.1

[testenv:py34_django18]
basepython = python3.4
deps =
Django==1.8.1
deps=
django15: Django>=1.5,<1.6
django16: Django>=1.6,<1.7
django17: Django>=1.7,<1.8
django18: Django>=1.8,<1.9
django19: Django>=1.9,<1.10
django110: Django>=1.10,<1.11
django111: Django>=1.11,<1.12
commands = make test

[testenv:coverage]
basepython = python3.5
passenv = TOXENV CI TRAVIS TRAVIS_*
deps =
Django>=1.8,<1.9
flake8
python-coveralls
setenv =
COVERALLS_REPO_TOKEN=LdECqqwg7eelQx9w8gvooUZCFIaCqGZCv
commands =
make flake8
make coverage
coverage report
coveralls --ignore-errors