瀏覽代碼

chore(api): upgrade pgtrigger

Peter Thomassen 2 年之前
父節點
當前提交
c043ac555b
共有 2 個文件被更改,包括 72 次插入1 次删除
  1. 71 0
      api/desecapi/migrations/0032_tokendomainpolicy_token_user_and_more.py
  2. 1 1
      api/requirements.txt

+ 71 - 0
api/desecapi/migrations/0032_tokendomainpolicy_token_user_and_more.py

@@ -0,0 +1,71 @@
+# Generated by Django 4.1.9 on 2023-06-08 17:33
+
+from django.db import migrations
+import pgtrigger.compiler
+import pgtrigger.migrations
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("desecapi", "0031_alter_user_email"),
+    ]
+
+    operations = [
+        pgtrigger.migrations.AddTrigger(
+            model_name="tokendomainpolicy",
+            trigger=pgtrigger.compiler.Trigger(
+                name="token_user",
+                sql=pgtrigger.compiler.UpsertTriggerSql(
+                    func="NEW.token_user_id = (SELECT user_id FROM desecapi_token WHERE id = NEW.token_id); RETURN NEW;",
+                    hash="38e318cd25ddc9a7e0323d9a15b3c800acf476f8",
+                    operation="UPDATE OR INSERT",
+                    pgid="pgtrigger_token_user_643b3",
+                    table="desecapi_tokendomainpolicy",
+                    when="BEFORE",
+                ),
+            ),
+        ),
+        pgtrigger.migrations.AddTrigger(
+            model_name="tokendomainpolicy",
+            trigger=pgtrigger.compiler.Trigger(
+                name="default_policy_on_insert",
+                sql=pgtrigger.compiler.UpsertTriggerSql(
+                    func="IF (NEW.domain_id IS NOT NULL and NOT EXISTS(SELECT * FROM desecapi_tokendomainpolicy WHERE domain_id IS NULL AND token_id = NEW.token_id)) THEN   RAISE EXCEPTION 'Cannot insert non-default policy into % table when default policy is not present', TG_TABLE_NAME; END IF; RETURN NEW;",
+                    hash="ac850a5a2d01726a313f57369ad82ffaf7321261",
+                    operation="INSERT",
+                    pgid="pgtrigger_default_policy_on_insert_e01f6",
+                    table="desecapi_tokendomainpolicy",
+                    when="BEFORE",
+                ),
+            ),
+        ),
+        pgtrigger.migrations.AddTrigger(
+            model_name="tokendomainpolicy",
+            trigger=pgtrigger.compiler.Trigger(
+                name="default_policy_on_update",
+                sql=pgtrigger.compiler.UpsertTriggerSql(
+                    condition='WHEN (NEW."domain_id" IS NOT NULL AND OLD."domain_id" IS NULL)',
+                    func="RAISE EXCEPTION 'pgtrigger: Cannot update rows from % table', TG_TABLE_NAME;",
+                    hash="50b90c40a204f2165106f2212bc3a8fbb1397226",
+                    operation="UPDATE",
+                    pgid="pgtrigger_default_policy_on_update_6acd4",
+                    table="desecapi_tokendomainpolicy",
+                    when="BEFORE",
+                ),
+            ),
+        ),
+        pgtrigger.migrations.AddTrigger(
+            model_name="tokendomainpolicy",
+            trigger=pgtrigger.compiler.Trigger(
+                name="default_policy_on_delete",
+                sql=pgtrigger.compiler.UpsertTriggerSql(
+                    func="IF (OLD.domain_id IS NULL and EXISTS(SELECT * FROM desecapi_tokendomainpolicy WHERE domain_id IS NOT NULL AND token_id = OLD.token_id)) THEN   RAISE EXCEPTION 'Cannot delete default policy from % table when non-default policy is present', TG_TABLE_NAME; END IF; RETURN OLD;",
+                    hash="14e0ec9e218138c6a10b5da065a1ab1f253b9312",
+                    operation="DELETE",
+                    pgid="pgtrigger_default_policy_on_delete_a9116",
+                    table="desecapi_tokendomainpolicy",
+                    when="BEFORE",
+                ),
+            ),
+        ),
+    ]

+ 1 - 1
api/requirements.txt

@@ -7,7 +7,7 @@ django-cors-headers~=4.0.0
 djangorestframework~=3.14.0
 djangorestframework~=3.14.0
 django-celery-email~=3.0.0
 django-celery-email~=3.0.0
 django-netfields~=1.3.0
 django-netfields~=1.3.0
-django-pgtrigger~=2.5.1  # Upgrade on occasion. Trigger management syntax has changed considerably.
+django-pgtrigger~=4.6.0
 django-prometheus~=2.3.1
 django-prometheus~=2.3.1
 dnspython~=2.3.0
 dnspython~=2.3.0
 httpretty~=1.0.5  # 1.1 breaks tests. Does not run in production, so stick to it.
 httpretty~=1.0.5  # 1.1 breaks tests. Does not run in production, so stick to it.