mirror of
https://github.com/jazzband/django-eav2.git
synced 2026-03-16 22:40:26 +00:00
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
This commit is contained in:
parent
9f4bddb94d
commit
6b7a04f8a7
15 changed files with 279 additions and 262 deletions
|
|
@ -5,14 +5,14 @@ class Migration(migrations.Migration):
|
|||
"""Add entity_ct field to Attribute model."""
|
||||
|
||||
dependencies = [
|
||||
('contenttypes', '0002_remove_content_type_name'),
|
||||
('eav', '0001_initial'),
|
||||
("contenttypes", "0002_remove_content_type_name"),
|
||||
("eav", "0001_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='attribute',
|
||||
name='entity_ct',
|
||||
field=models.ManyToManyField(blank=True, to='contenttypes.ContentType'),
|
||||
model_name="attribute",
|
||||
name="entity_ct",
|
||||
field=models.ManyToManyField(blank=True, to="contenttypes.ContentType"),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -9,13 +9,13 @@ import eav.fields
|
|||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
('eav', '0002_add_entity_ct_field'),
|
||||
("eav", "0002_add_entity_ct_field"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='value',
|
||||
name='value_json',
|
||||
model_name="value",
|
||||
name="value_json",
|
||||
field=JSONField(
|
||||
blank=True,
|
||||
default=dict,
|
||||
|
|
@ -24,21 +24,21 @@ class Migration(migrations.Migration):
|
|||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='attribute',
|
||||
name='datatype',
|
||||
model_name="attribute",
|
||||
name="datatype",
|
||||
field=eav.fields.EavDatatypeField(
|
||||
choices=[
|
||||
('text', 'Text'),
|
||||
('date', 'Date'),
|
||||
('float', 'Float'),
|
||||
('int', 'Integer'),
|
||||
('bool', 'True / False'),
|
||||
('object', 'Django Object'),
|
||||
('enum', 'Multiple Choice'),
|
||||
('json', 'JSON Object'),
|
||||
("text", "Text"),
|
||||
("date", "Date"),
|
||||
("float", "Float"),
|
||||
("int", "Integer"),
|
||||
("bool", "True / False"),
|
||||
("object", "Django Object"),
|
||||
("enum", "Multiple Choice"),
|
||||
("json", "JSON Object"),
|
||||
],
|
||||
max_length=6,
|
||||
verbose_name='Data Type',
|
||||
verbose_name="Data Type",
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@ from django.db import migrations, models
|
|||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
('eav', '0003_auto_20210404_2209'),
|
||||
("eav", "0003_auto_20210404_2209"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='value_bool',
|
||||
model_name="value",
|
||||
name="value_bool",
|
||||
field=models.BooleanField(blank=True, null=True),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -7,32 +7,32 @@ import eav.fields
|
|||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
('eav', '0004_alter_value_value_bool'),
|
||||
("eav", "0004_alter_value_value_bool"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='value',
|
||||
name='value_csv',
|
||||
model_name="value",
|
||||
name="value_csv",
|
||||
field=eav.fields.CSVField(blank=True, default="", null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='attribute',
|
||||
name='datatype',
|
||||
model_name="attribute",
|
||||
name="datatype",
|
||||
field=eav.fields.EavDatatypeField(
|
||||
choices=[
|
||||
('text', 'Text'),
|
||||
('date', 'Date'),
|
||||
('float', 'Float'),
|
||||
('int', 'Integer'),
|
||||
('bool', 'True / False'),
|
||||
('object', 'Django Object'),
|
||||
('enum', 'Multiple Choice'),
|
||||
('json', 'JSON Object'),
|
||||
('csv', 'Comma-Separated-Value'),
|
||||
("text", "Text"),
|
||||
("date", "Date"),
|
||||
("float", "Float"),
|
||||
("int", "Integer"),
|
||||
("bool", "True / False"),
|
||||
("object", "Django Object"),
|
||||
("enum", "Multiple Choice"),
|
||||
("json", "JSON Object"),
|
||||
("csv", "Comma-Separated-Value"),
|
||||
],
|
||||
max_length=6,
|
||||
verbose_name='Data Type',
|
||||
verbose_name="Data Type",
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -5,18 +5,18 @@ class Migration(migrations.Migration):
|
|||
"""Creates UUID field to map to Entity FK."""
|
||||
|
||||
dependencies = [
|
||||
('eav', '0005_auto_20210510_1305'),
|
||||
("eav", "0005_auto_20210510_1305"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='value',
|
||||
name='entity_uuid',
|
||||
model_name="value",
|
||||
name="entity_uuid",
|
||||
field=models.UUIDField(blank=True, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='entity_id',
|
||||
model_name="value",
|
||||
name="entity_id",
|
||||
field=models.IntegerField(blank=True, null=True),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@ class Migration(migrations.Migration):
|
|||
"""Convert Value.value_int to BigInteger."""
|
||||
|
||||
dependencies = [
|
||||
('eav', '0006_add_entity_uuid'),
|
||||
("eav", "0006_add_entity_uuid"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='value_int',
|
||||
model_name="value",
|
||||
name="value_int",
|
||||
field=models.BigIntegerField(blank=True, null=True),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -5,17 +5,17 @@ class Migration(migrations.Migration):
|
|||
"""Use Django SlugField() for Attribute.slug."""
|
||||
|
||||
dependencies = [
|
||||
('eav', '0007_alter_value_value_int'),
|
||||
("eav", "0007_alter_value_value_int"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='attribute',
|
||||
name='slug',
|
||||
model_name="attribute",
|
||||
name="slug",
|
||||
field=models.SlugField(
|
||||
help_text='Short unique attribute label',
|
||||
help_text="Short unique attribute label",
|
||||
unique=True,
|
||||
verbose_name='Slug',
|
||||
verbose_name="Slug",
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -8,171 +8,171 @@ class Migration(migrations.Migration):
|
|||
"""Define verbose naming for models and fields."""
|
||||
|
||||
dependencies = [
|
||||
('contenttypes', '0002_remove_content_type_name'),
|
||||
('eav', '0008_use_native_slugfield'),
|
||||
("contenttypes", "0002_remove_content_type_name"),
|
||||
("eav", "0008_use_native_slugfield"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='attribute',
|
||||
name="attribute",
|
||||
options={
|
||||
'ordering': ['name'],
|
||||
'verbose_name': 'Attribute',
|
||||
'verbose_name_plural': 'Attributes',
|
||||
"ordering": ["name"],
|
||||
"verbose_name": "Attribute",
|
||||
"verbose_name_plural": "Attributes",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='enumgroup',
|
||||
name="enumgroup",
|
||||
options={
|
||||
'verbose_name': 'EnumGroup',
|
||||
'verbose_name_plural': 'EnumGroups',
|
||||
"verbose_name": "EnumGroup",
|
||||
"verbose_name_plural": "EnumGroups",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='enumvalue',
|
||||
name="enumvalue",
|
||||
options={
|
||||
'verbose_name': 'EnumValue',
|
||||
'verbose_name_plural': 'EnumValues',
|
||||
"verbose_name": "EnumValue",
|
||||
"verbose_name_plural": "EnumValues",
|
||||
},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='value',
|
||||
options={'verbose_name': 'Value', 'verbose_name_plural': 'Values'},
|
||||
name="value",
|
||||
options={"verbose_name": "Value", "verbose_name_plural": "Values"},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='attribute',
|
||||
name='entity_ct',
|
||||
model_name="attribute",
|
||||
name="entity_ct",
|
||||
field=models.ManyToManyField(
|
||||
blank=True,
|
||||
to='contenttypes.contenttype',
|
||||
verbose_name='Entity content type',
|
||||
to="contenttypes.contenttype",
|
||||
verbose_name="Entity content type",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='entity_ct',
|
||||
model_name="value",
|
||||
name="entity_ct",
|
||||
field=models.ForeignKey(
|
||||
on_delete=models.deletion.PROTECT,
|
||||
related_name='value_entities',
|
||||
to='contenttypes.contenttype',
|
||||
verbose_name='Entity ct',
|
||||
related_name="value_entities",
|
||||
to="contenttypes.contenttype",
|
||||
verbose_name="Entity ct",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='entity_id',
|
||||
model_name="value",
|
||||
name="entity_id",
|
||||
field=models.IntegerField(
|
||||
blank=True,
|
||||
null=True,
|
||||
verbose_name='Entity id',
|
||||
verbose_name="Entity id",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='entity_uuid',
|
||||
model_name="value",
|
||||
name="entity_uuid",
|
||||
field=models.UUIDField(
|
||||
blank=True,
|
||||
null=True,
|
||||
verbose_name='Entity uuid',
|
||||
verbose_name="Entity uuid",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='generic_value_ct',
|
||||
model_name="value",
|
||||
name="generic_value_ct",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.deletion.PROTECT,
|
||||
related_name='value_values',
|
||||
to='contenttypes.contenttype',
|
||||
verbose_name='Generic value content type',
|
||||
related_name="value_values",
|
||||
to="contenttypes.contenttype",
|
||||
verbose_name="Generic value content type",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='generic_value_id',
|
||||
model_name="value",
|
||||
name="generic_value_id",
|
||||
field=models.IntegerField(
|
||||
blank=True,
|
||||
null=True,
|
||||
verbose_name='Generic value id',
|
||||
verbose_name="Generic value id",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='value_bool',
|
||||
model_name="value",
|
||||
name="value_bool",
|
||||
field=models.BooleanField(
|
||||
blank=True,
|
||||
null=True,
|
||||
verbose_name='Value bool',
|
||||
verbose_name="Value bool",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='value_csv',
|
||||
model_name="value",
|
||||
name="value_csv",
|
||||
field=CSVField(
|
||||
blank=True,
|
||||
default='',
|
||||
default="",
|
||||
null=True,
|
||||
verbose_name='Value CSV',
|
||||
verbose_name="Value CSV",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='value_date',
|
||||
model_name="value",
|
||||
name="value_date",
|
||||
field=models.DateTimeField(
|
||||
blank=True,
|
||||
null=True,
|
||||
verbose_name='Value date',
|
||||
verbose_name="Value date",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='value_enum',
|
||||
model_name="value",
|
||||
name="value_enum",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.deletion.PROTECT,
|
||||
related_name='eav_values',
|
||||
to='eav.enumvalue',
|
||||
verbose_name='Value enum',
|
||||
related_name="eav_values",
|
||||
to="eav.enumvalue",
|
||||
verbose_name="Value enum",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='value_float',
|
||||
model_name="value",
|
||||
name="value_float",
|
||||
field=models.FloatField(
|
||||
blank=True,
|
||||
null=True,
|
||||
verbose_name='Value float',
|
||||
verbose_name="Value float",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='value_int',
|
||||
model_name="value",
|
||||
name="value_int",
|
||||
field=models.BigIntegerField(
|
||||
blank=True,
|
||||
null=True,
|
||||
verbose_name='Value int',
|
||||
verbose_name="Value int",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='value_json',
|
||||
model_name="value",
|
||||
name="value_json",
|
||||
field=models.JSONField(
|
||||
blank=True,
|
||||
default=dict,
|
||||
encoder=DjangoJSONEncoder,
|
||||
null=True,
|
||||
verbose_name='Value JSON',
|
||||
verbose_name="Value JSON",
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='value_text',
|
||||
model_name="value",
|
||||
name="value_text",
|
||||
field=models.TextField(
|
||||
blank=True,
|
||||
null=True,
|
||||
verbose_name='Value text',
|
||||
verbose_name="Value text",
|
||||
),
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -5,13 +5,13 @@ class Migration(migrations.Migration):
|
|||
"""Migration to use BigAutoField as default for all models."""
|
||||
|
||||
dependencies = [
|
||||
('eav', '0009_enchance_naming'),
|
||||
("eav", "0009_enchance_naming"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='attribute',
|
||||
name='id',
|
||||
model_name="attribute",
|
||||
name="id",
|
||||
field=models.BigAutoField(
|
||||
editable=False,
|
||||
primary_key=True,
|
||||
|
|
@ -19,8 +19,8 @@ class Migration(migrations.Migration):
|
|||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='enumgroup',
|
||||
name='id',
|
||||
model_name="enumgroup",
|
||||
name="id",
|
||||
field=models.BigAutoField(
|
||||
editable=False,
|
||||
primary_key=True,
|
||||
|
|
@ -28,8 +28,8 @@ class Migration(migrations.Migration):
|
|||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='enumvalue',
|
||||
name='id',
|
||||
model_name="enumvalue",
|
||||
name="id",
|
||||
field=models.BigAutoField(
|
||||
editable=False,
|
||||
primary_key=True,
|
||||
|
|
@ -37,8 +37,8 @@ class Migration(migrations.Migration):
|
|||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='value',
|
||||
name='id',
|
||||
model_name="value",
|
||||
name="id",
|
||||
field=models.BigAutoField(
|
||||
editable=False,
|
||||
primary_key=True,
|
||||
|
|
|
|||
|
|
@ -2,4 +2,4 @@ from django.apps import AppConfig
|
|||
|
||||
|
||||
class TestAppConfig(AppConfig):
|
||||
name = 'test_project'
|
||||
name = "test_project"
|
||||
|
|
|
|||
|
|
@ -14,136 +14,136 @@ class Migration(migrations.Migration):
|
|||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ExampleMetaclassModel',
|
||||
name="ExampleMetaclassModel",
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name='ID',
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
("name", models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
"abstract": False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ExampleModel',
|
||||
name="ExampleModel",
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name='ID',
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
("name", models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
"abstract": False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RegisterTestModel',
|
||||
name="RegisterTestModel",
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name='ID',
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
("name", models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
"abstract": False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Patient',
|
||||
name="Patient",
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name='ID',
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
('email', models.EmailField(blank=True, max_length=MAX_CHARFIELD_LEN)),
|
||||
("name", models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
("email", models.EmailField(blank=True, max_length=MAX_CHARFIELD_LEN)),
|
||||
(
|
||||
'example',
|
||||
"example",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=models.deletion.PROTECT,
|
||||
to='test_project.examplemodel',
|
||||
to="test_project.examplemodel",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
"abstract": False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='M2MModel',
|
||||
name="M2MModel",
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name='ID',
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
('models', models.ManyToManyField(to='test_project.ExampleModel')),
|
||||
("name", models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
("models", models.ManyToManyField(to="test_project.ExampleModel")),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
"abstract": False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Encounter',
|
||||
name="Encounter",
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name='ID',
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
('num', models.PositiveSmallIntegerField()),
|
||||
("num", models.PositiveSmallIntegerField()),
|
||||
(
|
||||
'patient',
|
||||
"patient",
|
||||
models.ForeignKey(
|
||||
on_delete=models.deletion.PROTECT,
|
||||
to='test_project.patient',
|
||||
to="test_project.patient",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
"abstract": False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Doctor',
|
||||
name="Doctor",
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
"id",
|
||||
models.UUIDField(
|
||||
default=uuid.uuid4,
|
||||
editable=False,
|
||||
|
|
@ -151,10 +151,10 @@ class Migration(migrations.Migration):
|
|||
serialize=False,
|
||||
),
|
||||
),
|
||||
('name', models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
("name", models.CharField(max_length=MAX_CHARFIELD_LEN)),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
"abstract": False,
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -12,75 +12,85 @@ class DataValidation(TestCase):
|
|||
def setUp(self):
|
||||
eav.register(Patient)
|
||||
|
||||
Attribute.objects.create(name='Age', datatype=Attribute.TYPE_INT)
|
||||
Attribute.objects.create(name='DoB', datatype=Attribute.TYPE_DATE)
|
||||
Attribute.objects.create(name='Height', datatype=Attribute.TYPE_FLOAT)
|
||||
Attribute.objects.create(name='City', datatype=Attribute.TYPE_TEXT)
|
||||
Attribute.objects.create(name='Pregnant', datatype=Attribute.TYPE_BOOLEAN)
|
||||
Attribute.objects.create(name='User', datatype=Attribute.TYPE_OBJECT)
|
||||
Attribute.objects.create(name='Extra', datatype=Attribute.TYPE_JSON)
|
||||
Attribute.objects.create(name='Multi', datatype=Attribute.TYPE_CSV)
|
||||
Attribute.objects.create(name="Age", datatype=Attribute.TYPE_INT)
|
||||
Attribute.objects.create(name="DoB", datatype=Attribute.TYPE_DATE)
|
||||
Attribute.objects.create(name="Height", datatype=Attribute.TYPE_FLOAT)
|
||||
Attribute.objects.create(name="City", datatype=Attribute.TYPE_TEXT)
|
||||
Attribute.objects.create(name="Pregnant", datatype=Attribute.TYPE_BOOLEAN)
|
||||
Attribute.objects.create(name="User", datatype=Attribute.TYPE_OBJECT)
|
||||
Attribute.objects.create(name="Extra", datatype=Attribute.TYPE_JSON)
|
||||
Attribute.objects.create(name="Multi", datatype=Attribute.TYPE_CSV)
|
||||
|
||||
def tearDown(self):
|
||||
eav.unregister(Patient)
|
||||
|
||||
def test_required_field(self):
|
||||
p = Patient(name='Bob')
|
||||
p = Patient(name="Bob")
|
||||
p.eav.age = 5
|
||||
p.save()
|
||||
|
||||
Attribute.objects.create(
|
||||
name='Weight', datatype=Attribute.TYPE_INT, required=True,
|
||||
name="Weight",
|
||||
datatype=Attribute.TYPE_INT,
|
||||
required=True,
|
||||
)
|
||||
p.eav.age = 6
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p = Patient.objects.get(name='Bob')
|
||||
p = Patient.objects.get(name="Bob")
|
||||
self.assertEqual(p.eav.age, 5)
|
||||
p.eav.weight = 23
|
||||
p.save()
|
||||
p = Patient.objects.get(name='Bob')
|
||||
p = Patient.objects.get(name="Bob")
|
||||
self.assertEqual(p.eav.weight, 23)
|
||||
|
||||
def test_create_required_field(self):
|
||||
Attribute.objects.create(
|
||||
name='Weight', datatype=Attribute.TYPE_INT, required=True,
|
||||
name="Weight",
|
||||
datatype=Attribute.TYPE_INT,
|
||||
required=True,
|
||||
)
|
||||
self.assertRaises(
|
||||
ValidationError, Patient.objects.create, name='Joe', eav__age=5,
|
||||
ValidationError,
|
||||
Patient.objects.create,
|
||||
name="Joe",
|
||||
eav__age=5,
|
||||
)
|
||||
self.assertEqual(Patient.objects.count(), 0)
|
||||
self.assertEqual(Value.objects.count(), 0)
|
||||
|
||||
Patient.objects.create(name='Joe', eav__weight=2, eav__age=5)
|
||||
Patient.objects.create(name="Joe", eav__weight=2, eav__age=5)
|
||||
self.assertEqual(Patient.objects.count(), 1)
|
||||
self.assertEqual(Value.objects.count(), 2)
|
||||
|
||||
def test_validation_error_create(self):
|
||||
self.assertRaises(
|
||||
ValidationError, Patient.objects.create, name='Joe', eav__age='df',
|
||||
ValidationError,
|
||||
Patient.objects.create,
|
||||
name="Joe",
|
||||
eav__age="df",
|
||||
)
|
||||
self.assertEqual(Patient.objects.count(), 0)
|
||||
self.assertEqual(Value.objects.count(), 0)
|
||||
|
||||
def test_changing_datatypes(self):
|
||||
a = Attribute.objects.create(name='Color', datatype=Attribute.TYPE_INT)
|
||||
a = Attribute.objects.create(name="Color", datatype=Attribute.TYPE_INT)
|
||||
a.datatype = Attribute.TYPE_TEXT
|
||||
a.save()
|
||||
Patient.objects.create(name='Bob', eav__color='brown')
|
||||
Patient.objects.create(name="Bob", eav__color="brown")
|
||||
a.datatype = Attribute.TYPE_INT
|
||||
self.assertRaises(ValidationError, a.save)
|
||||
|
||||
def test_int_validation(self):
|
||||
p = Patient.objects.create(name='Joe')
|
||||
p.eav.age = 'bad'
|
||||
p = Patient.objects.create(name="Joe")
|
||||
p.eav.age = "bad"
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.age = 15
|
||||
p.save()
|
||||
self.assertEqual(Patient.objects.get(pk=p.pk).eav.age, 15)
|
||||
|
||||
def test_date_validation(self):
|
||||
p = Patient.objects.create(name='Joe')
|
||||
p.eav.dob = '12'
|
||||
p = Patient.objects.create(name="Joe")
|
||||
p.eav.dob = "12"
|
||||
self.assertRaises(ValidationError, lambda: p.save())
|
||||
p.eav.dob = 15
|
||||
self.assertRaises(ValidationError, lambda: p.save())
|
||||
|
|
@ -94,26 +104,26 @@ class DataValidation(TestCase):
|
|||
self.assertEqual(Patient.objects.get(pk=p.pk).eav.dob.date(), today)
|
||||
|
||||
def test_float_validation(self):
|
||||
p = Patient.objects.create(name='Joe')
|
||||
p.eav.height = 'bad'
|
||||
p = Patient.objects.create(name="Joe")
|
||||
p.eav.height = "bad"
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.height = 15
|
||||
p.save()
|
||||
self.assertEqual(Patient.objects.get(pk=p.pk).eav.height, 15)
|
||||
p.eav.height = '2.3'
|
||||
p.eav.height = "2.3"
|
||||
p.save()
|
||||
self.assertEqual(Patient.objects.get(pk=p.pk).eav.height, 2.3)
|
||||
|
||||
def test_text_validation(self):
|
||||
p = Patient.objects.create(name='Joe')
|
||||
p = Patient.objects.create(name="Joe")
|
||||
p.eav.city = 5
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.city = 'El Dorado'
|
||||
p.eav.city = "El Dorado"
|
||||
p.save()
|
||||
self.assertEqual(Patient.objects.get(pk=p.pk).eav.city, 'El Dorado')
|
||||
self.assertEqual(Patient.objects.get(pk=p.pk).eav.city, "El Dorado")
|
||||
|
||||
def test_bool_validation(self):
|
||||
p = Patient.objects.create(name='Joe')
|
||||
p = Patient.objects.create(name="Joe")
|
||||
p.eav.pregnant = 5
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.pregnant = True
|
||||
|
|
@ -121,70 +131,72 @@ class DataValidation(TestCase):
|
|||
self.assertEqual(Patient.objects.get(pk=p.pk).eav.pregnant, True)
|
||||
|
||||
def test_object_validation(self):
|
||||
p = Patient.objects.create(name='Joe')
|
||||
p = Patient.objects.create(name="Joe")
|
||||
p.eav.user = 5
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.user = object
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.user = User(username='joe')
|
||||
p.eav.user = User(username="joe")
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
u = User.objects.create(username='joe')
|
||||
u = User.objects.create(username="joe")
|
||||
p.eav.user = u
|
||||
p.save()
|
||||
self.assertEqual(Patient.objects.get(pk=p.pk).eav.user, u)
|
||||
|
||||
def test_enum_validation(self):
|
||||
yes = EnumValue.objects.create(value='yes')
|
||||
no = EnumValue.objects.create(value='no')
|
||||
unkown = EnumValue.objects.create(value='unkown')
|
||||
green = EnumValue.objects.create(value='green')
|
||||
ynu = EnumGroup.objects.create(name='Yes / No / Unknown')
|
||||
yes = EnumValue.objects.create(value="yes")
|
||||
no = EnumValue.objects.create(value="no")
|
||||
unkown = EnumValue.objects.create(value="unkown")
|
||||
green = EnumValue.objects.create(value="green")
|
||||
ynu = EnumGroup.objects.create(name="Yes / No / Unknown")
|
||||
ynu.values.add(yes)
|
||||
ynu.values.add(no)
|
||||
ynu.values.add(unkown)
|
||||
Attribute.objects.create(
|
||||
name='Fever', datatype=Attribute.TYPE_ENUM, enum_group=ynu,
|
||||
name="Fever",
|
||||
datatype=Attribute.TYPE_ENUM,
|
||||
enum_group=ynu,
|
||||
)
|
||||
|
||||
p = Patient.objects.create(name='Joe')
|
||||
p = Patient.objects.create(name="Joe")
|
||||
p.eav.fever = 5
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.fever = object
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.fever = green
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.fever = EnumValue(value='yes')
|
||||
p.eav.fever = EnumValue(value="yes")
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.fever = no
|
||||
p.save()
|
||||
self.assertEqual(Patient.objects.get(pk=p.pk).eav.fever, no)
|
||||
|
||||
def test_enum_datatype_without_enum_group(self):
|
||||
a = Attribute(name='Age Bracket', datatype=Attribute.TYPE_ENUM)
|
||||
a = Attribute(name="Age Bracket", datatype=Attribute.TYPE_ENUM)
|
||||
self.assertRaises(ValidationError, a.save)
|
||||
yes = EnumValue.objects.create(value='yes')
|
||||
no = EnumValue.objects.create(value='no')
|
||||
unkown = EnumValue.objects.create(value='unkown')
|
||||
ynu = EnumGroup.objects.create(name='Yes / No / Unknown')
|
||||
yes = EnumValue.objects.create(value="yes")
|
||||
no = EnumValue.objects.create(value="no")
|
||||
unkown = EnumValue.objects.create(value="unkown")
|
||||
ynu = EnumGroup.objects.create(name="Yes / No / Unknown")
|
||||
ynu.values.add(yes)
|
||||
ynu.values.add(no)
|
||||
ynu.values.add(unkown)
|
||||
a = Attribute(name='Age Bracket', datatype=Attribute.TYPE_ENUM, enum_group=ynu)
|
||||
a = Attribute(name="Age Bracket", datatype=Attribute.TYPE_ENUM, enum_group=ynu)
|
||||
a.save()
|
||||
|
||||
def test_enum_group_on_other_datatype(self):
|
||||
yes = EnumValue.objects.create(value='yes')
|
||||
no = EnumValue.objects.create(value='no')
|
||||
unkown = EnumValue.objects.create(value='unkown')
|
||||
ynu = EnumGroup.objects.create(name='Yes / No / Unknown')
|
||||
yes = EnumValue.objects.create(value="yes")
|
||||
no = EnumValue.objects.create(value="no")
|
||||
unkown = EnumValue.objects.create(value="unkown")
|
||||
ynu = EnumGroup.objects.create(name="Yes / No / Unknown")
|
||||
ynu.values.add(yes)
|
||||
ynu.values.add(no)
|
||||
ynu.values.add(unkown)
|
||||
a = Attribute(name='color', datatype=Attribute.TYPE_TEXT, enum_group=ynu)
|
||||
a = Attribute(name="color", datatype=Attribute.TYPE_TEXT, enum_group=ynu)
|
||||
self.assertRaises(ValidationError, a.save)
|
||||
|
||||
def test_json_validation(self):
|
||||
p = Patient.objects.create(name='Joe')
|
||||
p = Patient.objects.create(name="Joe")
|
||||
p.eav.extra = 5
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.extra = {"eyes": "blue", "hair": "brown"}
|
||||
|
|
@ -192,12 +204,13 @@ class DataValidation(TestCase):
|
|||
self.assertEqual(Patient.objects.get(pk=p.pk).eav.extra.get("eyes", ""), "blue")
|
||||
|
||||
def test_csv_validation(self):
|
||||
yes = EnumValue.objects.create(value='yes')
|
||||
p = Patient.objects.create(name='Mike')
|
||||
yes = EnumValue.objects.create(value="yes")
|
||||
p = Patient.objects.create(name="Mike")
|
||||
p.eav.multi = yes
|
||||
self.assertRaises(ValidationError, p.save)
|
||||
p.eav.multi = "one;two;three"
|
||||
p.save()
|
||||
self.assertEqual(
|
||||
Patient.objects.get(pk=p.pk).eav.multi, ["one", "two", "three"],
|
||||
Patient.objects.get(pk=p.pk).eav.multi,
|
||||
["one", "two", "three"],
|
||||
)
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@ from test_project.models import Patient
|
|||
@pytest.fixture
|
||||
def enumgroup(db):
|
||||
"""Sample `EnumGroup` object for testing."""
|
||||
test_group = EnumGroup.objects.create(name='Yes / No')
|
||||
value_yes = EnumValue.objects.create(value='Yes')
|
||||
value_no = EnumValue.objects.create(value='No')
|
||||
test_group = EnumGroup.objects.create(name="Yes / No")
|
||||
value_yes = EnumValue.objects.create(value="Yes")
|
||||
value_no = EnumValue.objects.create(value="No")
|
||||
test_group.values.add(value_yes)
|
||||
test_group.values.add(value_no)
|
||||
return test_group
|
||||
|
|
@ -19,14 +19,14 @@ def enumgroup(db):
|
|||
|
||||
def test_enumgroup_display(enumgroup):
|
||||
"""Test repr() and str() of EnumGroup."""
|
||||
assert f'<EnumGroup {enumgroup.name}>' == repr(enumgroup)
|
||||
assert f"<EnumGroup {enumgroup.name}>" == repr(enumgroup)
|
||||
assert str(enumgroup) == str(enumgroup.name)
|
||||
|
||||
|
||||
def test_enumvalue_display(enumgroup):
|
||||
"""Test repr() and str() of EnumValue."""
|
||||
test_value = enumgroup.values.first()
|
||||
assert f'<EnumValue {test_value.value}>' == repr(test_value)
|
||||
assert f"<EnumValue {test_value.value}>" == repr(test_value)
|
||||
assert str(test_value) == test_value.value
|
||||
|
||||
|
||||
|
|
@ -34,33 +34,37 @@ class MiscModels(TestCase):
|
|||
"""Miscellaneous tests on models."""
|
||||
|
||||
def test_attribute_help_text(self):
|
||||
desc = 'Patient Age'
|
||||
desc = "Patient Age"
|
||||
a = Attribute.objects.create(
|
||||
name='age', description=desc, datatype=Attribute.TYPE_INT,
|
||||
name="age",
|
||||
description=desc,
|
||||
datatype=Attribute.TYPE_INT,
|
||||
)
|
||||
self.assertEqual(a.help_text, desc)
|
||||
|
||||
def test_setting_to_none_deletes_value(self):
|
||||
eav.register(Patient)
|
||||
Attribute.objects.create(name='age', datatype=Attribute.TYPE_INT)
|
||||
p = Patient.objects.create(name='Bob', eav__age=5)
|
||||
Attribute.objects.create(name="age", datatype=Attribute.TYPE_INT)
|
||||
p = Patient.objects.create(name="Bob", eav__age=5)
|
||||
self.assertEqual(Value.objects.count(), 1)
|
||||
p.eav.age = None
|
||||
p.save()
|
||||
self.assertEqual(Value.objects.count(), 0)
|
||||
|
||||
def test_string_enum_value_assignment(self):
|
||||
yes = EnumValue.objects.create(value='yes')
|
||||
no = EnumValue.objects.create(value='no')
|
||||
ynu = EnumGroup.objects.create(name='Yes / No / Unknown')
|
||||
yes = EnumValue.objects.create(value="yes")
|
||||
no = EnumValue.objects.create(value="no")
|
||||
ynu = EnumGroup.objects.create(name="Yes / No / Unknown")
|
||||
ynu.values.add(yes)
|
||||
ynu.values.add(no)
|
||||
Attribute.objects.create(
|
||||
name='is_patient', datatype=Attribute.TYPE_ENUM, enum_group=ynu,
|
||||
name="is_patient",
|
||||
datatype=Attribute.TYPE_ENUM,
|
||||
enum_group=ynu,
|
||||
)
|
||||
eav.register(Patient)
|
||||
p = Patient.objects.create(name='Joe')
|
||||
p.eav.is_patient = 'yes'
|
||||
p = Patient.objects.create(name="Joe")
|
||||
p.eav.is_patient = "yes"
|
||||
p.save()
|
||||
p = Patient.objects.get(name='Joe') # get from DB again
|
||||
p = Patient.objects.get(name="Joe") # get from DB again
|
||||
self.assertEqual(p.eav.is_patient, yes)
|
||||
|
|
|
|||
|
|
@ -8,24 +8,24 @@ from test_project.models import Patient
|
|||
class ModelTest(TestCase):
|
||||
def setUp(self):
|
||||
eav.register(Patient)
|
||||
Attribute.objects.create(name='age', datatype=Attribute.TYPE_INT)
|
||||
Attribute.objects.create(name='height', datatype=Attribute.TYPE_FLOAT)
|
||||
Attribute.objects.create(name='weight', datatype=Attribute.TYPE_FLOAT)
|
||||
Attribute.objects.create(name='color', datatype=Attribute.TYPE_TEXT)
|
||||
Attribute.objects.create(name="age", datatype=Attribute.TYPE_INT)
|
||||
Attribute.objects.create(name="height", datatype=Attribute.TYPE_FLOAT)
|
||||
Attribute.objects.create(name="weight", datatype=Attribute.TYPE_FLOAT)
|
||||
Attribute.objects.create(name="color", datatype=Attribute.TYPE_TEXT)
|
||||
|
||||
EnumGroup.objects.create(name='Yes / No')
|
||||
EnumValue.objects.create(value='yes')
|
||||
EnumValue.objects.create(value='no')
|
||||
EnumValue.objects.create(value='unknown')
|
||||
EnumGroup.objects.create(name="Yes / No")
|
||||
EnumValue.objects.create(value="yes")
|
||||
EnumValue.objects.create(value="no")
|
||||
EnumValue.objects.create(value="unknown")
|
||||
|
||||
def test_attr_natural_keys(self):
|
||||
attr = Attribute.objects.get(name='age')
|
||||
attr = Attribute.objects.get(name="age")
|
||||
attr_natural_key = attr.natural_key()
|
||||
attr_retrieved_model = Attribute.objects.get_by_natural_key(*attr_natural_key)
|
||||
self.assertEqual(attr_retrieved_model, attr)
|
||||
|
||||
def test_value_natural_keys(self):
|
||||
p = Patient.objects.create(name='Jon')
|
||||
p = Patient.objects.create(name="Jon")
|
||||
p.eav.age = 5
|
||||
p.save()
|
||||
|
||||
|
|
|
|||
|
|
@ -14,44 +14,44 @@ class RegistryTests(TestCase):
|
|||
|
||||
def register_encounter(self):
|
||||
class EncounterEav(EavConfig):
|
||||
manager_attr = 'eav_objects'
|
||||
eav_attr = 'eav_field'
|
||||
generic_relation_attr = 'encounter_eav_values'
|
||||
generic_relation_related_name = 'encounters'
|
||||
manager_attr = "eav_objects"
|
||||
eav_attr = "eav_field"
|
||||
generic_relation_attr = "encounter_eav_values"
|
||||
generic_relation_related_name = "encounters"
|
||||
|
||||
eav.register(Encounter, EncounterEav)
|
||||
|
||||
def test_registering_with_defaults(self):
|
||||
eav.register(Patient)
|
||||
self.assertTrue(hasattr(Patient, '_eav_config_cls'))
|
||||
self.assertEqual(Patient._eav_config_cls.manager_attr, 'objects')
|
||||
self.assertTrue(hasattr(Patient, "_eav_config_cls"))
|
||||
self.assertEqual(Patient._eav_config_cls.manager_attr, "objects")
|
||||
self.assertFalse(Patient._eav_config_cls.manager_only)
|
||||
self.assertEqual(Patient._eav_config_cls.eav_attr, 'eav')
|
||||
self.assertEqual(Patient._eav_config_cls.generic_relation_attr, 'eav_values')
|
||||
self.assertEqual(Patient._eav_config_cls.eav_attr, "eav")
|
||||
self.assertEqual(Patient._eav_config_cls.generic_relation_attr, "eav_values")
|
||||
self.assertEqual(Patient._eav_config_cls.generic_relation_related_name, None)
|
||||
eav.unregister(Patient)
|
||||
|
||||
def test_registering_overriding_defaults(self):
|
||||
eav.register(Patient)
|
||||
self.register_encounter()
|
||||
self.assertTrue(hasattr(Patient, '_eav_config_cls'))
|
||||
self.assertEqual(Patient._eav_config_cls.manager_attr, 'objects')
|
||||
self.assertEqual(Patient._eav_config_cls.eav_attr, 'eav')
|
||||
self.assertTrue(hasattr(Patient, "_eav_config_cls"))
|
||||
self.assertEqual(Patient._eav_config_cls.manager_attr, "objects")
|
||||
self.assertEqual(Patient._eav_config_cls.eav_attr, "eav")
|
||||
|
||||
self.assertTrue(hasattr(Encounter, '_eav_config_cls'))
|
||||
self.assertEqual(Encounter._eav_config_cls.manager_attr, 'eav_objects')
|
||||
self.assertEqual(Encounter._eav_config_cls.eav_attr, 'eav_field')
|
||||
self.assertTrue(hasattr(Encounter, "_eav_config_cls"))
|
||||
self.assertEqual(Encounter._eav_config_cls.manager_attr, "eav_objects")
|
||||
self.assertEqual(Encounter._eav_config_cls.eav_attr, "eav_field")
|
||||
eav.unregister(Patient)
|
||||
eav.unregister(Encounter)
|
||||
|
||||
def test_unregistering(self):
|
||||
old_mgr = Patient.objects
|
||||
eav.register(Patient)
|
||||
self.assertTrue(Patient.objects.__class__.__name__ == 'EntityManager')
|
||||
self.assertTrue(Patient.objects.__class__.__name__ == "EntityManager")
|
||||
eav.unregister(Patient)
|
||||
self.assertFalse(Patient.objects.__class__.__name__ == 'EntityManager')
|
||||
self.assertFalse(Patient.objects.__class__.__name__ == "EntityManager")
|
||||
self.assertEqual(Patient.objects, old_mgr)
|
||||
self.assertFalse(hasattr(Patient, '_eav_config_cls'))
|
||||
self.assertFalse(hasattr(Patient, "_eav_config_cls"))
|
||||
|
||||
def test_unregistering_unregistered_model_proceeds_silently(self):
|
||||
eav.unregister(Patient)
|
||||
|
|
|
|||
Loading…
Reference in a new issue