mirror of
https://github.com/maubot/rss.git
synced 2025-12-16 16:24:20 -05:00
Switch to asyncpg for database
This commit is contained in:
parent
428b471fec
commit
18ef939a04
7 changed files with 470 additions and 310 deletions
|
|
@ -1,5 +1,5 @@
|
|||
# rss - A maubot plugin to subscribe to RSS/Atom feeds.
|
||||
# Copyright (C) 2019 Tulir Asokan
|
||||
# Copyright (C) 2022 Tulir Asokan
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
|
|
@ -13,13 +13,62 @@
|
|||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.engine.base import Engine
|
||||
from alembic.migration import MigrationContext
|
||||
from alembic.operations import Operations
|
||||
from mautrix.util.async_db import Connection, Scheme, UpgradeTable
|
||||
|
||||
upgrade_table = UpgradeTable()
|
||||
|
||||
|
||||
def run(engine: Engine):
|
||||
conn = engine.connect()
|
||||
ctx = MigrationContext.configure(conn)
|
||||
op = Operations(ctx)
|
||||
@upgrade_table.register(description="Latest revision", upgrades_to=3)
|
||||
async def upgrade_latest(conn: Connection, scheme: Scheme) -> None:
|
||||
gen = "GENERATED ALWAYS AS IDENTITY" if scheme != Scheme.SQLITE else ""
|
||||
await conn.execute(
|
||||
f"""CREATE TABLE IF NOT EXISTS feed (
|
||||
id INTEGER {gen},
|
||||
url TEXT NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
subtitle TEXT NOT NULL,
|
||||
link TEXT NOT NULL,
|
||||
|
||||
next_retry BIGINT DEFAULT 0,
|
||||
error_count BIGINT DEFAULT 0,
|
||||
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE (url)
|
||||
)"""
|
||||
)
|
||||
await conn.execute(
|
||||
"""CREATE TABLE IF NOT EXISTS subscription (
|
||||
feed_id INTEGER,
|
||||
room_id TEXT,
|
||||
user_id TEXT NOT NULL,
|
||||
|
||||
notification_template TEXT,
|
||||
send_notice BOOLEAN DEFAULT true,
|
||||
|
||||
PRIMARY KEY (feed_id, room_id),
|
||||
FOREIGN KEY (feed_id) REFERENCES feed (id)
|
||||
)"""
|
||||
)
|
||||
await conn.execute(
|
||||
"""CREATE TABLE entry (
|
||||
feed_id INTEGER,
|
||||
id TEXT,
|
||||
date timestamp NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
summary TEXT NOT NULL,
|
||||
link TEXT NOT NULL,
|
||||
PRIMARY KEY (feed_id, id),
|
||||
FOREIGN KEY (feed_id) REFERENCES feed (id)
|
||||
);"""
|
||||
)
|
||||
|
||||
|
||||
@upgrade_table.register(description="Add send_notice field to subscriptions")
|
||||
async def upgrade_v2(conn: Connection) -> None:
|
||||
await conn.execute("ALTER TABLE subscription ADD COLUMN send_notice BOOLEAN DEFAULT true")
|
||||
|
||||
|
||||
@upgrade_table.register(description="Add error counts to feeds")
|
||||
async def upgrade_v3(conn: Connection) -> None:
|
||||
await conn.execute("ALTER TABLE feed ADD COLUMN next_retry BIGINT DEFAULT 0")
|
||||
await conn.execute("ALTER TABLE feed ADD COLUMN error_count BIGINT DEFAULT 0")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue