From a33660166fd0a67f6047d0232639a2f82bb2991f Mon Sep 17 00:00:00 2001 From: justcool393 Date: Fri, 9 Dec 2022 21:55:53 -0600 Subject: [PATCH] found the more elegant solution --- files/classes/sub.py | 3 ++- files/routes/subs.py | 13 ++----------- migrations/20221209-multiple-sub-banners.sql | 3 ++- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/files/classes/sub.py b/files/classes/sub.py index cadd1833d..783eacca6 100644 --- a/files/classes/sub.py +++ b/files/classes/sub.py @@ -3,6 +3,7 @@ import time from typing import Optional from sqlalchemy import Column +from sqlalchemy.ext.mutable import MutableList from sqlalchemy.orm import relationship from sqlalchemy.types import VARCHAR, Boolean, Integer from sqlalchemy.dialects.postgresql import ARRAY @@ -19,7 +20,7 @@ class Sub(Base): sidebar = Column(VARCHAR(SUB_SIDEBAR_COLUMN_LENGTH)) sidebar_html = Column(VARCHAR(SUB_SIDEBAR_HTML_COLUMN_LENGTH)) sidebarurl = Column(VARCHAR(SUB_SIDEBAR_URL_COLUMN_LENGTH)) - bannerurls = Column(ARRAY(VARCHAR(SUB_BANNER_URL_COLUMN_LENGTH))) + bannerurls = Column(MutableList.as_mutable(ARRAY(VARCHAR(SUB_BANNER_URL_COLUMN_LENGTH))), default=MutableList([]), nullable=False) marseyurl = Column(VARCHAR(SUB_MARSEY_URL_LENGTH)) css = Column(VARCHAR(SUB_CSS_COLUMN_LENGTH)) stealth = Column(Boolean) diff --git a/files/routes/subs.py b/files/routes/subs.py index ee3b93548..968890873 100644 --- a/files/routes/subs.py +++ b/files/routes/subs.py @@ -1,5 +1,4 @@ from sqlalchemy import nullslast -from sqlalchemy.orm.attributes import flag_modified from files.classes import * from files.helpers.alerts import * @@ -463,15 +462,8 @@ def upload_sub_banner(v:User, sub:str): file.save(name) bannerurl = process_image(name, v, resize=1200) - if sub.bannerurls: - sub.bannerurls.append(bannerurl) - else: - sub.bannerurls = [bannerurl] - # while testing it seems sqlalchemy doesn't seem to recognize an array - # column being updated. in order to get around this, we manually set - # the modified flag - # TODO: is there a more elegant way for this? - flag_modified(sub, 'bannerurls') + sub.bannerurls.append(bannerurl) + g.db.add(sub) ma = SubAction( @@ -502,7 +494,6 @@ def delete_sub_banner(v:User, sub:str, index:int): except FileNotFoundError: pass del sub.bannerurls[index] - flag_modified(sub, 'bannerurls') # see the note in upload_sub_banner g.db.add(sub) ma = SubAction( diff --git a/migrations/20221209-multiple-sub-banners.sql b/migrations/20221209-multiple-sub-banners.sql index 8aad3e011..7138d4562 100644 --- a/migrations/20221209-multiple-sub-banners.sql +++ b/migrations/20221209-multiple-sub-banners.sql @@ -2,6 +2,7 @@ UPDATE subactions SET kind = 'upload_banner' WHERE kind = 'change_banner'; -- up ALTER TABLE subs RENAME COLUMN bannerurl TO bannerurls; ALTER TABLE subs ALTER COLUMN bannerurls TYPE VARCHAR(60)[] USING ARRAY[bannerurls]; -ALTER TABLE subs ALTER COLUMN bannerurls SET DEFAULT '{}'; -- multiple banners <3 +ALTER TABLE subs ALTER COLUMN bannerurls SET DEFAULT '{}'; +ALTER TABLE subs ALTER COLUMN bannerurls SET NOT NULL; -- multiple banners <3 UPDATE subs SET bannerurls = '{}' WHERE bannerurls = '{NULL}'; -- update subs with no banners