authentik.sources.scim.migrations.0003_alter_scimsourcegroup_unique_together_and_more

 1# Generated by Django 5.1.11 on 2025-07-13 01:07
 2
 3import uuid
 4from django.db import migrations, models
 5from django.apps.registry import Apps
 6
 7from django.db.backends.base.schema import BaseDatabaseSchemaEditor
 8
 9
10def migrate_ext_id(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
11    SCIMSourceUser = apps.get_model("authentik_sources_scim", "SCIMSourceUser")
12    SCIMSourceGroup = apps.get_model("authentik_sources_scim", "SCIMSourceGroup")
13    db_alias = schema_editor.connection.alias
14    for user in SCIMSourceUser.objects.using(db_alias).all():
15        user.external_id = user.id
16        user.save(update_fields=["external_id"])
17    for group in SCIMSourceGroup.objects.using(db_alias).all():
18        group.external_id = group.id
19        group.save(update_fields=["external_id"])
20
21
22class Migration(migrations.Migration):
23
24    dependencies = [
25        ("authentik_sources_scim", "0002_scimsourcepropertymapping"),
26    ]
27
28    operations = [
29        migrations.AlterUniqueTogether(
30            name="scimsourcegroup",
31            unique_together=set(),
32        ),
33        migrations.AlterUniqueTogether(
34            name="scimsourceuser",
35            unique_together=set(),
36        ),
37        migrations.AddField(
38            model_name="scimsourcegroup",
39            name="external_id",
40            field=models.TextField(default=None, null=True),
41            preserve_default=False,
42        ),
43        migrations.AddField(
44            model_name="scimsourceuser",
45            name="external_id",
46            field=models.TextField(default=None, null=True),
47            preserve_default=False,
48        ),
49        migrations.AlterUniqueTogether(
50            name="scimsourcegroup",
51            unique_together={("external_id", "source")},
52        ),
53        migrations.AlterUniqueTogether(
54            name="scimsourceuser",
55            unique_together={("external_id", "source")},
56        ),
57        migrations.RunPython(migrate_ext_id, migrations.RunPython.noop),
58        migrations.AlterField(
59            model_name="scimsourcegroup",
60            name="external_id",
61            field=models.TextField(),
62            preserve_default=False,
63        ),
64        migrations.AlterField(
65            model_name="scimsourceuser",
66            name="external_id",
67            field=models.TextField(),
68            preserve_default=False,
69        ),
70        migrations.AddIndex(
71            model_name="scimsourcegroup",
72            index=models.Index(fields=["external_id"], name="authentik_s_externa_05e346_idx"),
73        ),
74        migrations.AddIndex(
75            model_name="scimsourceuser",
76            index=models.Index(fields=["external_id"], name="authentik_s_externa_4bd760_idx"),
77        ),
78        migrations.AlterField(
79            model_name="scimsourcegroup",
80            name="id",
81            field=models.TextField(default=uuid.uuid4, primary_key=True, serialize=False),
82        ),
83        migrations.AlterField(
84            model_name="scimsourceuser",
85            name="id",
86            field=models.TextField(default=uuid.uuid4, primary_key=True, serialize=False),
87        ),
88        migrations.AddField(
89            model_name="scimsourcegroup",
90            name="last_update",
91            field=models.DateTimeField(auto_now=True),
92        ),
93        migrations.AddField(
94            model_name="scimsourceuser",
95            name="last_update",
96            field=models.DateTimeField(auto_now=True),
97        ),
98    ]
def migrate_ext_id( apps: django.apps.registry.Apps, schema_editor: django.db.backends.base.schema.BaseDatabaseSchemaEditor):
11def migrate_ext_id(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
12    SCIMSourceUser = apps.get_model("authentik_sources_scim", "SCIMSourceUser")
13    SCIMSourceGroup = apps.get_model("authentik_sources_scim", "SCIMSourceGroup")
14    db_alias = schema_editor.connection.alias
15    for user in SCIMSourceUser.objects.using(db_alias).all():
16        user.external_id = user.id
17        user.save(update_fields=["external_id"])
18    for group in SCIMSourceGroup.objects.using(db_alias).all():
19        group.external_id = group.id
20        group.save(update_fields=["external_id"])
class Migration(django.db.migrations.migration.Migration):
23class Migration(migrations.Migration):
24
25    dependencies = [
26        ("authentik_sources_scim", "0002_scimsourcepropertymapping"),
27    ]
28
29    operations = [
30        migrations.AlterUniqueTogether(
31            name="scimsourcegroup",
32            unique_together=set(),
33        ),
34        migrations.AlterUniqueTogether(
35            name="scimsourceuser",
36            unique_together=set(),
37        ),
38        migrations.AddField(
39            model_name="scimsourcegroup",
40            name="external_id",
41            field=models.TextField(default=None, null=True),
42            preserve_default=False,
43        ),
44        migrations.AddField(
45            model_name="scimsourceuser",
46            name="external_id",
47            field=models.TextField(default=None, null=True),
48            preserve_default=False,
49        ),
50        migrations.AlterUniqueTogether(
51            name="scimsourcegroup",
52            unique_together={("external_id", "source")},
53        ),
54        migrations.AlterUniqueTogether(
55            name="scimsourceuser",
56            unique_together={("external_id", "source")},
57        ),
58        migrations.RunPython(migrate_ext_id, migrations.RunPython.noop),
59        migrations.AlterField(
60            model_name="scimsourcegroup",
61            name="external_id",
62            field=models.TextField(),
63            preserve_default=False,
64        ),
65        migrations.AlterField(
66            model_name="scimsourceuser",
67            name="external_id",
68            field=models.TextField(),
69            preserve_default=False,
70        ),
71        migrations.AddIndex(
72            model_name="scimsourcegroup",
73            index=models.Index(fields=["external_id"], name="authentik_s_externa_05e346_idx"),
74        ),
75        migrations.AddIndex(
76            model_name="scimsourceuser",
77            index=models.Index(fields=["external_id"], name="authentik_s_externa_4bd760_idx"),
78        ),
79        migrations.AlterField(
80            model_name="scimsourcegroup",
81            name="id",
82            field=models.TextField(default=uuid.uuid4, primary_key=True, serialize=False),
83        ),
84        migrations.AlterField(
85            model_name="scimsourceuser",
86            name="id",
87            field=models.TextField(default=uuid.uuid4, primary_key=True, serialize=False),
88        ),
89        migrations.AddField(
90            model_name="scimsourcegroup",
91            name="last_update",
92            field=models.DateTimeField(auto_now=True),
93        ),
94        migrations.AddField(
95            model_name="scimsourceuser",
96            name="last_update",
97            field=models.DateTimeField(auto_now=True),
98        ),
99    ]

The base class for all migrations.

Migration files will import this from django.db.migrations.Migration and subclass it as a class called Migration. It will have one or more of the following attributes:

  • operations: A list of Operation instances, probably from django.db.migrations.operations
  • dependencies: A list of tuples of (app_path, migration_name)
  • run_before: A list of tuples of (app_path, migration_name)
  • replaces: A list of migration_names

Note that all migrations come out of migrations and into the Loader or Graph as instances, having been initialized with their app label and name.

dependencies = [('authentik_sources_scim', '0002_scimsourcepropertymapping')]
operations = [<AlterUniqueTogether name='scimsourcegroup', unique_together=set()>, <AlterUniqueTogether name='scimsourceuser', unique_together=set()>, <AddField model_name='scimsourcegroup', name='external_id', field=<django.db.models.fields.TextField>, preserve_default=False>, <AddField model_name='scimsourceuser', name='external_id', field=<django.db.models.fields.TextField>, preserve_default=False>, <AlterUniqueTogether name='scimsourcegroup', unique_together={('external_id', 'source')}>, <AlterUniqueTogether name='scimsourceuser', unique_together={('external_id', 'source')}>, <RunPython <function migrate_ext_id>, <function RunPython.noop>>, <AlterField model_name='scimsourcegroup', name='external_id', field=<django.db.models.fields.TextField>, preserve_default=False>, <AlterField model_name='scimsourceuser', name='external_id', field=<django.db.models.fields.TextField>, preserve_default=False>, <AddIndex model_name='scimsourcegroup', index=<Index: fields=['external_id'] name='authentik_s_externa_05e346_idx'>>, <AddIndex model_name='scimsourceuser', index=<Index: fields=['external_id'] name='authentik_s_externa_4bd760_idx'>>, <AlterField model_name='scimsourcegroup', name='id', field=<django.db.models.fields.TextField>>, <AlterField model_name='scimsourceuser', name='id', field=<django.db.models.fields.TextField>>, <AddField model_name='scimsourcegroup', name='last_update', field=<django.db.models.fields.DateTimeField>>, <AddField model_name='scimsourceuser', name='last_update', field=<django.db.models.fields.DateTimeField>>]