From d6f5c60e35bc4c9e6a6bfbca3c4b2cc3b3047d60 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 1 Sep 2024 21:39:54 +0000 Subject: [PATCH] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- eav/migrations/0002_add_entity_ct_field.py | 10 +- eav/migrations/0003_auto_20210404_2209.py | 28 ++-- eav/migrations/0004_alter_value_value_bool.py | 6 +- eav/migrations/0005_auto_20210510_1305.py | 30 ++-- eav/migrations/0006_add_entity_uuid.py | 10 +- eav/migrations/0007_alter_value_value_int.py | 6 +- eav/migrations/0008_use_native_slugfield.py | 10 +- eav/migrations/0009_enchance_naming.py | 128 +++++++++--------- .../0010_dynamic_pk_type_for_models.py | 18 +-- test_project/apps.py | 2 +- test_project/migrations/0001_initial.py | 80 +++++------ tests/test_data_validation.py | 123 +++++++++-------- tests/test_misc_models.py | 36 ++--- tests/test_natural_keys.py | 20 +-- tests/test_set_and_get.py | 34 ++--- 15 files changed, 279 insertions(+), 262 deletions(-) diff --git a/eav/migrations/0002_add_entity_ct_field.py b/eav/migrations/0002_add_entity_ct_field.py index 34121c8..8c5f057 100644 --- a/eav/migrations/0002_add_entity_ct_field.py +++ b/eav/migrations/0002_add_entity_ct_field.py @@ -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"), ), ] diff --git a/eav/migrations/0003_auto_20210404_2209.py b/eav/migrations/0003_auto_20210404_2209.py index e3a1591..8182881 100644 --- a/eav/migrations/0003_auto_20210404_2209.py +++ b/eav/migrations/0003_auto_20210404_2209.py @@ -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", ), ), ] diff --git a/eav/migrations/0004_alter_value_value_bool.py b/eav/migrations/0004_alter_value_value_bool.py index 4332349..06a0a86 100644 --- a/eav/migrations/0004_alter_value_value_bool.py +++ b/eav/migrations/0004_alter_value_value_bool.py @@ -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), ), ] diff --git a/eav/migrations/0005_auto_20210510_1305.py b/eav/migrations/0005_auto_20210510_1305.py index e732e03..a4ff611 100644 --- a/eav/migrations/0005_auto_20210510_1305.py +++ b/eav/migrations/0005_auto_20210510_1305.py @@ -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", ), ), ] diff --git a/eav/migrations/0006_add_entity_uuid.py b/eav/migrations/0006_add_entity_uuid.py index 541fab5..83e9f5c 100644 --- a/eav/migrations/0006_add_entity_uuid.py +++ b/eav/migrations/0006_add_entity_uuid.py @@ -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), ), ] diff --git a/eav/migrations/0007_alter_value_value_int.py b/eav/migrations/0007_alter_value_value_int.py index 94239ee..405c058 100644 --- a/eav/migrations/0007_alter_value_value_int.py +++ b/eav/migrations/0007_alter_value_value_int.py @@ -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), ), ] diff --git a/eav/migrations/0008_use_native_slugfield.py b/eav/migrations/0008_use_native_slugfield.py index fc0d60b..f3e81e2 100644 --- a/eav/migrations/0008_use_native_slugfield.py +++ b/eav/migrations/0008_use_native_slugfield.py @@ -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", ), ), ] diff --git a/eav/migrations/0009_enchance_naming.py b/eav/migrations/0009_enchance_naming.py index d8a2777..a01a1c3 100644 --- a/eav/migrations/0009_enchance_naming.py +++ b/eav/migrations/0009_enchance_naming.py @@ -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", ), ), ] diff --git a/eav/migrations/0010_dynamic_pk_type_for_models.py b/eav/migrations/0010_dynamic_pk_type_for_models.py index 28028ac..5984f88 100644 --- a/eav/migrations/0010_dynamic_pk_type_for_models.py +++ b/eav/migrations/0010_dynamic_pk_type_for_models.py @@ -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, diff --git a/test_project/apps.py b/test_project/apps.py index a43bc97..caf81c5 100644 --- a/test_project/apps.py +++ b/test_project/apps.py @@ -2,4 +2,4 @@ from django.apps import AppConfig class TestAppConfig(AppConfig): - name = 'test_project' + name = "test_project" diff --git a/test_project/migrations/0001_initial.py b/test_project/migrations/0001_initial.py index ca50039..a81045e 100644 --- a/test_project/migrations/0001_initial.py +++ b/test_project/migrations/0001_initial.py @@ -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, }, ), ] diff --git a/tests/test_data_validation.py b/tests/test_data_validation.py index 2bfe32f..8859bdc 100644 --- a/tests/test_data_validation.py +++ b/tests/test_data_validation.py @@ -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"], ) diff --git a/tests/test_misc_models.py b/tests/test_misc_models.py index da0d597..fc11da2 100644 --- a/tests/test_misc_models.py +++ b/tests/test_misc_models.py @@ -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'' == repr(enumgroup) + assert f"" == 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'' == repr(test_value) + assert f"" == 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) diff --git a/tests/test_natural_keys.py b/tests/test_natural_keys.py index a705504..79d0a7c 100644 --- a/tests/test_natural_keys.py +++ b/tests/test_natural_keys.py @@ -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() diff --git a/tests/test_set_and_get.py b/tests/test_set_and_get.py index 6e46684..5ac9db8 100644 --- a/tests/test_set_and_get.py +++ b/tests/test_set_and_get.py @@ -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)