Skip to content

Commit 2a219a4

Browse files
committed
merge in changes from django-enum==1.2.2
2 parents f5862cf + 8e1b72e commit 2a219a4

File tree

15 files changed

+219
-24
lines changed

15 files changed

+219
-24
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ jobs:
118118
- name: Install Poetry
119119
uses: snok/install-poetry@v1
120120
with:
121+
version: 1.5.1
121122
virtualenvs-create: true
122123
virtualenvs-in-project: true
123124
- name: Install Basic Dependencies

.safety-policy.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,7 @@ security: # configuration for the `safety check` command
1212
reason: dev dependency
1313
53269:
1414
reason: dev dependency
15+
#expires: '2022-10-21' # datetime string - date this ignore will expire, best practice to use this variable
16+
51499:
17+
reason: dev dependency
1518
continue-on-vulnerability-error: False # Suppress non-zero exit codes when vulnerabilities are found. Enable this in pipelines and CI/CD processes if you want to pass builds that have vulnerabilities. We recommend you set this to False.

README.rst

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
|MIT license| |PyPI version fury.io| |PyPI pyversions| |PyPI status| |Documentation Status|
1+
|MIT license| |PyPI version fury.io| |PyPI pyversions| |PyPi djversions| |PyPI status| |Documentation Status|
22
|Code Cov| |Test Status|
33

44
.. |MIT license| image:: https://img.shields.io/badge/License-MIT-blue.svg
@@ -10,6 +10,9 @@
1010
.. |PyPI pyversions| image:: https://img.shields.io/pypi/pyversions/django-enum.svg
1111
:target: https://pypi.python.org/pypi/django-enum/
1212

13+
.. |PyPI djversions| image:: https://img.shields.io/pypi/djversions/django-enum.svg
14+
:target: https://pypi.org/project/django-enum/
15+
1316
.. |PyPI status| image:: https://img.shields.io/pypi/status/django-enum.svg
1417
:target: https://pypi.python.org/pypi/django-enum
1518

