Files
Membarr/app/bot/helper/dbupdater.py
Yoruio 22c9bd1da9 feat: Implements auto-updating database table
- Automatically updates database table from old versions / Invitarr
 - Fancy text formatting to boost my ego
 - Removes synced variable from config, as we now sync always (guild-specific sync is automatic.)

task: gh-9
2022-07-14 01:12:21 -06:00

65 lines
1.9 KiB
Python

import sqlite3
CURRENT_VERSION = 'Membarr V1.1'
table_history = {
'Invitarr V1.0': [
(0, 'id', 'INTEGER', 1, None, 1),
(1, 'discord_username', 'TEXT', 1, None, 0),
(2, 'email', 'TEXT', 1, None, 0)
],
'Membarr V1.1': [
(0, 'id', 'INTEGER', 1, None, 1),
(1, 'discord_username', 'TEXT', 1, None, 0),
(2, 'email', 'TEXT', 0, None, 0),
(3, 'jellyfin_username', 'TEXT', 0, None, 0)
]
}
def check_table_version(conn, tablename):
dbcur = conn.cursor()
dbcur.execute(f"PRAGMA table_info({tablename})")
table_format = dbcur.fetchall()
for app_version in table_history:
if table_history[app_version] == table_format:
return app_version
raise ValueError("Could not identify database table version.")
def update_table(conn, tablename):
version = check_table_version(conn, tablename)
print('------')
print(f'DB table version: {version}')
if version == CURRENT_VERSION:
print('DB table up to date!')
print('------')
return
# Table NOT up to date.
# Update to Membarr V1.1 table
if version == 'Invitarr V1.0':
print("Upgrading DB table from Invitarr v1.0 to Membarr V1.1")
# Create temp table
conn.execute(
'''CREATE TABLE "membarr_temp_upgrade_table" (
"id" INTEGER NOT NULL UNIQUE,
"discord_username" TEXT NOT NULL UNIQUE,
"email" TEXT,
"jellyfin_username" TEXT,
PRIMARY KEY("id" AUTOINCREMENT)
);''')
conn.execute(f'''
INSERT INTO membarr_temp_upgrade_table(id, discord_username, email)
SELECT id, discord_username, email
FROM {tablename};
''')
conn.execute(f'''
DROP TABLE {tablename};
''')
conn.execute(f'''
ALTER TABLE membarr_temp_upgrade_table RENAME TO {tablename}
''')
conn.commit()
version = 'Membarr V1.1'
print('------')