authentik.providers.scim.migrations.0007_scimgroup_scim_id_scimuser_scim_id_and_more

 1# Generated by Django 5.0.4 on 2024-05-03 12:38
 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
 9from authentik.lib.migrations import progress_bar
10
11
12def fix_scim_user_group_pk(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
13    SCIMUser = apps.get_model("authentik_providers_scim", "SCIMUser")
14    SCIMGroup = apps.get_model("authentik_providers_scim", "SCIMGroup")
15    db_alias = schema_editor.connection.alias
16    print("\nFixing primary key for SCIM users, this might take a couple of minutes...")
17    for user in progress_bar(SCIMUser.objects.using(db_alias).all()):
18        SCIMUser.objects.using(db_alias).filter(
19            pk=user.pk, user=user.user_id, provider=user.provider_id
20        ).update(scim_id=user.pk, id=uuid.uuid4())
21
22    print("\nFixing primary key for SCIM groups, this might take a couple of minutes...")
23    for group in progress_bar(SCIMGroup.objects.using(db_alias).all()):
24        SCIMGroup.objects.using(db_alias).filter(
25            pk=group.pk, group=group.group_id, provider=group.provider_id
26        ).update(scim_id=group.pk, id=uuid.uuid4())
27
28
29class Migration(migrations.Migration):
30
31    dependencies = [
32        (
33            "authentik_providers_scim",
34            "0001_squashed_0006_rename_parent_group_scimprovider_filter_group",
35        ),
36    ]
37
38    operations = [
39        migrations.AddField(
40            model_name="scimgroup",
41            name="scim_id",
42            field=models.TextField(default="temp"),
43            preserve_default=False,
44        ),
45        migrations.AddField(
46            model_name="scimuser",
47            name="scim_id",
48            field=models.TextField(default="temp"),
49            preserve_default=False,
50        ),
51        migrations.RunPython(fix_scim_user_group_pk),
52        migrations.AlterField(
53            model_name="scimgroup",
54            name="id",
55            field=models.UUIDField(
56                default=uuid.uuid4, editable=False, primary_key=True, serialize=False
57            ),
58        ),
59        migrations.AlterField(
60            model_name="scimuser",
61            name="id",
62            field=models.UUIDField(
63                default=uuid.uuid4, editable=False, primary_key=True, serialize=False
64            ),
65        ),
66        migrations.AlterField(model_name="scimuser", name="scim_id", field=models.TextField()),
67        migrations.AlterField(model_name="scimgroup", name="scim_id", field=models.TextField()),
68        migrations.AlterUniqueTogether(
69            name="scimgroup",
70            unique_together={("scim_id", "group", "provider")},
71        ),
72        migrations.AlterUniqueTogether(
73            name="scimuser",
74            unique_together={("scim_id", "user", "provider")},
75        ),
76    ]
def fix_scim_user_group_pk( apps: django.apps.registry.Apps, schema_editor: django.db.backends.base.schema.BaseDatabaseSchemaEditor):
13def fix_scim_user_group_pk(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
14    SCIMUser = apps.get_model("authentik_providers_scim", "SCIMUser")
15    SCIMGroup = apps.get_model("authentik_providers_scim", "SCIMGroup")
16    db_alias = schema_editor.connection.alias
17    print("\nFixing primary key for SCIM users, this might take a couple of minutes...")
18    for user in progress_bar(SCIMUser.objects.using(db_alias).all()):
19        SCIMUser.objects.using(db_alias).filter(
20            pk=user.pk, user=user.user_id, provider=user.provider_id
21        ).update(scim_id=user.pk, id=uuid.uuid4())
22
23    print("\nFixing primary key for SCIM groups, this might take a couple of minutes...")
24    for group in progress_bar(SCIMGroup.objects.using(db_alias).all()):
25        SCIMGroup.objects.using(db_alias).filter(
26            pk=group.pk, group=group.group_id, provider=group.provider_id
27        ).update(scim_id=group.pk, id=uuid.uuid4())
class Migration(django.db.migrations.migration.Migration):
30class Migration(migrations.Migration):
31
32    dependencies = [
33        (
34            "authentik_providers_scim",
35            "0001_squashed_0006_rename_parent_group_scimprovider_filter_group",
36        ),
37    ]
38
39    operations = [
40        migrations.AddField(
41            model_name="scimgroup",
42            name="scim_id",
43            field=models.TextField(default="temp"),
44            preserve_default=False,
45        ),
46        migrations.AddField(
47            model_name="scimuser",
48            name="scim_id",
49            field=models.TextField(default="temp"),
50            preserve_default=False,
51        ),
52        migrations.RunPython(fix_scim_user_group_pk),
53        migrations.AlterField(
54            model_name="scimgroup",
55            name="id",
56            field=models.UUIDField(
57                default=uuid.uuid4, editable=False, primary_key=True, serialize=False
58            ),
59        ),
60        migrations.AlterField(
61            model_name="scimuser",
62            name="id",
63            field=models.UUIDField(
64                default=uuid.uuid4, editable=False, primary_key=True, serialize=False
65            ),
66        ),
67        migrations.AlterField(model_name="scimuser", name="scim_id", field=models.TextField()),
68        migrations.AlterField(model_name="scimgroup", name="scim_id", field=models.TextField()),
69        migrations.AlterUniqueTogether(
70            name="scimgroup",
71            unique_together={("scim_id", "group", "provider")},
72        ),
73        migrations.AlterUniqueTogether(
74            name="scimuser",
75            unique_together={("scim_id", "user", "provider")},
76        ),
77    ]

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_providers_scim', '0001_squashed_0006_rename_parent_group_scimprovider_filter_group')]
operations = [<AddField model_name='scimgroup', name='scim_id', field=<django.db.models.fields.TextField>, preserve_default=False>, <AddField model_name='scimuser', name='scim_id', field=<django.db.models.fields.TextField>, preserve_default=False>, <RunPython <function fix_scim_user_group_pk>>, <AlterField model_name='scimgroup', name='id', field=<django.db.models.fields.UUIDField>>, <AlterField model_name='scimuser', name='id', field=<django.db.models.fields.UUIDField>>, <AlterField model_name='scimuser', name='scim_id', field=<django.db.models.fields.TextField>>, <AlterField model_name='scimgroup', name='scim_id', field=<django.db.models.fields.TextField>>, <AlterUniqueTogether name='scimgroup', unique_together={('scim_id', 'group', 'provider')}>, <AlterUniqueTogether name='scimuser', unique_together={('scim_id', 'user', 'provider')}>]