django_enum/choices.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ class TextChoices(
6565
accepts enum-properties property lists.
6666
"""
6767

68+
def __hash__(self):
69+
return DjangoTextChoices.__hash__(self)
70+
6871

6972
class IntegerChoices(
7073
DjangoSymmetricMixin,
@@ -76,6 +79,9 @@ class IntegerChoices(
7679
accepts enum-properties property lists.
7780
"""
7881

82+
def __hash__(self):
83+
return DjangoIntegerChoices.__hash__(self)
84+
7985

8086
class FloatChoices(
8187
DjangoSymmetricMixin,
@@ -88,6 +94,10 @@ class FloatChoices(
8894
property lists.
8995
"""
9096

97+
def __hash__(self):
98+
return float.__hash__(self)
99+
100+
91101
# mult inheritance type hint bug
92102
class FlagChoices( # type: ignore
93103
DecomposeMixin,
@@ -108,6 +118,10 @@ class FlagChoices( # type: ignore
108118
lists.
109119
"""
110120

121+
def __hash__(self):
122+
return enum.IntFlag.__hash__(self)
123+
124+
111125

112126
except (ImportError, ModuleNotFoundError):
113127

django_enum/forms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class ChoiceFieldMixin: # pylint: disable=R0902
9999
_primitive_: Optional[Type] = None
100100
_strict_: bool = True
101101
empty_value: Any = ''
102-
empty_values: List[Any]
102+
empty_values: List[Any] = TypedChoiceField.empty_values
103103
choices: Iterable[Tuple[Any, Any]]
104104

105105
_empty_value_overridden_: bool = False

django_enum/tests/djenum/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
class AdminDisplayBug35Admin(admin.ModelAdmin):
88

99
list_display = ('text_enum', 'int_enum')
10-
readonly_fields = ('text_enum', 'int_enum')
10+
readonly_fields = ('text_enum', 'int_enum', 'blank_int', 'blank_txt')
1111

1212

1313
admin.site.register(AdminDisplayBug35, AdminDisplayBug35Admin)

django_enum/tests/djenum/migrations/0001_initial.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
# Generated by Django 3.2.20 on 2023-08-08 16:45
1+
# Generated by Django 4.2.4 on 2023-10-02 16:10
22

33
import datetime
4-
import pathlib
54
from decimal import Decimal
6-
5+
from django.db import migrations, models
76
import django_enum.fields
87
import django_enum.tests.djenum.enums
9-
from django.db import migrations, models
8+
import pathlib
109

1110

1211
class Migration(migrations.Migration):
@@ -21,8 +20,10 @@ class Migration(migrations.Migration):
2120
name='AdminDisplayBug35',
2221
fields=[
2322
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
24-
('text_enum', django_enum.fields.EnumCharField(choices=[('A', 'Label A'), ('B', 'Label B'), ('C', 'Label C')], default=None, max_length=1, null=True)),
25-
('int_enum', django_enum.fields.EnumPositiveSmallIntegerField(choices=[(1, 'One'), (2, 'Two'), (3, 'Three')], default=None, null=True)),
23+
('text_enum', django_enum.fields.EnumCharField(choices=[('V1', 'Value1'), ('V22', 'Value2'), ('V333', 'Value3'), ('D', 'Default')], default='V1', max_length=4)),
24+
('int_enum', django_enum.fields.EnumPositiveSmallIntegerField(choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=2)),
25+
('blank_int', django_enum.fields.EnumPositiveSmallIntegerField(choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=None, null=True)),
26+
('blank_txt', django_enum.fields.EnumCharField(choices=[('V1', 'Value1'), ('V22', 'Value2'), ('V333', 'Value3'), ('D', 'Default')], default=None, max_length=4, null=True)),
2627
],
2728
),
2829
migrations.CreateModel(
@@ -206,7 +207,7 @@ class Migration(migrations.Migration):
206207
migrations.AddField(
207208
model_name='enumflagtesterrelated',
208209
name='related_flags',
209-
field=models.ManyToManyField(related_name='related_flags', to='django_enum_tests_djenum.EnumFlagTester'),
210+
field=models.ManyToManyField(related_name='related_flags', to='django_enum_tests_djenum.enumflagtester'),
210211
),
211212
migrations.AddConstraint(
212213
model_name='emptyenumvaluetester',
@@ -234,10 +235,18 @@ class Migration(migrations.Migration):
234235
),
235236
migrations.AddConstraint(
236237
model_name='admindisplaybug35',
237-
constraint=models.CheckConstraint(check=models.Q(('text_enum__in', ['A', 'B', 'C']), ('text_enum__isnull', True), _connector='OR'), name='django_enum_tests_djenum_AdminDisplayBug35_text_enum_DJTextEnum'),
238+
constraint=models.CheckConstraint(check=models.Q(('text_enum__in', ['V1', 'V22', 'V333', 'D'])), name='django_enum_tests_djenum_AdminDisplayBug35_text_enum_TextEnum'),
239+
),
240+
migrations.AddConstraint(
241+
model_name='admindisplaybug35',
242+
constraint=models.CheckConstraint(check=models.Q(('int_enum__in', [0, 2, 32767])), name='ngo_enum_tests_djenum_AdminDisplayBug35_int_enum_SmallPosIntEnum'),
243+
),
244+
migrations.AddConstraint(
245+
model_name='admindisplaybug35',
246+
constraint=models.CheckConstraint(check=models.Q(('blank_int__in', [0, 2, 32767]), ('blank_int__isnull', True), _connector='OR'), name='go_enum_tests_djenum_AdminDisplayBug35_blank_int_SmallPosIntEnum'),
238247
),
239248
migrations.AddConstraint(
240249
model_name='admindisplaybug35',
241-
constraint=models.CheckConstraint(check=models.Q(('int_enum__in', [1, 2, 3]), ('int_enum__isnull', True), _connector='OR'), name='django_enum_tests_djenum_AdminDisplayBug35_int_enum_DJIntEnum'),
250+
constraint=models.CheckConstraint(check=models.Q(('blank_txt__in', ['V1', 'V22', 'V333', 'D']), ('blank_txt__isnull', True), _connector='OR'), name='django_enum_tests_djenum_AdminDisplayBug35_blank_txt_TextEnum'),
242251
),
243252
]

django_enum/tests/djenum/models.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,13 +188,23 @@ class BadDefault(models.Model):
188188
class AdminDisplayBug35(models.Model):
189189

190190
text_enum = EnumField(
191-
DJTextEnum,
191+
TextEnum,
192+
default=TextEnum.VALUE1
193+
)
194+
195+
int_enum = EnumField(
196+
SmallPosIntEnum,
197+
default=SmallPosIntEnum.VAL2
198+
)
199+
200+
blank_int = EnumField(
201+
SmallPosIntEnum,
192202
null=True,
193203
default=None
194204
)
195205

196-
int_enum = EnumField(
197-
DJIntEnum,
206+
blank_txt = EnumField(
207+
TextEnum,
198208
null=True,
199209
default=None
200210
)

django_enum/tests/enum_prop/admin.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
try:
22
from django.contrib import admin
3-
from django_enum.tests.enum_prop.models import BitFieldModel, EnumTester
3+
from django_enum.tests.enum_prop.models import BitFieldModel, AdminDisplayBug35, EnumTester
4+
5+
class AdminDisplayBug35Admin(admin.ModelAdmin):
6+
7+
list_display = ('text_enum', 'int_enum')
8+
readonly_fields = ('text_enum', 'int_enum', 'blank_int', 'blank_txt')
49

510
admin.site.register(EnumTester)
611
admin.site.register(BitFieldModel)
12+
admin.site.register(AdminDisplayBug35, AdminDisplayBug35Admin)
713

814
except (ImportError, ModuleNotFoundError): # pragma: no cover
915
pass

django_enum/tests/enum_prop/migrations/0001_initial.py

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
# Generated by Django 4.2.4 on 2023-08-08 01:54
1+
# Generated by Django 4.2.4 on 2023-10-02 16:10
22

33
import datetime
44
from decimal import Decimal
5-
6-
import django_enum.fields
75
from django.db import migrations, models
6+
import django_enum.fields
87

98

109
class Migration(migrations.Migration):
@@ -15,6 +14,16 @@ class Migration(migrations.Migration):
1514
]
1615

1716
operations = [
17+
migrations.CreateModel(
18+
name='AdminDisplayBug35',
19+
fields=[
20+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
21+
('text_enum', django_enum.fields.EnumCharField(choices=[('V1', 'Value1'), ('V22', 'Value2'), ('V333', 'Value3'), ('D', 'Default')], default='V1', max_length=4)),
22+
('int_enum', django_enum.fields.EnumPositiveSmallIntegerField(choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=2)),
23+
('blank_int', django_enum.fields.EnumPositiveSmallIntegerField(choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=None, null=True)),
24+
('blank_txt', django_enum.fields.EnumCharField(choices=[('V1', 'Value1'), ('V22', 'Value2'), ('V333', 'Value3'), ('D', 'Default')], default=None, max_length=4, null=True)),
25+
],
26+
),
1827
migrations.CreateModel(
1928
name='BitFieldModel',
2029
fields=[
@@ -314,4 +323,20 @@ class Migration(migrations.Migration):
314323
name='related_flags',
315324
field=models.ManyToManyField(related_name='related_flags', to='django_enum_tests_enum_prop.enumflagproptester'),
316325
),
326+
migrations.AddConstraint(
327+
model_name='admindisplaybug35',
328+
constraint=models.CheckConstraint(check=models.Q(('text_enum__in', ['V1', 'V22', 'V333', 'D'])), name='django_enum_tests_enum_prop_AdminDisplayBug35_text_enum_TextEnum'),
329+
),
330+
migrations.AddConstraint(
331+
model_name='admindisplaybug35',
332+
constraint=models.CheckConstraint(check=models.Q(('int_enum__in', [0, 2, 32767])), name='_enum_tests_enum_prop_AdminDisplayBug35_int_enum_SmallPosIntEnum'),
333+
),
334+
migrations.AddConstraint(
335+
model_name='admindisplaybug35',
336+
constraint=models.CheckConstraint(check=models.Q(('blank_int__in', [0, 2, 32767]), ('blank_int__isnull', True), _connector='OR'), name='enum_tests_enum_prop_AdminDisplayBug35_blank_int_SmallPosIntEnum'),
337+
),
338+
migrations.AddConstraint(
339+
model_name='admindisplaybug35',
340+
constraint=models.CheckConstraint(check=models.Q(('blank_txt__in', ['V1', 'V22', 'V333', 'D']), ('blank_txt__isnull', True), _connector='OR'), name='django_enum_tests_enum_prop_AdminDisplayBug35_blank_txt_TextEnum'),
341+
),
317342
]

0 commit comments

Comments
 (0)