Skip to content

Commit ea9ee72

Browse files
committed
add coercion option to performance tests
1 parent 2929d54 commit ea9ee72

File tree

5 files changed

+233
-126
lines changed

5 files changed

+233
-126
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Generated by Django 3.2.14 on 2022-08-09 00:32
1+
# Generated by Django 3.2.14 on 2022-08-09 15:17
22

33
import django_enum.fields
44
from django.db import migrations, models
@@ -33,6 +33,7 @@ class Migration(migrations.Migration):
3333
('dj_text_enum', django_enum.fields.EnumCharField(choices=[('A', 'Label A'), ('B', 'Label B'), ('C', 'Label C')], default='A', max_length=1)),
3434
('non_strict_int', django_enum.fields.EnumPositiveSmallIntegerField(blank=True, choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=None, null=True)),
3535
('non_strict_text', django_enum.fields.EnumCharField(blank=True, choices=[('V1', 'Value1'), ('V22', 'Value2'), ('V333', 'Value3'), ('D', 'Default')], default='', max_length=12)),
36+
('no_coerce', django_enum.fields.EnumPositiveSmallIntegerField(blank=True, choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=None, null=True)),
3637
],
3738
options={
3839
'ordering': ('id',),

django_enum/tests/djenum/models.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,14 @@ class EnumTester(models.Model):
8787
blank=True
8888
)
8989

90+
no_coerce = EnumField(
91+
SmallPosIntEnum,
92+
coerce=False,
93+
null=True,
94+
default=None,
95+
blank=True
96+
)
97+
9098
def get_absolute_url(self):
9199
return reverse('django_enum_tests_djenum:enum-detail', kwargs={'pk': self.pk})
92100

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

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
# Generated by Django 3.2.14 on 2022-08-09 03:11
1+
# Generated by Django 3.2.14 on 2022-08-09 15:45
22

3-
from django.db import migrations, models
43
import django_enum.fields
4+
from django.db import migrations, models
55

66

