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 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)

View File

@ -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(

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 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