Skip to content
37 changes: 9 additions & 28 deletions django_gem_taxonomy/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Generated by Django 4.2.27 on 2026-08-21 15:45
# Generated by Django 4.2.11 on 2024-11-13 16:45

from django.db import migrations, models
import django.db.models.deletion
Expand All @@ -12,76 +12,57 @@ class Migration(migrations.Migration):
]

operations = [
migrations.CreateModel(
name='Version',
fields=[
('vers', models.CharField(max_length=16, primary_key=True, serialize=False)),
('desc', models.TextField()),
('is_default', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='Attribute',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=256)),
('name', models.CharField(max_length=256, primary_key=True, serialize=False)),
('prog', models.IntegerField()),
('title', models.TextField()),
('vers', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.version')),
],
options={
'unique_together': {('vers', 'prog'), ('vers', 'name')},
},
),
migrations.CreateModel(
name='AtomsGroup',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=256)),
('name', models.CharField(max_length=256, primary_key=True, serialize=False)),
('prog', models.IntegerField()),
('title', models.TextField()),
('mutex', models.BooleanField(default=True)),
('attr', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.attribute')),
('vers', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.version')),
],
options={
'unique_together': {('vers', 'attr', 'prog'), ('vers', 'attr', 'name')},
'unique_together': {('attr', 'prog')},
},
),
migrations.CreateModel(
name='Atom',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=32)),
('name', models.CharField(max_length=32, primary_key=True, serialize=False)),
('prog', models.IntegerField()),
('title', models.TextField()),
('desc', models.TextField()),
('type', models.TextField()),
('args', models.JSONField(blank=True, null=True)),
('params', models.JSONField(blank=True, null=True)),
('attr', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.attribute')),
('deny', models.ManyToManyField(related_name='revdeny', to='django_gem_taxonomy.atom')),
('deps', models.ManyToManyField(related_name='revdeps', to='django_gem_taxonomy.atom')),
('group', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.atomsgroup')),
('vers', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.version')),
],
options={
'unique_together': {('vers', 'name'), ('vers', 'attr', 'group', 'prog')},
'unique_together': {('group', 'prog')},
},
),
migrations.CreateModel(
name='Param',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=32)),
('prog', models.IntegerField()),
('title', models.TextField()),
('desc', models.TextField()),
('prog', models.IntegerField()),
('atom', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.atom')),
('vers', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.version')),
],
options={
'unique_together': {('vers', 'atom', 'name'), ('vers', 'atom', 'prog')},
'unique_together': {('atom', 'name'), ('atom', 'name', 'prog')},
},
),
]
23 changes: 23 additions & 0 deletions django_gem_taxonomy/migrations/0002_atom_deny_alter_param_id.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 4.2.27 on 2026-05-12 17:10

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('django_gem_taxonomy', '0001_initial'),
]

