From d36add7f35729930a22f3d4b1647d8ad8c848124 Mon Sep 17 00:00:00 2001 From: Norm Rasmussen Date: Fri, 4 Oct 2024 19:50:45 -0400 Subject: [PATCH] I feel like I have a good portion of the basic functionality of what I need so far include reading the db, updating db values, calling crossway's API for verses and parsing that payload. Styling leaves a lot to be desired still. --- ...-49b0ee78-be7d-47ba-b563-92a7e4abfd3b.json | 1 + ...-dd4c0206-2f4e-4910-ad64-981a2b3a4289.json | 1 + .../api_router_example.cpython-312.pyc | Bin 0 -> 1823 bytes __pycache__/class_example.cpython-312.pyc | Bin 0 -> 1256 bytes __pycache__/data.cpython-312.pyc | Bin 0 -> 264 bytes __pycache__/function_example.cpython-312.pyc | Bin 0 -> 842 bytes __pycache__/home_page.cpython-312.pyc | Bin 0 -> 3282 bytes __pycache__/homepage.cpython-312.pyc | Bin 0 -> 6062 bytes __pycache__/menu.cpython-312.pyc | Bin 0 -> 806 bytes __pycache__/message.cpython-312.pyc | Bin 0 -> 740 bytes __pycache__/theme.cpython-312.pyc | Bin 0 -> 1402 bytes data.py | 3 + homepage_sandbox.py | 55 ++++++++ main.py | 127 ++++++++++++++++++ memorization_tasks.db | Bin 0 -> 8192 bytes test.py | 13 ++ theme.py | 17 +++ 17 files changed, 217 insertions(+) create mode 100644 .nicegui/storage-user-49b0ee78-be7d-47ba-b563-92a7e4abfd3b.json create mode 100644 .nicegui/storage-user-dd4c0206-2f4e-4910-ad64-981a2b3a4289.json create mode 100644 __pycache__/api_router_example.cpython-312.pyc create mode 100644 __pycache__/class_example.cpython-312.pyc create mode 100644 __pycache__/data.cpython-312.pyc create mode 100644 __pycache__/function_example.cpython-312.pyc create mode 100644 __pycache__/home_page.cpython-312.pyc create mode 100644 __pycache__/homepage.cpython-312.pyc create mode 100644 __pycache__/menu.cpython-312.pyc create mode 100644 __pycache__/message.cpython-312.pyc create mode 100644 __pycache__/theme.cpython-312.pyc create mode 100644 data.py create mode 100644 homepage_sandbox.py create mode 100644 main.py create mode 100644 memorization_tasks.db create mode 100644 test.py create mode 100644 theme.py diff --git a/.nicegui/storage-user-49b0ee78-be7d-47ba-b563-92a7e4abfd3b.json b/.nicegui/storage-user-49b0ee78-be7d-47ba-b563-92a7e4abfd3b.json new file mode 100644 index 0000000..6775373 --- /dev/null +++ b/.nicegui/storage-user-49b0ee78-be7d-47ba-b563-92a7e4abfd3b.json @@ -0,0 +1 @@ +{"verse1":"awd"} \ No newline at end of file diff --git a/.nicegui/storage-user-dd4c0206-2f4e-4910-ad64-981a2b3a4289.json b/.nicegui/storage-user-dd4c0206-2f4e-4910-ad64-981a2b3a4289.json new file mode 100644 index 0000000..b0b31ba --- /dev/null +++ b/.nicegui/storage-user-dd4c0206-2f4e-4910-ad64-981a2b3a4289.json @@ -0,0 +1 @@ +{"verse1":"verrrerese"} \ No newline at end of file diff --git a/__pycache__/api_router_example.cpython-312.pyc b/__pycache__/api_router_example.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d492e4c4db9658e4ba5531cccbee8c299a3cbbb7 GIT binary patch literal 1823 zcmb_d&2Jk;6rb78Sto9jln+%tbV*u8R_!cK1*#B5N(z)5h@w&swUDBXXX38AYg;pG zVlPw*QYFZ#IZ^Xb$PtwO6L96?D6S$c=DP=Sa;!w?m|`%RsRO@NT{w-+apw9h6(_Ls%x(hH&k4w zdNb5ZuFV)>--83u#QtULeMTs=sx|6Sn|TdxtXgl@N)3-xeP%7uT7{IjV6WL#+p_D< zGL4YCOq#Y=cgak>6^_R8vdEoI@N-3%*)2}i!EeTiJDH8l<_8aq$%p9VChDTo4^iq4 z+CZK0ce`j&Ec6Y16SZ@@XnGG>JILz1{8kse{a-APM?h+7&zRgXCi`rZNAUUl*t{kG zXsPoT^>euYph9Q%N*BHJSOuy4o{`%z za)aJ~IVa7XlYcm;&duoA)F5UNZm3tC5-B$vD*jEPF`+LAy)r~_C^Mf%AyQFZIwpt+ zzK>q_YPjK&H)w`0MOKV((vu;CKZDUzQ46z9-3W0d7wH2?Q6ux&25Lh4B~lC}imX literal 0 HcmV?d00001 diff --git a/__pycache__/class_example.cpython-312.pyc b/__pycache__/class_example.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..70db527cc7d92d24c909e07562f2d42a41eddfa2 GIT binary patch literal 1256 zcma)5&1)1{5UvD!lT|&_#=st|rt4ML$FJ&DRX>}YtOC;J z``vEY0Qf*31zBTZcpilT_~5e;+H@Kri&&d6lFiVF%(ltEfNS7e8{peJh(y%3daPdh zkHl7;W#vd{?Jf%xjWqB`UC=lHhKErz00C|0L)-98-`KF)Cc;=*?Q-a9ef6#zt%aiH zu_6{vbNmkf%EOZ%w$%doCug7SjO_>xJ7dc|)-&r?|LKht!Pl@z9%$|<;U>c8uI5_G zn9c;v9@RniAl8W+CjmJ%s#QLw8!Hs+#$0y(4rHps9(O}6c}H+x#)ynaJQB%@^w031 z%X>2A>xjb>$$jC;6z`WO+QSbpyX@vl*;y4{!n;aF`FCDyUMV^?eiYF+nw@+wp?geD}}Uo`sSV|ZV5icRxs$n@9-yRwr()Eh4`eo zYuYDy)5Vdv%^ckkqor%C z^|BHb;dJ_c{Jf0~#|h#fah%3NC_NnZQe)(H5L4FT9*u_-4b*>DSZqFQ(^r^#P1|bm}6QPr$x7QEt_Z(Pb>cts9x8 zMc7rp5j?Fp=ZaEgm7 zV3v{+Nvh%&{(XoXV_zL7t2$03{WK)G<~Vm!Hyl~i3`VIMF^bPCQnYqCqixZ|HsGr@ zVK0t+$XvG-)s>GdE60H+meU}=?kIXc;%;SOlzvGa!zlWdH3^?g#@HLEy@R=b;pn&0 M0k-%BkmY&40~k&sVgLXD literal 0 HcmV?d00001 diff --git a/__pycache__/data.cpython-312.pyc b/__pycache__/data.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03ebb9177fdea16eab1caec986a09af6a02ea3c1 GIT binary patch literal 264 zcmX@j%ge<81Z7Tt(j0;GV-N=hn4yf%20+Gih7^Vr#vFzy1}277hAbwSA_Senw3-pZ zi(;x|)MS1M;`mjG>*?pF=H?e=Rwb5X=I6ziBo=2E>!l=VGT&k^F3ia+Nj1L3o}8bT zmzrF1i`m)VZzaQLkj`JG`k}?CMaBAg`9--!iN(34#l@+4`Y!p&rManjCB^yyMfq7k zJ;nNo<%xNT`YDMeiFyTkmq{B4 zz*o7*hcW}>+X&9U1(*2Hl3wviKw5-Itollzwp7HLTR1MX3VmYfKV)jtB55&TLePDN zP)R&z#+W%3t(@a^G-nW_{B(43;XHueCBxais~p2{w(}VJV5!Z4V$*-9b=)uG9G|24 zf9ku~f>@hz<0*4Vj281~XD&yV-c>K(#E#%IoE?E+fva!_1nDURc93624%Hp#5v$M~ z%&(c7*d4QOt_}1l8mw*|c*5+;FnX7@y^y)47n;;;C!rI2QCPLKRErN-z*4QvX~4K_ zBrl*zHJ?6W{%aV^`X+VzfnZ$NVZ;MYMUV)=Li>K?BmoO!VQ=!N!yE*(M?-4o0(qcvcnmTS+(Xz4)w)GbsCrb5H^}4_+~7f?w;(PuY52nqf+@rIN@Q_(zwjaT9p<< z&tdzCmuY64T>c1IPNp}Rs|Asp_-unO;f5?k$WQ90N(lJ`rO$BvJ1qa!HB!rx{sKOX BtlIzp literal 0 HcmV?d00001 diff --git a/__pycache__/home_page.cpython-312.pyc b/__pycache__/home_page.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8dd283d2fbc94e23fa7daef273e9c71284fa175 GIT binary patch literal 3282 zcmcguT}%{L6uz@Fvorg{@+W^1VNs*3Rge}jMQbbUBDRK<+G^OEY=)TucG;QP+?f@j zZNh^O5H-}KhML;ghd$KeOOrnM(4<%})%1mp5Sl5CCT-I6r7^*Tgue9LnH_$%Xq7g- z$=o^j+;h)8=iK|9bAQOo^CD=S#eeq53_`zeNu;1Cq6qCuQi?0; zQs^jcjp-y4Wn4(66P89tiT$6*4x?^~k=R~Ja$j>r8ObAY=b0!c@#j&LAEZOx--%p^ zGC4)ob)i=dxlCF}rA${k-eK~6f_hd+rhz-;d0p#MgD*8V95B7dRZ&w?N!cLcZV*z1 zKGS_x#=5MF*^R9q2R(6W@f#O$$e^6b1dMZ=WAXuTca0Mz{CiTfvi$D_#_-;Y$9}uuKwBzl#A_omE zsK|;VPqJS8{X@^lLj#8Zi?0LtzyuU#FO z2w^{T#Cz5D9+R7f^Pzi+2Si3E7l(Lox8@#mxAPu1IXHO+6Q=2Iw-U^{#6lo#8B`9$ z+QcGJ4piYNz$jwy4a)TCecC`Q1?QltmW`I`XR@vkH0UHE!{}?@t@hdd5o;|8u%^bu zWL)ew*|xZ*3Y)W#1QM5$j>PWS?J5H4RlAPO?ho7HVot;bWpk!fZqgKT5?NDjzIUr> zw!Xy29=c();PH)>j+S03U*NrC{3w6HJI~i-_?pjme!*uB zy)nbr%Gin66{P2f68HHbQfE+-xM@ zbH~R4|4tDbspQt7nIsDm@x^k0>{{^rH&r>Og1BL)oc4rTL+r|FP{XO4E~nBYR_gVt zm_bluwZsNhEwNEOq8)u7P;1^91W!5b`E@(V2i^%Kj z{z}DTI!yKydD4YkxC(qReW|1%%6(8EWSo8NHH3T?#PK#Fz=%+6Oh4&kI+QfXi6$FY zQ)$EWTClg?l9(Z~oNj0ss+`HBp*q?duqhl@4f3S46Sc|OwTTp#V9-w1Wk6%nk?`uD zLbn$30L9azr!RFa6c&$HU#^}j+`dr0^*Vo*|7_sLeT|Q4s-o#Z(`#QPri;I?yj?ke zv@>(GbLQl`_nXcg0@{AK=H@%759mGc#$Ohst6V9!E9$w%UN|KeUzW5svfs88wAOM{`8?25 zWjwH_YT4EX-_$;ia2naxS3FZMbHJZQY}mt*SYX*mW3?mX$!1A4F3P>>xD`e__(9mi zJ^>F&ib7n4h?2Bu1u7?T!ka?Tq;yg~f)9WQd86o!&^@9liuxHaJXLFD`M&@o$YNCh literal 0 HcmV?d00001 diff --git a/__pycache__/homepage.cpython-312.pyc b/__pycache__/homepage.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1823f9d492fccbd5b0ef83f1bd0be0e081ec67d0 GIT binary patch literal 6062 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 None: + with ui.grid(columns=1).classes('translate-x-5 p-2 m-2'): + toggle = ui.toggle(["Hannah", "Fiona", "Liam"], clearable=True, on_change=lambda: show_person(toggle)).props('vertical') + tog = ui.button('Hannah', on_click=lambda: show_person(tog)).props('vertical') + tog2 = ui.button('Fiona', on_click=lambda: show_person(tog2)).props('vertical') + tog3 = ui.button('Liam', on_click=lambda: show_person(tog3)).props('vertical') + with ui.row().classes('absolute bottom-0 left-0 p-2 m-2'): + with ui.element('q-fab').props('icon=navigation color=green'): + ui.element('q-fab-action').props('icon=add color=blue-5').on('click', lambda: add_verse(toggle)) + ui.element('q-fab-action').props('icon=remove color=red-3').on('click', lambda: remove_verse(toggle)) + with ui.row() as addverse: + ui.row() + +def add_verse(toggle): + if toggle.value is None: + ui.notify("Oops! You haven't selected a person") + else: + with addverse: + with toggle: + ui.input(label="Add Verse Here") + result = ui.label() + ui.button().props('icon=book color=grey-5').on('click', lambda: submit_verse(result)) + +def submit_verse(result): + pass + +def remove_verse(toggle): + with ui.dialog() as dialog, ui.card(): + ui.label('What verse would you like to add?') + +def show_person(person): + ui.add_body_html("
") + if person.text is not None: + res = cur.execute(f"select verse,verse_passage,status from tasks where person='{person.text.lower()}'") + dbinfo = res.fetchall() + person.clear() + with ui.element('div').classes('flex-start'): + with person: + for item in dbinfo: + with ui.grid(columns=2): + ui.chip(item[0], icon='ads_click', on_click=lambda: ui.notify(item[1])) + ui.chip(item[2], selectable=True, icon="checkmark", color="green") + else: + person.clear() + +# with addcard(): +# verse = ui.input(label="Verse", placeholder="Verse") +# ui.button("Add") +# ui.button("Delete") diff --git a/main.py b/main.py new file mode 100644 index 0000000..728cf0f --- /dev/null +++ b/main.py @@ -0,0 +1,127 @@ +import data +import homepage +from nicegui import app, ui +import re +import requests +import theme + +# DB columns tasks(person, verse, verse_passage, status, awana_completed, awana_bonus) +db = data.CON +cur = db.cursor() +APIKEY = "Token f562cf2d890151d682065696dacdc0f86938a18e" +HEADERS = { 'Authorization': APIKEY} + +@ui.page('/') +def index_page() -> None: + with theme.frame('Homepage'): + pass + + with ui.grid(columns=1).classes('self-center justify-items-center content-center p-2 m-2'): + toggle = ui.toggle(["Hannah", "Fiona", "Liam"], clearable=True, on_change=lambda: show_person(toggle)) + with ui.row().classes('absolute bottom-0 left-0 p-2 m-2'): + with ui.element('q-fab').props('icon=navigation color=green'): + ui.element('q-fab-action').props('icon=add color=blue-5').on('click', lambda: add_verse(toggle)) + ui.element('q-fab-action').props('icon=remove color=red-3').on('click', lambda: remove_verse(toggle)) + + with ui.row().style('justify-content: center') as showperson: + pass + with ui.grid(columns=1).classes('grid gap-4 place-items-stretch') as showoptions: + optionstoggle = ui.toggle(["Completed", "Pin Verse"], clearable=True) + + with ui.card().style('border: orange solid 3px').classes('flex self-center justify-self-auto') as addverse: + pass + + showperson.set_visibility(False) + showoptions.set_visibility(False) + addverse.set_visibility(False) + + @ui.refreshable + def show_person(person): + if person.value is not None: + res = cur.execute(f"select verse,verse_passage,status from tasks where person='{person.value.lower()}'") + dbinfo = res.fetchall() + if dbinfo == []: + showperson.clear() + ui.notify(f"{person.value} doesn't have any verses saved under her name! Start adding some by clicking the green arrow in the bottom left.") + else: + showperson.set_visibility(True) #False if showperson.visible else True) + showoptions.set_visibility(True) + with showperson: + with ui.grid(columns=3): + for item in dbinfo: + ui.chip(item[0], icon='ads_click', on_click=lambda: ui.notify(item[1])) + ui.label(item[1].title()).classes('text-wrap') + if item[2] == 0: + ui.chip("Incomplete", selectable=True, icon="add", color="orange", on_selection_change=lambda: toggle_completion(item[0], person, status=1)) + else: + ui.chip("Complete", selectable=True, icon="add", color="green", on_selection_change=lambda: toggle_completion(item[0], person, status=0)).props('dark') + else: + showperson.clear() + + def toggle_completion(verse, person, status): + ins = cur.execute(f"update tasks set status = '{status}' where person = '{person.value.lower()}' and verse = '{verse}'") + # values('{person.value.lower()}', '{result.value}', '{zpassage}', 'incomplete', 'incomplete', 'none');") + db.commit() + # show_person(person) + + + def add_verse(person): + if person.value is None: + ui.notify("Oops! You haven't selected a person") + else: + addverse.set_visibility(True) + with addverse: + result = ui.input(label="Add Verse Here") + ui.button().props('icon=book color=grey-5').on('click', lambda: submit_verse(result, person)) + + def submit_verse(result, person): + # addverse.set_visibility(False) + print(result) + # 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() + else: + # Split up the string for later + colon = result.value.split(':') + precolon = colon[0].split(' ')[1].strip() + postcolon = colon[1].strip() + if '-' in postcolon: + start = postcolon.split('-')[0] + end = postcolon.split('-')[1] + else: + start = postcolon + + # Get Verse Endpoint + url = f"https://api.esv.org/v3/passage/text/?q={result.value}" + response = requests.get(url, headers=HEADERS) + if response.status_code == 200 or response.status_code == 202: + vpass = response.json() + passage = str(vpass["passages"]) + # npassage gets rid of any carriage return characters + npassage = passage.replace('\\n', '').strip() + # xpassage removes Footnotes section, if it exists + if 'Footnotes' in npassage: + xpassage = re.sub(r'Footnotes.*', '', npassage) + else: + xpassage = npassage.replace("(ESV)']", '') + # vpassage grabs the actual verses, dropping the title (starting from first verse in result) + print(xpassage) + vpassage = re.search(fr'\[{start}\].*', xpassage).group(0) + # zpassage - remove any parenthesis or brackets references + zpassage = re.sub(r'\[\d+\]|\(\d+\)|\s{2,}', '', vpassage).strip() + if re.match(r'^\“', zpassage): + zpassage = f'{zpassage}”' + else: + pass + print(zpassage) + else: + print(response.text) + ui.notify("Uh oh. Something went wrong.") + + ins = cur.execute(f"insert into tasks values('{person.value.lower()}', '{result.value}', '{zpassage}', 0, 0, 'none');") + db.commit() + show_person(person) + + +ui.run(storage_secret='b601785a-855c-41d1-adeb-68f0330d8186') diff --git a/memorization_tasks.db b/memorization_tasks.db new file mode 100644 index 0000000000000000000000000000000000000000..9f484f4868123afa06f97f0db11c7c28aac383f1 GIT binary patch literal 8192 zcmeI1&u`N(6vvZk&}?le9Hy!u)HikkX{%PIO=2gusZ30}u!U%`=QC+&tb2_bQ)gsrBwpMQPd$EowG9KPA-DTPobF-c*~x$n4c zy(urtF)TuIGGdl`1ALpaN*wB$8Q_pUK_NyCCW$v|8{Z_rKmhPSS-~CqQvi!6B zcK++!4{Wf>60ig;0ZYIVummgtOW<|_qq6VSmqy(478ntNumc$rq2T%I=K5|zX$mA# z5>iH?%d(`)fD2vY2{4%{+JwAUJcJI73F%UhA?(Tk zh|n|KT)HzfhDooK;Y+Aua@eCPQ)A~yM`j{G3HYYU2+G}jRQ47c7Y_qU`yPE)TukV%BWuvrGHJuQ==|58LlIMiXaX+qi*;p&axSWp@*<1r}QsVFeC zFbwC4K?i9XXEDl71c{JhNSjyZU(6=d=e0V2%G5nE+8)k%^~Obca=T6oyBwV7)pBtm zmx4@}wvyh|ay9>DO^dWvzNvQ&H`F#&+*WgOccxd|%516r*k4>M&h8UDNc1_v#rQAu nbxHezkAUOb9|Qlyx-#=uYMO4T-uPX-IR&pZUzZB?6PdpNeP(5# literal 0 HcmV?d00001 diff --git a/test.py b/test.py new file mode 100644 index 0000000..196c50b --- /dev/null +++ b/test.py @@ -0,0 +1,13 @@ +from nicegui import ui + +with ui.grid(): + data = ui.button("Text") + #, on_click=lambda: show_element(data)) + +def show_element(data): + with ui.row(): + ui.input(label="Add Text") + +data.on_click(lambda: show_element(data)) + +ui.run() diff --git a/theme.py b/theme.py new file mode 100644 index 0000000..c6ca66d --- /dev/null +++ b/theme.py @@ -0,0 +1,17 @@ +from contextlib import contextmanager +from nicegui import ui + + +@contextmanager +def frame(navigation_title: str): + """Custom page frame to share the same styling and behavior across all pages""" + ui.colors(primary='#6E93D6', secondary='#53B689', accent='#111B1E', positive='#53B689') + with ui.header(): + ui.label('Awana Verse Practice').classes('font-bold') + ui.space() + ui.space() + ui.space() + ui.space() + ui.label(navigation_title) + with ui.column().classes('absolute-center items-center'): + yield