From 951464590480840c4c6b391fd285880454ed4918 Mon Sep 17 00:00:00 2001 From: Till Tomczak Date: Tue, 29 Apr 2025 10:28:15 +0200 Subject: [PATCH] keine ahnung ehrlich --- database/systades.V2.db.backup | Bin 0 -> 143360 bytes migrations/README | 1 + migrations/__pycache__/env.cpython-311.pyc | Bin 0 -> 5096 bytes migrations/alembic.ini | 50 ++++++++ migrations/env.py | 113 ++++++++++++++++++ migrations/script.py.mako | 24 ++++ ...dd_password_column_to_user.cpython-311.pyc | Bin 0 -> 3419 bytes ...4406f5b12f7_add_password_column_to_user.py | 46 +++++++ 8 files changed, 234 insertions(+) create mode 100644 database/systades.V2.db.backup create mode 100644 migrations/README create mode 100644 migrations/__pycache__/env.cpython-311.pyc create mode 100644 migrations/alembic.ini create mode 100644 migrations/env.py create mode 100644 migrations/script.py.mako create mode 100644 migrations/versions/__pycache__/d4406f5b12f7_add_password_column_to_user.cpython-311.pyc create mode 100644 migrations/versions/d4406f5b12f7_add_password_column_to_user.py diff --git a/database/systades.V2.db.backup b/database/systades.V2.db.backup new file mode 100644 index 0000000000000000000000000000000000000000..063f9e9d5c620e4ecd01152f530e2491ddc73753 GIT binary patch literal 143360 zcmeI*Uu@e*eg|;UvMtO1xYA6lSAdj&c} ziV`V{N}PCa?dwj{)^xqu) z=e-j2!?5>-zVp7%VIQw?mrFAvEVJ-GEYF+nTUd6aLjVF0fB*y_009U<00Izz00ba# z^a5v2O$p!OB2z!-rhY#CQ{j6@zXg;C0SG_<0uX=z1Rwwb2tWV=-@L%yHGYDNU)j4G zD-<|RRvVh`{CJ-{kQ>c9xvUtCX1S(TQdh02oXTXcW)tjn{?j#M>&AmyYdKr`=#z^2 ztLO8{be>dXIjc%pshm%dELqISaxR@sl0-#SR5?kKxqK>-l2lod={F@)spQpEIYUrzbI+Mw!QnXsbd$SR0e4$-Sm6#7@ zn^^Yy?8iahlmmQzvq)@d^IolT_tvAFk=Qw(%&G|~pOI4e#aymTD0ki6@MKmVTvjyFJ~kvmCTRRN=AgAal(HJKNG(C z=G!D{009U<00Izz00bZa0SG_<0uX?}%L&9Hao(AEh>S(f@NAZ3Xe<(sIdeVk`2R~z z_!r?z;jdq=e5?fl2tWV=5P$##AOHafKmY;|fWX%;a4K?v4?I*5IUQMW#`*rIA%;#z zuDD}ffe*ICW$4Zzms2UYvL~(WDFUf&c^{009U< z00Izzz%Q@BuTMw0YmJ#Wf9u&7x@FfjrAowA-6r+AwoCL!McuxyDYbe_-xak^vQ12J zO}3P(rW0Lk>8iM8RP6h*N#<5o3b|C)G|GlO`QcQQduMlMj$hT?zqzH=w(ORwwHo3* zLl>9n6W1+Tlv~0QF^N*u>4q%pp=FZ>(P?2zx%7>?+_a76f?}v-Qkfj%=Juv$&T-o; zw^28CHB!*;6J2Fhysudn(P_oxin}kSSTt)y*KM6G5i8HWFvX@R*KCbuBH}0aiBe;g z&P$0zLsLwH?o)GpBFdes&CKxZ&xM(?-7>vu*PR5@S=kgnCbVp4_qD1?NtTF8S~ji6 z+;TC$ctffX*{%|EtUNx(y+bQK%ikmnO{v<%E0Nx-6h9*7uB=n;D$(ptd6rnz^h&)& z>urg0t0Jlz5pNQjjY8XVg{5?EX}K=zYC|?_W0e?#IW=>Rzf;xfhGjIX8rh){Gp&|V zWj4De4OE@2&$hW@%Jh@??29t}QhcCMasAOH@nZ+jsYB7OYPGqgLRMOqXk)0_y}hErqdV%fCR4oCs#8Lz%v&ZU(e7#Xv(N3h{BkO{lqefU zZ97UEiZ*kB-!dL)ZcM$BESe(M9o$D6VLQ@pajUesYIe)k4B7_g(y2mbC8HDjzG2oD z?rSDdN47_!+}wTIw(nREm8x5;yMMk0Vu{|CRLb1mDW|S9Dpk2oS**EidMUG#Et|5Y zkCaBDT;?}t;vB21To3Ml0GzdP8gP0jx!ZF}^~p3?;N4Bk(Wle1D~s%QwY4)m#+}_8 znK=_%u9AjE{8biN=+@{{^`=HHiEgVavIEuKLYrojumrEH;2 zN~Q;Q{n_WVVeg8%Y}13g-Q@06pM9>=a&zhHaQhJ*PR)gV41tqTH`FUZw4xMHj<-@`%D#$u@$@XJyB=H?nKS# zTak>jxOa+WWIS?~cV|Y1CnK}GH=Pk->F$KY(3_FPSf7~$cK?55y2c4V5j5fT=|7?$ z@qz#ZAOHafKmY;|fB*y_009WRiol(bac*XHhKtd^*XKT3L)uT+&|CNPW<3!LElV|9 zO3h-A#?agA#T(glA?y1Cd&%_Ggmg8XxtvHyxxBPBJkHG(of7?{@$SIfDb@G9j#H+T zUkooZH@OoT=iY5s)Bikx|Fio{kpD57xwN#jl#@d1npqp7b7ZxV@X8vA9Iru(Hy ze-+}{k9BwUp*;00bZa0SG_<0uX=z1Rwx`6Du%0 z9EtHG!x8#(czB5Zj12SiC;g=aHva!dHva#2;a}+oydVGp2tWV=5P$##AOHafKmY;| zIGF;Y!!e!?{++ksi1QX18lj1?Aw2(oGDC`5LjVF0fB*y_009U<00Izz00a&r!0!L! z_x}$ghP)7f00bZa0SG_<0uX=z1Rwx`lP7@t|0geIs4)Z}009U<00Izz00bZa0SG|g zumZUMe^@c(hX4d1009U<00Izz00bZa0SKHt0o?yTc`-wcApijgKmY;|fB*y_009U< z00M^Y?9Za=*wfMU$Uh7}8J-*ZYUmI6 zi$mX|S&#m;|KL*VM+Kue_6|LheD?x|+WB4(+f>1so6mUKfU2NGUi z-Ygcji{f@+>2^^(uvok}9t$LDs<^toUA$S`6xTPl#r2)rw=ap~F;;ddWZ8pK)37vK zGjws~_C{fw<$u^G%~Iq#>1L5tm8d1z7H`n{ZLh8s*?M<2SJw)gcg0)9yW+*3id_=h zwU}o)S2i|_t2ftK&fbjk;%0HBxLI6ZE^Y;OS-hyJ2Uhk9^{>Q8OP;B-*7*GDYoqb+ z=6H@SA`h%j>zYkUa?3WH?wv0LeX8wOWodmw;48?NAKJA?$x=DjHu~ttGn$3ar1hamyh4Z(Vh+Ei_sr`kCX#Dzh{&B;J zS6IHV^vOVc!g8^=ILku7y()(+4#cBf&cNfQohRVW!V>I_dON^wEdndHliLT-{@XF< z6!*B+^)gA_IXtYY)^s-QPZ&Qatt#qJ?cJc)F z@%cEN0{wl!8IOfD z9$T~N3G<`E=JE%H&5Nl-Vm@$ARt(*y_~Lf)*XW7bce0ktmTk(4yM#5B8hLo%FjcEl zR)&_v7AQvDFiQ$Oxpx-joCTKAG8Iy?A2z#7GVVHMQ`VJgCx5cHTJ4^{?`1^D*`+R9 zcBx^gT16vj`1L@allQ>W%=rBNLNpqG_g((U?13)b-+hk-0^?u8+IUEGbh**BIiR2t zOEI;kb5+Cw#I%o8MzcyyQ@ck`*5cB}#_eKZooym;P#xau@u|^h{K5tPsqAmKGf2R$$TP7oEmFt?~7YS){UUK=NuYYn52`aj4n7zr*gAJ4y=%85C z`<^wG?v?^8c|*;OM4waShL(&U;S{WC|+d8 z(F^wV-Myntdwl-N$Y^|dHmtw)GMAFxr_ufEd^CRM4FBZ2o$i1|XDC4E#w+x&XNv=e zzSPq#lZLF-J54j0>RH^R7dNakE>&gA*Ndhk$AC6rS*3^53$$RT)2ti2G_!vMCDSfJ zHapvAXAKsCvSv6Ziswbc+dXF`FGS8RQSb|q(fGA9Vc=}lQi}Z?zA*IMjLy&~LWjd+ zY)Cvc^5>kuDO_wX`dcG^H9R!(gP}j>f5Iu#e=@Z-S)DpP{(F<}PW(N`v41c5+TT3u zoSL6}<^;cK8oxmlyZ!dfC6XWe!aifL-dSzTTQj!fXl%QIrDh! zxu@rPUKiCaGSJtsv{&k!B5y_GXV3DF-4ljgrNc+n{W%jLb<kxr?(tKZv!SBp6I*5Z*K)egUbfMdKp8GszHAAvY*_em%XH9DTYbBQ(M44 zDs3)dZFE(IdXSb^g3QInN7BMhcD~F{gYqaJVzCZYj2Lm zH|E2-d2f4eRZGd>_p`At-5&k%{OM?XVS)eckzhRA1J2G`?eFpaF>Nm$5Y_fbB_ycy zRJcn*$EV(CE;!CfCWD=MNMOC>z!hYmMf3~3KXRR_zi{9>yYs?p1Zo*rtJC$5&p+Yb zaE3|WUv^@}F6Z6JPn-BZpAN*xzhpps1|3#j5h1~A&xLqL8*BJpv+1tEQbW5;Z|{4~ zx#9g@=y>CKvGk5k{~SX{xc89l?)QO+44h~C8YhPeuMe90aQ4otwNndsX4{|i2E8u( zo0q&cJJzf1FTd@~n?1=mM@Na?#b}f@rDQjn?zDez!aITEYI3?uJ>31A>XDfG@z#6-k;#Go<9SY*026h0clsb?! zS2%aLB9aG+_?5l+Z%5(rVo$() z=lY%!O3j)g20VS`QL*c@qwx>l3p)+>7MAQu5ciE4XWrmx(%DtjP+IJ&)O&wBuybDO zfVTOZA&5rsei0uX=z1Rwwb2tWV=5P$##jB|HnE! zs2l_!009U<00Izz00bZa0SG|gNCfcz|2q;!6aoPVKmY;|fB*y_009U<00Iy=)&jWy zf2_lU%0U1E5P$##AOHafKmY;|fB*!JL;&~ykAxA0KmY;|fB*y_009U<00Izz00fS; h0LK5vIy|Tx1Rwwb2tWV=5P$##AOHafK;TFO{tuHooWcMA literal 0 HcmV?d00001 diff --git a/migrations/README b/migrations/README new file mode 100644 index 0000000..0e04844 --- /dev/null +++ b/migrations/README @@ -0,0 +1 @@ +Single-database configuration for Flask. diff --git a/migrations/__pycache__/env.cpython-311.pyc b/migrations/__pycache__/env.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ff9a50dbb7e7f4a7d5f3bb76574b52cbdd721371 GIT binary patch literal 5096 zcmbVQU2NOd6}}WHQIup;cH%g(9fwKm#7bP-N!p}w6E{Ciu%fLoG~Iw2*aTX>N_0 zOeZO}UXw?c_nveA&N<&X*MI5gND(N-f6B#d2Ot%*Q0RII}~pDbDuM#lav+u+SNNY0|!+N*3gxI+N8> zFiV$~2HLGl8XiU+C7&qK1z#hFi4`i15X&Me;8HHd*9y zv1wN<>+?*tXij9fFE<5Sr-rFl4AYHivuB>jrhDx0b5(3S$-Kc3!kBrq9-_ z)_1~Z`73#VQ#~FTFILKQyij3uT%*^=7wN32TXfu?3FQyr@=G2EI*x}jqJ638lP z#^UjpzLWbLdAP1S@`NLw+K{K#<*9~z!I3Z6$qSFRGCiOC+D;#7l34tuHi-&3@}!+? zJ=XM3Z}O@6 z9?m5^&AEJymE0`&kVaWvHS;EzhB5Doj8;o(fwBxN+vTB^Aqp_m0Lx-qXWO{)Fb3NT zjs5VN?*TzO5aKUx$@@N7{&3lm4{XR2>+;0cHCvu&$X6Ws%7*;Ly8OmwM*e8`eV)tq zeoufj2`BYF`Yyc>D)ATFWJ~V;Wb)&4x6V1c4mac>M;_XcN7v=iFRpzx)R50O@)`CZ8%C~?2u}zl*9f|@RHl}ysg`Qy1XnDorV2jlN|ws-n6+7kN9!g7uAR!r zAXnIV0C*?hHID;XC0kJVGebx#meSd94~%aONXOur`=SFggB->ex*8wnNN zP>xpS=1KsuN0o9#qhqO*0_CluZYmIsAWYR5H5IE!@e_lSvZz}{WuazTimLqV&DTAC z)zB290xgDe#RKe75UJGWi|rN#MpO$0TD8>K67{5tlu<=Bl|@=AjVa2dCB=M4uU5f< zy$Su1lmerw1-R{rEK)_Q7)LFIUZ;j)P^!TyUb%Gfr>`njMVW=+uB&!LO|*AB!jMLxf9wj|9V9;$f1cx*X|HLmG0VA@sz9 z9@$FDPI9o3RGg$@Cl!P+zr*Xjk9+`++uPc*J8FP@J6d*pni#9sx^`bY$*-LhE}jEt&>9wmMfAM~bvPc#VY&AS_;J_`evHTF6)o0AxHj&saLe4Y!eta6R^!WLnbY`l zFxs;bVI{U4tA}3Sn%et`diD!sg}1h4y6t>gODywNS6ebFr^P>uEpwl9zvlo!w#$bY z73KGkW;nBQ71#Ebpz!-4p`c2F;vQSlo)Duq#Ljwc`Fz>seiGva$?+)Hv zeA>;ZHLEgD4S*<%US$~WZwyYuAr@6*9>5-gf{96ns%X@L1Ebm)K$r;7g;AXy27WhL zC~Jserkk!+A&Z9$tx`4Jq;BSExoR!BiBe^Lo-$X^jk!ur@PRJL=ye?vd^e@(40Umx znr^~}SQC!}gO87A{Z&>eP}9r@GWoX1jme#0=b6jcxl*N|mdvTKACUby%wjSikXfX= zKRJEt<@)qjR~qR_Cq3CDf;6?+bD+-M`o+zwn{tmMAKZ|St;@$6@~9(^0t|LcZ7PR8 zN_~0)|32>6%I>+H{zKXxIM>LYce3a0;Au)Qls8^e03lD(Pd^c!*b6|Wb1^s7HcEC7 zJ1|YnrM(Lg!+V(983u>H6dk=06jQnx>v*~6WKE1YPg2;QDV)%)C4>P2*$LToI=ooQ2Mj&QL!yehn z>~b=P8kr#{Gh}CmAT+f)yj}=R(lCUk?QLz@cFm7UPjbnyTyM=DxsR*=9!b0HnKf_7 zA7V98IcvSoU*`F5(z`DmkAHI@gZ1OWrE%$-aUSa@Ijo<;`nSArSrorbaX@oDu87`; z7opBpWz4rCh5+Zr=Sr&ij(_PETmNeCjmY!utk0Xre^ulSwG6j!u({Vge`c7N`!{F2 zF}bpdnftbc25pvM++q8Xcm|0nh-X5s4EWGWO!Am+?zjj%PM(9-T8U1vDZ+o>0I^xHp#FZeeRL{cJ#SN`t9h`#O&q6!PNv*xb$l3=4mH=s6h@pt<8 literal 0 HcmV?d00001 diff --git a/migrations/alembic.ini b/migrations/alembic.ini new file mode 100644 index 0000000..ec9d45c --- /dev/null +++ b/migrations/alembic.ini @@ -0,0 +1,50 @@ +# A generic, single database configuration. + +[alembic] +# template used to generate migration files +# file_template = %%(rev)s_%%(slug)s + +# set to 'true' to run the environment during +# the 'revision' command, regardless of autogenerate +# revision_environment = false + + +# Logging configuration +[loggers] +keys = root,sqlalchemy,alembic,flask_migrate + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console +qualname = + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[logger_flask_migrate] +level = INFO +handlers = +qualname = flask_migrate + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s +datefmt = %H:%M:%S diff --git a/migrations/env.py b/migrations/env.py new file mode 100644 index 0000000..4c97092 --- /dev/null +++ b/migrations/env.py @@ -0,0 +1,113 @@ +import logging +from logging.config import fileConfig + +from flask import current_app + +from alembic import context + +# this is the Alembic Config object, which provides +# access to the values within the .ini file in use. +config = context.config + +# Interpret the config file for Python logging. +# This line sets up loggers basically. +fileConfig(config.config_file_name) +logger = logging.getLogger('alembic.env') + + +def get_engine(): + try: + # this works with Flask-SQLAlchemy<3 and Alchemical + return current_app.extensions['migrate'].db.get_engine() + except (TypeError, AttributeError): + # this works with Flask-SQLAlchemy>=3 + return current_app.extensions['migrate'].db.engine + + +def get_engine_url(): + try: + return get_engine().url.render_as_string(hide_password=False).replace( + '%', '%%') + except AttributeError: + return str(get_engine().url).replace('%', '%%') + + +# add your model's MetaData object here +# for 'autogenerate' support +# from myapp import mymodel +# target_metadata = mymodel.Base.metadata +config.set_main_option('sqlalchemy.url', get_engine_url()) +target_db = current_app.extensions['migrate'].db + +# other values from the config, defined by the needs of env.py, +# can be acquired: +# my_important_option = config.get_main_option("my_important_option") +# ... etc. + + +def get_metadata(): + if hasattr(target_db, 'metadatas'): + return target_db.metadatas[None] + return target_db.metadata + + +def run_migrations_offline(): + """Run migrations in 'offline' mode. + + This configures the context with just a URL + and not an Engine, though an Engine is acceptable + here as well. By skipping the Engine creation + we don't even need a DBAPI to be available. + + Calls to context.execute() here emit the given string to the + script output. + + """ + url = config.get_main_option("sqlalchemy.url") + context.configure( + url=url, target_metadata=get_metadata(), literal_binds=True + ) + + with context.begin_transaction(): + context.run_migrations() + + +def run_migrations_online(): + """Run migrations in 'online' mode. + + In this scenario we need to create an Engine + and associate a connection with the context. + + """ + + # this callback is used to prevent an auto-migration from being generated + # when there are no changes to the schema + # reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html + def process_revision_directives(context, revision, directives): + if getattr(config.cmd_opts, 'autogenerate', False): + script = directives[0] + if script.upgrade_ops.is_empty(): + directives[:] = [] + logger.info('No changes in schema detected.') + + conf_args = current_app.extensions['migrate'].configure_args + if conf_args.get("process_revision_directives") is None: + conf_args["process_revision_directives"] = process_revision_directives + + connectable = get_engine() + + with connectable.connect() as connection: + context.configure( + connection=connection, + target_metadata=get_metadata(), + **conf_args + ) + + with context.begin_transaction(): + context.run_migrations() + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/migrations/script.py.mako b/migrations/script.py.mako new file mode 100644 index 0000000..2c01563 --- /dev/null +++ b/migrations/script.py.mako @@ -0,0 +1,24 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision = ${repr(up_revision)} +down_revision = ${repr(down_revision)} +branch_labels = ${repr(branch_labels)} +depends_on = ${repr(depends_on)} + + +def upgrade(): + ${upgrades if upgrades else "pass"} + + +def downgrade(): + ${downgrades if downgrades else "pass"} diff --git a/migrations/versions/__pycache__/d4406f5b12f7_add_password_column_to_user.cpython-311.pyc b/migrations/versions/__pycache__/d4406f5b12f7_add_password_column_to_user.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bb1e7e0ac7745655e5df1b04a61562bd12367a25 GIT binary patch literal 3419 zcmd5<%}*Og6rZ(?{k+5hLYlP6wsiwaV;VkUNQh8W2?C~33nYd>ph;G1&w@?YUUzqa zCTb-P{R?_Y4yhFNK#OpsMlw>5xg_Ga8?D-CuT>A+sM14}Q{ULwi}|Q%%Atez=QnTO z?3?%e<~PHSp%727t^8V-`p!?t@2pd9o=xFp4+{4PB~yfQ)T3}2&yH31I(Qr~#<}%r^p@!#lS>yS*JfGIn zYBqeOzb8z)x;idQpHG~NPIs3^WW6WMU)E&Fki-25J>h6a^n7baS8McQIC`!pdZDMY zyRECU<6^Xv=hxYyBb?(=bHmP|t#3aEh(RP?@l%@X=rasByeAP-A8bEPu7+JgJHzJpc1 z@fR+&CHz_`cL?S4wM&?d6_$}=`;T4^Re5zI4(*6|Kc2T_wY)w;=;2+~xVvTDzAfwb zZP~DI%Ol$@Defdns;dfj6B#8<GQHCQh8dMQw%4V)*SJ>H&DGje-U)#P?6&$lng2|aDd?V0q9CK<>edOHTls6=nyy7O_NRIDt& zv=GryMV8RE+#M${m%|rOSv!Sp8u8I{=x~wz5v;X?@7|yOY0L~ptzgs+MmGr5eE4(f z1=RlrC!fQ~@B1EHc{sazst|e7X+{UF=%5`PG~*LyN;3uB5_B683>yp+jOtlmtVRnx zk1rK2tu>p%h$W2Jh;Y@0t0r8nHl2Qy$ftkN%(gzOtRSU)P&LE z4BhL)lFG&#)dN{oN;wGEI4h$X%kLw zG+^|_6cpi4mW;m`xVk;1SFc{}IaVCdk6`BS^@j(1-lsm_00f@aa)?RPR$7I&FJi6z ze`q@&I8ge8D*D`uwEYL{wfd-VNt@q6+6V2qwkqBViElfk4%%z=AqC|cdjqemDt9y* z+D`mx)ccCxXU^ zQEOmO$AB#`!WTJTdz&fVVQ_-MNdzY_-W$LCNpBq4ePrabfnGeo#s+STIndubHZXQ& zXh3_9*}jiZqIc~BHZ4fig=~q9Td>a{dnKEsxI@&aNFbg<(q=wh>{(h7l7+s!i2Zt#Eg((d-_wx`*uU zA@jyfQ@CXbw`@eXZNqI7ZdXr{AI0+%%ai%ZC;0Z5CB$q*7_?!~gu!Z4Wwo#H>Eofo z&|1GKT(g90HX_7rh?@{Enid%z<7l>_*@R|S_qhcT8zLq|T%F72jJYF>W=p`BJHnWI zi_RV0CT%kJ-liqy9{4C$=Y3Y^i!}zG9pexqwN5}3shSi;Cm<({{uK7_WO%&H=#*cyiVX1Mpkr(r*cltQe9ND#lu=-HL^@zB9dbLyoO5| zmCh;h$66Qa*u6o|AZ&O!j@$6~Io}3haF}q%O>%7O=LJE{=4S)Qp%aVnqW