operations = [
migrations.AddField(
model_name='atom',
name='deny',
field=models.ManyToManyField(related_name='revdeny', to='django_gem_taxonomy.atom'),
),
migrations.AlterField(
model_name='param',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Generated by Django 4.2.30 on 2026-09-22 22:37

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('django_gem_taxonomy', '0002_atom_deny_alter_param_id'),
]

operations = [
migrations.CreateModel(
name='Version2',
fields=[
('vers', models.CharField(max_length=16, primary_key=True, serialize=False)),
('desc', models.TextField()),
('is_default', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='Attribute2',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=256)),
('prog', models.IntegerField()),
('title', models.TextField()),
('vers', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.version2')),
],
options={
'unique_together': {('vers', 'name'), ('vers', 'prog')},
},
),
migrations.CreateModel(
name='AtomsGroup2',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=256)),
('prog', models.IntegerField()),
('title', models.TextField()),
('mutex', models.BooleanField(default=True)),
('attr', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.attribute2')),
('vers', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.version2')),
],
options={
'unique_together': {('vers', 'attr', 'name'), ('vers', 'attr', 'prog')},
},
),
migrations.CreateModel(
name='Atom2',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=32)),
('prog', models.IntegerField()),
('title', models.TextField()),
('desc', models.TextField()),
('type', models.TextField()),
('args', models.JSONField(blank=True, null=True)),
('params', models.JSONField(blank=True, null=True)),
('attr', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.attribute2')),
('deny', models.ManyToManyField(related_name='revdeny', to='django_gem_taxonomy.atom2')),
('deps', models.ManyToManyField(related_name='revdeps', to='django_gem_taxonomy.atom2')),
('group', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.atomsgroup2')),
('vers', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.version2')),
],
options={
'unique_together': {('vers', 'attr', 'group', 'prog'), ('vers', 'name')},
},
),
migrations.CreateModel(
name='Param2',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=32)),
('prog', models.IntegerField()),
('title', models.TextField()),
('desc', models.TextField()),
('atom', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.atom2')),
('vers', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='django_gem_taxonomy.version2')),
],
options={
'unique_together': {('vers', 'atom', 'name'), ('vers', 'atom', 'prog')},
},
),
]
194 changes: 194 additions & 0 deletions django_gem_taxonomy/migrations/0004_content_migration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
# Generated by Django 4.2.30 on 2026-09-22 22:39
from django.db import migrations

def dgtaxonomy2dgtaxonomy_two(apps, schema_editor):
db_alias = schema_editor.connection.alias

Attribute= apps.get_model("django_gem_taxonomy", "Attribute")
AtomsGroup= apps.get_model("django_gem_taxonomy", "AtomsGroup")
Atom= apps.get_model("django_gem_taxonomy", "Atom")
Param= apps.get_model("django_gem_taxonomy", "Param")
Version2= apps.get_model("django_gem_taxonomy", "Version2")
Attribute2= apps.get_model("django_gem_taxonomy", "Attribute2")
AtomsGroup2= apps.get_model("django_gem_taxonomy", "AtomsGroup2")
Atom2= apps.get_model("django_gem_taxonomy", "Atom2")
Param2= apps.get_model("django_gem_taxonomy", "Param2")

# migrate to the new schema that includes version as part of the
# unique constraints, the old version has '4.0' as implied

if Attribute.objects.using(db_alias).all().count() == 0:
return

try:
vers = Version2.objects.using(db_alias).get(vers='4.0')
except Version2.DoesNotExist:
vers = Version2.objects.using(db_alias).create(
vers='4.0',
desc='Version 4.0 year 2025',
is_default=True
)

for attr_in in Attribute.objects.using(db_alias).all():
attr = Attribute2.objects.using(db_alias).create(
vers=vers,
name=attr_in.name,
prog=attr_in.prog,
title=attr_in.title,
)

for atg_in in AtomsGroup.objects.using(db_alias).all():
AtomsGroup2.objects.using(db_alias).create(
vers=vers,
name=atg_in.name,
prog=atg_in.prog,
title=atg_in.title,
mutex=atg_in.mutex,
attr=Attribute2.objects.using(db_alias).get(
vers=vers, name=atg_in.attr.name)
)

for at_in in Atom.objects.using(db_alias).all():
if at_in.attr is not None:
attr = Attribute2.objects.using(db_alias).get(
vers=vers, name=at_in.attr.name)
else:
attr = None

if at_in.group is not None:
group = AtomsGroup2.objects.using(db_alias).get(
vers=vers, attr=attr, name=at_in.group.name)
else:
group = None

atom = Atom2.objects.using(db_alias).create(
vers=vers,
name=at_in.name,
prog=at_in.prog,
title=at_in.title,
desc=at_in.desc,
args=at_in.args,
params=at_in.params,
type=at_in.type,
attr=attr,
group=group,
)

for at_in in Atom.objects.using(db_alias).all():
atom = Atom2.objects.using(db_alias).get(vers=vers, name=at_in.name)
for dep in at_in.deps.all():
atom.deps.add(Atom2.objects.using(db_alias).get(
vers=vers, name=dep.name))
for den in at_in.deny.all():
atom.deny.add(Atom2.objects.using(db_alias).get(
vers=vers, name=den.name))

