found the more elegant solution
parent
6ba290fab6
commit
a33660166f
|
@ -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)
|
||||||
|
|
|
@ -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(
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue