authentik.enterprise.lifecycle.migrations.0001_initial
1# Generated by Django 5.2.11 on 2026-02-09 15:57 2 3import authentik.lib.utils.time 4import django.db.models.deletion 5import uuid 6from django.conf import settings 7from django.db import migrations, models 8 9 10class Migration(migrations.Migration): 11 12 initial = True 13 14 dependencies = [ 15 ("authentik_core", "0057_remove_user_groups_remove_user_user_permissions_and_more"), 16 ("authentik_events", "0016_alter_event_action"), 17 ("contenttypes", "0002_remove_content_type_name"), 18 migrations.swappable_dependency(settings.AUTH_USER_MODEL), 19 ] 20 21 operations = [ 22 migrations.CreateModel( 23 name="LifecycleRule", 24 fields=[ 25 ("id", models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), 26 ("name", models.TextField(unique=True)), 27 ("object_id", models.TextField(default=None, null=True)), 28 ( 29 "interval", 30 models.TextField( 31 default="days=60", 32 validators=[authentik.lib.utils.time.timedelta_string_validator], 33 ), 34 ), 35 ( 36 "grace_period", 37 models.TextField( 38 default="days=30", 39 validators=[authentik.lib.utils.time.timedelta_string_validator], 40 ), 41 ), 42 ("min_reviewers", models.PositiveSmallIntegerField(default=1)), 43 ("min_reviewers_is_per_group", models.BooleanField(default=False)), 44 ( 45 "content_type", 46 models.ForeignKey( 47 on_delete=django.db.models.deletion.CASCADE, to="contenttypes.contenttype" 48 ), 49 ), 50 ( 51 "notification_transports", 52 models.ManyToManyField( 53 blank=True, 54 help_text="Select which transports should be used to notify the reviewers. If none are selected, the notification will only be shown in the authentik UI.", 55 to="authentik_events.notificationtransport", 56 ), 57 ), 58 ("reviewer_groups", models.ManyToManyField(blank=True, to="authentik_core.group")), 59 ("reviewers", models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL)), 60 ], 61 ), 62 migrations.CreateModel( 63 name="LifecycleIteration", 64 fields=[ 65 ( 66 "managed", 67 models.TextField( 68 default=None, 69 help_text="Objects that are managed by authentik. These objects are created and updated automatically. This flag only indicates that an object can be overwritten by migrations. You can still modify the objects via the API, but expect changes to be overwritten in a later update.", 70 null=True, 71 unique=True, 72 verbose_name="Managed by authentik", 73 ), 74 ), 75 ("id", models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), 76 ("object_id", models.TextField()), 77 ( 78 "state", 79 models.CharField( 80 choices=[ 81 ("REVIEWED", "Reviewed"), 82 ("PENDING", "Pending"), 83 ("OVERDUE", "Overdue"), 84 ("CANCELED", "Canceled"), 85 ], 86 default="PENDING", 87 max_length=10, 88 ), 89 ), 90 ("opened_on", models.DateField(auto_now_add=True)), 91 ( 92 "content_type", 93 models.ForeignKey( 94 on_delete=django.db.models.deletion.CASCADE, to="contenttypes.contenttype" 95 ), 96 ), 97 ( 98 "rule", 99 models.ForeignKey( 100 null=True, 101 on_delete=django.db.models.deletion.SET_NULL, 102 to="authentik_lifecycle.lifecyclerule", 103 ), 104 ), 105 ], 106 ), 107 migrations.CreateModel( 108 name="Review", 109 fields=[ 110 ("id", models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), 111 ("timestamp", models.DateTimeField(auto_now_add=True)), 112 ("note", models.TextField(null=True)), 113 ( 114 "iteration", 115 models.ForeignKey( 116 on_delete=django.db.models.deletion.CASCADE, 117 to="authentik_lifecycle.lifecycleiteration", 118 ), 119 ), 120 ( 121 "reviewer", 122 models.ForeignKey( 123 on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL 124 ), 125 ), 126 ], 127 ), 128 migrations.AddIndex( 129 model_name="lifecyclerule", 130 index=models.Index(fields=["content_type"], name="authentik_l_content_4e3a6a_idx"), 131 ), 132 migrations.AddConstraint( 133 model_name="lifecyclerule", 134 constraint=models.UniqueConstraint( 135 condition=models.Q(("object_id__isnull", True)), 136 fields=("content_type",), 137 name="uniq_lifecycle_rule_ct_null_object", 138 ), 139 ), 140 migrations.AlterUniqueTogether( 141 name="lifecyclerule", 142 unique_together={("content_type", "object_id")}, 143 ), 144 migrations.AddIndex( 145 model_name="lifecycleiteration", 146 index=models.Index( 147 fields=["content_type", "opened_on"], name="authentik_l_content_09c32a_idx" 148 ), 149 ), 150 migrations.AlterUniqueTogether( 151 name="review", 152 unique_together={("iteration", "reviewer")}, 153 ), 154 ]
class
Migration(django.db.migrations.migration.Migration):
11class Migration(migrations.Migration): 12 13 initial = True 14 15 dependencies = [ 16 ("authentik_core", "0057_remove_user_groups_remove_user_user_permissions_and_more"), 17 ("authentik_events", "0016_alter_event_action"), 18 ("contenttypes", "0002_remove_content_type_name"), 19 migrations.swappable_dependency(settings.AUTH_USER_MODEL), 20 ] 21 22 operations = [ 23 migrations.CreateModel( 24 name="LifecycleRule", 25 fields=[ 26 ("id", models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), 27 ("name", models.TextField(unique=True)), 28 ("object_id", models.TextField(default=None, null=True)), 29 ( 30 "interval", 31 models.TextField( 32 default="days=60", 33 validators=[authentik.lib.utils.time.timedelta_string_validator], 34 ), 35 ), 36 ( 37 "grace_period", 38 models.TextField( 39 default="days=30", 40 validators=[authentik.lib.utils.time.timedelta_string_validator], 41 ), 42 ), 43 ("min_reviewers", models.PositiveSmallIntegerField(default=1)), 44 ("min_reviewers_is_per_group", models.BooleanField(default=False)), 45 ( 46 "content_type", 47 models.ForeignKey( 48 on_delete=django.db.models.deletion.CASCADE, to="contenttypes.contenttype" 49 ), 50 ), 51 ( 52 "notification_transports", 53 models.ManyToManyField( 54 blank=True, 55 help_text="Select which transports should be used to notify the reviewers. If none are selected, the notification will only be shown in the authentik UI.", 56 to="authentik_events.notificationtransport", 57 ), 58 ), 59 ("reviewer_groups", models.ManyToManyField(blank=True, to="authentik_core.group")), 60 ("reviewers", models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL)), 61 ], 62 ), 63 migrations.CreateModel( 64 name="LifecycleIteration", 65 fields=[ 66 ( 67 "managed", 68 models.TextField( 69 default=None, 70 help_text="Objects that are managed by authentik. These objects are created and updated automatically. This flag only indicates that an object can be overwritten by migrations. You can still modify the objects via the API, but expect changes to be overwritten in a later update.", 71 null=True, 72 unique=True, 73 verbose_name="Managed by authentik", 74 ), 75 ), 76 ("id", models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), 77 ("object_id", models.TextField()), 78 ( 79 "state", 80 models.CharField( 81 choices=[ 82 ("REVIEWED", "Reviewed"), 83 ("PENDING", "Pending"), 84 ("OVERDUE", "Overdue"), 85 ("CANCELED", "Canceled"), 86 ], 87 default="PENDING", 88 max_length=10, 89 ), 90 ), 91 ("opened_on", models.DateField(auto_now_add=True)), 92 ( 93 "content_type", 94 models.ForeignKey( 95 on_delete=django.db.models.deletion.CASCADE, to="contenttypes.contenttype" 96 ), 97 ), 98 ( 99 "rule", 100 models.ForeignKey( 101 null=True, 102 on_delete=django.db.models.deletion.SET_NULL, 103 to="authentik_lifecycle.lifecyclerule", 104 ), 105 ), 106 ], 107 ), 108 migrations.CreateModel( 109 name="Review", 110 fields=[ 111 ("id", models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), 112 ("timestamp", models.DateTimeField(auto_now_add=True)), 113 ("note", models.TextField(null=True)), 114 ( 115 "iteration", 116 models.ForeignKey( 117 on_delete=django.db.models.deletion.CASCADE, 118 to="authentik_lifecycle.lifecycleiteration", 119 ), 120 ), 121 ( 122 "reviewer", 123 models.ForeignKey( 124 on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL 125 ), 126 ), 127 ], 128 ), 129 migrations.AddIndex( 130 model_name="lifecyclerule", 131 index=models.Index(fields=["content_type"], name="authentik_l_content_4e3a6a_idx"), 132 ), 133 migrations.AddConstraint( 134 model_name="lifecyclerule", 135 constraint=models.UniqueConstraint( 136 condition=models.Q(("object_id__isnull", True)), 137 fields=("content_type",), 138 name="uniq_lifecycle_rule_ct_null_object", 139 ), 140 ), 141 migrations.AlterUniqueTogether( 142 name="lifecyclerule", 143 unique_together={("content_type", "object_id")}, 144 ), 145 migrations.AddIndex( 146 model_name="lifecycleiteration", 147 index=models.Index( 148 fields=["content_type", "opened_on"], name="authentik_l_content_09c32a_idx" 149 ), 150 ), 151 migrations.AlterUniqueTogether( 152 name="review", 153 unique_together={("iteration", "reviewer")}, 154 ), 155 ]
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', '0057_remove_user_groups_remove_user_user_permissions_and_more'), ('authentik_events', '0016_alter_event_action'), ('contenttypes', '0002_remove_content_type_name'), ('authentik_core', '__first__')]
operations =
[<CreateModel name='LifecycleRule', fields=[('id', <django.db.models.fields.UUIDField>), ('name', <django.db.models.fields.TextField>), ('object_id', <django.db.models.fields.TextField>), ('interval', <django.db.models.fields.TextField>), ('grace_period', <django.db.models.fields.TextField>), ('min_reviewers', <django.db.models.fields.PositiveSmallIntegerField>), ('min_reviewers_is_per_group', <django.db.models.fields.BooleanField>), ('content_type', <django.db.models.fields.related.ForeignKey>), ('notification_transports', <django.db.models.fields.related.ManyToManyField>), ('reviewer_groups', <django.db.models.fields.related.ManyToManyField>), ('reviewers', <django.db.models.fields.related.ManyToManyField>)]>, <CreateModel name='LifecycleIteration', fields=[('managed', <django.db.models.fields.TextField>), ('id', <django.db.models.fields.UUIDField>), ('object_id', <django.db.models.fields.TextField>), ('state', <django.db.models.fields.CharField>), ('opened_on', <django.db.models.fields.DateField>), ('content_type', <django.db.models.fields.related.ForeignKey>), ('rule', <django.db.models.fields.related.ForeignKey>)]>, <CreateModel name='Review', fields=[('id', <django.db.models.fields.UUIDField>), ('timestamp', <django.db.models.fields.DateTimeField>), ('note', <django.db.models.fields.TextField>), ('iteration', <django.db.models.fields.related.ForeignKey>), ('reviewer', <django.db.models.fields.related.ForeignKey>)]>, <AddIndex model_name='lifecyclerule', index=<Index: fields=['content_type'] name='authentik_l_content_4e3a6a_idx'>>, <AddConstraint model_name='lifecyclerule', constraint=<UniqueConstraint: fields=('content_type',) name='uniq_lifecycle_rule_ct_null_object' condition=(AND: ('object_id__isnull', True))>>, <AlterUniqueTogether name='lifecyclerule', unique_together={('content_type', 'object_id')}>, <AddIndex model_name='lifecycleiteration', index=<Index: fields=['content_type', 'opened_on'] name='authentik_l_content_09c32a_idx'>>, <AlterUniqueTogether name='review', unique_together={('iteration', 'reviewer')}>]