authentik.tasks.migrations.0004_remove_task_notify_enqueueing_and_more

 1# Generated by Django 5.2.7 on 2025-10-08 17:03
 2
 3from django.apps.registry import Apps
 4from django.db.backends.base.schema import BaseDatabaseSchemaEditor
 5import pgtrigger.compiler
 6import pgtrigger.migrations
 7from django.db import migrations, models
 8
 9
10def remove_non_default_messages(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
11    Task = apps.get_model("authentik_tasks", "task")
12
13    db_alias = schema_editor.connection.alias
14    Task.objects.using(db_alias).exclude(queue_name="default").delete()
15
16
17class Migration(migrations.Migration):
18
19    dependencies = [
20        ("authentik_tasks", "0003_task_eta_task_retries"),
21        ("authentik_tenants", "0006_tenant_flags"),
22        ("contenttypes", "0002_remove_content_type_name"),
23    ]
24
25    operations = [
26        pgtrigger.migrations.RemoveTrigger(
27            model_name="task",
28            name="notify_enqueueing",
29        ),
30        migrations.RemoveIndex(
31            model_name="task",
32            name="authentik_t_state_bb4a31_idx",
33        ),
34        migrations.AddIndex(
35            model_name="task",
36            index=models.Index(fields=["queue_name"], name="authentik_t_queue_n_7b09fb_idx"),
37        ),
38        migrations.AddIndex(
39            model_name="task",
40            index=models.Index(
41                fields=["queue_name", "state"], name="authentik_t_queue_n_7ff882_idx"
42            ),
43        ),
44        migrations.AddIndex(
45            model_name="task",
46            index=models.Index(
47                fields=["message_id", "queue_name", "state", "eta"],
48                name="authentik_t_message_8ee59b_idx",
49            ),
50        ),
51        migrations.AddIndex(
52            model_name="task",
53            index=models.Index(
54                fields=["message_id", "state", "eta"], name="authentik_t_message_74b8d7_idx"
55            ),
56        ),
57        migrations.AddIndex(
58            model_name="task",
59            index=models.Index(
60                fields=["message_id", "queue_name", "state"], name="authentik_t_message_affe69_idx"
61            ),
62        ),
63        migrations.AddIndex(
64            model_name="task",
65            index=models.Index(
66                fields=["state", "mtime", "result_expiry"], name="authentik_t_state_bef902_idx"
67            ),
68        ),
69        pgtrigger.migrations.AddTrigger(
70            model_name="task",
71            trigger=pgtrigger.compiler.Trigger(
72                name="notify_enqueueing",
73                sql=pgtrigger.compiler.UpsertTriggerSql(
74                    condition='WHEN (NEW."eta" IS NULL AND NEW."state" = \'queued\')',
75                    constraint="CONSTRAINT",
76                    func="\n                    PERFORM pg_notify(\n                        'authentik.tasks.' || NEW.queue_name || '.enqueue',\n                        NEW.message_id::text\n                    );\n                    RETURN NEW;\n                ",
77                    hash="da36b9a6344d384e5cf4de889a06bf578eaa10ef",
78                    operation="INSERT OR UPDATE",
79                    pgid="pgtrigger_notify_enqueueing_0bc94",
80                    table="authentik_tasks_task",
81                    timing="DEFERRABLE INITIALLY DEFERRED",
82                    when="AFTER",
83                ),
84            ),
85        ),
86        migrations.RunPython(remove_non_default_messages),
87    ]
def remove_non_default_messages( apps: django.apps.registry.Apps, schema_editor: django.db.backends.base.schema.BaseDatabaseSchemaEditor):
11def remove_non_default_messages(apps: Apps, schema_editor: BaseDatabaseSchemaEditor):
12    Task = apps.get_model("authentik_tasks", "task")
13
14    db_alias = schema_editor.connection.alias
15    Task.objects.using(db_alias).exclude(queue_name="default").delete()
class Migration(django.db.migrations.migration.Migration):
18class Migration(migrations.Migration):
19
20    dependencies = [
21        ("authentik_tasks", "0003_task_eta_task_retries"),
22        ("authentik_tenants", "0006_tenant_flags"),
23        ("contenttypes", "0002_remove_content_type_name"),
24    ]
25
26    operations = [
27        pgtrigger.migrations.RemoveTrigger(
28            model_name="task",
29            name="notify_enqueueing",
30        ),
31        migrations.RemoveIndex(
32            model_name="task",
33            name="authentik_t_state_bb4a31_idx",
34        ),
35        migrations.AddIndex(
36            model_name="task",
37            index=models.Index(fields=["queue_name"], name="authentik_t_queue_n_7b09fb_idx"),
38        ),
39        migrations.AddIndex(
40            model_name="task",
41            index=models.Index(
42                fields=["queue_name", "state"], name="authentik_t_queue_n_7ff882_idx"
43            ),
44        ),
45        migrations.AddIndex(
46            model_name="task",
47            index=models.Index(
48                fields=["message_id", "queue_name", "state", "eta"],
49                name="authentik_t_message_8ee59b_idx",
50            ),
51        ),
52        migrations.AddIndex(
53            model_name="task",
54            index=models.Index(
55                fields=["message_id", "state", "eta"], name="authentik_t_message_74b8d7_idx"
56            ),
57        ),
58        migrations.AddIndex(
59            model_name="task",
60            index=models.Index(
61                fields=["message_id", "queue_name", "state"], name="authentik_t_message_affe69_idx"
62            ),
63        ),
64        migrations.AddIndex(
65            model_name="task",
66            index=models.Index(
67                fields=["state", "mtime", "result_expiry"], name="authentik_t_state_bef902_idx"
68            ),
69        ),
70        pgtrigger.migrations.AddTrigger(
71            model_name="task",
72            trigger=pgtrigger.compiler.Trigger(
73                name="notify_enqueueing",
74                sql=pgtrigger.compiler.UpsertTriggerSql(
75                    condition='WHEN (NEW."eta" IS NULL AND NEW."state" = \'queued\')',
76                    constraint="CONSTRAINT",
77                    func="\n                    PERFORM pg_notify(\n                        'authentik.tasks.' || NEW.queue_name || '.enqueue',\n                        NEW.message_id::text\n                    );\n                    RETURN NEW;\n                ",
78                    hash="da36b9a6344d384e5cf4de889a06bf578eaa10ef",
79                    operation="INSERT OR UPDATE",
80                    pgid="pgtrigger_notify_enqueueing_0bc94",
81                    table="authentik_tasks_task",
82                    timing="DEFERRABLE INITIALLY DEFERRED",
83                    when="AFTER",
84                ),
85            ),
86        ),
87        migrations.RunPython(remove_non_default_messages),
88    ]

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_tasks', '0003_task_eta_task_retries'), ('authentik_tenants', '0006_tenant_flags'), ('contenttypes', '0002_remove_content_type_name')]
operations = [<RemoveTrigger model_name='task', name='notify_enqueueing'>, <RemoveIndex model_name='task', name='authentik_t_state_bb4a31_idx'>, <AddIndex model_name='task', index=<Index: fields=['queue_name'] name='authentik_t_queue_n_7b09fb_idx'>>, <AddIndex model_name='task', index=<Index: fields=['queue_name', 'state'] name='authentik_t_queue_n_7ff882_idx'>>, <AddIndex model_name='task', index=<Index: fields=['message_id', 'queue_name', 'state', 'eta'] name='authentik_t_message_8ee59b_idx'>>, <AddIndex model_name='task', index=<Index: fields=['message_id', 'state', 'eta'] name='authentik_t_message_74b8d7_idx'>>, <AddIndex model_name='task', index=<Index: fields=['message_id', 'queue_name', 'state'] name='authentik_t_message_affe69_idx'>>, <AddIndex model_name='task', index=<Index: fields=['state', 'mtime', 'result_expiry'] name='authentik_t_state_bef902_idx'>>, <AddTrigger model_name='task', trigger=<pgtrigger.compiler.Trigger object>>, <RunPython <function remove_non_default_messages>>]