authentik.policies.migrations.0005_binding_group

 1# Generated by Django 3.1.6 on 2021-02-08 18:36
 2
 3import django.db.models.deletion
 4from django.apps.registry import Apps
 5from django.conf import settings
 6from django.db import migrations, models
 7from django.db.backends.base.schema import BaseDatabaseSchemaEditor
 8
 9import authentik.lib.models
10
11
12def migrate_from_groupmembership(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
13    try:
14        GroupMembershipPolicy = apps.get_model(
15            "authentik_policies_group_membership", "GroupMembershipPolicy"
16        )
17    except LookupError:
18        # GroupMembership app isn't installed, ignore migration
19        return
20    PolicyBinding = apps.get_model("authentik_policies", "PolicyBinding")
21
22    db_alias = schema_editor.connection.alias
23
24    for membership in GroupMembershipPolicy.objects.using(db_alias).all():
25        for binding in PolicyBinding.objects.using(db_alias).filter(policy=membership):
26            binding.group = membership.group
27            binding.policy = None
28            binding.save()
29        membership.delete()
30
31
32class Migration(migrations.Migration):
33    dependencies = [
34        ("authentik_core", "0017_managed"),
35        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
36        ("authentik_policies", "0004_policy_execution_logging"),
37    ]
38
39    operations = [
40        migrations.AddField(
41            model_name="policybinding",
42            name="group",
43            field=models.ForeignKey(
44                blank=True,
45                default=None,
46                null=True,
47                on_delete=django.db.models.deletion.CASCADE,
48                to="authentik_core.group",
49            ),
50        ),
51        migrations.AddField(
52            model_name="policybinding",
53            name="user",
54            field=models.ForeignKey(
55                blank=True,
56                default=None,
57                null=True,
58                on_delete=django.db.models.deletion.CASCADE,
59                to=settings.AUTH_USER_MODEL,
60            ),
61        ),
62        migrations.AlterField(
63            model_name="policybinding",
64            name="policy",
65            field=authentik.lib.models.InheritanceForeignKey(
66                blank=True,
67                default=None,
68                null=True,
69                on_delete=django.db.models.deletion.CASCADE,
70                related_name="+",
71                to="authentik_policies.policy",
72            ),
73        ),
74        migrations.RunPython(migrate_from_groupmembership),
75    ]
def migrate_from_groupmembership( apps: django.apps.registry.Apps, schema_editor: django.db.backends.base.schema.BaseDatabaseSchemaEditor):
13def migrate_from_groupmembership(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
14    try:
15        GroupMembershipPolicy = apps.get_model(
16            "authentik_policies_group_membership", "GroupMembershipPolicy"
17        )
18    except LookupError:
19        # GroupMembership app isn't installed, ignore migration
20        return
21    PolicyBinding = apps.get_model("authentik_policies", "PolicyBinding")
22
23    db_alias = schema_editor.connection.alias
24
25    for membership in GroupMembershipPolicy.objects.using(db_alias).all():
26        for binding in PolicyBinding.objects.using(db_alias).filter(policy=membership):
27            binding.group = membership.group
28            binding.policy = None
29            binding.save()
30        membership.delete()
class Migration(django.db.migrations.migration.Migration):
33class Migration(migrations.Migration):
34    dependencies = [
35        ("authentik_core", "0017_managed"),
36        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
37        ("authentik_policies", "0004_policy_execution_logging"),
38    ]
39
40    operations = [
41        migrations.AddField(
42            model_name="policybinding",
43            name="group",
44            field=models.ForeignKey(
45                blank=True,
46                default=None,
47                null=True,
48                on_delete=django.db.models.deletion.CASCADE,
49                to="authentik_core.group",
50            ),
51        ),
52        migrations.AddField(
53            model_name="policybinding",
54            name="user",
55            field=models.ForeignKey(
56                blank=True,
57                default=None,
58                null=True,
59                on_delete=django.db.models.deletion.CASCADE,
60                to=settings.AUTH_USER_MODEL,
61            ),
62        ),
63        migrations.AlterField(
64            model_name="policybinding",
65            name="policy",
66            field=authentik.lib.models.InheritanceForeignKey(
67                blank=True,
68                default=None,
69                null=True,
70                on_delete=django.db.models.deletion.CASCADE,
71                related_name="+",
72                to="authentik_policies.policy",
73            ),
74        ),
75        migrations.RunPython(migrate_from_groupmembership),
76    ]

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_core', '0017_managed'), ('authentik_core', '__first__'), ('authentik_policies', '0004_policy_execution_logging')]
operations = [<AddField model_name='policybinding', name='group', field=<django.db.models.fields.related.ForeignKey>>, <AddField model_name='policybinding', name='user', field=<django.db.models.fields.related.ForeignKey>>, <AlterField model_name='policybinding', name='policy', field=<authentik.lib.models.InheritanceForeignKey>>, <RunPython <function migrate_from_groupmembership>>]