for par_in in Param.objects.using(db_alias).all():
atom = None
if par_in.atom is not None:
atom = Atom2.objects.using(db_alias).get(
vers=vers, name=par_in.atom.name)
Param2.objects.using(db_alias).create(
vers=vers,
atom=atom,
name=par_in.name,
title=par_in.title,
desc=par_in.desc,
prog=par_in.prog,
)

def dgtaxonomy_two2dgtaxonomy(apps, schema_editor):
db_alias = schema_editor.connection.alias

Attribute= apps.get_model("django_gem_taxonomy", "Attribute")
AtomsGroup= apps.get_model("django_gem_taxonomy", "AtomsGroup")
Atom= apps.get_model("django_gem_taxonomy", "Atom")
Param= apps.get_model("django_gem_taxonomy", "Param")
Version2= apps.get_model("django_gem_taxonomy", "Version2")
Attribute2= apps.get_model("django_gem_taxonomy", "Attribute2")
AtomsGroup2= apps.get_model("django_gem_taxonomy", "AtomsGroup2")
Atom2= apps.get_model("django_gem_taxonomy", "Atom2")
Param2= apps.get_model("django_gem_taxonomy", "Param2")

try:
vers = Version2.objects.using(db_alias).get(vers='4.0')
except Version2.DoesNotExist:
return

Param.objects.using(db_alias).delete()
Atom.objects.using(db_alias).delete()
AtomsGroup.objects.using(db_alias).delete()
Attribute.objects.using(db_alias).delete()

for attr_in in Attribute2.objects.using(db_alias).filter(vers=vers):
attr = Attribute.objects.using(db_alias).create(
name=attr_in.name,
prog=attr_in.prog,
title=attr_in.title,
)

for atg_in in AtomsGroup2.objects.using(db_alias).filter(vers=vers):
AtomsGroup.objects.using(db_alias).create(
name=atg_in.name,
prog=atg_in.prog,
title=atg_in.title,
mutex=atg_in.mutex,
attr=Attribute.objects.using(db_alias).get(name=atg_in.attr.name)
)
for at_in in Atom2.objects.using(db_alias).filter(vers=vers):
if at_in.attr is not None:
attr = Attribute.objects.using(db_alias).get(name=at_in.attr.name)
else:
attr = None

if at_in.group is not None:
group = AtomsGroup.objects.using(db_alias).get(attr=attr,
name=at_in.group.name)
else:
group = None

atom = Atom.objects.using(db_alias).create(
name=at_in.name,
prog=at_in.prog,
title=at_in.title,
desc=at_in.desc,
args=at_in.args,
params=at_in.params,
type=at_in.type,
attr=attr,
group=group,
)

for at_in in Atom2.objects.using(db_alias).filter(vers=vers):
atom = Atom.objects.using(db_alias).get(name=at_in.name)
for dep in at_in.deps.all():
atom.deps.add(Atom.objects.using(db_alias).get(name=dep.name))
for den in at_in.deny.all():
atom.deny.add(Atom.objects.using(db_alias).get(name=den.name))

for par_in in Param2.objects.using(db_alias).filter(vers=vers):
atom = None
if par_in.atom is not None:
atom = Atom.objects.using(db_alias).get(name=par_in.atom.name)
Param.objects.using(db_alias).create(
atom=atom,
name=par_in.name,
title=par_in.title,
desc=par_in.desc,
prog=par_in.prog,
)

Param2.objects.using(db_alias).delete()
Atom2.objects.using(db_alias).delete()
AtomsGroup2.objects.using(db_alias).delete()
Attribute2.objects.using(db_alias).delete()

class Migration(migrations.Migration):

dependencies = [
('django_gem_taxonomy', '0003_version2_attribute2_atomsgroup2_atom2_param2'),
]

operations = [
migrations.RunPython(dgtaxonomy2dgtaxonomy_two, dgtaxonomy_two2dgtaxonomy)
]
Loading
Loading