found the more elegant solution

pull/59/head
justcool393 2022-12-09 21:55:53 -06:00
parent 6ba290fab6
commit a33660166f
3 changed files with 6 additions and 13 deletions

View File

@ -3,6 +3,7 @@ import time
from typing import Optional from typing import Optional
from sqlalchemy import Column from sqlalchemy import Column
from sqlalchemy.ext.mutable import MutableList
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from sqlalchemy.types import VARCHAR, Boolean, Integer from sqlalchemy.types import VARCHAR, Boolean, Integer
from sqlalchemy.dialects.postgresql import ARRAY from sqlalchemy.dialects.postgresql import ARRAY
@ -19,7 +20,7 @@ class Sub(Base):
sidebar = Column(VARCHAR(SUB_SIDEBAR_COLUMN_LENGTH)) sidebar = Column(VARCHAR(SUB_SIDEBAR_COLUMN_LENGTH))
sidebar_html = Column(VARCHAR(SUB_SIDEBAR_HTML_COLUMN_LENGTH)) sidebar_html = Column(VARCHAR(SUB_SIDEBAR_HTML_COLUMN_LENGTH))
sidebarurl = Column(VARCHAR(SUB_SIDEBAR_URL_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)) marseyurl = Column(VARCHAR(SUB_MARSEY_URL_LENGTH))
css = Column(VARCHAR(SUB_CSS_COLUMN_LENGTH)) css = Column(VARCHAR(SUB_CSS_COLUMN_LENGTH))
stealth = Column(Boolean) stealth = Column(Boolean)

View File

@ -1,5 +1,4 @@
from sqlalchemy import nullslast from sqlalchemy import nullslast
from sqlalchemy.orm.attributes import flag_modified
from files.classes import * from files.classes import *
from files.helpers.alerts import * from files.helpers.alerts import *
@ -463,15 +462,8 @@ def upload_sub_banner(v:User, sub:str):
file.save(name) file.save(name)
bannerurl = process_image(name, v, resize=1200) bannerurl = process_image(name, v, resize=1200)
if sub.bannerurls: sub.bannerurls.append(bannerurl)
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')
g.db.add(sub) g.db.add(sub)
ma = SubAction( ma = SubAction(
@ -502,7 +494,6 @@ def delete_sub_banner(v:User, sub:str, index:int):
except FileNotFoundError: except FileNotFoundError:
pass pass
del sub.bannerurls[index] del sub.bannerurls[index]
flag_modified(sub, 'bannerurls') # see the note in upload_sub_banner
g.db.add(sub) g.db.add(sub)
ma = SubAction( ma = SubAction(

View File

@ -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 RENAME COLUMN bannerurl TO bannerurls;
ALTER TABLE subs ALTER COLUMN bannerurls TYPE VARCHAR(60)[] USING ARRAY[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 UPDATE subs SET bannerurls = '{}' WHERE bannerurls = '{NULL}'; -- update subs with no banners