77
class Migration(migrations.Migration):
@@ -32,6 +32,8 @@ class Migration(migrations.Migration):
3232
('dj_int_enum', django_enum.fields.EnumPositiveSmallIntegerField(choices=[(1, 'One'), (2, 'Two'), (3, 'Three')], default=1)),
3333
('dj_text_enum', django_enum.fields.EnumCharField(choices=[('A', 'Label A'), ('B', 'Label B'), ('C', 'Label C')], default='A', max_length=1)),
3434
('non_strict_int', django_enum.fields.EnumPositiveSmallIntegerField(blank=True, choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=None, null=True)),
35+
('non_strict_text', django_enum.fields.EnumCharField(blank=True, choices=[('V1', 'Value1'), ('V22', 'Value2'), ('V333', 'Value3'), ('D', 'Default')], default='', max_length=12)),
36+
('no_coerce', django_enum.fields.EnumPositiveSmallIntegerField(blank=True, choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=None, null=True)),
3537
],
3638
options={
3739
'ordering': ('id',),
@@ -46,6 +48,33 @@ class Migration(migrations.Migration):
4648
('color', django_enum.fields.EnumCharField(choices=[('R', 'Red'), ('G', 'Green'), ('B', 'Blue')], max_length=1)),
4749
],
4850
),
51+
migrations.CreateModel(
52+
name='NoCoercePerfCompare',
53+
fields=[
54+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
55+
('small_pos_int', django_enum.fields.EnumPositiveSmallIntegerField(blank=True, choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], db_index=True, default=None, null=True)),
56+
('small_int', django_enum.fields.EnumSmallIntegerField(blank=True, choices=[(-32768, 'Value -32768'), (0, 'Value 0'), (1, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], db_index=True, default=32767)),
57+
('pos_int', django_enum.fields.EnumPositiveIntegerField(blank=True, choices=[(0, 'Value 0'), (1, 'Value 1'), (2, 'Value 2'), (2147483647, 'Value 2147483647')], db_index=True, default=2147483647)),
58+
('int', django_enum.fields.EnumIntegerField(blank=True, choices=[(-2147483648, 'Value -2147483648'), (0, 'Value 0'), (1, 'Value 1'), (2, 'Value 2'), (2147483647, 'Value 2147483647')], db_index=True, null=True)),
59+
('big_pos_int', django_enum.fields.EnumPositiveBigIntegerField(blank=True, choices=[(0, 'Value 0'), (1, 'Value 1'), (2, 'Value 2'), (2147483648, 'Value 2147483647')], db_index=True, default=None, null=True)),
60+
('big_int', django_enum.fields.EnumBigIntegerField(blank=True, choices=[(-2147483649, 'Value -2147483649'), (1, 'Value 1'), (2, 'Value 2'), (2147483648, 'Value 2147483647')], db_index=True, default=-2147483649)),
61+
('constant', django_enum.fields.EnumFloatField(blank=True, choices=[(3.141592653589793, 'Pi'), (2.71828, "Euler's Number"), (1.618033988749895, 'Golden Ratio')], db_index=True, default=None, null=True)),
62+
('text', django_enum.fields.EnumCharField(blank=True, choices=[('V1', 'Value1'), ('V22', 'Value2'), ('V333', 'Value3'), ('D', 'Default')], db_index=True, default=None, max_length=4, null=True)),
63+
('int_choice', models.IntegerField(blank=True, choices=[(1, 'One'), (2, 'Two'), (3, 'Three')], default=1)),
64+
('char_choice', models.CharField(blank=True, choices=[('A', 'First'), ('B', 'Second'), ('C', 'Third')], default='A', max_length=1)),
65+
('int_field', models.IntegerField(blank=True, default=1)),
66+
('float_field', models.FloatField(blank=True, default=1.5)),
67+
('char_field', models.CharField(blank=True, default='A', max_length=1)),
68+
('dj_int_enum', django_enum.fields.EnumPositiveSmallIntegerField(choices=[(1, 'One'), (2, 'Two'), (3, 'Three')], default=1)),
69+
('dj_text_enum', django_enum.fields.EnumCharField(choices=[('A', 'Label A'), ('B', 'Label B'), ('C', 'Label C')], default='A', max_length=1)),
70+
('non_strict_int', django_enum.fields.EnumPositiveSmallIntegerField(blank=True, choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=None, null=True)),
71+
('non_strict_text', django_enum.fields.EnumCharField(blank=True, choices=[('V1', 'Value1'), ('V22', 'Value2'), ('V333', 'Value3'), ('D', 'Default')], default='', max_length=12)),
72+
('no_coerce', django_enum.fields.EnumPositiveSmallIntegerField(blank=True, choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=None, null=True)),
73+
],
74+
options={
75+
'ordering': ('id',),
76+
},
77+
),
4978
migrations.CreateModel(
5079
name='PerfCompare',
5180
fields=[
@@ -66,6 +95,8 @@ class Migration(migrations.Migration):
6695
('dj_int_enum', models.PositiveSmallIntegerField(choices=[(1, 'One'), (2, 'Two'), (3, 'Three')], default=1)),
6796
('dj_text_enum', models.CharField(choices=[('A', 'Label A'), ('B', 'Label B'), ('C', 'Label C')], default='A', max_length=1)),
6897
('non_strict_int', models.PositiveSmallIntegerField(blank=True, choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=None, null=True)),
98+
('non_strict_text', django_enum.fields.EnumCharField(blank=True, choices=[('V1', 'Value1'), ('V22', 'Value2'), ('V333', 'Value3'), ('D', 'Default')], default='', max_length=12)),
99+
('no_coerce', django_enum.fields.EnumPositiveSmallIntegerField(blank=True, choices=[(0, 'Value 1'), (2, 'Value 2'), (32767, 'Value 32767')], default=None, null=True)),
69100
],
70101
options={
71102
'ordering': ('id',),

django_enum/tests/enum_prop/models.py

Lines changed: 53 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,22 @@ class EnumTester(models.Model):
7979
default=None,
8080
blank=True
8181
)
82+
non_strict_text = EnumField(
83+
TextEnum,
84+
max_length=12,
85+
strict=False,
86+
null=False,
87+
default='',
88+
blank=True
89+
)
90+
91+
no_coerce = EnumField(
92+
SmallPosIntEnum,
93+
coerce=False,
94+
null=True,
95+
default=None,
96+
blank=True
97+
)
8298

8399
def get_absolute_url(self):
84100
return reverse('django_enum_tests_enum_prop:enum-detail', kwargs={'pk': self.pk})
@@ -116,58 +132,59 @@ class PerfCompare(models.Model):
116132

117133
small_pos_int = models.PositiveSmallIntegerField(choices=SmallPosIntEnum.choices, null=True, default=None, db_index=True, blank=True)
118134
small_int = models.SmallIntegerField(choices=SmallIntEnum.choices, null=False, default=SmallIntEnum.VAL3, db_index=True, blank=True)
119-
120135
pos_int = models.PositiveIntegerField(choices=PosIntEnum.choices, default=PosIntEnum.VAL3, db_index=True, blank=True)
121136
int = models.IntegerField(choices=IntEnum.choices, null=True, db_index=True, blank=True)
122-
123137
big_pos_int = models.PositiveBigIntegerField(choices=BigPosIntEnum.choices, null=True, default=None, db_index=True, blank=True)
124138
big_int = models.BigIntegerField(choices=BigIntEnum.choices, default=BigIntEnum.VAL0, db_index=True, blank=True)
125-
126139
constant = models.FloatField(choices=Constants.choices, null=True, default=None, db_index=True, blank=True)
127-
128140
text = models.CharField(choices=TextEnum.choices, max_length=4, null=True, default=None, db_index=True, blank=True)
129141

130142
# basic choice fields - used to compare behavior
131-
int_choice = models.IntegerField(
132-
default=1,
133-
null=False,
134-
blank=True,
135-
choices=((1, 'One'), (2, 'Two'), (3, 'Three'))
136-
)
143+
int_choice = models.IntegerField(default=1, null=False, blank=True, choices=((1, 'One'), (2, 'Two'), (3, 'Three')))
144+
char_choice = models.CharField(max_length=1, default='A', null=False, blank=True, choices=(('A', 'First'), ('B', 'Second'), ('C', 'Third')))
145+
int_field = models.IntegerField(default=1, null=False, blank=True)
146+
float_field = models.FloatField(default=1.5, null=False, blank=True)
147+
char_field = models.CharField(max_length=1, default='A', null=False, blank=True)
148+
################################################
137149

138-
char_choice = models.CharField(
139-
max_length=1,
140-
default='A',
141-
null=False,
142-
blank=True,
143-
choices=(('A', 'First'), ('B', 'Second'), ('C', 'Third'))
144-
)
150+
dj_int_enum = models.PositiveSmallIntegerField(choices=DJIntEnum.choices, default=DJIntEnum.ONE.value)
151+
dj_text_enum = models.CharField(choices=DJTextEnum.choices, default=DJTextEnum.A.value, max_length=1)
145152

146-
int_field = models.IntegerField(
147-
default=1,
148-
null=False,
149-
blank=True
150-
)
153+
# Non-strict
154+
non_strict_int = models.PositiveSmallIntegerField(choices=SmallPosIntEnum.choices, null=True, default=None, blank=True)
155+
non_strict_text = EnumField(TextEnum, max_length=12, strict=False, null=False, default='', blank=True)
156+
no_coerce = EnumField(SmallPosIntEnum, coerce=False, null=True, default=None, blank=True)
151157

152-
float_field = models.FloatField(
153-
default=1.5,
154-
null=False,
155-
blank=True
156-
)
158+
class Meta:
159+
ordering = ('id',)
157160

158-
char_field = models.CharField(
159-
max_length=1,
160-
default='A',
161-
null=False,
162-
blank=True
163-
)
161+
162+
class NoCoercePerfCompare(models.Model):
163+
164+
small_pos_int = EnumField(SmallPosIntEnum, coerce=False, null=True, default=None, db_index=True, blank=True)
165+
small_int = EnumField(SmallIntEnum, coerce=False, null=False, default=SmallIntEnum.VAL3, db_index=True, blank=True)
166+
pos_int = EnumField(PosIntEnum, coerce=False, default=PosIntEnum.VAL3, db_index=True, blank=True)
167+
int = EnumField(IntEnum, coerce=False, null=True, db_index=True, blank=True)
168+
big_pos_int = EnumField(BigPosIntEnum, coerce=False, null=True, default=None, db_index=True, blank=True)
169+
big_int = EnumField(BigIntEnum, coerce=False, default=BigIntEnum.VAL0, db_index=True, blank=True)
170+
constant = EnumField(Constants, coerce=False, null=True, default=None, db_index=True, blank=True)
171+
text = EnumField(TextEnum, coerce=False, null=True, default=None, db_index=True, blank=True)
172+
173+
# basic choice fields - used to compare behavior
174+
int_choice = models.IntegerField(default=1, null=False, blank=True, choices=((1, 'One'), (2, 'Two'), (3, 'Three')))
175+
char_choice = models.CharField(max_length=1, default='A', null=False, blank=True, choices=(('A', 'First'), ('B', 'Second'), ('C', 'Third')))
176+
int_field = models.IntegerField(default=1, null=False, blank=True)
177+
float_field = models.FloatField(default=1.5, null=False, blank=True)
178+
char_field = models.CharField(max_length=1, default='A', null=False, blank=True)
164179
################################################
165180

166-
dj_int_enum = models.PositiveSmallIntegerField(choices=DJIntEnum.choices, default=DJIntEnum.ONE.value)
167-
dj_text_enum = models.CharField(choices=DJTextEnum.choices, default=DJTextEnum.A.value, max_length=1)
181+
dj_int_enum = EnumField(DJIntEnum, coerce=False, default=DJIntEnum.ONE)
182+
dj_text_enum = EnumField(DJTextEnum, coerce=False, default=DJTextEnum.A)
168183

169184
# Non-strict
170-
non_strict_int = models.PositiveSmallIntegerField(choices=SmallPosIntEnum.choices, null=True, default=None, blank=True)
185+
non_strict_int = EnumField(SmallPosIntEnum, coerce=False, strict=False, null=True, default=None, blank=True)
186+
non_strict_text = EnumField(TextEnum, coerce=False, max_length=12, strict=False, null=False, default='', blank=True)
187+
no_coerce = EnumField(SmallPosIntEnum, coerce=False, null=True, default=None, blank=True)
171188

172189
class Meta:
173190
ordering = ('id',)

0 commit comments

Comments
 (0)