From 53e1c107e14a325f33b065bf647a88055890a1e8 Mon Sep 17 00:00:00 2001 From: Hayden Date: Fri, 15 Jan 2021 21:41:59 -0900 Subject: [PATCH] final cleanup --- dev/dev-notes.md | 37 +++++++++++++++++++---------- dev/scratch/write_settings.py | 1 - mealie/app.py | 12 ++-------- mealie/data/db/mealie.sqlite | Bin 233472 -> 225280 bytes mealie/db/db_base.py | 2 -- mealie/db/sql/_all_models.py | 2 +- mealie/db/sql/recipe_models.py | 32 ++++++++++++++++++++----- mealie/routes/setting_routes.py | 14 +++++------ mealie/services/backups/exports.py | 2 -- mealie/services/recipe_services.py | 3 +++ mealie/settings.py | 2 +- mealie/utils/global_scheduler.py | 5 +++- 12 files changed, 68 insertions(+), 44 deletions(-) diff --git a/dev/dev-notes.md b/dev/dev-notes.md index a1b0d7108..e7dfbe0d8 100644 --- a/dev/dev-notes.md +++ b/dev/dev-notes.md @@ -16,27 +16,38 @@ Don't forget to [join the Discord](https://discord.gg/R6QDyJgbD2)! # Todo's +Documentation +- [ ] V0.1.0 Release Notes +- [ ] Nextcloud Migration How To +- [ ] New Docker Setup with Sqlite +- [ ] New Roadmap / Milestones + Frontend -- [x] .Vue file reorganized into something that makes sense +- [ ] Prep / Cook / Total Time Indicator + Editor +- [ ] No Meal Today Page instead of Null - [ ] Recipe Print Page -- [x] Catch 400 / bad response on create from URL - [ ] Recipe Editor Data Validation Client Side -- [x] Favicon -- [x] Rename Window -- [x] Add version indicator and notification for new version available -- [ ] Enhanced Search Functionality - [ ] Organize Home Page my Category, ideally user selectable. +- [ ] Advanced Search Page, draft started +- [ ] Search Bar Re-design +- [ ] Replace Backups card with something like Home Assistant +- [ ] Replace import card with something like Home Assistant + - [ ] Select which imports to do Backend -- [x] Add Debug folder for writing the last pulled recipe data to. -- [x] Recipe Editor Data Validation Server Side -- [ ] Normalize Recipe data on scrape +- [ ] Database Import + - [x] Recipes + - [x] Images + - [ ] Meal Plans + - [ ] Settings + - [ ] Themes +- [ ] Remove Print / Debug Code - [ ] Support how to Sections and how to steps -- [ ] Export Markdown on Auto backups - [ ] Recipe request by category/tags -- [ ] Add Additional Migrations, See mealie/services/migrations/chowdown.py for examples of how to do this. - - [ ] Open Eats [See Issue #4](https://github.com/hay-kot/mealie/issues/4) - - [ ] NextCloud [See Issue #14](https://github.com/hay-kot/mealie/issues/14) + + +SQL +- [ ] Setup Database Migrations # Draft Changelog ## v0.0.2 diff --git a/dev/scratch/write_settings.py b/dev/scratch/write_settings.py index 21b897dbc..a76bcd023 100644 --- a/dev/scratch/write_settings.py +++ b/dev/scratch/write_settings.py @@ -37,4 +37,3 @@ if __name__ == "__main__": data = json.dumps(theme) response = requests.post(POST_URL, data) response = requests.get(GET_URL) - print(response.text) diff --git a/mealie/app.py b/mealie/app.py index bc93485f6..739b313be 100644 --- a/mealie/app.py +++ b/mealie/app.py @@ -3,21 +3,13 @@ from fastapi import FastAPI from fastapi.staticfiles import StaticFiles import utils.startup as startup -from routes import ( - backup_routes, - meal_routes, - migration_routes, - recipe_routes, - setting_routes, - static_routes, - user_routes, -) +from routes import (backup_routes, meal_routes, migration_routes, + recipe_routes, setting_routes, static_routes, user_routes) from settings import PORT, PRODUCTION, WEB_PATH, docs_url, redoc_url from utils.api_docs import generate_api_docs from utils.logger import logger startup.pre_start() -# start_scheduler() app = FastAPI( title="Mealie", diff --git a/mealie/data/db/mealie.sqlite b/mealie/data/db/mealie.sqlite index 4547bac4d7e84053ad75628658687fa2ca43e6ff..825847d3655a48f15876f99a8a1aa45b2ecc8969 100644 GIT binary patch delta 16285 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 V4+s;cD`WsB1Py!Qy+LUf`9FW4Yuf+- delta 16867 zcmbVz33!uL)_?AOv%YzgG(hRzrh7{%ZIW)Glu}A5P)dPP3KWDi4Q=R>lC;#KQ16?v zxQ#N7UY$k7eOKHvi#m#qj?U<~?< zlRYl+UevAcyXY+QjJrP5f1@{9B|}nL8i|B2`pRC;6RFB%dWxp}gr+K)oT53YjEsRww!dp^-`Kvi{T(eF zu_fpvLL^C0N+ro;y0iRq8!5Q!i~4r+fjeg2by~|+i>x}7Bewqq)p%_Gi*ldXBu$Nc zRf6NrE42=})N;1Q_IKOcwr4Mr-(CZCq2;c#|GJFY(0N;$%hB!a4-EBM=|x9ADU@EZ z&A&+bdzp09w(PF?f4|OVlPppe=??k5{ad}^5qj6L@BWcBJtCScRLemftPM14`@Igb z*G4w+ePyJHVPcotwY0g&dNL6!4R!lcnzHPrW3Y z$^&MRVLRLI=AIrB5+p32E<+gE71`zHclgQIg8Yx1ZW2YaC$rtr-}Vxj2x=y}HAaY| zPxp~$B{{)>w3?_Uy18?ZOvZ?DK(Eu-!eJMGVXNeh5#vG~L`#>txU*Nv6eLTh)uJfx z?3I{qK!TRP)hh*z%P5koRyq0kL6Q?A#uWsjjt(b(JxKBdnKiRfV?E!x%JPn7kMg?y zHQnb@rRGsh z0}-@~$UQS4W&swcNO%@pNKs;QdmRPs-`Cj&5Mx7Bx@)g(mi8)#;TY2 zy(9dcK9U|iZ$IfE(SiMB2hmMS6E%K#Hn~vJ?MxNv-RG09h;d~KI@sA+#V0Nx%XAgV zqPu^(fK<y}pK13=Kc^RyZ^#2;%M#tZB9ZBy17xl|vk*10G?wP!4L>H$ zf-I4>1rUl3*YJyfj1KqZi%f%Tu!diL5qU@M%L6|-I5}7oJ@+TXOXbzMLeM$cSrg5; zl;jgZ3y3_F1M!~lo^VaH?K1KKmGiPizT(N^n&`@35GxVXMs%4Dh@<|?$w89SstjRZgUxA z{Kgx}CV9aejE^<3CJ!IFiENA!)L$qRyL19g(+` zh=P9R_wb#!kXPh2vjo4Mt@rTFw~{C2mBrvA9gz+XPrseKC&e|5-f8hG z2TaF|ZyRpc7iw>%{~+faIygYg>Y!QC)J_)HTN0z}5ZOxPa#_)o?P;lo;MkqyMk0@y z6ixADzY~HR?k2-T))_4tpIY3Xofyr#m+U6;9D}0qsM!tqiP77lq>#u7dPP&GdYe$> zonI0Yk<)Y*P4m9Owz|aVm%k!Eq4Fv%Dpj*kDZk`C@`SuhvS>P)Z!_u~xSuQ}rd8Ce z$uBL1zUUA(;Aw}*Ofx&3pl@my`oHd;R2yT9otfhtc zXbIG-v0i7fntx=v&D3oCqv3PI0mBAEw(e71nslqQLn@|T>|YPnv!*3jd%W#4a@f?; zjAe!swvx|3h9g!GQ{`gFYHJ~5$4HVO$-4d~v0Se>Mgqj#z6fd7$vT}CJnLdwz_0v* z)bpKRkgev@MyOP$>V#_IOY-9w(N!-LYdPsFQlYDC5Xn_v5tqrk0Lk87r$0`js%$y7L>sk!Xno3hzx6Wf9&3x$W_iSNr)8z3$Ra5(E5B4OQYMvdWtmc? z*vy}pe`h{m?lUhl&oN8#pXI0JL-J*EP+lshnBFoyYC7Ar#pE*0H2%Z*s__@b5#w^> z9HY_jf#Dv*1%}=&hAKm*f$E>q-=;rbe}=wGKU<%wJEnVEcfIa(-DaIrr`Nu(eO7yq z_Mmp3HmvQ?&XYcs-j=SFE|9{~25B+lpA428Xh@Le|L7dxm7_Q~XG~`Jrb>;zVK((j`t; zmBTj>+~E&9(BXlAFVzQerPJkfga^F?1CHQOAUHJJ(G&3bd(yk1^Eh1aI4)PVx5~H?xvrfai zo+VBGX{RAazSG&`4aa6)3^QpHWMxigcz9q+x+5^;M?X_H#+o`w5ey8J#rrd(3%X(y zigkZDIN}`%`oo?LkcPSCIZ~NyTaR>>vs`?E*mqjG4%>*?`DxFQMHxw*(3ZuuqO;-P zxFhTx_4(7+YBl_!=Sb?rv<_h0LeCC=uYbhbEk1Z)AbAaBZco@B_73_TVZXm8>=+5+ z|M0Z-SZ-%oY+@XJ!6E;6+G@x=9;aj2>+ARS`W?f4;{yXhM^A9Hw{P02SOKh>?`Ju4 zC1mv;mm?VRa{u#WhPJp3-P!#-DKySr0bN&3BlosQ$^5bBi8Uvw6(VQN;rnCrJs21o z!D8^@E0->ZViOdcETskd>K3rudGQOxonl{xbbd{RW563ikHiYhUkXtxAAf;lCnqdH zI=7}J81BPI7oVrJ8In!>-WN!5P3B^x>ua2jL4QwRbWp779Up^0MA8&t&%r4BTMY^Hd?Fjp@ z*0IpTvmGOSfuR9>a_j|vPu|>E!JAO9DBXi}ZFPlX4L-{p$LNrl1AoudHYlipwyoNU znYFb@nfk(N@T++G%OqD{TZQyEZ+@9n`!Xw$uCGRK;~Oj9j^ptCIih7>e`*Ev)zz-4 zR!$jmsyn8e`l>yl09wcL?Dl)naTj!5C^yi}zx$BRNFsBsh&DH#WUnDs;UtbW1 zQBU4%$Xco^_&=A?EU5(ZT=FU@sGT_r;<7579U~Y@?EA;gh>T*$>mctAj*MWxEXJ4W zFAO_YV*pEnBS}T5;J~XSF*~^s8QoP?r8SP@=ZCl@hDXB11<-U<@>fG7FE=$GOm!tD z0tf3HM|>uNAsh`u!Sp=nYAgAI5t3vm%muTmlK(YKa`dhoFui>9Yh;e0C>!baN`A%| z$<<~$(EbCjk#uc-7E*7$Msh2rWgHO9=$RhpRX;6>x|9OK{X>05lT*aHDDs@@{q=oMIY3#$<>K_Z|*dS}>4=$22Cu~-v zvt7dhVFtw%BwHYG zlmd}BT&9`86uOR|i*bu-gseFKgfM=jTMdwA!R&NZj{O2`74n z2^om(3mfI}5m2Z>_l>udiQl{9=uLI!hH*Ytu zFjt!u`D6Jh`F8n$JR+}?XPW+Ky42KWDl%z|zcl)cZll%ks^M(}Y$>eF=-pX;8`-K+bBZj-K3r)WRaKCZo5yH~qKyGUE2HAoLjmr6ZS9nksb z^a*+;-9Wx1za{68Wu%Ox!3*#idjG?}R0cy~uXI(wY71i(o22m6sg=NBJM7smu@t;R z4qt09G&G&Tc-RYttT*I`1&^Inb_UB~&lS=Tc5O_S%wRt3PRItjkvBLx)N_2>)-hNU z{>chjE4vu1h~4jUxwzv+lE_=y=uATegE_GW__j7$ZuBw%xv`?JX`>sBjcl>tbUf!B zGT%_hU^(n{2 z^B8Q1eJQsdAr6C+!D!fhy!r?!)fF*eDYhLU1?C1OFf}7Cmzz(t&{Tf!5t3!dW-uFo zPH$oZ&Yj6%H|(V@ETlLp7!3)~<{eC7Fd}yBjrbG_>^J83k2rjo%3KEf!9DMi>_94m z`M_r=Um4p}$kzY8CCz299`Rpn` zeeaR(YkAvIl7f!HdZ44*kD{Zs3v%oumeclsJXRsbXuAbO& zUf_r$>J#UBI)gp2d-%ZnB-uTk!GHj@1Du_Nzos)-lDIUsQM{p0a3q||U{dVO{5S8D zEZNCmQ|vxxO*?NWqN$gBKoSf&45r22#8W;XnTApZ>tgTX3qByl#?>rSEV*1B{(!U^ zn^=b6O#F!t$O3#X7!-W3=^v78Lmq=Y!2+)PkT@)hS*plqcGfr#-^Z^!imz7QET!-} zuBRrfZkQLW?n57vQe!iN-^$J`{KF5)LQ_41HL*`PYj`x7=J5NjqDd1e3^oNf5rGn8 zW_0RY7iV`WON6cx&77i&ANgqvHpgC#g7?L>$G3j$9+A$bL+d$FbV><)6&?npN@K7{ zqVU|~sADQaFWklcPzHmMve$~zaT|HO?x{1oh{1Gm_g_c>HasjAkbd>nkRQ0k7Z~sk zjf8>@2IFOK;Ai}Wq&sFX7%q_~zH7zFHHIt1Tn4LUA9Ysq@(h~HpF>tu2YV&5Rt9$h zRUO~nE(V)r_jCJ4WDYtHn}yD!x^X}7`q*(47r!1cSTBscS{#SK+<~c+AimndX$)p8 zUidgV_IXDK0 zjz_$`xFR@){Js$!HoN0l-BaJe7xV>Di^Ge71;aVJpl#y6{42@KN<0(k5@(fr>IOM= zpPY3D#2wBmfg4j34qpk&5QC0IJ0V}i^Z!QjGVJ3>=Q^uSLNAL?7o#ydt7^na?BM(V zMlvT-#*okLtaLiIc|%jXH#h`49th9a0adY3#W80bF=UNGS}&yHf`!xAJL=driaTyd zT($=TrzejfgY%>eK%~Gr(4>UpZMjQv6Y375+oQbn6WmoDA*{T)pO8#A#55WM*`~3q zHm@=6(2wZel%68n4jo)W^poB;cu}HT3EfO}mK7rX2Z@@gd3r0-EQuvyMvC;bDMpmY z#BzuyrAf(I6+J^wzar+Y7D)DN-m@8!2_t=un$K7UNn|220m)`FJx0tWOGTctJ!O#G zZl$Y;pq)g4gL=Pmr#Vk|Vazdo3(@auTZ638`|b2eNoQ{t=?fF-1v;~NwWt&x9cMNF zYZ`q>ki+KoRYKYs>4fxP20bds`{vP=kgDVAIHb$6=)Hp6mvEuR^s?bh?eDd7r8lIX zlM4?W+==mgS zWB428WaDAo=eh)KxpW~=(lB{Z^T2_FS1M}aRuoZFRKQPO@1%PL*=J7jLn^%WF1V## zv{{fPX3`_1I;Mj(=%VAg6dwfqZ!XGp8QmgzuABbMyvZxFd6^eB?-vzxn;`vW?-n72 ziy2Z@Ne2WOG`DPqbWhu!HdlFcV>R^>LA&8OJPmTSQ|(0VVGq4lkn7A1n;_law7&_t z>*vvQDrg4PWp9K$+C86MMO;ZVMPpeheVB;A z>1Jqe*49YBlh)C{(sO7Ee4XzSQ*akP!|151ihs9?_UXK5imx)bnx3W$oFS6WtfpH{ z{X3D|zTH*HN7|_?MoinsAsZWm>`*)1X4)=xYK-k#Lo2x;y52ES!zF8IkFIqGl9zPQ zWv0?mq}*;-1>ez03rxKuU@Hhz$I9 z=!>p#KqNoyqzz_szxWU~)rR%);5y0#QO)_=gtS-%u8g*=ry0a-3P8dv%z}L58z?ic z>VsgiW3mHTN;bm1C}=)0m-a%w$GOJ|`E94s)mXcy(RCzsv&QcKE{AY@ufoxiA~Pa5b?W{`J?r)IsD*heflB`8v`P zqedT{L*$GsIKwB;5YF(0J@gVHr{W>Bj`cU8j`#d@Iv&h26iub-t%Lhq>ZSjb7o;PD zTH1s z?th7(GSoOeKJzx3V#rVhKCb1L3no<+__&fkcpIIm%TR%j`RljQG~GHC?~nYSx6!qR zOjV%aI==CCnrg^Z1@3L;6SvbWZ@L;oxwxqS@CA3y!G(DHC_s~=8^FmI%v1&Lt#jl4 z6h~eHEKLFBZ2&vtDXM_L*k@D4PeuzFDu6J5Y61F^s{#h|PZrQ@lS38gw*k{M{}YmG zn4=2(yNSU8-OYSaBP}s5SEq^QllXWeZ8pqO1&;0Dk2lf+lm%%0LD_UwpjQvKE~3eX6jfkW zH!oX66Y<3bX07F|i}1zMRe@AJJSei2s{*2W`Gt$tlqF&u1)qv!UO?2UeLlvmA!4@^U++~O+FFxlPju#r712?-{|1rXjowamVzDe!WA1ZGl4{tP)6K=EleO!wC;=F zz^qK5&kUCbo*ujs42>vE;7*i|H5#@s0XLC>r$<&kDuW~gBTU2f;UX{HtOTqZ!}sH^6rU7wfA1dyzB2_Lm^MV{gt zD_{akw(_-0XpUh%1Aesc;%o_>n>vkc2a_*)@x8a*!G^KgUs^)NRWS&C7yot%6<0-J z(Xggw&rqNZ67KF1S=I0p4>hOviKpbHwvEF#;8Q?q0S|-4XJc57HL? zk7YC)9)fN#tvs)V=IHX67jv{+Bx~6gBu84PXHgp4j4ahI+qYPRT>$ASZ!9D zUDZ*;D6J*RDyD%bhP$exD|gVPRA-(L63m z9~r$}DPsr}i-oj6^14dfV?>!?vJgv5f_Q#}j_H#a;>7Iyz6kw^9Ar3#1^V{z3npoW zAeBlRLzI|(Z~NYMS50(uFTI)wdJR!Zm>!DBvdJ2Wt!}VTg;e^VSRL zclun07$|$R{Qx~kl@x{`D4dNf0~UMPPw0{uk;j>^s}mCtUj7pr!T^&+HVhCF1UroB zD;Z+S?EDuO)4TKy3_)df-gycAt%B$wkrN?A?sDG8>7p31s1ppKWcG*@k=*6c-*CEv z$o&kj7PxRAWAHLuI6&M=kRhzhzBjx#jC^-oMtdcFA+tji&HM!rw%*GU1hedNdK!`2 z8RE+9>(^suU%dhm7$CDII>=m&?Rncl!1{HzMq8rw73=S;msA-;(c?C*)4K2(b#kL9D_~Q@3e}snldO zerbH&_^|ODW5~G3=r;VtzzzL|<%Vhcf9T&tu)<{kp=HZ;SLk-=T)Ju6Big&Qr)!GE2Yv8>0NX`T}gAvC*(2mGtvtu{@eox_g7dVF?;KV|1svOO^pb9Tj};x!MKD2 z15*#Vc&LPf*%=YW*T=_NrBXw2MA+MQerv0gZ^(}bQ`^E{Yn8H1&WNzEKDUQoaTU!- zjN_)BQFu&%n`WuP-gfZX6;gqrQWe&=pKn_sIZZ{XFt)2uZ0HEQvo2NGT0ehgg)~Pl zQ-z(~?DhaYT|=|%!vk=y4B`!Lkt(i^@JH3PN%h9vYRulA!S}UE? z$p>Dp3d8H=YY)=d#zm^QJ))BH4$^vqM-`Sg%%49#nBPTdUO}$b%SOtmf0MrnAcuRAG6u-FPA&3Bsr$RAHJbtZu##eQ(E0RbhR*c=|Q8 zxGqH%CfDt*sfuClxHZ6O-_zp_C91*#m$(5Q;=vbFuCr=Y*x#VLhCgAIoCWEsFtr|c zO--x{VSnM;22$z^1%rd(VpZ7NcK+@)G~c{Z^^4JExoh0wZj!?1TuaN8#cGd`n%!{O z#vcCpfoo~fOsgu)Y=)4=9hoI6Of7%tT3VcysKU^SzQM8P4*}K%W2n$yrNZh0w=36C z*ThU!*xgb${GokbJkI&yeihi!pQH+tTP76Z8qtmW!xXqoR5!)yt#%zb>mtNo9DjIE zS7CTDNR)_2Zp347j(c^JRbh;s?&=B@1FGp82aaDMB5r!aNvg2TvBq3Ej^ThGra$gY zPE=!t8l_I1U_}*%Iz==lE(B$&FwC2I#`UzskgW?0mP~a8m^ydW)KdnW=B2}S&+bc))F3~o1o&WZIl z8`BHSJ(R32htBD)IJ~otCYrq#jTwM{rjd1mwpH zV+`jctBYdIR8|}hJ_2NmZ-LorBj)nTo9HYo!G*|G;;x*EbQt#b_W4If0xq=yazFq0 zCOXG3TU`KVJO8Pc z{?5&G1}>(xU^ek@Z^i|{rOpN8=gwPDd!Fh6vy}JULLDh~wFXSCyW*rPphvAncdx#M zR^wo*g1VExdkZa0pQcuV$;WN^`wtZ^R4X8C~tEx z{~T(Lz7VAkQ6<0-NNg8@%E)oeujxC=84PjQc6CCXfCM4!8PPj_L)Q|ejv*!+Z@7s2 zbn~J6=>|c%^lpaGY*d4wLo&=D?dXDKWNl0W^9E{+k|&k!(d@9&2&`%$_X(=l7LY*x*X{OD2o zt-O?#AV*sp_+LJT=>f^nr?6Sb#@~62a;20ZUN{CHv9MnLJ>VlqJAh9S#CsC=BtmS< zl9Hk;AEzOzco~AjW4>X?pZ)`VMX6+n47X2uCOz(o=#x*)DvMBr!VsdAtP3Yl?&*=!HM; zf){8jk?n?@fAyAXMLa)G}9L_(j77+SSs}Vxjt$J#|ck zor+%&xT~YDy-n|-ikpd;Q&!EY-PQc^cj?WFhlzO8$-2opWC|Xo$wbf;qF>KMBzp9M z_vuSSk0OE@{E*tTm@E-|&QKDo;O&p;T0uIMLMEcmBPEd%h#M3sF}eZnZZU--5Md^NpJ{$_K`E(k4t@n`Ah9jLjDDgK=8xd2xH)Ssj zMRe!4bT1L~JR+Z`QT7?mk?tqw9Xfa>u}qe-g~&MRoOHTtqSsPs8WD6lQI@g>DE77P zYlY%bNqR_9#@Pah&fazQE{H6$bUGDuoGPPCMEmX?-#ZS)GOKhi5%fNiaK6TJtukqD zlJgAh(ogC6==T`4s3s;JfmDlXaeJZ{PLl}1{D>&#eV%3WYYgpD|I=-_F@f=iNkFkiS1h*~mP^LDjjZlo`OI6|?7<(_nJrGsk3YgAcDv;J$A`@)6=m{Ro zkad2c^c7LM*zp%Lh;ErB1&E;Ah~j7B;Y|E21d6=b0N%>O8u?+9s%w+(BoAXA4-reG zpNY4mNH7wtDCfU+NuLVx8BP)La2CmkWI)U+q~8njI4*tS4Q;=BKR|4>zgn731)V{0 z{)q=QwLxuw;(U)(NwC7jYuY(==hQ*;^jxVzw{Dj4S`EUAD&YwK3enToTbEcfts2YA zmTpVF#jd=s{95_BvRi3T@)V=_Q}c`FyUjl}hs?{(h34t!snL)gDHA4z|Ex($F+? zwDQPeDaSE0A{@-66;pvNaqrGxV4y!IG7E|({`g`k6IH|6jH>^>SV}g`ixhzw=k{i) zW?pJUIGighod3!LmKZ63vZO-zs$!lbK$1Z}!rdbIkT>vio27I^P9zUZ6ThPw4HZUm z!L;$0nx)*@j7Scc+6w2t3A(gLvZ2qdaGqq5b0UrtwUy>ZvcNQp!JUk-XFImSAA=}Q zSY24${75EpweWM6NZHv*kqj_p=yE)qWXkIW?`2jb9h!Rn^b#p;A~})<2EpPd8TeS7 zOnBCeNGeptqS2W5Z7LE8@%9kAPl#jglBp1%)JQUPn8c|fQ=N^+Tg;6lK{m+DD=4z0|qp@T=JOZh+b@f>26O0 zKPw-R(a$ZHwoRd@t2CAr^GwrsrrG*{G?R2{t~zk=91C+Y@$Skh8NLL+xldXnNCyrs z@$4F@kJMKb)kBKMnJ-vH+Au8A;y-8(B zepF+9%Umu$if#W(S?*<9Fwnt4^!bn5Brm*1;;ngK**+}ds4^%$Lj-+Rob0j3W}NI$ zd^{x0Ab9oDXk^VgjrAqVPP4}pFz(jhq5DFL(kEjMvaORL8NdH1EzNGI++X54e&;L= z1;U8r4Yp3*K^?2({E6SAR;=k84TXEWouXV;^OQ^r<&y&@{g5{!(&?-7QwbF@Q%A)_-|vOwP9dGH>3Pd~n zhWp6b6O*+@G~@AP*EQ_RaGex`Q|j~jd;$DkAmnfSJ~GGActU!jS=X9T|EZ&M#oPSX zwTZSnafJ(n!Xu7o@}mgaoB+x}FG@)fotHT7nL9>fC6+T%|+XgbE8XxG__aJExs z)fsR12jxYB&3@d+af8G+fE#>h%6W^ZHT?d<@8DY=A@i(}7CkyqSC?Jagm-HG;5M2( zw{6H@x-vN8Xq<8|dlA*S8V_bCI#J$^K+jV;Q6BGvD4!l33eeTW%KCK2Yi9jUKD-q* zxA%ntgZTLeDs1$2cZ=UWG>(Qs<0opaTpS9VT65)8%_yJF$yOS)Mq0J;iW|^nXROQf z{%e>2!+Jca(-V{PCDe_T(TJ7d{MX;|zpRY^v>^X=h2JlZXyT*fFtMr|D0n zsde(VUZQFI;}>aq&WU;Yx64mt&f>0=ly6e5%FCvk#L({itc`7$#D~aP@pvc0Wg6>u)@jN;=5_KcQ@Y_Y96k}lL_}jpGu5@(b@h|QZV_Ku zI`vRkdi=LH?IMQ0z_Au47k15owH5nG&WX|d+pqpFYZKjC(-#QCvE&O3N3T0Xw4^{a zC!iNt#|=$tsoNLay4CM5?ep&R58%bBv^x;?;kXKLdml~CJJIfcS`@$P!+I<3qZdx7 zB{o!z6R@!|lID&@M3=^VTsW8fW6iM$X>1id0paHWV<#&APwU`^m7Ew7Mg^}B_6Taj z&xEjXgFGupZ^x3bq7zd~!u|ifBsN(7OD+F?NqoPs*f!<(T(f>xY-i8=uRFV{-8(WG uI(2VX{hz(fcAHUk>#FR!4(4<5pZX90Xz|gU@7L_VT`MAU9xwCJ{{IL3tZhaB diff --git a/mealie/db/db_base.py b/mealie/db/db_base.py index d673fce7d..462ac3ca3 100644 --- a/mealie/db/db_base.py +++ b/mealie/db/db_base.py @@ -146,7 +146,6 @@ class BaseDocument: return BaseDocument._unpack_mongo(new_document) elif USE_SQL: session = self.create_session() - print(document) new_document = self.sql_model(**document) session.add(new_document) return_data = new_document.dict() @@ -161,7 +160,6 @@ class BaseDocument: session, entry = self._query_one(match_value=match_value) entry.update(session=session, **new_data) return_data = entry.dict() - print(entry) session.commit() session.close() diff --git a/mealie/db/sql/_all_models.py b/mealie/db/sql/_all_models.py index e8816de62..c7df3b3be 100644 --- a/mealie/db/sql/_all_models.py +++ b/mealie/db/sql/_all_models.py @@ -1,4 +1,4 @@ from db.sql.meal_models import * from db.sql.recipe_models import * from db.sql.settings_models import * -from db.sql.settings_models import SiteSettingsModel +from db.sql.theme_models import * diff --git a/mealie/db/sql/recipe_models.py b/mealie/db/sql/recipe_models.py index 58b926ccd..f8b7cf65b 100644 --- a/mealie/db/sql/recipe_models.py +++ b/mealie/db/sql/recipe_models.py @@ -5,6 +5,7 @@ from typing import List import sqlalchemy as sa import sqlalchemy.orm as orm from db.sql.model_base import BaseMixins, SqlAlchemyBase +from sqlalchemy.ext.orderinglist import ordering_list class ApiExtras(SqlAlchemyBase): @@ -56,6 +57,7 @@ class Note(SqlAlchemyBase): class RecipeIngredient(SqlAlchemyBase): __tablename__ = "recipes_ingredients" id = sa.Column(sa.Integer, primary_key=True) + position = sa.Column(sa.Integer) parent_id = sa.Column(sa.String, sa.ForeignKey("recipes.id")) ingredient = sa.Column(sa.String) @@ -70,6 +72,7 @@ class RecipeInstruction(SqlAlchemyBase): __tablename__ = "recipe_instructions" id = sa.Column(sa.Integer, primary_key=True) parent_id = sa.Column(sa.String, sa.ForeignKey("recipes.id")) + position = sa.Column(sa.Integer) type = sa.Column(sa.String, default="") text = sa.Column(sa.String) @@ -81,19 +84,31 @@ class RecipeInstruction(SqlAlchemyBase): class RecipeModel(SqlAlchemyBase, BaseMixins): __tablename__ = "recipes" + # Database Specific id = sa.Column(sa.Integer, primary_key=True) + + # General Recipe Properties name = sa.Column(sa.String) description = sa.Column(sa.String) image = sa.Column(sa.String) recipeYield = sa.Column(sa.String) recipeIngredient: List[RecipeIngredient] = orm.relationship( - "RecipeIngredient", cascade="all, delete" + "RecipeIngredient", + cascade="all, delete", + order_by="RecipeIngredient.position", + collection_class=ordering_list("position"), ) recipeInstructions: List[RecipeInstruction] = orm.relationship( "RecipeInstruction", cascade="all, delete", + order_by="RecipeInstruction.position", + collection_class=ordering_list("position"), ) + + # How to Properties totalTime = sa.Column(sa.String) + prepTime = sa.Column(sa.String) + performTime = sa.Column(sa.String) # Mealie Specific slug = sa.Column(sa.String, index=True, unique=True) @@ -123,6 +138,8 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): recipeIngredient: List[str] = None, recipeInstructions: List[dict] = None, totalTime: str = None, + prepTime: str = None, + performTime: str = None, slug: str = None, categories: List[str] = None, tags: List[str] = None, @@ -144,6 +161,8 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): for instruc in recipeInstructions ] self.totalTime = totalTime + self.prepTime = prepTime + self.performTime = performTime # Mealie Specific self.slug = slug @@ -165,6 +184,8 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): recipeIngredient: List[str] = None, recipeInstructions: List[dict] = None, totalTime: str = None, + prepTime: str = None, + performTime: str = None, slug: str = None, categories: List[str] = None, tags: List[str] = None, @@ -175,11 +196,6 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): extras: dict = None, ): """Updated a database entry by removing nested rows and rebuilds the row through the __init__ functions""" - self.name = name - self.description = description - self.image = image - self.recipeYield = recipeYield - list_of_tables = [RecipeIngredient, RecipeInstruction, Category, Tag, ApiExtras] RecipeModel._sql_remove_list(session, list_of_tables, self.id) @@ -191,6 +207,8 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): recipeIngredient=recipeIngredient, recipeInstructions=recipeInstructions, totalTime=totalTime, + prepTime=prepTime, + performTime=performTime, slug=slug, categories=categories, tags=tags, @@ -210,6 +228,8 @@ class RecipeModel(SqlAlchemyBase, BaseMixins): "recipeIngredient": [x.to_str() for x in self.recipeIngredient], "recipeInstructions": [x.dict() for x in self.recipeInstructions], "totalTime": self.totalTime, + "prepTime": self.prepTime, + "performTime": self.performTime, # Mealie "slug": self.slug, "categories": [x.to_str() for x in self.categories], diff --git a/mealie/routes/setting_routes.py b/mealie/routes/setting_routes.py index 169e9205b..db7c6fb73 100644 --- a/mealie/routes/setting_routes.py +++ b/mealie/routes/setting_routes.py @@ -32,7 +32,7 @@ def update_settings(data: SiteSettings): # status_code=400, detail=SnackResponse.error("Unable to Save Settings") # ) - # scheduler.reschedule_webhooks() + scheduler.reschedule_webhooks() return SnackResponse.success("Settings Updated") @@ -81,11 +81,11 @@ def update_theme(theme_name: str, data: SiteTheme): def delete_theme(theme_name: str): """ Deletes theme from the database """ SiteTheme.delete_theme(theme_name) - try: - SiteTheme.delete_theme(theme_name) - except: - raise HTTPException( - status_code=400, detail=SnackResponse.error("Unable to Delete Theme") - ) + # try: + # SiteTheme.delete_theme(theme_name) + # except: + # raise HTTPException( + # status_code=400, detail=SnackResponse.error("Unable to Delete Theme") + # ) return SnackResponse.success("Theme Deleted") diff --git a/mealie/services/backups/exports.py b/mealie/services/backups/exports.py index 80e08bb91..28091c8c3 100644 --- a/mealie/services/backups/exports.py +++ b/mealie/services/backups/exports.py @@ -92,7 +92,6 @@ class ExportDatabase: def export_themes(self): all_themes = SiteTheme.get_all() - print(all_themes) if all_themes: all_themes = [x.dict() for x in all_themes] out_file = self.themes_dir.joinpath("themes.json") @@ -105,7 +104,6 @@ class ExportDatabase: if meal_plans: meal_plans = [x.dict() for x in meal_plans] - print(meal_plans) out_file = self.mealplans_dir.joinpath("mealplans.json") ExportDatabase._write_json_file(meal_plans, out_file) diff --git a/mealie/services/recipe_services.py b/mealie/services/recipe_services.py index 5176c569f..00312d2e7 100644 --- a/mealie/services/recipe_services.py +++ b/mealie/services/recipe_services.py @@ -27,7 +27,10 @@ class Recipe(BaseModel): recipeYield: Optional[str] recipeIngredient: Optional[list] recipeInstructions: Optional[list] + totalTime: Optional[Any] + prepTime: Optional[str] + performTime: Optional[str] # Mealie Specific slug: Optional[str] = "" diff --git a/mealie/settings.py b/mealie/settings.py index 2f4d11dc3..b25141e12 100644 --- a/mealie/settings.py +++ b/mealie/settings.py @@ -47,7 +47,7 @@ else: # DATABASE ENV -DATABASE_TYPE = os.getenv("db_type", "mongo") # mongo, tinydb +DATABASE_TYPE = os.getenv("db_type", "sql") # mongo, tinydb if DATABASE_TYPE == "sql": USE_SQL = True USE_MONGO = False diff --git a/mealie/utils/global_scheduler.py b/mealie/utils/global_scheduler.py index 35214a0c9..77d574dd0 100644 --- a/mealie/utils/global_scheduler.py +++ b/mealie/utils/global_scheduler.py @@ -1,8 +1,11 @@ from services.scheduler_services import Scheduler -scheduler = None def start_scheduler(): global scheduler scheduler = Scheduler() scheduler.startup_scheduler() + return scheduler + + +scheduler = start_scheduler()