From 5c23a2f21c284da2e45d6778745d422fc1d666e0 Mon Sep 17 00:00:00 2001 From: Tim Lorsbach Date: Fri, 6 Mar 2026 15:15:08 +0100 Subject: [PATCH] adjusted migration --- epdb/migrations/0001_initial.py | 594 ---------- ...abilitydomain_url_compound_url_and_more.py | 1020 ----------------- ...atabase_alter_apitoken_options_and_more.py | 128 --- ...abilitydomain_url_compound_url_and_more.py | 228 ---- ...er_mlrelativereasoning_options_and_more.py | 55 - .../0005_alter_group_group_member.py | 18 - ...elativereasoning_multigen_eval_and_more.py | 23 - ..._options_enviformer_app_domain_and_more.py | 53 - epdb/migrations/0008_enzymelink.py | 64 -- epdb/migrations/0009_joblog.py | 66 -- epdb/migrations/0010_license_cc_string.py | 18 - epdb/migrations/0011_auto_20251111_1413.py | 59 - ...2_node_stereo_removed_pathway_predicted.py | 22 - .../0013_setting_expansion_schema.py | 25 - ...pansion_schema_setting_expansion_scheme.py | 17 - epdb/migrations/0015_user_is_reviewer.py | 17 - ...remove_enviformer_model_status_and_more.py | 179 --- epdb/migrations/0017_additionalinformation.py | 93 -- epdb/migrations/0018_auto_20260220_1203.py | 132 --- ...cenario_additional_information_and_more.py | 739 +++++++++++- 20 files changed, 730 insertions(+), 2820 deletions(-) delete mode 100644 epdb/migrations/0001_initial.py delete mode 100644 epdb/migrations/0001_squashed_0003_applicabilitydomain_url_compound_url_and_more.py delete mode 100644 epdb/migrations/0002_externaldatabase_alter_apitoken_options_and_more.py delete mode 100644 epdb/migrations/0003_applicabilitydomain_url_compound_url_and_more.py delete mode 100644 epdb/migrations/0004_alter_mlrelativereasoning_options_and_more.py delete mode 100644 epdb/migrations/0005_alter_group_group_member.py delete mode 100644 epdb/migrations/0006_mlrelativereasoning_multigen_eval_and_more.py delete mode 100644 epdb/migrations/0007_alter_enviformer_options_enviformer_app_domain_and_more.py delete mode 100644 epdb/migrations/0008_enzymelink.py delete mode 100644 epdb/migrations/0009_joblog.py delete mode 100644 epdb/migrations/0010_license_cc_string.py delete mode 100644 epdb/migrations/0011_auto_20251111_1413.py delete mode 100644 epdb/migrations/0012_node_stereo_removed_pathway_predicted.py delete mode 100644 epdb/migrations/0013_setting_expansion_schema.py delete mode 100644 epdb/migrations/0014_rename_expansion_schema_setting_expansion_scheme.py delete mode 100644 epdb/migrations/0015_user_is_reviewer.py delete mode 100644 epdb/migrations/0016_remove_enviformer_model_status_and_more.py delete mode 100644 epdb/migrations/0017_additionalinformation.py delete mode 100644 epdb/migrations/0018_auto_20260220_1203.py diff --git a/epdb/migrations/0001_initial.py b/epdb/migrations/0001_initial.py deleted file mode 100644 index e6cc4f69..00000000 --- a/epdb/migrations/0001_initial.py +++ /dev/null @@ -1,594 +0,0 @@ -# Generated by Django 5.2.1 on 2025-07-22 20:58 - -import datetime -import django.contrib.auth.models -import django.contrib.auth.validators -import django.contrib.postgres.fields -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields -import uuid -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - ('contenttypes', '0002_remove_content_type_name'), - ] - - operations = [ - migrations.CreateModel( - name='Compound', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), - ], - ), - migrations.CreateModel( - name='EPModel', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('polymorphic_ctype', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_%(app_label)s.%(class)s_set+', to='contenttypes.contenttype')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - ), - migrations.CreateModel( - name='Permission', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('permission', models.CharField(choices=[('read', 'Read'), ('write', 'Write'), ('all', 'All')], max_length=32)), - ], - ), - migrations.CreateModel( - name='License', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('link', models.URLField(verbose_name='link')), - ('image_link', models.URLField(verbose_name='Image link')), - ], - ), - migrations.CreateModel( - name='Rule', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - ), - migrations.CreateModel( - name='User', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), - ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), - ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), - ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), - ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), - ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('email', models.EmailField(max_length=254, unique=True)), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), - ], - options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'abstract': False, - }, - managers=[ - ('objects', django.contrib.auth.models.UserManager()), - ], - ), - migrations.CreateModel( - name='APIToken', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('hashed_key', models.CharField(max_length=128, unique=True)), - ('created', models.DateTimeField(auto_now_add=True)), - ('expires_at', models.DateTimeField(blank=True, default=datetime.datetime(2025, 10, 20, 20, 58, 48, 351675, tzinfo=datetime.timezone.utc), null=True)), - ('name', models.CharField(blank=True, help_text='Optional name for the token', max_length=100)), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - migrations.CreateModel( - name='CompoundStructure', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), - ('smiles', models.TextField(verbose_name='SMILES')), - ('canonical_smiles', models.TextField(verbose_name='Canonical SMILES')), - ('inchikey', models.TextField(max_length=27, verbose_name='InChIKey')), - ('normalized_structure', models.BooleanField(default=False)), - ('compound', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.compound')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='compound', - name='default_structure', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='compound_default_structure', to='epdb.compoundstructure', verbose_name='Default Structure'), - ), - migrations.CreateModel( - name='Edge', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), - ('polymorphic_ctype', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_%(app_label)s.%(class)s_set+', to='contenttypes.contenttype')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - ), - migrations.CreateModel( - name='EnviFormer', - fields=[ - ('epmodel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.epmodel')), - ('threshold', models.FloatField(default=0.5)), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.epmodel',), - ), - migrations.CreateModel( - name='PluginModel', - fields=[ - ('epmodel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.epmodel')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.epmodel',), - ), - migrations.CreateModel( - name='RuleBaseRelativeReasoning', - fields=[ - ('epmodel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.epmodel')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.epmodel',), - ), - migrations.CreateModel( - name='Group', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(verbose_name='Group name')), - ('public', models.BooleanField(default=False, verbose_name='Public Group')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('group_member', models.ManyToManyField(related_name='groups_in_group', to='epdb.group', verbose_name='Group member')), - ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Group Owner')), - ('user_member', models.ManyToManyField(related_name='users_in_group', to=settings.AUTH_USER_MODEL, verbose_name='User members')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='user', - name='default_group', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='default_group', to='epdb.group', verbose_name='Default Group'), - ), - migrations.CreateModel( - name='Node', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), - ('depth', models.IntegerField(verbose_name='Node depth')), - ('default_node_label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='default_node_structure', to='epdb.compoundstructure', verbose_name='Default Node Label')), - ('node_labels', models.ManyToManyField(related_name='node_structures', to='epdb.compoundstructure', verbose_name='All Node Labels')), - ('out_edges', models.ManyToManyField(to='epdb.edge', verbose_name='Outgoing Edges')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='edge', - name='end_nodes', - field=models.ManyToManyField(related_name='edge_products', to='epdb.node', verbose_name='End Nodes'), - ), - migrations.AddField( - model_name='edge', - name='start_nodes', - field=models.ManyToManyField(related_name='edge_educts', to='epdb.node', verbose_name='Start Nodes'), - ), - migrations.CreateModel( - name='Package', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('reviewed', models.BooleanField(default=False, verbose_name='Reviewstatus')), - ('license', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.license', verbose_name='License')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='epmodel', - name='package', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', verbose_name='Package'), - ), - migrations.AddField( - model_name='compound', - name='package', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', verbose_name='Package'), - ), - migrations.AddField( - model_name='user', - name='default_package', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.package', verbose_name='Default Package'), - ), - migrations.CreateModel( - name='SequentialRule', - fields=[ - ('rule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.rule')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.rule',), - ), - migrations.CreateModel( - name='SimpleRule', - fields=[ - ('rule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.rule')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.rule',), - ), - migrations.AddField( - model_name='rule', - name='package', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', verbose_name='Package'), - ), - migrations.AddField( - model_name='rule', - name='polymorphic_ctype', - field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_%(app_label)s.%(class)s_set+', to='contenttypes.contenttype'), - ), - migrations.CreateModel( - name='Pathway', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), - ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', verbose_name='Package')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='node', - name='pathway', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.pathway', verbose_name='belongs to'), - ), - migrations.AddField( - model_name='edge', - name='pathway', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.pathway', verbose_name='belongs to'), - ), - migrations.CreateModel( - name='Reaction', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), - ('multi_step', models.BooleanField(verbose_name='Multistep Reaction')), - ('medline_references', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), null=True, size=None, verbose_name='Medline References')), - ('educts', models.ManyToManyField(related_name='reaction_educts', to='epdb.compoundstructure', verbose_name='Educts')), - ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', verbose_name='Package')), - ('products', models.ManyToManyField(related_name='reaction_products', to='epdb.compoundstructure', verbose_name='Products')), - ('rules', models.ManyToManyField(related_name='reaction_rule', to='epdb.rule', verbose_name='Rule')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='edge', - name='edge_label', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.reaction', verbose_name='Edge label'), - ), - migrations.CreateModel( - name='Scenario', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('scenario_date', models.CharField(default='No date', max_length=256)), - ('scenario_type', models.CharField(default='Not specified', max_length=256)), - ('additional_information', models.JSONField(verbose_name='Additional Information')), - ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', verbose_name='Package')), - ('parent', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='epdb.scenario')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='rule', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='reaction', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='pathway', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='node', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='edge', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='compoundstructure', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='compound', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.CreateModel( - name='Setting', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('public', models.BooleanField(default=False)), - ('global_default', models.BooleanField(default=False)), - ('max_depth', models.IntegerField(default=5, verbose_name='Setting Max Depth')), - ('max_nodes', models.IntegerField(default=30, verbose_name='Setting Max Number of Nodes')), - ('model_threshold', models.FloatField(blank=True, default=0.25, null=True, verbose_name='Setting Model Threshold')), - ('model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.epmodel', verbose_name='Setting EPModel')), - ('rule_packages', models.ManyToManyField(blank=True, related_name='setting_rule_packages', to='epdb.package', verbose_name='Setting Rule Packages')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='pathway', - name='setting', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='epdb.setting', verbose_name='Setting'), - ), - migrations.AddField( - model_name='user', - name='default_setting', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.setting', verbose_name='The users default settings'), - ), - migrations.CreateModel( - name='MLRelativeReasoning', - fields=[ - ('epmodel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.epmodel')), - ('threshold', models.FloatField(default=0.5)), - ('model_status', models.CharField(choices=[('INITIAL', 'Initial'), ('INITIALIZING', 'Model is initializing.'), ('BUILDING', 'Model is building.'), ('BUILT_NOT_EVALUATED', 'Model is built and can be used for predictions, Model is not evaluated yet.'), ('EVALUATING', 'Model is evaluating'), ('FINISHED', 'Model has finished building and evaluation.'), ('ERROR', 'Model has failed.')], default='INITIAL')), - ('eval_results', models.JSONField(blank=True, default=dict, null=True)), - ('data_packages', models.ManyToManyField(related_name='data_packages', to='epdb.package', verbose_name='Data Packages')), - ('eval_packages', models.ManyToManyField(related_name='eval_packages', to='epdb.package', verbose_name='Evaluation Packages')), - ('rule_packages', models.ManyToManyField(related_name='rule_packages', to='epdb.package', verbose_name='Rule Packages')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.epmodel',), - ), - migrations.CreateModel( - name='ApplicabilityDomain', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('num_neighbours', models.FloatField(default=5)), - ('reliability_threshold', models.FloatField(default=0.5)), - ('local_compatibilty_threshold', models.FloatField(default=0.5)), - ('model', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.mlrelativereasoning')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='SimpleAmbitRule', - fields=[ - ('simplerule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.simplerule')), - ('smirks', models.TextField(verbose_name='SMIRKS')), - ('reactant_filter_smarts', models.TextField(null=True, verbose_name='Reactant Filter SMARTS')), - ('product_filter_smarts', models.TextField(null=True, verbose_name='Product Filter SMARTS')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.simplerule',), - ), - migrations.CreateModel( - name='SimpleRDKitRule', - fields=[ - ('simplerule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.simplerule')), - ('reaction_smarts', models.TextField(verbose_name='SMIRKS')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.simplerule',), - ), - migrations.CreateModel( - name='SequentialRuleOrdering', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('order_index', models.IntegerField()), - ('sequential_rule', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.sequentialrule')), - ('simple_rule', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.simplerule')), - ], - ), - migrations.AddField( - model_name='sequentialrule', - name='simple_rules', - field=models.ManyToManyField(through='epdb.SequentialRuleOrdering', to='epdb.simplerule', verbose_name='Simple rules'), - ), - migrations.CreateModel( - name='ParallelRule', - fields=[ - ('rule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.rule')), - ('simple_rules', models.ManyToManyField(to='epdb.simplerule', verbose_name='Simple rules')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.rule',), - ), - migrations.AlterUniqueTogether( - name='compound', - unique_together={('uuid', 'package')}, - ), - migrations.CreateModel( - name='GroupPackagePermission', - fields=[ - ('permission_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, to='epdb.permission')), - ('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='UUID of this object')), - ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.group', verbose_name='Permission to')), - ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', verbose_name='Permission on')), - ], - options={ - 'unique_together': {('package', 'group')}, - }, - bases=('epdb.permission',), - ), - migrations.CreateModel( - name='UserPackagePermission', - fields=[ - ('permission_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, to='epdb.permission')), - ('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='UUID of this object')), - ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', verbose_name='Permission on')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Permission to')), - ], - options={ - 'unique_together': {('package', 'user')}, - }, - bases=('epdb.permission',), - ), - migrations.CreateModel( - name='UserSettingPermission', - fields=[ - ('permission_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, to='epdb.permission')), - ('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='UUID of this object')), - ('setting', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.setting', verbose_name='Permission on')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Permission to')), - ], - options={ - 'unique_together': {('setting', 'user')}, - }, - bases=('epdb.permission',), - ), - ] diff --git a/epdb/migrations/0001_squashed_0003_applicabilitydomain_url_compound_url_and_more.py b/epdb/migrations/0001_squashed_0003_applicabilitydomain_url_compound_url_and_more.py deleted file mode 100644 index a6eb8f50..00000000 --- a/epdb/migrations/0001_squashed_0003_applicabilitydomain_url_compound_url_and_more.py +++ /dev/null @@ -1,1020 +0,0 @@ -# Generated by Django 5.2.1 on 2025-08-26 18:11 - -import django.contrib.auth.models -import django.contrib.auth.validators -import django.contrib.postgres.fields -import django.db.migrations.operations.special -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields -import uuid -from django.conf import settings -from django.db import migrations, models - - -def populate_url(apps, schema_editor): - MODELS = [ - 'User', - 'Group', - 'Package', - 'Compound', - 'CompoundStructure', - 'Pathway', - 'Edge', - 'Node', - 'Reaction', - 'SimpleAmbitRule', - 'SimpleRDKitRule', - 'ParallelRule', - 'SequentialRule', - 'Scenario', - 'Setting', - 'MLRelativeReasoning', - 'EnviFormer', - 'ApplicabilityDomain', - ] - for model in MODELS: - obj_cls = apps.get_model("epdb", model) - for obj in obj_cls.objects.all(): - obj.url = assemble_url(obj) - if obj.url is None: - raise ValueError(f"Could not assemble url for {obj}") - obj.save() - - -def assemble_url(obj): - from django.conf import settings as s - match obj.__class__.__name__: - case 'User': - return '{}/user/{}'.format(s.SERVER_URL, obj.uuid) - case 'Group': - return '{}/group/{}'.format(s.SERVER_URL, obj.uuid) - case 'Package': - return '{}/package/{}'.format(s.SERVER_URL, obj.uuid) - case 'Compound': - return '{}/compound/{}'.format(obj.package.url, obj.uuid) - case 'CompoundStructure': - return '{}/structure/{}'.format(obj.compound.url, obj.uuid) - case 'SimpleAmbitRule': - return '{}/simple-ambit-rule/{}'.format(obj.package.url, obj.uuid) - case 'SimpleRDKitRule': - return '{}/simple-rdkit-rule/{}'.format(obj.package.url, obj.uuid) - case 'ParallelRule': - return '{}/parallel-rule/{}'.format(obj.package.url, obj.uuid) - case 'SequentialRule': - return '{}/sequential-rule/{}'.format(obj.compound.url, obj.uuid) - case 'Reaction': - return '{}/reaction/{}'.format(obj.package.url, obj.uuid) - case 'Pathway': - return '{}/pathway/{}'.format(obj.package.url, obj.uuid) - case 'Node': - return '{}/node/{}'.format(obj.pathway.url, obj.uuid) - case 'Edge': - return '{}/edge/{}'.format(obj.pathway.url, obj.uuid) - case 'MLRelativeReasoning': - return '{}/model/{}'.format(obj.package.url, obj.uuid) - case 'EnviFormer': - return '{}/model/{}'.format(obj.package.url, obj.uuid) - case 'ApplicabilityDomain': - return '{}/model/{}/applicability-domain/{}'.format(obj.model.package.url, obj.model.uuid, obj.uuid) - case 'Scenario': - return '{}/scenario/{}'.format(obj.package.url, obj.uuid) - case 'Setting': - return '{}/setting/{}'.format(s.SERVER_URL, obj.uuid) - case _: - raise ValueError(f"Unknown model {obj.__class__.__name__}") - - -class Migration(migrations.Migration): - replaces = [('epdb', '0001_initial'), ('epdb', '0002_externaldatabase_alter_apitoken_options_and_more'), - ('epdb', '0003_applicabilitydomain_url_compound_url_and_more')] - - initial = True - - dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - ('contenttypes', '0002_remove_content_type_name'), - ] - - operations = [ - migrations.CreateModel( - name='Compound', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', - django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, - verbose_name='Aliases')), - ], - ), - migrations.CreateModel( - name='EPModel', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('polymorphic_ctype', - models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='polymorphic_%(app_label)s.%(class)s_set+', - to='contenttypes.contenttype')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - ), - migrations.CreateModel( - name='Permission', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('permission', - models.CharField(choices=[('read', 'Read'), ('write', 'Write'), ('all', 'All')], max_length=32)), - ], - ), - migrations.CreateModel( - name='License', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('link', models.URLField(verbose_name='link')), - ('image_link', models.URLField(verbose_name='Image link')), - ], - ), - migrations.CreateModel( - name='Rule', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', - django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, - verbose_name='Aliases')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - ), - migrations.CreateModel( - name='User', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, - help_text='Designates that this user has all permissions without explicitly assigning them.', - verbose_name='superuser status')), - ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, - help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', - max_length=150, unique=True, - validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], - verbose_name='username')), - ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), - ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), - ('is_staff', models.BooleanField(default=False, - help_text='Designates whether the user can log into this admin site.', - verbose_name='staff status')), - ('is_active', models.BooleanField(default=True, - help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', - verbose_name='active')), - ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('email', models.EmailField(max_length=254, unique=True)), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('groups', models.ManyToManyField(blank=True, - help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', - related_name='user_set', related_query_name='user', to='auth.group', - verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', - related_name='user_set', related_query_name='user', - to='auth.permission', verbose_name='user permissions')), - ], - options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'abstract': False, - }, - managers=[ - ('objects', django.contrib.auth.models.UserManager()), - ], - ), - migrations.CreateModel( - name='CompoundStructure', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', - django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, - verbose_name='Aliases')), - ('smiles', models.TextField(verbose_name='SMILES')), - ('canonical_smiles', models.TextField(verbose_name='Canonical SMILES')), - ('inchikey', models.TextField(max_length=27, verbose_name='InChIKey')), - ('normalized_structure', models.BooleanField(default=False)), - ('compound', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.compound')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='compound', - name='default_structure', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='compound_default_structure', to='epdb.compoundstructure', - verbose_name='Default Structure'), - ), - migrations.CreateModel( - name='Edge', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', - django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, - verbose_name='Aliases')), - ('polymorphic_ctype', - models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='polymorphic_%(app_label)s.%(class)s_set+', - to='contenttypes.contenttype')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - ), - migrations.CreateModel( - name='EnviFormer', - fields=[ - ('epmodel_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - primary_key=True, serialize=False, to='epdb.epmodel')), - ('threshold', models.FloatField(default=0.5)), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.epmodel',), - ), - migrations.CreateModel( - name='PluginModel', - fields=[ - ('epmodel_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - primary_key=True, serialize=False, to='epdb.epmodel')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.epmodel',), - ), - migrations.CreateModel( - name='RuleBaseRelativeReasoning', - fields=[ - ('epmodel_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - primary_key=True, serialize=False, to='epdb.epmodel')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.epmodel',), - ), - migrations.CreateModel( - name='Group', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(verbose_name='Group name')), - ('public', models.BooleanField(default=False, verbose_name='Public Group')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('group_member', - models.ManyToManyField(related_name='groups_in_group', to='epdb.group', verbose_name='Group member')), - ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, - verbose_name='Group Owner')), - ('user_member', models.ManyToManyField(related_name='users_in_group', to=settings.AUTH_USER_MODEL, - verbose_name='User members')), - ('url', models.TextField(null=True, verbose_name='URL')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='user', - name='default_group', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, - related_name='default_group', to='epdb.group', verbose_name='Default Group'), - ), - migrations.CreateModel( - name='Node', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', - django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, - verbose_name='Aliases')), - ('depth', models.IntegerField(verbose_name='Node depth')), - ('default_node_label', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='default_node_structure', - to='epdb.compoundstructure', verbose_name='Default Node Label')), - ('node_labels', models.ManyToManyField(related_name='node_structures', to='epdb.compoundstructure', - verbose_name='All Node Labels')), - ('out_edges', models.ManyToManyField(to='epdb.edge', verbose_name='Outgoing Edges')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='edge', - name='end_nodes', - field=models.ManyToManyField(related_name='edge_products', to='epdb.node', verbose_name='End Nodes'), - ), - migrations.AddField( - model_name='edge', - name='start_nodes', - field=models.ManyToManyField(related_name='edge_educts', to='epdb.node', verbose_name='Start Nodes'), - ), - migrations.CreateModel( - name='Package', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('reviewed', models.BooleanField(default=False, verbose_name='Reviewstatus')), - ('license', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, - to='epdb.license', verbose_name='License')), - ('url', models.TextField(null=True, verbose_name='URL')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='epmodel', - name='package', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', - verbose_name='Package'), - ), - migrations.AddField( - model_name='compound', - name='package', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', - verbose_name='Package'), - ), - migrations.AddField( - model_name='user', - name='default_package', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.package', - verbose_name='Default Package'), - ), - migrations.CreateModel( - name='SequentialRule', - fields=[ - ('rule_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - primary_key=True, serialize=False, to='epdb.rule')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.rule',), - ), - migrations.CreateModel( - name='SimpleRule', - fields=[ - ('rule_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - primary_key=True, serialize=False, to='epdb.rule')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.rule',), - ), - migrations.AddField( - model_name='rule', - name='package', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', - verbose_name='Package'), - ), - migrations.AddField( - model_name='rule', - name='polymorphic_ctype', - field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, - related_name='polymorphic_%(app_label)s.%(class)s_set+', - to='contenttypes.contenttype'), - ), - migrations.CreateModel( - name='Pathway', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', - django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, - verbose_name='Aliases')), - ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', - verbose_name='Package')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='node', - name='pathway', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.pathway', - verbose_name='belongs to'), - ), - migrations.AddField( - model_name='edge', - name='pathway', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.pathway', - verbose_name='belongs to'), - ), - migrations.CreateModel( - name='Reaction', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('aliases', - django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, - verbose_name='Aliases')), - ('multi_step', models.BooleanField(verbose_name='Multistep Reaction')), - ('medline_references', - django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), null=True, size=None, - verbose_name='Medline References')), - ('educts', models.ManyToManyField(related_name='reaction_educts', to='epdb.compoundstructure', - verbose_name='Educts')), - ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', - verbose_name='Package')), - ('products', models.ManyToManyField(related_name='reaction_products', to='epdb.compoundstructure', - verbose_name='Products')), - ('rules', models.ManyToManyField(related_name='reaction_rule', to='epdb.rule', verbose_name='Rule')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='edge', - name='edge_label', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.reaction', - verbose_name='Edge label'), - ), - migrations.CreateModel( - name='Scenario', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('scenario_date', models.CharField(default='No date', max_length=256)), - ('scenario_type', models.CharField(default='Not specified', max_length=256)), - ('additional_information', models.JSONField(verbose_name='Additional Information')), - ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', - verbose_name='Package')), - ('parent', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, - to='epdb.scenario')), - ('url', models.TextField(null=True, verbose_name='URL')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='rule', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='reaction', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='pathway', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='node', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='edge', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='compoundstructure', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.AddField( - model_name='compound', - name='scenarios', - field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), - ), - migrations.CreateModel( - name='Setting', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('public', models.BooleanField(default=False)), - ('global_default', models.BooleanField(default=False)), - ('max_depth', models.IntegerField(default=5, verbose_name='Setting Max Depth')), - ('max_nodes', models.IntegerField(default=30, verbose_name='Setting Max Number of Nodes')), - ('model_threshold', - models.FloatField(blank=True, default=0.25, null=True, verbose_name='Setting Model Threshold')), - ('model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, - to='epdb.epmodel', verbose_name='Setting EPModel')), - ('rule_packages', - models.ManyToManyField(blank=True, related_name='setting_rule_packages', to='epdb.package', - verbose_name='Setting Rule Packages')), - ('url', models.TextField(null=True, verbose_name='URL')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='pathway', - name='setting', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, - to='epdb.setting', verbose_name='Setting'), - ), - migrations.AddField( - model_name='user', - name='default_setting', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.setting', - verbose_name='The users default settings'), - ), - migrations.CreateModel( - name='MLRelativeReasoning', - fields=[ - ('epmodel_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - primary_key=True, serialize=False, to='epdb.epmodel')), - ('threshold', models.FloatField(default=0.5)), - ('model_status', models.CharField( - choices=[('INITIAL', 'Initial'), ('INITIALIZING', 'Model is initializing.'), - ('BUILDING', 'Model is building.'), ('BUILT_NOT_EVALUATED', - 'Model is built and can be used for predictions, Model is not evaluated yet.'), - ('EVALUATING', 'Model is evaluating'), - ('FINISHED', 'Model has finished building and evaluation.'), - ('ERROR', 'Model has failed.')], default='INITIAL')), - ('eval_results', models.JSONField(blank=True, default=dict, null=True)), - ('data_packages', - models.ManyToManyField(related_name='data_packages', to='epdb.package', verbose_name='Data Packages')), - ('eval_packages', models.ManyToManyField(related_name='eval_packages', to='epdb.package', - verbose_name='Evaluation Packages')), - ('rule_packages', - models.ManyToManyField(related_name='rule_packages', to='epdb.package', verbose_name='Rule Packages')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.epmodel',), - ), - migrations.CreateModel( - name='SimpleAmbitRule', - fields=[ - ('simplerule_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - primary_key=True, serialize=False, to='epdb.simplerule')), - ('smirks', models.TextField(verbose_name='SMIRKS')), - ('reactant_filter_smarts', models.TextField(null=True, verbose_name='Reactant Filter SMARTS')), - ('product_filter_smarts', models.TextField(null=True, verbose_name='Product Filter SMARTS')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.simplerule',), - ), - migrations.CreateModel( - name='SimpleRDKitRule', - fields=[ - ('simplerule_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - primary_key=True, serialize=False, to='epdb.simplerule')), - ('reaction_smarts', models.TextField(verbose_name='SMIRKS')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.simplerule',), - ), - migrations.CreateModel( - name='SequentialRuleOrdering', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('order_index', models.IntegerField()), - ('sequential_rule', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.sequentialrule')), - ('simple_rule', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.simplerule')), - ], - ), - migrations.AddField( - model_name='sequentialrule', - name='simple_rules', - field=models.ManyToManyField(through='epdb.SequentialRuleOrdering', to='epdb.simplerule', - verbose_name='Simple rules'), - ), - migrations.CreateModel( - name='ParallelRule', - fields=[ - ('rule_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - primary_key=True, serialize=False, to='epdb.rule')), - ('simple_rules', models.ManyToManyField(to='epdb.simplerule', verbose_name='Simple rules')), - ], - options={ - 'abstract': False, - 'base_manager_name': 'objects', - }, - bases=('epdb.rule',), - ), - migrations.AlterUniqueTogether( - name='compound', - unique_together={('uuid', 'package')}, - ), - migrations.CreateModel( - name='GroupPackagePermission', - fields=[ - ('permission_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - to='epdb.permission')), - ('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, - verbose_name='UUID of this object')), - ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.group', - verbose_name='Permission to')), - ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', - verbose_name='Permission on')), - ], - options={ - 'unique_together': {('package', 'group')}, - }, - bases=('epdb.permission',), - ), - migrations.CreateModel( - name='UserPackagePermission', - fields=[ - ('permission_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - to='epdb.permission')), - ('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, - verbose_name='UUID of this object')), - ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.package', - verbose_name='Permission on')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, - verbose_name='Permission to')), - ], - options={ - 'unique_together': {('package', 'user')}, - }, - bases=('epdb.permission',), - ), - migrations.CreateModel( - name='UserSettingPermission', - fields=[ - ('permission_ptr', - models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, - to='epdb.permission')), - ('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, - verbose_name='UUID of this object')), - ('setting', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.setting', - verbose_name='Permission on')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, - verbose_name='Permission to')), - ], - options={ - 'unique_together': {('setting', 'user')}, - }, - bases=('epdb.permission',), - ), - migrations.CreateModel( - name='ExternalDatabase', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('name', models.CharField(max_length=100, unique=True, verbose_name='Database Name')), - ('full_name', models.CharField(blank=True, max_length=255, verbose_name='Full Database Name')), - ('description', models.TextField(blank=True, verbose_name='Description')), - ('base_url', models.URLField(blank=True, null=True, verbose_name='Base URL')), - ('url_pattern', models.CharField(blank=True, - help_text="URL pattern with {id} placeholder, e.g., 'https://pubchem.ncbi.nlm.nih.gov/compound/{id}'", - max_length=500, verbose_name='URL Pattern')), - ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), - ], - options={ - 'verbose_name': 'External Database', - 'verbose_name_plural': 'External Databases', - 'db_table': 'epdb_external_database', - 'ordering': ['name'], - }, - ), - migrations.AlterModelOptions( - name='edge', - options={}, - ), - migrations.RemoveField( - model_name='edge', - name='polymorphic_ctype', - ), - migrations.CreateModel( - name='ApplicabilityDomain', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), - ('name', models.TextField(default='no name', verbose_name='Name')), - ('description', models.TextField(default='no description', verbose_name='Descriptions')), - ('kv', models.JSONField(blank=True, default=dict, null=True)), - ('num_neighbours', models.IntegerField(default=5)), - ('reliability_threshold', models.FloatField(default=0.5)), - ('local_compatibilty_threshold', models.FloatField(default=0.5)), - ('model', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.mlrelativereasoning')), - ('functional_groups', models.JSONField(blank=True, default=dict, null=True)), - ('url', models.TextField(null=True, verbose_name='URL')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AddField( - model_name='mlrelativereasoning', - name='app_domain', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, - to='epdb.applicabilitydomain'), - ), - migrations.CreateModel( - name='APIToken', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('hashed_key', - models.CharField(help_text='SHA-256 hash of the token key', max_length=128, unique=True)), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('expires_at', - models.DateTimeField(blank=True, help_text='Token expiration time (null for no expiration)', - null=True)), - ('name', models.CharField(help_text='Descriptive name for this token', max_length=100)), - ('user', - models.ForeignKey(help_text='User who owns this token', on_delete=django.db.models.deletion.CASCADE, - related_name='api_tokens', to=settings.AUTH_USER_MODEL)), - ('is_active', models.BooleanField(default=True, help_text='Whether this token is active')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ], - options={ - 'ordering': ['-created'], - 'verbose_name': 'API Token', - 'verbose_name_plural': 'API Tokens', - 'db_table': 'epdb_api_token', - }, - ), - migrations.CreateModel( - name='ExternalIdentifier', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, - verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, - verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('object_id', models.IntegerField()), - ('identifier_value', models.CharField(max_length=255, verbose_name='Identifier Value')), - ('url', models.URLField(blank=True, null=True, verbose_name='Direct URL')), - ('is_primary', - models.BooleanField(default=False, help_text='Mark this as the primary identifier for this database', - verbose_name='Is Primary')), - ('content_type', - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), - ('database', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.externaldatabase', - verbose_name='External Database')), - ], - options={ - 'verbose_name': 'External Identifier', - 'verbose_name_plural': 'External Identifiers', - 'db_table': 'epdb_external_identifier', - 'indexes': [models.Index(fields=['content_type', 'object_id'], name='epdb_extern_content_b76813_idx'), - models.Index(fields=['database', 'identifier_value'], - name='epdb_extern_databas_486422_idx')], - 'unique_together': {('content_type', 'object_id', 'database', 'identifier_value')}, - }, - ), - migrations.AddField( - model_name='compound', - name='url', - field=models.TextField(null=True, verbose_name='URL'), - ), - migrations.AddField( - model_name='compoundstructure', - name='url', - field=models.TextField(null=True, verbose_name='URL'), - ), - migrations.AddField( - model_name='edge', - name='url', - field=models.TextField(null=True, verbose_name='URL'), - ), - migrations.AddField( - model_name='epmodel', - name='url', - field=models.TextField(null=True, verbose_name='URL'), - ), - migrations.AddField( - model_name='node', - name='url', - field=models.TextField(null=True, verbose_name='URL'), - ), - migrations.AddField( - model_name='pathway', - name='url', - field=models.TextField(null=True, verbose_name='URL'), - ), - migrations.AddField( - model_name='reaction', - name='url', - field=models.TextField(null=True, verbose_name='URL'), - ), - migrations.AddField( - model_name='rule', - name='url', - field=models.TextField(null=True, verbose_name='URL'), - ), - migrations.AddField( - model_name='user', - name='url', - field=models.TextField(null=True, verbose_name='URL'), - ), - migrations.RunPython( - code=populate_url, - reverse_code=django.db.migrations.operations.special.RunPython.noop, - ), - migrations.AlterField( - model_name='applicabilitydomain', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='compound', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='compoundstructure', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='edge', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='epmodel', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='group', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='node', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='package', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='pathway', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='reaction', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='rule', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='scenario', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='setting', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='user', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - ] diff --git a/epdb/migrations/0002_externaldatabase_alter_apitoken_options_and_more.py b/epdb/migrations/0002_externaldatabase_alter_apitoken_options_and_more.py deleted file mode 100644 index 44215433..00000000 --- a/epdb/migrations/0002_externaldatabase_alter_apitoken_options_and_more.py +++ /dev/null @@ -1,128 +0,0 @@ -# Generated by Django 5.2.1 on 2025-08-25 18:07 - -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields -import uuid -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('epdb', '0001_initial'), - ] - - operations = [ - migrations.CreateModel( - name='ExternalDatabase', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('name', models.CharField(max_length=100, unique=True, verbose_name='Database Name')), - ('full_name', models.CharField(blank=True, max_length=255, verbose_name='Full Database Name')), - ('description', models.TextField(blank=True, verbose_name='Description')), - ('base_url', models.URLField(blank=True, null=True, verbose_name='Base URL')), - ('url_pattern', models.CharField(blank=True, help_text="URL pattern with {id} placeholder, e.g., 'https://pubchem.ncbi.nlm.nih.gov/compound/{id}'", max_length=500, verbose_name='URL Pattern')), - ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), - ], - options={ - 'verbose_name': 'External Database', - 'verbose_name_plural': 'External Databases', - 'db_table': 'epdb_external_database', - 'ordering': ['name'], - }, - ), - migrations.AlterModelOptions( - name='apitoken', - options={'ordering': ['-created'], 'verbose_name': 'API Token', 'verbose_name_plural': 'API Tokens'}, - ), - migrations.AlterModelOptions( - name='edge', - options={}, - ), - migrations.RemoveField( - model_name='edge', - name='polymorphic_ctype', - ), - migrations.AddField( - model_name='apitoken', - name='is_active', - field=models.BooleanField(default=True, help_text='Whether this token is active'), - ), - migrations.AddField( - model_name='apitoken', - name='modified', - field=model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified'), - ), - migrations.AddField( - model_name='applicabilitydomain', - name='functional_groups', - field=models.JSONField(blank=True, default=dict, null=True), - ), - migrations.AddField( - model_name='mlrelativereasoning', - name='app_domain', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.applicabilitydomain'), - ), - migrations.AlterField( - model_name='apitoken', - name='created', - field=model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created'), - ), - migrations.AlterField( - model_name='apitoken', - name='expires_at', - field=models.DateTimeField(blank=True, help_text='Token expiration time (null for no expiration)', null=True), - ), - migrations.AlterField( - model_name='apitoken', - name='hashed_key', - field=models.CharField(help_text='SHA-256 hash of the token key', max_length=128, unique=True), - ), - migrations.AlterField( - model_name='apitoken', - name='name', - field=models.CharField(help_text='Descriptive name for this token', max_length=100), - ), - migrations.AlterField( - model_name='apitoken', - name='user', - field=models.ForeignKey(help_text='User who owns this token', on_delete=django.db.models.deletion.CASCADE, related_name='api_tokens', to=settings.AUTH_USER_MODEL), - ), - migrations.AlterField( - model_name='applicabilitydomain', - name='num_neighbours', - field=models.IntegerField(default=5), - ), - migrations.AlterModelTable( - name='apitoken', - table='epdb_api_token', - ), - migrations.CreateModel( - name='ExternalIdentifier', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), - ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), - ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ('object_id', models.IntegerField()), - ('identifier_value', models.CharField(max_length=255, verbose_name='Identifier Value')), - ('url', models.URLField(blank=True, null=True, verbose_name='Direct URL')), - ('is_primary', models.BooleanField(default=False, help_text='Mark this as the primary identifier for this database', verbose_name='Is Primary')), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), - ('database', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.externaldatabase', verbose_name='External Database')), - ], - options={ - 'verbose_name': 'External Identifier', - 'verbose_name_plural': 'External Identifiers', - 'db_table': 'epdb_external_identifier', - 'indexes': [models.Index(fields=['content_type', 'object_id'], name='epdb_extern_content_b76813_idx'), models.Index(fields=['database', 'identifier_value'], name='epdb_extern_databas_486422_idx')], - 'unique_together': {('content_type', 'object_id', 'database', 'identifier_value')}, - }, - ), - ] diff --git a/epdb/migrations/0003_applicabilitydomain_url_compound_url_and_more.py b/epdb/migrations/0003_applicabilitydomain_url_compound_url_and_more.py deleted file mode 100644 index 5cb39127..00000000 --- a/epdb/migrations/0003_applicabilitydomain_url_compound_url_and_more.py +++ /dev/null @@ -1,228 +0,0 @@ -# Generated by Django 5.2.1 on 2025-08-26 17:05 - -from django.db import migrations, models - - -def populate_url(apps, schema_editor): - MODELS = [ - 'User', - 'Group', - 'Package', - 'Compound', - 'CompoundStructure', - 'Pathway', - 'Edge', - 'Node', - 'Reaction', - 'SimpleAmbitRule', - 'SimpleRDKitRule', - 'ParallelRule', - 'SequentialRule', - 'Scenario', - 'Setting', - 'MLRelativeReasoning', - 'EnviFormer', - 'ApplicabilityDomain', - ] - for model in MODELS: - obj_cls = apps.get_model("epdb", model) - for obj in obj_cls.objects.all(): - obj.url = assemble_url(obj) - if obj.url is None: - raise ValueError(f"Could not assemble url for {obj}") - obj.save() - - -def assemble_url(obj): - from django.conf import settings as s - match obj.__class__.__name__: - case 'User': - return '{}/user/{}'.format(s.SERVER_URL, obj.uuid) - case 'Group': - return '{}/group/{}'.format(s.SERVER_URL, obj.uuid) - case 'Package': - return '{}/package/{}'.format(s.SERVER_URL, obj.uuid) - case 'Compound': - return '{}/compound/{}'.format(obj.package.url, obj.uuid) - case 'CompoundStructure': - return '{}/structure/{}'.format(obj.compound.url, obj.uuid) - case 'SimpleAmbitRule': - return '{}/simple-ambit-rule/{}'.format(obj.package.url, obj.uuid) - case 'SimpleRDKitRule': - return '{}/simple-rdkit-rule/{}'.format(obj.package.url, obj.uuid) - case 'ParallelRule': - return '{}/parallel-rule/{}'.format(obj.package.url, obj.uuid) - case 'SequentialRule': - return '{}/sequential-rule/{}'.format(obj.compound.url, obj.uuid) - case 'Reaction': - return '{}/reaction/{}'.format(obj.package.url, obj.uuid) - case 'Pathway': - return '{}/pathway/{}'.format(obj.package.url, obj.uuid) - case 'Node': - return '{}/node/{}'.format(obj.pathway.url, obj.uuid) - case 'Edge': - return '{}/edge/{}'.format(obj.pathway.url, obj.uuid) - case 'MLRelativeReasoning': - return '{}/model/{}'.format(obj.package.url, obj.uuid) - case 'EnviFormer': - return '{}/model/{}'.format(obj.package.url, obj.uuid) - case 'ApplicabilityDomain': - return '{}/model/{}/applicability-domain/{}'.format(obj.model.package.url, obj.model.uuid, obj.uuid) - case 'Scenario': - return '{}/scenario/{}'.format(obj.package.url, obj.uuid) - case 'Setting': - return '{}/setting/{}'.format(s.SERVER_URL, obj.uuid) - case _: - raise ValueError(f"Unknown model {obj.__class__.__name__}") - - -class Migration(migrations.Migration): - dependencies = [ - ('epdb', '0002_externaldatabase_alter_apitoken_options_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='applicabilitydomain', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='compound', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='compoundstructure', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='edge', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='epmodel', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='group', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='node', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='package', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='pathway', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='reaction', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='rule', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='scenario', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='setting', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - migrations.AddField( - model_name='user', - name='url', - field=models.TextField(null=True, unique=False, verbose_name='URL'), - ), - - migrations.RunPython(populate_url, reverse_code=migrations.RunPython.noop), - - migrations.AlterField( - model_name='applicabilitydomain', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='compound', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='compoundstructure', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='edge', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='epmodel', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='group', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='node', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='package', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='pathway', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='reaction', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='rule', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='scenario', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='setting', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='user', - name='url', - field=models.TextField(null=True, unique=True, verbose_name='URL'), - ), - ] diff --git a/epdb/migrations/0004_alter_mlrelativereasoning_options_and_more.py b/epdb/migrations/0004_alter_mlrelativereasoning_options_and_more.py deleted file mode 100644 index 674a73dc..00000000 --- a/epdb/migrations/0004_alter_mlrelativereasoning_options_and_more.py +++ /dev/null @@ -1,55 +0,0 @@ -# Generated by Django 5.2.1 on 2025-09-09 09:21 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('epdb', '0001_squashed_0003_applicabilitydomain_url_compound_url_and_more'), - ] - - operations = [ - migrations.AlterModelOptions( - name='mlrelativereasoning', - options={}, - ), - migrations.AlterField( - model_name='mlrelativereasoning', - name='data_packages', - field=models.ManyToManyField(related_name='%(app_label)s_%(class)s_data_packages', to='epdb.package', verbose_name='Data Packages'), - ), - migrations.AlterField( - model_name='mlrelativereasoning', - name='eval_packages', - field=models.ManyToManyField(related_name='%(app_label)s_%(class)s_eval_packages', to='epdb.package', verbose_name='Evaluation Packages'), - ), - migrations.AlterField( - model_name='mlrelativereasoning', - name='rule_packages', - field=models.ManyToManyField(related_name='%(app_label)s_%(class)s_rule_packages', to='epdb.package', verbose_name='Rule Packages'), - ), - migrations.CreateModel( - name='RuleBasedRelativeReasoning', - fields=[ - ('epmodel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.epmodel')), - ('threshold', models.FloatField(default=0.5)), - ('eval_results', models.JSONField(blank=True, default=dict, null=True)), - ('model_status', models.CharField(choices=[('INITIAL', 'Initial'), ('INITIALIZING', 'Model is initializing.'), ('BUILDING', 'Model is building.'), ('BUILT_NOT_EVALUATED', 'Model is built and can be used for predictions, Model is not evaluated yet.'), ('EVALUATING', 'Model is evaluating'), ('FINISHED', 'Model has finished building and evaluation.'), ('ERROR', 'Model has failed.')], default='INITIAL')), - ('min_count', models.IntegerField(default=10)), - ('max_count', models.IntegerField(default=0)), - ('app_domain', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.applicabilitydomain')), - ('data_packages', models.ManyToManyField(related_name='%(app_label)s_%(class)s_data_packages', to='epdb.package', verbose_name='Data Packages')), - ('eval_packages', models.ManyToManyField(related_name='%(app_label)s_%(class)s_eval_packages', to='epdb.package', verbose_name='Evaluation Packages')), - ('rule_packages', models.ManyToManyField(related_name='%(app_label)s_%(class)s_rule_packages', to='epdb.package', verbose_name='Rule Packages')), - ], - options={ - 'abstract': False, - }, - bases=('epdb.epmodel',), - ), - migrations.DeleteModel( - name='RuleBaseRelativeReasoning', - ), - ] diff --git a/epdb/migrations/0005_alter_group_group_member.py b/epdb/migrations/0005_alter_group_group_member.py deleted file mode 100644 index 62aa724a..00000000 --- a/epdb/migrations/0005_alter_group_group_member.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.1 on 2025-09-11 06:21 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('epdb', '0004_alter_mlrelativereasoning_options_and_more'), - ] - - operations = [ - migrations.AlterField( - model_name='group', - name='group_member', - field=models.ManyToManyField(blank=True, related_name='groups_in_group', to='epdb.group', verbose_name='Group member'), - ), - ] diff --git a/epdb/migrations/0006_mlrelativereasoning_multigen_eval_and_more.py b/epdb/migrations/0006_mlrelativereasoning_multigen_eval_and_more.py deleted file mode 100644 index 008214ae..00000000 --- a/epdb/migrations/0006_mlrelativereasoning_multigen_eval_and_more.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 5.2.1 on 2025-09-18 06:42 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('epdb', '0005_alter_group_group_member'), - ] - - operations = [ - migrations.AddField( - model_name='mlrelativereasoning', - name='multigen_eval', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='rulebasedrelativereasoning', - name='multigen_eval', - field=models.BooleanField(default=False), - ), - ] diff --git a/epdb/migrations/0007_alter_enviformer_options_enviformer_app_domain_and_more.py b/epdb/migrations/0007_alter_enviformer_options_enviformer_app_domain_and_more.py deleted file mode 100644 index 5ffbe7f6..00000000 --- a/epdb/migrations/0007_alter_enviformer_options_enviformer_app_domain_and_more.py +++ /dev/null @@ -1,53 +0,0 @@ -# Generated by Django 5.2.1 on 2025-10-07 08:19 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('epdb', '0006_mlrelativereasoning_multigen_eval_and_more'), - ] - - operations = [ - migrations.AlterModelOptions( - name='enviformer', - options={}, - ), - migrations.AddField( - model_name='enviformer', - name='app_domain', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.applicabilitydomain'), - ), - migrations.AddField( - model_name='enviformer', - name='data_packages', - field=models.ManyToManyField(related_name='%(app_label)s_%(class)s_data_packages', to='epdb.package', verbose_name='Data Packages'), - ), - migrations.AddField( - model_name='enviformer', - name='eval_packages', - field=models.ManyToManyField(related_name='%(app_label)s_%(class)s_eval_packages', to='epdb.package', verbose_name='Evaluation Packages'), - ), - migrations.AddField( - model_name='enviformer', - name='eval_results', - field=models.JSONField(blank=True, default=dict, null=True), - ), - migrations.AddField( - model_name='enviformer', - name='model_status', - field=models.CharField(choices=[('INITIAL', 'Initial'), ('INITIALIZING', 'Model is initializing.'), ('BUILDING', 'Model is building.'), ('BUILT_NOT_EVALUATED', 'Model is built and can be used for predictions, Model is not evaluated yet.'), ('EVALUATING', 'Model is evaluating'), ('FINISHED', 'Model has finished building and evaluation.'), ('ERROR', 'Model has failed.')], default='INITIAL'), - ), - migrations.AddField( - model_name='enviformer', - name='multigen_eval', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='enviformer', - name='rule_packages', - field=models.ManyToManyField(related_name='%(app_label)s_%(class)s_rule_packages', to='epdb.package', verbose_name='Rule Packages'), - ), - ] diff --git a/epdb/migrations/0008_enzymelink.py b/epdb/migrations/0008_enzymelink.py deleted file mode 100644 index 35d0a950..00000000 --- a/epdb/migrations/0008_enzymelink.py +++ /dev/null @@ -1,64 +0,0 @@ -# Generated by Django 5.2.7 on 2025-10-10 06:58 - -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields -import uuid -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("epdb", "0007_alter_enviformer_options_enviformer_app_domain_and_more"), - ] - - operations = [ - migrations.CreateModel( - name="EnzymeLink", - fields=[ - ( - "id", - models.BigAutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - ( - "created", - model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name="created" - ), - ), - ( - "modified", - model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name="modified" - ), - ), - ( - "uuid", - models.UUIDField( - default=uuid.uuid4, unique=True, verbose_name="UUID of this object" - ), - ), - ("name", models.TextField(default="no name", verbose_name="Name")), - ( - "description", - models.TextField(default="no description", verbose_name="Descriptions"), - ), - ("url", models.TextField(null=True, unique=True, verbose_name="URL")), - ("kv", models.JSONField(blank=True, default=dict, null=True)), - ("ec_number", models.TextField(verbose_name="EC Number")), - ("classification_level", models.IntegerField(verbose_name="Classification Level")), - ("linking_method", models.TextField(verbose_name="Linking Method")), - ("edge_evidence", models.ManyToManyField(to="epdb.edge")), - ("reaction_evidence", models.ManyToManyField(to="epdb.reaction")), - ( - "rule", - models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to="epdb.rule"), - ), - ], - options={ - "abstract": False, - }, - ), - ] diff --git a/epdb/migrations/0009_joblog.py b/epdb/migrations/0009_joblog.py deleted file mode 100644 index 5c731eb1..00000000 --- a/epdb/migrations/0009_joblog.py +++ /dev/null @@ -1,66 +0,0 @@ -# Generated by Django 5.2.7 on 2025-10-27 09:39 - -import django.db.models.deletion -import django.utils.timezone -import model_utils.fields -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("epdb", "0008_enzymelink"), - ] - - operations = [ - migrations.CreateModel( - name="JobLog", - fields=[ - ( - "id", - models.BigAutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - ( - "created", - model_utils.fields.AutoCreatedField( - default=django.utils.timezone.now, editable=False, verbose_name="created" - ), - ), - ( - "modified", - model_utils.fields.AutoLastModifiedField( - default=django.utils.timezone.now, editable=False, verbose_name="modified" - ), - ), - ("task_id", models.UUIDField(unique=True)), - ("job_name", models.TextField()), - ( - "status", - models.CharField( - choices=[ - ("INITIAL", "Initial"), - ("SUCCESS", "Success"), - ("FAILURE", "Failure"), - ("REVOKED", "Revoked"), - ("IGNORED", "Ignored"), - ], - default="INITIAL", - max_length=20, - ), - ), - ("done_at", models.DateTimeField(blank=True, default=None, null=True)), - ("task_result", models.TextField(blank=True, default=None, null=True)), - ( - "user", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL - ), - ), - ], - options={ - "abstract": False, - }, - ), - ] diff --git a/epdb/migrations/0010_license_cc_string.py b/epdb/migrations/0010_license_cc_string.py deleted file mode 100644 index 5594c756..00000000 --- a/epdb/migrations/0010_license_cc_string.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-11 14:11 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("epdb", "0009_joblog"), - ] - - operations = [ - migrations.AddField( - model_name="license", - name="cc_string", - field=models.TextField(default="by-nc-sa", verbose_name="CC string"), - preserve_default=False, - ), - ] diff --git a/epdb/migrations/0011_auto_20251111_1413.py b/epdb/migrations/0011_auto_20251111_1413.py deleted file mode 100644 index d0a3463a..00000000 --- a/epdb/migrations/0011_auto_20251111_1413.py +++ /dev/null @@ -1,59 +0,0 @@ -# Generated by Django 5.2.7 on 2025-11-11 14:13 - -import re - -from django.contrib.postgres.aggregates import ArrayAgg -from django.db import migrations -from django.db.models import Min - - -def set_cc(apps, schema_editor): - License = apps.get_model("epdb", "License") - - # For all existing licenses extract cc_string from link - for license in License.objects.all(): - pattern = r"/licenses/([^/]+)/4\.0" - match = re.search(pattern, license.link) - if match: - license.cc_string = match.group(1) - license.save() - else: - raise ValueError(f"Could not find license for {license.link}") - - # Ensure we have all licenses - cc_strings = ["by", "by-nc", "by-nc-nd", "by-nc-sa", "by-nd", "by-sa"] - for cc_string in cc_strings: - if not License.objects.filter(cc_string=cc_string).exists(): - new_license = License() - new_license.cc_string = cc_string - new_license.link = f"https://creativecommons.org/licenses/{cc_string}/4.0/" - new_license.image_link = f"https://licensebuttons.net/l/{cc_string}/4.0/88x31.png" - new_license.save() - - # As we might have existing Licenses representing the same License, - # get min pk and all pks as a list - license_lookup_qs = License.objects.values("cc_string").annotate( - lowest_pk=Min("id"), all_pks=ArrayAgg("id", order_by=("id",)) - ) - - license_lookup = { - row["cc_string"]: (row["lowest_pk"], row["all_pks"]) for row in license_lookup_qs - } - - Packages = apps.get_model("epdb", "Package") - - for k, v in license_lookup.items(): - # Set min pk to all packages pointing to any of the duplicates - Packages.objects.filter(pk__in=v[1]).update(license_id=v[0]) - # remove the min pk from "other" pks as we use them for deletion - v[1].remove(v[0]) - # Delete redundant License objects - License.objects.filter(pk__in=v[1]).delete() - - -class Migration(migrations.Migration): - dependencies = [ - ("epdb", "0010_license_cc_string"), - ] - - operations = [migrations.RunPython(set_cc)] diff --git a/epdb/migrations/0012_node_stereo_removed_pathway_predicted.py b/epdb/migrations/0012_node_stereo_removed_pathway_predicted.py deleted file mode 100644 index 648090d7..00000000 --- a/epdb/migrations/0012_node_stereo_removed_pathway_predicted.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 5.2.7 on 2025-12-02 13:09 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("epdb", "0011_auto_20251111_1413"), - ] - - operations = [ - migrations.AddField( - model_name="node", - name="stereo_removed", - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name="pathway", - name="predicted", - field=models.BooleanField(default=False), - ), - ] diff --git a/epdb/migrations/0013_setting_expansion_schema.py b/epdb/migrations/0013_setting_expansion_schema.py deleted file mode 100644 index 9a981795..00000000 --- a/epdb/migrations/0013_setting_expansion_schema.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 5.2.7 on 2025-12-14 11:30 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("epdb", "0012_node_stereo_removed_pathway_predicted"), - ] - - operations = [ - migrations.AddField( - model_name="setting", - name="expansion_schema", - field=models.CharField( - choices=[ - ("BFS", "Breadth First Search"), - ("DFS", "Depth First Search"), - ("GREEDY", "Greedy"), - ], - default="BFS", - max_length=20, - ), - ), - ] diff --git a/epdb/migrations/0014_rename_expansion_schema_setting_expansion_scheme.py b/epdb/migrations/0014_rename_expansion_schema_setting_expansion_scheme.py deleted file mode 100644 index b7332fee..00000000 --- a/epdb/migrations/0014_rename_expansion_schema_setting_expansion_scheme.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 5.2.7 on 2025-12-14 16:02 - -from django.db import migrations - - -class Migration(migrations.Migration): - dependencies = [ - ("epdb", "0013_setting_expansion_schema"), - ] - - operations = [ - migrations.RenameField( - model_name="setting", - old_name="expansion_schema", - new_name="expansion_scheme", - ), - ] diff --git a/epdb/migrations/0015_user_is_reviewer.py b/epdb/migrations/0015_user_is_reviewer.py deleted file mode 100644 index b26db739..00000000 --- a/epdb/migrations/0015_user_is_reviewer.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 5.2.7 on 2026-01-19 19:26 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("epdb", "0014_rename_expansion_schema_setting_expansion_scheme"), - ] - - operations = [ - migrations.AddField( - model_name="user", - name="is_reviewer", - field=models.BooleanField(default=False), - ), - ] diff --git a/epdb/migrations/0016_remove_enviformer_model_status_and_more.py b/epdb/migrations/0016_remove_enviformer_model_status_and_more.py deleted file mode 100644 index 2f85b8aa..00000000 --- a/epdb/migrations/0016_remove_enviformer_model_status_and_more.py +++ /dev/null @@ -1,179 +0,0 @@ -# Generated by Django 5.2.7 on 2026-02-12 09:38 - -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("epdb", "0015_user_is_reviewer"), - ] - - operations = [ - migrations.RemoveField( - model_name="enviformer", - name="model_status", - ), - migrations.RemoveField( - model_name="mlrelativereasoning", - name="model_status", - ), - migrations.RemoveField( - model_name="rulebasedrelativereasoning", - name="model_status", - ), - migrations.AddField( - model_name="epmodel", - name="model_status", - field=models.CharField( - choices=[ - ("INITIAL", "Initial"), - ("INITIALIZING", "Model is initializing."), - ("BUILDING", "Model is building."), - ( - "BUILT_NOT_EVALUATED", - "Model is built and can be used for predictions, Model is not evaluated yet.", - ), - ("EVALUATING", "Model is evaluating"), - ("FINISHED", "Model has finished building and evaluation."), - ("ERROR", "Model has failed."), - ], - default="INITIAL", - ), - ), - migrations.AlterField( - model_name="enviformer", - name="eval_packages", - field=models.ManyToManyField( - blank=True, - related_name="%(app_label)s_%(class)s_eval_packages", - to=settings.EPDB_PACKAGE_MODEL, - verbose_name="Evaluation Packages", - ), - ), - migrations.AlterField( - model_name="enviformer", - name="rule_packages", - field=models.ManyToManyField( - blank=True, - related_name="%(app_label)s_%(class)s_rule_packages", - to=settings.EPDB_PACKAGE_MODEL, - verbose_name="Rule Packages", - ), - ), - migrations.AlterField( - model_name="mlrelativereasoning", - name="eval_packages", - field=models.ManyToManyField( - blank=True, - related_name="%(app_label)s_%(class)s_eval_packages", - to=settings.EPDB_PACKAGE_MODEL, - verbose_name="Evaluation Packages", - ), - ), - migrations.AlterField( - model_name="mlrelativereasoning", - name="rule_packages", - field=models.ManyToManyField( - blank=True, - related_name="%(app_label)s_%(class)s_rule_packages", - to=settings.EPDB_PACKAGE_MODEL, - verbose_name="Rule Packages", - ), - ), - migrations.AlterField( - model_name="rulebasedrelativereasoning", - name="eval_packages", - field=models.ManyToManyField( - blank=True, - related_name="%(app_label)s_%(class)s_eval_packages", - to=settings.EPDB_PACKAGE_MODEL, - verbose_name="Evaluation Packages", - ), - ), - migrations.AlterField( - model_name="rulebasedrelativereasoning", - name="rule_packages", - field=models.ManyToManyField( - blank=True, - related_name="%(app_label)s_%(class)s_rule_packages", - to=settings.EPDB_PACKAGE_MODEL, - verbose_name="Rule Packages", - ), - ), - migrations.CreateModel( - name="PropertyPluginModel", - fields=[ - ( - "epmodel_ptr", - models.OneToOneField( - auto_created=True, - on_delete=django.db.models.deletion.CASCADE, - parent_link=True, - primary_key=True, - serialize=False, - to="epdb.epmodel", - ), - ), - ("threshold", models.FloatField(default=0.5)), - ("eval_results", models.JSONField(blank=True, default=dict, null=True)), - ("multigen_eval", models.BooleanField(default=False)), - ("plugin_identifier", models.CharField(max_length=255)), - ( - "app_domain", - models.ForeignKey( - blank=True, - default=None, - null=True, - on_delete=django.db.models.deletion.SET_NULL, - to="epdb.applicabilitydomain", - ), - ), - ( - "data_packages", - models.ManyToManyField( - blank=True, - related_name="%(app_label)s_%(class)s_data_packages", - to=settings.EPDB_PACKAGE_MODEL, - verbose_name="Data Packages", - ), - ), - ( - "eval_packages", - models.ManyToManyField( - blank=True, - related_name="%(app_label)s_%(class)s_eval_packages", - to=settings.EPDB_PACKAGE_MODEL, - verbose_name="Evaluation Packages", - ), - ), - ( - "rule_packages", - models.ManyToManyField( - blank=True, - related_name="%(app_label)s_%(class)s_rule_packages", - to=settings.EPDB_PACKAGE_MODEL, - verbose_name="Rule Packages", - ), - ), - ], - options={ - "abstract": False, - }, - bases=("epdb.epmodel",), - ), - migrations.AddField( - model_name="setting", - name="property_models", - field=models.ManyToManyField( - blank=True, - related_name="settings", - to="epdb.propertypluginmodel", - verbose_name="Setting Property Models", - ), - ), - migrations.DeleteModel( - name="PluginModel", - ), - ] diff --git a/epdb/migrations/0017_additionalinformation.py b/epdb/migrations/0017_additionalinformation.py deleted file mode 100644 index a02af573..00000000 --- a/epdb/migrations/0017_additionalinformation.py +++ /dev/null @@ -1,93 +0,0 @@ -# Generated by Django 5.2.7 on 2026-02-20 12:02 - -import django.db.models.deletion -import uuid -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("contenttypes", "0002_remove_content_type_name"), - ("epdb", "0016_remove_enviformer_model_status_and_more"), - ] - - operations = [ - migrations.CreateModel( - name="AdditionalInformation", - fields=[ - ( - "id", - models.BigAutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - ("uuid", models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), - ("url", models.TextField(null=True, unique=True, verbose_name="URL")), - ("kv", models.JSONField(blank=True, default=dict, null=True)), - ("type", models.TextField(verbose_name="Additional Information Type")), - ("data", models.JSONField(blank=True, default=dict, null=True)), - ("object_id", models.PositiveBigIntegerField(blank=True, null=True)), - ( - "content_type", - models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - to="contenttypes.contenttype", - ), - ), - ( - "package", - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - to=settings.EPDB_PACKAGE_MODEL, - verbose_name="Package", - ), - ), - ( - "scenario", - models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.CASCADE, - related_name="scenario_additional_information", - to="epdb.scenario", - ), - ), - ], - options={ - "indexes": [ - models.Index(fields=["type"], name="epdb_additi_type_394349_idx"), - models.Index( - fields=["scenario", "type"], name="epdb_additi_scenari_a59edf_idx" - ), - models.Index( - fields=["content_type", "object_id"], name="epdb_additi_content_44d4b4_idx" - ), - models.Index( - fields=["scenario", "content_type", "object_id"], - name="epdb_additi_scenari_ef2bf5_idx", - ), - ], - "constraints": [ - models.CheckConstraint( - condition=models.Q( - models.Q(("content_type__isnull", True), ("object_id__isnull", True)), - models.Q(("content_type__isnull", False), ("object_id__isnull", False)), - _connector="OR", - ), - name="ck_addinfo_gfk_pair", - ), - models.CheckConstraint( - condition=models.Q( - ("scenario__isnull", False), - ("content_type__isnull", False), - _connector="OR", - ), - name="ck_addinfo_not_both_null", - ), - ], - }, - ), - ] diff --git a/epdb/migrations/0018_auto_20260220_1203.py b/epdb/migrations/0018_auto_20260220_1203.py deleted file mode 100644 index d1f73e1a..00000000 --- a/epdb/migrations/0018_auto_20260220_1203.py +++ /dev/null @@ -1,132 +0,0 @@ -# Generated by Django 5.2.7 on 2026-02-20 12:03 - -from django.db import migrations - - -def get_additional_information(scenario): - from envipy_additional_information import registry - from envipy_additional_information.parsers import TypeOfAerationParser - - for k, vals in scenario.additional_information.items(): - if k == "enzyme": - continue - - if k == "SpikeConentration": - k = "SpikeConcentration" - - if k == "AerationType": - k = "TypeOfAeration" - - for v in vals: - # Per default additional fields are ignored - MAPPING = {c.__name__: c for c in registry.list_models().values()} - try: - inst = MAPPING[k](**v) - except Exception: - if k == "TypeOfAeration": - toa = TypeOfAerationParser() - inst = toa.from_string(v["type"]) - - # Add uuid to uniquely identify objects for manipulation - if "uuid" in v: - inst.__dict__["uuid"] = v["uuid"] - - yield inst - - -def forward_func(apps, schema_editor): - Scenario = apps.get_model("epdb", "Scenario") - ContentType = apps.get_model("contenttypes", "ContentType") - AdditionalInformation = apps.get_model("epdb", "AdditionalInformation") - - bulk = [] - related = [] - ctype = {o.model: o for o in ContentType.objects.all()} - parents = Scenario.objects.prefetch_related( - "compound_set", - "compoundstructure_set", - "reaction_set", - "rule_set", - "pathway_set", - "node_set", - "edge_set", - ).filter(parent__isnull=True) - - for i, scenario in enumerate(parents): - print(f"{i + 1}/{len(parents)}", end="\r") - if scenario.parent is not None: - related.append(scenario.parent) - continue - - for ai in get_additional_information(scenario): - bulk.append( - AdditionalInformation( - package=scenario.package, - scenario=scenario, - type=ai.__class__.__name__, - data=ai.model_dump(mode="json"), - ) - ) - - print("\n", len(bulk)) - - related = Scenario.objects.prefetch_related( - "compound_set", - "compoundstructure_set", - "reaction_set", - "rule_set", - "pathway_set", - "node_set", - "edge_set", - ).filter(parent__isnull=False) - - for i, scenario in enumerate(related): - print(f"{i + 1}/{len(related)}", end="\r") - parent = scenario.parent - # Check to which objects this scenario is attached to - for ai in get_additional_information(scenario): - rel_objs = [ - "compound", - "compoundstructure", - "reaction", - "rule", - "pathway", - "node", - "edge", - ] - for rel_obj in rel_objs: - for o in getattr(scenario, f"{rel_obj}_set").all(): - bulk.append( - AdditionalInformation( - package=scenario.package, - scenario=parent, - type=ai.__class__.__name__, - data=ai.model_dump(mode="json"), - content_type=ctype[rel_obj], - object_id=o.pk, - ) - ) - - print("Start creating additional information objects...") - AdditionalInformation.objects.bulk_create(bulk) - print("Done!") - print(len(bulk)) - - Scenario.objects.filter(parent__isnull=False).delete() - # Call ai save to fix urls - ais = AdditionalInformation.objects.all() - total = ais.count() - - for i, ai in enumerate(ais): - print(f"{i + 1}/{total}", end="\r") - ai.save() - - -class Migration(migrations.Migration): - dependencies = [ - ("epdb", "0017_additionalinformation"), - ] - - operations = [ - migrations.RunPython(forward_func, reverse_code=migrations.RunPython.noop), - ] diff --git a/epdb/migrations/0019_remove_scenario_additional_information_and_more.py b/epdb/migrations/0019_remove_scenario_additional_information_and_more.py index 0aff3833..5883f705 100644 --- a/epdb/migrations/0019_remove_scenario_additional_information_and_more.py +++ b/epdb/migrations/0019_remove_scenario_additional_information_and_more.py @@ -1,20 +1,741 @@ -# Generated by Django 5.2.7 on 2026-02-23 08:45 +# Generated by Django 5.2.7 on 2026-03-06 10:51 -from django.db import migrations +import django.contrib.auth.models +import django.contrib.auth.validators +import django.contrib.postgres.fields +import django.db.models.deletion +import django.utils.timezone +import model_utils.fields +import uuid +from django.conf import settings +from django.db import migrations, models class Migration(migrations.Migration): + + initial = True + dependencies = [ - ("epdb", "0018_auto_20260220_1203"), + ('auth', '0012_alter_user_first_name_max_length'), + ('contenttypes', '0002_remove_content_type_name'), + migrations.swappable_dependency(settings.EPDB_PACKAGE_MODEL), ] operations = [ - migrations.RemoveField( - model_name="scenario", - name="additional_information", + migrations.CreateModel( + name='ApplicabilityDomain', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('num_neighbours', models.IntegerField(default=5)), + ('reliability_threshold', models.FloatField(default=0.5)), + ('local_compatibilty_threshold', models.FloatField(default=0.5)), + ('functional_groups', models.JSONField(blank=True, default=dict, null=True)), + ], + options={ + 'abstract': False, + }, ), - migrations.RemoveField( - model_name="scenario", - name="parent", + migrations.CreateModel( + name='Edge', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='EPModel', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('model_status', models.CharField(choices=[('INITIAL', 'Initial'), ('INITIALIZING', 'Model is initializing.'), ('BUILDING', 'Model is building.'), ('BUILT_NOT_EVALUATED', 'Model is built and can be used for predictions, Model is not evaluated yet.'), ('EVALUATING', 'Model is evaluating'), ('FINISHED', 'Model has finished building and evaluation.'), ('ERROR', 'Model has failed.')], default='INITIAL')), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.EPDB_PACKAGE_MODEL, verbose_name='Package')), + ('polymorphic_ctype', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_%(app_label)s.%(class)s_set+', to='contenttypes.contenttype')), + ], + options={ + 'abstract': False, + 'base_manager_name': 'objects', + }, + ), + migrations.CreateModel( + name='ExternalDatabase', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), + ('name', models.CharField(max_length=100, unique=True, verbose_name='Database Name')), + ('full_name', models.CharField(blank=True, max_length=255, verbose_name='Full Database Name')), + ('description', models.TextField(blank=True, verbose_name='Description')), + ('base_url', models.URLField(blank=True, null=True, verbose_name='Base URL')), + ('url_pattern', models.CharField(blank=True, help_text="URL pattern with {id} placeholder, e.g., 'https://pubchem.ncbi.nlm.nih.gov/compound/{id}'", max_length=500, verbose_name='URL Pattern')), + ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), + ], + options={ + 'verbose_name': 'External Database', + 'verbose_name_plural': 'External Databases', + 'db_table': 'epdb_external_database', + 'ordering': ['name'], + }, + ), + migrations.CreateModel( + name='Permission', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('permission', models.CharField(choices=[('read', 'Read'), ('write', 'Write'), ('all', 'All')], max_length=32)), + ], + ), + migrations.CreateModel( + name='License', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('cc_string', models.TextField(verbose_name='CC string')), + ('link', models.URLField(verbose_name='link')), + ('image_link', models.URLField(verbose_name='Image link')), + ], + ), + migrations.CreateModel( + name='Rule', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.EPDB_PACKAGE_MODEL, verbose_name='Package')), + ('polymorphic_ctype', models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_%(app_label)s.%(class)s_set+', to='contenttypes.contenttype')), + ], + options={ + 'abstract': False, + 'base_manager_name': 'objects', + }, + ), + migrations.CreateModel( + name='User', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), + ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('email', models.EmailField(max_length=254, unique=True)), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('is_reviewer', models.BooleanField(default=False)), + ('default_package', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.EPDB_PACKAGE_MODEL, verbose_name='Default Package')), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + 'abstract': False, + }, + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ], + ), + migrations.CreateModel( + name='APIToken', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('hashed_key', models.CharField(help_text='SHA-256 hash of the token key', max_length=128, unique=True)), + ('expires_at', models.DateTimeField(blank=True, help_text='Token expiration time (null for no expiration)', null=True)), + ('name', models.CharField(help_text='Descriptive name for this token', max_length=100)), + ('is_active', models.BooleanField(default=True, help_text='Whether this token is active')), + ('user', models.ForeignKey(help_text='User who owns this token', on_delete=django.db.models.deletion.CASCADE, related_name='api_tokens', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'API Token', + 'verbose_name_plural': 'API Tokens', + 'db_table': 'epdb_api_token', + 'ordering': ['-created'], + }, + ), + migrations.CreateModel( + name='Compound', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.EPDB_PACKAGE_MODEL, verbose_name='Package')), + ], + ), + migrations.CreateModel( + name='CompoundStructure', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), + ('smiles', models.TextField(verbose_name='SMILES')), + ('canonical_smiles', models.TextField(verbose_name='Canonical SMILES')), + ('inchikey', models.TextField(max_length=27, verbose_name='InChIKey')), + ('normalized_structure', models.BooleanField(default=False)), + ('compound', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.compound')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='compound', + name='default_structure', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='compound_default_structure', to='epdb.compoundstructure', verbose_name='Default Structure'), + ), + migrations.CreateModel( + name='PropertyPluginModel', + fields=[ + ('epmodel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.epmodel')), + ('threshold', models.FloatField(default=0.5)), + ('eval_results', models.JSONField(blank=True, default=dict, null=True)), + ('multigen_eval', models.BooleanField(default=False)), + ('plugin_identifier', models.CharField(max_length=255)), + ], + options={ + 'abstract': False, + }, + bases=('epdb.epmodel',), + ), + migrations.CreateModel( + name='Group', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('name', models.TextField(verbose_name='Group name')), + ('public', models.BooleanField(default=False, verbose_name='Public Group')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('group_member', models.ManyToManyField(blank=True, related_name='groups_in_group', to='epdb.group', verbose_name='Group member')), + ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Group Owner')), + ('user_member', models.ManyToManyField(related_name='users_in_group', to=settings.AUTH_USER_MODEL, verbose_name='User members')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='user', + name='default_group', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='default_group', to='epdb.group', verbose_name='Default Group'), + ), + migrations.CreateModel( + name='JobLog', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('task_id', models.UUIDField(unique=True)), + ('job_name', models.TextField()), + ('status', models.CharField(choices=[('INITIAL', 'Initial'), ('SUCCESS', 'Success'), ('FAILURE', 'Failure'), ('REVOKED', 'Revoked'), ('IGNORED', 'Ignored')], default='INITIAL', max_length=20)), + ('done_at', models.DateTimeField(blank=True, default=None, null=True)), + ('task_result', models.TextField(blank=True, default=None, null=True)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Package', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('reviewed', models.BooleanField(default=False, verbose_name='Reviewstatus')), + ('license', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.license', verbose_name='License')), + ], + options={ + 'swappable': 'EPDB_PACKAGE_MODEL', + }, + ), + migrations.CreateModel( + name='Node', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), + ('depth', models.IntegerField(verbose_name='Node depth')), + ('stereo_removed', models.BooleanField(default=False)), + ('default_node_label', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='default_node_structure', to='epdb.compoundstructure', verbose_name='Default Node Label')), + ('node_labels', models.ManyToManyField(related_name='node_structures', to='epdb.compoundstructure', verbose_name='All Node Labels')), + ('out_edges', models.ManyToManyField(to='epdb.edge', verbose_name='Outgoing Edges')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='edge', + name='end_nodes', + field=models.ManyToManyField(related_name='edge_products', to='epdb.node', verbose_name='End Nodes'), + ), + migrations.AddField( + model_name='edge', + name='start_nodes', + field=models.ManyToManyField(related_name='edge_educts', to='epdb.node', verbose_name='Start Nodes'), + ), + migrations.CreateModel( + name='SequentialRule', + fields=[ + ('rule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.rule')), + ], + options={ + 'abstract': False, + 'base_manager_name': 'objects', + }, + bases=('epdb.rule',), + ), + migrations.CreateModel( + name='SimpleRule', + fields=[ + ('rule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.rule')), + ], + options={ + 'abstract': False, + 'base_manager_name': 'objects', + }, + bases=('epdb.rule',), + ), + migrations.CreateModel( + name='Pathway', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), + ('predicted', models.BooleanField(default=False)), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.EPDB_PACKAGE_MODEL, verbose_name='Package')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='node', + name='pathway', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.pathway', verbose_name='belongs to'), + ), + migrations.AddField( + model_name='edge', + name='pathway', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.pathway', verbose_name='belongs to'), + ), + migrations.CreateModel( + name='Reaction', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('aliases', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None, verbose_name='Aliases')), + ('multi_step', models.BooleanField(verbose_name='Multistep Reaction')), + ('medline_references', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), null=True, size=None, verbose_name='Medline References')), + ('educts', models.ManyToManyField(related_name='reaction_educts', to='epdb.compoundstructure', verbose_name='Educts')), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.EPDB_PACKAGE_MODEL, verbose_name='Package')), + ('products', models.ManyToManyField(related_name='reaction_products', to='epdb.compoundstructure', verbose_name='Products')), + ('rules', models.ManyToManyField(related_name='reaction_rule', to='epdb.rule', verbose_name='Rule')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='EnzymeLink', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('ec_number', models.TextField(verbose_name='EC Number')), + ('classification_level', models.IntegerField(verbose_name='Classification Level')), + ('linking_method', models.TextField(verbose_name='Linking Method')), + ('edge_evidence', models.ManyToManyField(to='epdb.edge')), + ('rule', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.rule')), + ('reaction_evidence', models.ManyToManyField(to='epdb.reaction')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='edge', + name='edge_label', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.reaction', verbose_name='Edge label'), + ), + migrations.CreateModel( + name='Scenario', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('scenario_date', models.CharField(default='No date', max_length=256)), + ('scenario_type', models.CharField(default='Not specified', max_length=256)), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.EPDB_PACKAGE_MODEL, verbose_name='Package')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='rule', + name='scenarios', + field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), + ), + migrations.AddField( + model_name='reaction', + name='scenarios', + field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), + ), + migrations.AddField( + model_name='pathway', + name='scenarios', + field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), + ), + migrations.AddField( + model_name='node', + name='scenarios', + field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), + ), + migrations.AddField( + model_name='edge', + name='scenarios', + field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), + ), + migrations.AddField( + model_name='compoundstructure', + name='scenarios', + field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), + ), + migrations.AddField( + model_name='compound', + name='scenarios', + field=models.ManyToManyField(to='epdb.scenario', verbose_name='Attached Scenarios'), + ), + migrations.CreateModel( + name='Setting', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, unique=True, verbose_name='UUID of this object')), + ('name', models.TextField(default='no name', verbose_name='Name')), + ('description', models.TextField(default='no description', verbose_name='Descriptions')), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('public', models.BooleanField(default=False)), + ('global_default', models.BooleanField(default=False)), + ('max_depth', models.IntegerField(default=5, verbose_name='Setting Max Depth')), + ('max_nodes', models.IntegerField(default=30, verbose_name='Setting Max Number of Nodes')), + ('model_threshold', models.FloatField(blank=True, default=0.25, null=True, verbose_name='Setting Model Threshold')), + ('expansion_scheme', models.CharField(choices=[('BFS', 'Breadth First Search'), ('DFS', 'Depth First Search'), ('GREEDY', 'Greedy')], default='BFS', max_length=20)), + ('model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.epmodel', verbose_name='Setting EPModel')), + ('rule_packages', models.ManyToManyField(blank=True, related_name='setting_rule_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Setting Rule Packages')), + ('property_models', models.ManyToManyField(blank=True, related_name='settings', to='epdb.propertypluginmodel', verbose_name='Setting Property Models')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='pathway', + name='setting', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='epdb.setting', verbose_name='Setting'), + ), + migrations.AddField( + model_name='user', + name='default_setting', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.setting', verbose_name='The users default settings'), + ), + migrations.CreateModel( + name='EnviFormer', + fields=[ + ('epmodel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.epmodel')), + ('threshold', models.FloatField(default=0.5)), + ('eval_results', models.JSONField(blank=True, default=dict, null=True)), + ('multigen_eval', models.BooleanField(default=False)), + ('app_domain', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.applicabilitydomain')), + ('data_packages', models.ManyToManyField(related_name='%(app_label)s_%(class)s_data_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Data Packages')), + ('eval_packages', models.ManyToManyField(blank=True, related_name='%(app_label)s_%(class)s_eval_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Evaluation Packages')), + ('rule_packages', models.ManyToManyField(blank=True, related_name='%(app_label)s_%(class)s_rule_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Rule Packages')), + ], + options={ + 'abstract': False, + }, + bases=('epdb.epmodel',), + ), + migrations.CreateModel( + name='MLRelativeReasoning', + fields=[ + ('epmodel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.epmodel')), + ('threshold', models.FloatField(default=0.5)), + ('eval_results', models.JSONField(blank=True, default=dict, null=True)), + ('multigen_eval', models.BooleanField(default=False)), + ('app_domain', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.applicabilitydomain')), + ('data_packages', models.ManyToManyField(related_name='%(app_label)s_%(class)s_data_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Data Packages')), + ('eval_packages', models.ManyToManyField(blank=True, related_name='%(app_label)s_%(class)s_eval_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Evaluation Packages')), + ('rule_packages', models.ManyToManyField(blank=True, related_name='%(app_label)s_%(class)s_rule_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Rule Packages')), + ], + options={ + 'abstract': False, + }, + bases=('epdb.epmodel',), + ), + migrations.AddField( + model_name='applicabilitydomain', + name='model', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.mlrelativereasoning'), + ), + migrations.AddField( + model_name='propertypluginmodel', + name='app_domain', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.applicabilitydomain'), + ), + migrations.AddField( + model_name='propertypluginmodel', + name='data_packages', + field=models.ManyToManyField(blank=True, related_name='%(app_label)s_%(class)s_data_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Data Packages'), + ), + migrations.AddField( + model_name='propertypluginmodel', + name='eval_packages', + field=models.ManyToManyField(blank=True, related_name='%(app_label)s_%(class)s_eval_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Evaluation Packages'), + ), + migrations.AddField( + model_name='propertypluginmodel', + name='rule_packages', + field=models.ManyToManyField(blank=True, related_name='%(app_label)s_%(class)s_rule_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Rule Packages'), + ), + migrations.CreateModel( + name='RuleBasedRelativeReasoning', + fields=[ + ('epmodel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.epmodel')), + ('threshold', models.FloatField(default=0.5)), + ('eval_results', models.JSONField(blank=True, default=dict, null=True)), + ('multigen_eval', models.BooleanField(default=False)), + ('min_count', models.IntegerField(default=10)), + ('max_count', models.IntegerField(default=0)), + ('app_domain', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_NULL, to='epdb.applicabilitydomain')), + ('data_packages', models.ManyToManyField(related_name='%(app_label)s_%(class)s_data_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Data Packages')), + ('eval_packages', models.ManyToManyField(blank=True, related_name='%(app_label)s_%(class)s_eval_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Evaluation Packages')), + ('rule_packages', models.ManyToManyField(blank=True, related_name='%(app_label)s_%(class)s_rule_packages', to=settings.EPDB_PACKAGE_MODEL, verbose_name='Rule Packages')), + ], + options={ + 'abstract': False, + }, + bases=('epdb.epmodel',), + ), + migrations.CreateModel( + name='ExternalIdentifier', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), + ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), + ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), + ('object_id', models.IntegerField()), + ('identifier_value', models.CharField(max_length=255, verbose_name='Identifier Value')), + ('url', models.URLField(blank=True, null=True, verbose_name='Direct URL')), + ('is_primary', models.BooleanField(default=False, help_text='Mark this as the primary identifier for this database', verbose_name='Is Primary')), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ('database', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.externaldatabase', verbose_name='External Database')), + ], + options={ + 'verbose_name': 'External Identifier', + 'verbose_name_plural': 'External Identifiers', + 'db_table': 'epdb_external_identifier', + 'indexes': [models.Index(fields=['content_type', 'object_id'], name='epdb_extern_content_b76813_idx'), models.Index(fields=['database', 'identifier_value'], name='epdb_extern_databas_486422_idx')], + 'unique_together': {('content_type', 'object_id', 'database', 'identifier_value')}, + }, + ), + migrations.CreateModel( + name='SimpleAmbitRule', + fields=[ + ('simplerule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.simplerule')), + ('smirks', models.TextField(verbose_name='SMIRKS')), + ('reactant_filter_smarts', models.TextField(null=True, verbose_name='Reactant Filter SMARTS')), + ('product_filter_smarts', models.TextField(null=True, verbose_name='Product Filter SMARTS')), + ], + options={ + 'abstract': False, + 'base_manager_name': 'objects', + }, + bases=('epdb.simplerule',), + ), + migrations.CreateModel( + name='SimpleRDKitRule', + fields=[ + ('simplerule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.simplerule')), + ('reaction_smarts', models.TextField(verbose_name='SMIRKS')), + ], + options={ + 'abstract': False, + 'base_manager_name': 'objects', + }, + bases=('epdb.simplerule',), + ), + migrations.CreateModel( + name='SequentialRuleOrdering', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('order_index', models.IntegerField()), + ('sequential_rule', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.sequentialrule')), + ('simple_rule', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.simplerule')), + ], + ), + migrations.AddField( + model_name='sequentialrule', + name='simple_rules', + field=models.ManyToManyField(through='epdb.SequentialRuleOrdering', to='epdb.simplerule', verbose_name='Simple rules'), + ), + migrations.CreateModel( + name='ParallelRule', + fields=[ + ('rule_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='epdb.rule')), + ('simple_rules', models.ManyToManyField(to='epdb.simplerule', verbose_name='Simple rules')), + ], + options={ + 'abstract': False, + 'base_manager_name': 'objects', + }, + bases=('epdb.rule',), + ), + migrations.AlterUniqueTogether( + name='compound', + unique_together={('uuid', 'package')}, + ), + migrations.CreateModel( + name='AdditionalInformation', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)), + ('url', models.TextField(null=True, unique=True, verbose_name='URL')), + ('kv', models.JSONField(blank=True, default=dict, null=True)), + ('type', models.TextField(verbose_name='Additional Information Type')), + ('data', models.JSONField(blank=True, default=dict, null=True)), + ('object_id', models.PositiveBigIntegerField(blank=True, null=True)), + ('content_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.EPDB_PACKAGE_MODEL, verbose_name='Package')), + ('scenario', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='scenario_additional_information', to='epdb.scenario')), + ], + options={ + 'indexes': [models.Index(fields=['type'], name='epdb_additi_type_394349_idx'), models.Index(fields=['scenario', 'type'], name='epdb_additi_scenari_a59edf_idx'), models.Index(fields=['content_type', 'object_id'], name='epdb_additi_content_44d4b4_idx'), models.Index(fields=['scenario', 'content_type', 'object_id'], name='epdb_additi_scenari_ef2bf5_idx')], + 'constraints': [models.CheckConstraint(condition=models.Q(models.Q(('content_type__isnull', True), ('object_id__isnull', True)), models.Q(('content_type__isnull', False), ('object_id__isnull', False)), _connector='OR'), name='ck_addinfo_gfk_pair'), models.CheckConstraint(condition=models.Q(('scenario__isnull', False), ('content_type__isnull', False), _connector='OR'), name='ck_addinfo_not_both_null')], + }, + ), + migrations.CreateModel( + name='GroupPackagePermission', + fields=[ + ('permission_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, to='epdb.permission')), + ('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='UUID of this object')), + ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.group', verbose_name='Permission to')), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.EPDB_PACKAGE_MODEL, verbose_name='Permission on')), + ], + options={ + 'unique_together': {('package', 'group')}, + }, + bases=('epdb.permission',), + ), + migrations.CreateModel( + name='UserPackagePermission', + fields=[ + ('permission_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, to='epdb.permission')), + ('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='UUID of this object')), + ('package', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.EPDB_PACKAGE_MODEL, verbose_name='Permission on')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Permission to')), + ], + options={ + 'unique_together': {('package', 'user')}, + }, + bases=('epdb.permission',), + ), + migrations.CreateModel( + name='UserSettingPermission', + fields=[ + ('permission_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, to='epdb.permission')), + ('uuid', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='UUID of this object')), + ('setting', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='epdb.setting', verbose_name='Permission on')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Permission to')), + ], + options={ + 'unique_together': {('setting', 'user')}, + }, + bases=('epdb.permission',), ), ]