aboutsummaryrefslogtreecommitdiff
path: root/migrations/versions/681a2a9a1bc0_webmention_sender.py
diff options
context:
space:
mode:
authorDennis Fink2026-08-19 19:52:28 +0200
committerDennis Fink2026-08-19 19:52:28 +0200
commitdfce52067fdbe1c7f59764ef4cd3fb2bfc056cc4 (patch)
tree9699b70466fdaec4375c396a08b85aa385d2b2c9 /migrations/versions/681a2a9a1bc0_webmention_sender.py
parentd0e245d63e014d268310976fc45429f08d2cbbe9 (diff)
downloadwebmentions-ssg-dfce52067fdbe1c7f59764ef4cd3fb2bfc056cc4.tar.gz
webmentions-ssg-dfce52067fdbe1c7f59764ef4cd3fb2bfc056cc4.zip
chore(core): format database migrations
Apply the project formatting rules to the Alembic environment and existing migration files. Give the Webmention sender migration a descriptive filename and message.
Diffstat (limited to 'migrations/versions/681a2a9a1bc0_webmention_sender.py')
-rw-r--r--migrations/versions/681a2a9a1bc0_webmention_sender.py82
1 files changed, 82 insertions, 0 deletions
diff --git a/migrations/versions/681a2a9a1bc0_webmention_sender.py b/migrations/versions/681a2a9a1bc0_webmention_sender.py
new file mode 100644
index 0000000..29142af
--- /dev/null
+++ b/migrations/versions/681a2a9a1bc0_webmention_sender.py
@@ -0,0 +1,82 @@
+"""Webmention sender
+
+Revision ID: 681a2a9a1bc0
+Revises: f63641044cc1
+Create Date: 2026-08-14 13:40:55.149604
+
+"""
+
+import sqlalchemy as sa
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision = "681a2a9a1bc0"
+down_revision = "f63641044cc1"
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.create_table(
+ "sources",
+ sa.Column("uuid", sa.Uuid(), nullable=False),
+ sa.Column("path", sa.Text(), nullable=False),
+ sa.Column("url", sa.Text(), nullable=False),
+ sa.Column("content_hash", sa.String(length=32), nullable=False),
+ sa.Column("revision", sa.Integer(), nullable=False),
+ sa.Column("last_seen_at", sa.DateTime(timezone=True), nullable=False),
+ sa.Column("revised_at", sa.DateTime(timezone=True), nullable=False),
+ sa.Column("deleted_at", sa.DateTime(timezone=True), nullable=True),
+ sa.PrimaryKeyConstraint("uuid"),
+ sa.UniqueConstraint("path"),
+ sa.UniqueConstraint("url"),
+ )
+ op.create_table(
+ "sent_webmentions",
+ sa.Column("uuid", sa.Uuid(), nullable=False),
+ sa.Column("source_id", sa.Uuid(), nullable=False),
+ sa.Column("target", sa.Text(), nullable=False),
+ sa.Column("active", sa.Boolean(), nullable=False),
+ sa.Column("desired_revision", sa.Integer(), nullable=False),
+ sa.Column("processed_revision", sa.Integer(), nullable=True),
+ sa.Column("sent_revision", sa.Integer(), nullable=True),
+ sa.Column(
+ "status",
+ sa.Enum(
+ "sent",
+ "unsupported",
+ "failed",
+ name="sent_webmention_status",
+ native_enum=False,
+ ),
+ nullable=True,
+ ),
+ sa.Column("failure_reason", sa.Text(), nullable=True),
+ sa.Column("endpoint", sa.Text(), nullable=True),
+ sa.Column("response_status", sa.Integer(), nullable=True),
+ sa.Column("status_url", sa.Text(), nullable=True),
+ sa.Column("last_attempted_at", sa.DateTime(timezone=True), nullable=True),
+ sa.Column("last_sent_at", sa.DateTime(timezone=True), nullable=True),
+ sa.ForeignKeyConstraint(["source_id"], ["sources.uuid"], ondelete="CASCADE"),
+ sa.PrimaryKeyConstraint("uuid"),
+ sa.UniqueConstraint(
+ "source_id", "target", name="uq_sent_webmention_source_target"
+ ),
+ )
+ with op.batch_alter_table("sent_webmentions", schema=None) as batch_op:
+ batch_op.create_index(
+ batch_op.f("ix_sent_webmentions_source_id"), ["source_id"], unique=False
+ )
+
+ # ### end Alembic commands ###
+
+
+def downgrade():
+ # ### commands auto generated by Alembic - please adjust! ###
+ with op.batch_alter_table("sent_webmentions", schema=None) as batch_op:
+ batch_op.drop_index(batch_op.f("ix_sent_webmentions_source_id"))
+
+ op.drop_table("sent_webmentions")
+ op.drop_table("sources")
+ # ### end Alembic commands ###