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
66 changes: 27 additions & 39 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,47 +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

matrix:
exclude:
- 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 flake8
- pip install -q "Django>=$DJANGO,<$DJANGO.99"
- 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 @@ -90,13 +90,15 @@ def set_enum(self, new_value):
if new_value is not None and not isinstance(new_value, Enum):
new_value = enum.get(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 @@ -42,6 +42,7 @@ class PersonStatusDefault(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 @@ -89,6 +89,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 = ()
93 changes: 29 additions & 64 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,67 +1,32 @@
[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

[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