From 61094c1aac081bb1e9968513d45bf3ac9214cd59 Mon Sep 17 00:00:00 2001 From: Norm Rasmussen Date: Mon, 7 Oct 2024 18:14:27 -0400 Subject: [PATCH] Some good progresspython main.py Started the edit verse functionality. The cards on dashboard now pull dynamically based on the users in the db. Will need to add 'start up' functions that allow you to input your children so everything is scalable. Need to look into auth too. --- .DS_Store | Bin 0 -> 6148 bytes ...12 (conflicted copy 2024-10-07 175853).pyc | Bin 0 -> 2480 bytes __pycache__/dashboard.cpython-312.pyc | Bin 3696 -> 2497 bytes __pycache__/main.cpython-312.pyc | Bin 12884 -> 14104 bytes __pycache__/theme.cpython-312.pyc | Bin 1793 -> 2211 bytes __pycache__/utils.cpython-312.pyc | Bin 1676 -> 2487 bytes assets/awana-clubs.png | Bin 0 -> 15261 bytes ...ard (conflicted copy 2024-10-07 175852).py | 28 ++++++++++++ dashboard.py | 40 +++++++----------- main.py | 29 ++++++------- memorization_tasks.db | Bin 8192 -> 8192 bytes theme.py | 9 +++- utils.py | 9 ++++ 13 files changed, 73 insertions(+), 42 deletions(-) create mode 100644 .DS_Store create mode 100644 __pycache__/dashboard.cpython-312 (conflicted copy 2024-10-07 175853).pyc create mode 100644 assets/awana-clubs.png create mode 100644 dashboard (conflicted copy 2024-10-07 175852).py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2cb97310c177a5ed4b089dd4558257abf8c0b244 GIT binary patch literal 6148 zcmeHKOHRWu5S@VvBC+X`rLWK%q*XXUcdSY&f<>cLD(rnJuFwxjeqE=C_CW=N$d8`POIm^rv__#cvmD3I>9KU?3Ry83Q=8 zDb1B(^ua(d5Da`U!2Kbi5nIP>Shfyyr33)-8eIfBYYE0A$JQ|$!U9nX1zMYyKQ7=B!pZs3DXn8vFr{XT!8b%)s1OsCR&TTm5`G14IOtr`#hr}ot2nPNc z13KxJ-2yM=XX}^O<5`=~R%jIZWhxNpqe}n=+()j9(d>yj{94Cs$Sj;M;lQ{E6hfj4 I27ZBoH-Ks^6aWAK literal 0 HcmV?d00001 diff --git a/__pycache__/dashboard.cpython-312 (conflicted copy 2024-10-07 175853).pyc b/__pycache__/dashboard.cpython-312 (conflicted copy 2024-10-07 175853).pyc new file mode 100644 index 0000000000000000000000000000000000000000..38ab533efe9968e779be6c32876f370143f29e8c GIT binary patch literal 2480 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 Jaz+xP{R6VJ{>lIV literal 3696 zcmcIn>q{J06u%@v_MuHAqY3J^t{W|u<_Q{UO~Fl|l&GbI*_pfUuJc&#%tqZR z7+Q#ufGa80d}=?opf#dQ3VG2!86l>y9pQU9*tR!oBC*bM|+B z_nb2`cOF(&RseiS0z2~50l=R`u`ebsY<+`;1t0^NQot~oX@yehVVWW`qcAEv%;scD z;f6WLB|SF8{yfY>K3Ti3+tP!)FzliMq?2BIeSenO2h^@6b62MNLwD zAWMJo4**m2BrUTI*jeUA+W^Q?$X&p<<{%38cMyL&TJqRIADOqUQ_PWQ&N9&00<5dDYSJg@@6tIcvrD)m(aPx(M*-T~?UEWhM@M(bBv*C?-n_bwvaw55m%hsv zWUNTXms!oD(aNc&vw+*%t!8Z*)#S_0_?uVLSvGd*YW~X>c?(T|Q=k(V)EIsz58-DV z1+vWD$T%|u#;78ennNv(hg#k(ZkYhP>%qE+uq*cv0 zCm@)DqS@BfE~p7j7025;Q{(MIXAA{{=QAG}P=S&uq#!bMt^FpR;O=-MB^rh}0^1E! zG}DF1jzbC4x12F(N^wz9EKU)l zP_cMP!6}D^#Y*`6WU+*Q&}A_QFS!$1Oh>9{V(u186pM-9l<<(kLySlUwBht@GoYgRl>=0G<^r>UI}LLuXHPCSMAlqaH>+yr zMrTKtPefO%{&}EBCY+_onycOy5TJv24%m*kapib@Qgbejz>|Uo^k(xj(k* zZ(a9?SN!3hoU8t`S*Enn7g)GHfBoLjy02x$*RtH&yXw2V?z^($yR!TVTJss3UjIV> zeE;I$s<&m`+p*&9SPl<9_72(WpME!Zf8X}Q)MM|(Lrh;j_MYG7f#0N7e8vkWsPkvV z`M~1Gf7G5TO|j(WO7S<=eC8o!j^fDye;V^NUpYab;s4HUnK{JVayfi?3it$^(TZ!- zvg;}lnpa#+JKNs8eP_EWzl)u1&)!-v@4sU}+?3x^1E-mvncnV5J@d&!ZZlHr->f{E_yO%z2l9fwb#OZ#-5c!dt zi}>7+YI1Tt7ir>y9z?zsEM7}Ua3r0`-{q>9&=5-uEcp(yn9Elq7A;3D2fpPE9U<}= zX0a*!Jk8xiKY}g108kSicAOVfT}~_T5^BdPd3YMVczD536!ipno&x_<(D($npK-3+ wgSQ5!=?#bTcH&mztI=uZ8ReX=yB)X{m^raZ`CroSP#3lsKnHRXdJn_=2gR_)@Bjb+ diff --git a/__pycache__/main.cpython-312.pyc b/__pycache__/main.cpython-312.pyc index e1ec0ada65d81e231a53a619c765d81aed1fbb64..d59814ddfdf4a4738f14c9dbeb94cf5edf55c77c 100644 GIT binary patch delta 2599 zcmZ8jeN0r@6~Fhrx$k4XV3;o$U>HEKg9BpSZLNx^XmJ4XvnbUr4$K2#2WGr)W<{!n zHf{!VQ#CgRZJN5ot*2gU}h<)Ls!|Y-9T^gR-p`$K9tD zwkI#Z-Yv;zpIMsys*2*~@0ySsg3*LJP|oH8ZuY9f&XOd!hm1?(%DCEViTh3~*K%&? zj502dTj7KL)5;lXoS3)}um!LJ_9DR66Q~lcK{`GzVAP2){LTxnSlMfNKFfLh%BRcV zpX?E-!~>xE@h?sJjwvrs9hT}aE}1$jmtY)XuPalyoE=s-`<)Pm8{WtJC4??ovM4J} zq6sT|Q~f%=1(^vl+3Lq!53&YpvuGV~m}~lx^&sFp6F;g@naeg!-a+V;$aXo(*cY}@ z;f!R$OZIv;Y!9)&+FuqXB$jma$qM8F^@{8dj&hL<6qS=$OW2X?NX2wL)~6X#3OtfSx&?-X#>UtmJ)5L$fc35HQ&&ahBZM--cLiup2`%CR zZ+40Q$~B)ObWqqWGIzn>2#vrP_Nr?e-oaYkBRIl7aJQ|Bg7Gn@^%rC4?c(=3=D*QK z{h)>kt%Zixaj}|RQ-FBTVy^H`;TH)zh(bMyIR5-B4ojxS17N!$)%>8CLyh^7v9B zY+yJN;?L$WcFR|1Vk6kg4n zw+A2CJ?Gjd+V9y*7OGf#QRs+T-4+z5S2wL_DPMAZ>p{EYQK0LtMB4Hk zcWp9Q?iP@?V)d?H=Jp_ITPgP}?Jq=ukOHqs{oi3=h>*oVdaf8yn=<7{r!?nk0EEVccYlHd{e@Cp_foGwuS|WKoEKt66hAowd^=LPoiOykcNL14^i8M^eIcC`PO!we2n{|G2jg3(+ zG}H%Tq@MlB?P1>uSlQlS!RTQy>6|z~z`6d+{7WZ+$)k9?0NfqG-xP9eR1Hfqr43PD z1BRt1M&pz-*HCzE#;6vfoM?vBok^#YLk3CFWJ))LQ zm7|51y1eT3w)gtx1MTPKhhG0=$Au1d@V>Wd&RaEGz3HB}@u9~z8NCo? zt@k}ua~?46`@LuXeb0e8&w<&4U9j$MST{7@W?^AeM83^b+cDe_27{e3F9A#VJiriIJ*1Da$@@=KfTpZyd#)Y}Rq<<)t zNt>HXd$={ug$5#QG0B$u6rYoJv3FtC2U9pyr{e9bJ{)lIDGh;Y1{sW{dydjQ>`?fG zWJVWZM)(k+ec-`1)zsk*HdwP#;xUhefS_LXMvV;*O#Q0nw?dEk(N_Kq9u$RJ9~rJb zE!~wF>OYpzx>8y)mC)$R+)mQ{X}})tXmV24651eK9%j_Eh1+*B@Gx)WO1 z&K}klN6clIXI?*doKm*~GEY8MT36)!8EAR%>I<-S|7F|isv`D$&W74g z9C_zDCpym_y6*_iIf9o?&O0K%P#-MyF38AQ{<(eXcwHlIcq)WR>0=Q|o<|%#>A(_c z7M|o=$q0U0xR$I~I3~c1bB@U3UmOwMn8WAP(3hWi*xy&zjGloIezGE3E#44t)J|?# zR&l%!)A&|v{Ic3nz))o>*blX1P0HnBQ1h_n~)Z#dfO^HVeoAiX$i=;OG!&LJ6pex zT!oOXus_#-uk|D#I>yD1K^P>H?oa5sJrtXEwbQfQD)nUGj-_UDi+Z( zbXbKp_ey*ot}x4@y9#qT2%osSMD>6M&v`51p^yq;&sHYSb>s=p6>=7#r$zWu3qoPe z7<6g%Fi&g6lA{^a4hf?Ke$oa-IfY@5x1POt*1HWWaLpTIIDhU3;>RuohS1;|o~g9?D;dG!0 zm%&V+=xTP;PDoYNKcr>i1A3-E7dOrLpl;8Z6-_H{x>hDlmn-bmbUW!;txd0zxn>RNRn#jkndz^1NUu*$ zV3zdX!>-Eg@cA6rHEGy6ie5)2gj08oFdAlK-!c;3m`q!tN7;1sP%3XEtaR20rOgn{ z8%Ej~45hL()GSaQj&5SmjBWBHw>Ej85F~<&8@DrN1{jQ?Zxr`S>S6V&Z{=BXrf{`l z&2?ohtzxfAg}O^Z>qsD#(GRv1Xgn86Tl$dMlF$uHrz75IGI_U(Zk_7QnDWmv0^hM4 zGXj6qcEK|ZP4%5jXG>H!^BK#YW9A2j(pLX$HGJ8|#^6La3V$`cQfZS!CTp@dwh~V! z9TPYnj^Z@f;ks=bnDKut*{*C(H*8lTPLs5oryyw~m$&FjUBYmnZ-(5QREE2(c;m1f5?t{S61^DsO>ZP9wi3CsgFb7^JB|KO8plbp?)UY?zEBA53*Y`sM9x@VlKD*ifzdqm|nKPTjskhB5w-= zcl~clskVI$?zkl^B6YutNb=p}?3W!FlPJCw@Q@MwdrdoOylo21=bEZ(A_DXUsl$=T)7~G7{913h*gLemqlA+61mi% zFyXQv$AaQy4e4%FC+oP|WE1IblP8xG<}lewVxl}Hk=R^y$|E!TsR|OCFHZ$YtV!nM zcMj}c5hEuVeGA@M@r=i0j21Y&2CW_b`=4jjmJ)gPpG9fb5u%U8dN%H+!(4FP8xlPU dxsC?>K0wD~Y$fhB9Zwe0G2X{JZ{sGBd-lYHl diff --git a/__pycache__/theme.cpython-312.pyc b/__pycache__/theme.cpython-312.pyc index d7a19753573959690fd9b88abd8daeee16ac6c37..3ed00754ab00809e608e702c16f840d2fc9151e5 100644 GIT binary patch delta 1168 zcmah|%TF6e7@yhM$E-KDAsF*8q(&$KD;NyKKwC;gqBxIAO;1(f&}esO>lzjt&Dt{1 zLr6pqQ4h!(sqL+YD2K?2lz$;g@TC``v?5v&DZTeVN~%g$RXW2%hzQYdHQ(d+J@=d4 zJE8lHp>W<^#fMTOeQ_>R{X^+Qy=504O83QwKjgkNSN0su`wjsd##g@mz%Y2_ zZhp3Jpvr^PDWVdMV4^OcgiZ_$^T6K94rYrm$a?uKC#r9x7;BTlqo?2N$4$~e8mrPCe(Xr6A2o@g zrjE;vkmmo(J$MTUNK`xr@rSlpC5*7&rP#;Et)%6kLK=viAEY1QVea1C5G+R7D4GmL z7tjOpyQv-x3q$dWi>~7b zyUC@wd;(I;-pSXEE?z|E$4f$XP3gF~1;7HFl(@Jm-4Y@vT|!)ZiY)XO0E&$^bz`;d zUfcJv4ZZz^-o73i`Ar|)#DP_O53e_#e~J4x@P!xn!jmt4#p7&VSy96vF!nCO>Pq6a zP}lX*`ri={_+(ul|Hu2BH@`b6WxC;0`BE}tpl5@V!7CS)=M$J4YwCIKSsPR`Eof~- z7y3mdgY}xMac|8~G7+uTpmDs`qGaM)twZRaC3HVv7xG1Cq3Gr;io~Y0e9mS+t9qF> zaFaF)CO$$Rc|}Ua9v*^i&H;^cR>$LW1yXXI3EIO=@soLJ&bAPQ@HII58br5LpmZ*y kSGa3gd!?OOR^PzzmK1`apDzCixY$NOYIrLEdX8uQ2Q{Vu>;M1& delta 661 zcmZWmO=uHA6rP`*+1Y}+6Jf^oayVcfhBDfG^q;9KrtbzV+#_{z7qMc<0 zt=am&bdJ-#Z4lUoI6cLF&Nk2}+IvjCuP2`XLhuAVh5N$2%@C{_tc#~LV+9vM4Q}8X zG!yKyw1P~+K1*Y4j?^!yp2X!5Emz&D=STFqQ?eZ|B5rBUaU;3xmVDpwBjVpIm7NHC z)mkLE3zZvxI+m9zCiDm!r-jogK8A4jzj62qe%=8)6cG7dpn zs+(&3QR+eJ;V|2#Yg7ZV!JU3~TQ=uKcz<~JM?Z+2ZK+eg{24y#?kVdee04#!2JoB7 zY0XkdQ&xD=G){1$IZ3Q6Zk|_p94f?0sG%lvHXI;US`JgPsAq{~%3)5#GbUx4k|{>m zzvX%2%`ZWRBk+be>?%`BReRZW&UqQ0ivRbIacE-*;TFhkfrD)dP+uEqP=9vuJK$Fb M^TM_$ct^POHx8MedH?_b diff --git a/__pycache__/utils.cpython-312.pyc b/__pycache__/utils.cpython-312.pyc index ebd76fd8709190be9ad1dccfafde29b4166f174f..ba935ff352948a9c42144b212c586e3287dd6b56 100644 GIT binary patch delta 925 zcmZva%}*0S6u@`(t6yxPv@}u+nGhN*K|;KnD5xh>NesqF!e;G`2wk9=nW8Ku^*~5T zG+5V!gXzJe@nnec>cNv<)_9OK{0SaRIhc6z&9;S$bNIcPdGAeTf3wexPs#WO^Bo$%(BIpwG7LmQ+bFV(Tz3CEmmUq$zwtZX58Wx zhOgp@nF(yI+ucLN1{D{iF+g6SLl9cZ%6hS-11RA&roa})n1)3vy-c{-xd1bvVq>lB z5Ki3e0$*|1^#8NN(8(?Xo=GS1#6fAls`u9C5i&{@0o7*cOs>qu#{^?F29mv( zYPdF5Dccq&U2Tl;j^LizKvf2M+;|``uz%(+ub)3~D;nfXPM&g_f)097APeXkrXw(i zpM}^fyyv&p5gZkJW^jNz(2;t+GYW02005B#$-`J9=8s-8S zFfMROK-djRgPT$zKY(~Ah5@@$TSl7E))g(;jw)KZ9hJ3II}Ec^G3zvoKG4+URGGL?m8FtZlWpTQ9Y#jY&CE>Ej6&Q%B}F_y z;udRJVoqsl5%1;#<^V>uggRCR=a5}K?0Q4#m#SWYEImB|g9TD$^`BA*z5L=ihs1pu8+G1LG6 diff --git a/assets/awana-clubs.png b/assets/awana-clubs.png new file mode 100644 index 0000000000000000000000000000000000000000..835f5ce129334a5ff061e7a2b29e9054c023bd55 GIT binary patch literal 15261 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 None: with theme.frame('Homepage'): with ui.dialog().props('persistent') as addverse: - pass + pass + with ui.dialog().props('persistent') as editverse: + pass with ui.grid(columns=1).classes('self-center justify-items-center content-center p-2 m-2 rounded-xl'): users = Utils.get_unique_people() @@ -60,10 +62,10 @@ def index_page() -> None: label_verse = ui.label(text=item[0]).classes('hidden') label_passage = ui.label(text=item[1]).classes('hidden') label_status = ui.label(text=item[2]).classes('hidden') - ui.label(label_verse.text).classes('font-bold') + ui.label(label_verse.text).classes('font-bold text-center') with ui.row(): ui.label(label_passage.text).classes('text-wrap') - ui.chip("Edit Verse", selectable=True, icon="edit", color="white", on_selection_change=lambda label_verse=label_verse: edit_verse(label_verse.text)) + ui.chip("Edit Verse", selectable=True, icon="edit", color="white", on_selection_change=lambda label_verse=label_verse: edit_verse(label_verse.text, person, label_passage.text)) if label_status.text == '1': ui.chip('Complete', selectable=True, icon="add", color="positive", @@ -79,20 +81,17 @@ def index_page() -> None: ui.separator().classes('col-span-5 h-2') else: showperson.clear() + addverse.close() - def edit_verse(verse): - ui.notify(f"Edit Verse function is running for {verse}") - - # def toggle_completion(verse, person, status): - # ins = cur.execute(f"update tasks set status = '{status}' where person = '{person.value.lower()}' and verse = '{verse}'") - # print(f"update tasks set status = '{status}' where person = '{person.value.lower()}' and verse = '{verse}'") - # db.commit() - # show_person.refresh - # show_person(person) - + def edit_verse(verse, person, passage): + editverse.open() + with editverse: + with ui.card().classes('flex-wrap items-center'): + editing = ui.textarea(label="Edit Below", placeholder=passage) + with ui.row().classes('justify-content-center'): + ui.button().props('push glossy icon=add_circle color=secondary').on('click', lambda: submit_verse(result, person)) def add_verse(person): - # TODO: Add check of existing verses so that a user can't add duplicates. if person.value is None: ui.notify("Oops! You haven't selected a person") else: @@ -114,7 +113,7 @@ def index_page() -> None: # Verify the format of a Bible Verse if not re.match(r'((^\d\s\w{1,}\s|^\w{1,}\s)(\d{1,2}:)(\d{1,2}-\d{1,2}|\d{1,2}))', result.value): ui.notify("Verse was input incorrectly.") - addverse.clear() + addverse.close() else: # Split up the string for later colon = result.value.split(':') diff --git a/memorization_tasks.db b/memorization_tasks.db index 3a245b71ea560b07d989ce5c7be11c389889637c..f7496bd8fdd36341798375fb9300c71d1bf411ae 100644 GIT binary patch delta 286 zcmZp0XmFSyEf~wdz`z8=Fu*iX$Cy8sL9eQi7bwKYU(di_zp+q|pR<^eU0ht8vC(yM zAAhQ`jzV%yX_6*P7l`KN`M|)&b(NXtJHJ2oQm(7KJ9)aeZbKmFB+f}23%7FdH2Sh| zifcE8^K*zwPW~;kPbjz`u_(K^F^QQ|T)CMOEc{mLvLHk_g^g2Gy%8iTJ^7S$h?H|_ zQc`AWG2b)>cA$lg_Kcj8+D-OAY2nFE^6Nwl^78XiL;OM-!&x~+<(n!wK>9Rgj`KnF i0cC;Oc1|qZ%G0RC#3?D?BnZ~KP;MGOP#ee-FaQ7xBt(S( delta 259 zcmZp0XmFSyEf~tcz`z8=Fu*ub$Cy8qL9eQi7bwKY-^#$>y0MUte_{Y9XD%bVxVSiD zqvhld{#0E}m=+Mt%e#|-jq4Euzd7GDu17o{c;vVbaNUML&Pkk;HWqH>l4#6e<`7qI z=G5d6ZH#S^QzRVTF#v!WS$O+<3l?mZ)^k?M|m2ax#0P>H@9_Ma!W8o0j zZVCsdHH#%jdDyJlJZT0AT`nQ)3_V07&#=ho9sbqm}S=q JfYcy68UWYlIR5|u diff --git a/theme.py b/theme.py index ed2d119..60a8026 100644 --- a/theme.py +++ b/theme.py @@ -1,12 +1,17 @@ from contextlib import contextmanager from nicegui import ui +#Club Colors +tnt='rgba(30, 206, 0, 0.25)' +cubbies='rgba(25, 39, 255, 0.25)' +sparks='rgba(255, 0, 0, 0.25)' @contextmanager def frame(navigation_title: str): """Custom page frame to share the same styling and behavior across all pages""" - ui.colors(primary='#023047', secondary='#219ebc', accent='#8ecae6', positive='#ffb703', negative='#fb8500') - with ui.header(): + ui.colors(primary='#023047', secondary='#219ebc', accent='#8ecae6', positive='#ffb703', negative='#fb8500', header="#abb8c3", tnt='rgba(30, 206, 0, 0.25)', cubbies='rgba(25, 39, 255, 0.25)', sparks='rgba(255, 0, 0, 0.25)') + with ui.header().style('background-color: #abb8c3'): + ui.image('./assets/awana-clubs.png').classes('w-16') ui.label('Awana Verse Practice').classes('font-bold font-16') ui.space() ui.space() diff --git a/utils.py b/utils.py index 4c84671..b0f3ef4 100644 --- a/utils.py +++ b/utils.py @@ -21,3 +21,12 @@ class Utils(): def toggle_completion(verse, person, status): ins = cur.execute(f"update tasks set status = '{status}' where person = '{person.value}' and verse = '{verse}'") db.commit() + + def get_persons_incomplete(person): + inc = cur.execute(f"select person, verse, verse_passage, club from tasks where status = '0' and person = '{person}'") + incret = inc.fetchall() + return incret + + def edit_verse(person, verse): + vedit = cur.execute(f"update tasks set verse_passage = '{verse_text}' where person = '{person.value} and verse = '{verse}'") + db.commit()