From 83116b2b2d907f3e8fbbb8acd8a7785d69ea516a Mon Sep 17 00:00:00 2001 From: ebby Date: Fri, 4 Sep 2026 07:53:29 +0200 Subject: [PATCH] fresh better backend structure --- backend/.python-version | 1 + backend/README.md | 10 +- backend/__pycache__/config.cpython-312.pyc | Bin 217 -> 0 bytes backend/__pycache__/database.cpython-312.pyc | Bin 1782 -> 0 bytes backend/__pycache__/database.cpython-314.pyc | Bin 623 -> 0 bytes backend/__pycache__/main.cpython-312.pyc | Bin 887 -> 0 bytes backend/__pycache__/main.cpython-314.pyc | Bin 4651 -> 0 bytes backend/__pycache__/models.cpython-312.pyc | Bin 910 -> 0 bytes backend/__pycache__/user.cpython-312.pyc | Bin 1477 -> 0 bytes backend/config.py | 1 - backend/database.py | 17 -- backend/{test.db => dev.db} | Bin 16384 -> 12288 bytes backend/main.py | 56 ----- .../__pycache__/newsletter.cpython-314.pyc | Bin 780 -> 0 bytes .../__pycache__/subscription.cpython-314.pyc | Bin 782 -> 0 bytes backend/models/subscription.py | 12 - backend/pyproject.toml | 23 ++ .../__pycache__/newsletter.cpython-314.pyc | Bin 1515 -> 0 bytes .../__pycache__/subscription.cpython-314.pyc | Bin 1523 -> 0 bytes backend/schemas/subscription.py | 14 -- backend/src/backend/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 177 bytes .../backend/__pycache__/main.cpython-314.pyc | Bin 0 -> 3176 bytes backend/src/backend/internal/__init__.py | 0 backend/src/backend/main.py | 56 +++++ backend/src/backend/routers/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 185 bytes .../__pycache__/subscriptions.cpython-314.pyc | Bin 0 -> 382 bytes backend/src/backend/routers/subscriptions.py | 20 ++ backend/uv.lock | 237 ++++++++++++++++++ 30 files changed, 341 insertions(+), 106 deletions(-) create mode 100644 backend/.python-version delete mode 100644 backend/__pycache__/config.cpython-312.pyc delete mode 100644 backend/__pycache__/database.cpython-312.pyc delete mode 100644 backend/__pycache__/database.cpython-314.pyc delete mode 100644 backend/__pycache__/main.cpython-312.pyc delete mode 100644 backend/__pycache__/main.cpython-314.pyc delete mode 100644 backend/__pycache__/models.cpython-312.pyc delete mode 100644 backend/__pycache__/user.cpython-312.pyc delete mode 100644 backend/config.py delete mode 100644 backend/database.py rename backend/{test.db => dev.db} (70%) delete mode 100644 backend/main.py delete mode 100644 backend/models/__pycache__/newsletter.cpython-314.pyc delete mode 100644 backend/models/__pycache__/subscription.cpython-314.pyc delete mode 100644 backend/models/subscription.py create mode 100644 backend/pyproject.toml delete mode 100644 backend/schemas/__pycache__/newsletter.cpython-314.pyc delete mode 100644 backend/schemas/__pycache__/subscription.cpython-314.pyc delete mode 100644 backend/schemas/subscription.py create mode 100644 backend/src/backend/__init__.py create mode 100644 backend/src/backend/__pycache__/__init__.cpython-314.pyc create mode 100644 backend/src/backend/__pycache__/main.cpython-314.pyc create mode 100644 backend/src/backend/internal/__init__.py create mode 100644 backend/src/backend/main.py create mode 100644 backend/src/backend/routers/__init__.py create mode 100644 backend/src/backend/routers/__pycache__/__init__.cpython-314.pyc create mode 100644 backend/src/backend/routers/__pycache__/subscriptions.cpython-314.pyc create mode 100644 backend/src/backend/routers/subscriptions.py create mode 100644 backend/uv.lock diff --git a/backend/.python-version b/backend/.python-version new file mode 100644 index 0000000..6324d40 --- /dev/null +++ b/backend/.python-version @@ -0,0 +1 @@ +3.14 diff --git a/backend/README.md b/backend/README.md index 3c9b1d5..81cb059 100644 --- a/backend/README.md +++ b/backend/README.md @@ -1,7 +1,5 @@ -# Database +Start Backend -MySQL is used. - -CREATE DATABASE bwmdb; -CREATE USER 'bwm'@'localhost'; -GRANT ALL PRIVILEGES ON bwmdb.* To 'bwm'@'localhost' IDENTIFIED BY 'password'; +``` +uv run fastapi dev +``` \ No newline at end of file diff --git a/backend/__pycache__/config.cpython-312.pyc b/backend/__pycache__/config.cpython-312.pyc deleted file mode 100644 index edc991be4f4c27be4c3415b6c7a3409babed95fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmX@j%ge>Uz`!6nH#^Ibfq~&Mhyw$RP{wBt1_p-d3@Hpz43&(UOjQQCmBocQ+KHL@ zV1|{xeqMe>W`41igQ1bRo`If$o}rbov4NR>UMfg9CCN{d@fMGZV~C@ZW3X#{XpqlJ zhR-0ge;Mg#bs;CXP4v`=sV?9(E6#mZppXp5hph8WNGE~Zop(EO#L~WBxkd44X(7-@^(;=#J?G20_nq^- z?}v0c2>{=GJwA3z0)7*Rb<-Nb%1Hq8uwjz}mvZDvImwlCGKrkzD6X1Q<5+eySI_AL z37oiYE4FHDH}nOi-YI8D;1V~uY#TQc3vwfykigZ2#$~yroji+NlikGSW0IXZtK?EM zX|wsBsGD-Mp%`$h%=1<_;}!GV8!dS}YOkL{9)=~~bFFb6L@6c^hw3SlqE?$19V@WP zr4u|~utIK9l-kP_yf=A%|VJy8mH-uLoF-*rpnV&hX{(*c|Tu<{pxcR-j&`B8nWF@h&; zeGvUPLpDB^fy>go{Hdzq6U<^vyzv<;uP+K?#xo@VWATEYwgsx6&!BOGT)!b+B5W*3 zjk@&o3kWk9!rZvYi6BCWAA zwZKP9UStH5US4b}QubIOj|`WWE!!$vQF49Lj$=}!6n)PN#k;#7^kN$F|cS1tjeSg#^7ZE zUaJ}dYc-Kui<6Hl55xBXobF`9^cAs;c132xbafZoDOXa&dbCPf5pi1+8>UJZu^mcf zizeb868Rk@;+-0ML$CA^+nuUpbrBEhY?vY~;N{7{`v>1-30MI=;#*_ecrLdRn8i)y zvOG^Dc=jA-{!iAtE?Beu-}Dx2QUoIfn+Q`44h>&&~Rb{JDO&-EL^%GKDcyHkGOJM3Oij3JqcurRWUB3*=MVhS-Z{VP z(yq_5OQ~&(scowXMXe*31#+!sAf5U1V(%l&kEv}BY67$t_lsQ&eHaRfINicV=n^qi z`%Gpd^aU|fo>y5yy0U?p^0&lv?K_2;@~tK|Lf;eXRVvWf2vu}}tRyzF9<{QCSa-7W zk|yFFS>$_3U`&m@saLYZUQ1P8)kQp{vk^LIrlS|a4;{-X9_Q{%AD=Gw#oAi(1Hp(u zD0v_>C~AHJ<_B&dL@3gVzIUuN8VJ=3+Jx&8PW)~0Zx>JWI#z_d#G`&-yyg1#q{Byo zmjS_9ghv3>WFq<*M{eWDUA%G^TYpV-Rh8CiB3*56skUvnpHP$1DQ&qK9lcd0S#8=> n?RfFNu5?I?Xj@Lf*nCItJf-}hNHkb8RLWd*?n9+a&;#Ia1;Lu= diff --git a/backend/__pycache__/database.cpython-314.pyc b/backend/__pycache__/database.cpython-314.pyc deleted file mode 100644 index d4722e722a24fb3683e3b9db36e2d0947049a007..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 623 zcmYLFO=}ZT6uoc0l9?v4ZBVihL$O5$F>hHAaS=okC{m}o9K)NL+s-uek-ql^iL1DB z?@D)W{Uum6{Q)wjF=utoS)6;%x!-C!001w(d_46Cz^_WIU|y5U_W&@1 zSKyH$42UG%ifcn{piBK9*N4Wylx7z^Lt4JM1HR>%o<)gQ+t-#UvgYeM;8}jntN-`v zJ~`Z8om=DZ=9;hI*F1ZlEL9gg=PtM#zbokyW%QXqm#Bt7A(A4`*ciD>R5RqrB#tmY zNpgJC7H4T9@gb$OM8wp&4Xmsu z{n1PBKv~N#RpV$`;-Cmws_Gd^7BR_`b6tj|>1VjCnyWsIiwr3S!IU0_F~=m3i3npl z;l(M2QqX={;%g?62WfFa0~U@kk7$(_FoC_vRMj74MO3Evm{+4$1B>SXaG?`I7O=a3 zdkfh8Vc(fqKkZv{!84s70@x7u_2#+9jWYO}_L1H^pSeB1mE Sov+aOaC{D(Z?MPP0Pq)T!lkGH diff --git a/backend/__pycache__/main.cpython-312.pyc b/backend/__pycache__/main.cpython-312.pyc deleted file mode 100644 index dcee18b144196150f0f98f1645833999076a09e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 887 zcmZ8f&ubGw7=5#|zp`nXhSr*D>BWmV*mx+2B7!1#D6|J}ds#NwLDTFnW@oLbm$Vft z=pkOLcTc70KjKNLU{?Zy9`u%yi}WOuCQb0W?EAhq^Y(j>`BW%a0PyjBbK^4se#&N4 zbO`zxfPHxIh>w8Sgh;ITNa*&DI83_4UB8jRDqtGsxMw0oHxXwiK}3;ZWAj zv;0PR^s{k!#&evXDJWnD%O8?6oA*>_ZGa;@tf%JUpYoTVRVa09Qk4|J1M$QqX- z2k1+^)9cm8QNXIKR%=!7v!p4axO&e|*`_NPuldoVYR#=TS?E;*w-GMKt;|S-%S9UV z0)RY#qzK?Q{XoSL_T$V+{8hc5t-aVG(Q9wmfyvDn46E>^m@ z*~Q{_OrPj5W_Fux`h%!@OWR8)3L$fS3T37z(TNUHen*e6c#OHu!y_ylqtv-_g!!Hh eb?W8T7rO9GEw&%*t!}S&tgq_j9))^ou+BfhTH0O! diff --git a/backend/__pycache__/main.cpython-314.pyc b/backend/__pycache__/main.cpython-314.pyc deleted file mode 100644 index 39e90b390be9f4de5f50fcbbb7686fd82e8bdc00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4651 zcmdUyU2GHC6@bs38UG}45=hKAB!CT}v@R@ON&?|uOLwWwLhuf(d5N*co*OcY|9bCu z+0d@mX^}SDs@qakT2|;`=n=k?isg)|;3{B~_ue!2p7Wh^&us7NYzF|i@`sbAtiv|~6lykFGJWJJl1xM;yQg{9HyPC} z$~*v&YpfSQ0f0dOc=R>^Y=JOTVQk6Ou#8I?1|S9RK$V0c1xdMCfg>&mVbEX@B5-Dv zQ6?OaH-brqWs}U1(Wu0H0APD^`4Xp5VoOGr<1!-l;n+l}Kw~tUos6B%O)zR^EtBUa zVr5o(i{>mIJDRW1i@3RLzH~m8)pHkU(TEjvv$(T7X?xF8D`R9?Hvn`10RI{Q+=nXM zX? zfDP~lnIIY&TQ+Ho3_?`8k8|wy#y6sbwKv|1!3 zx#19o6iK3sTcp8FiX?G^EwVy`gq9hdfv87tY%7MDvus&64BMM46$++h`xqT(lutxu zh9+R0Xr4|Zn`u~*<3_h_i#Vq1;+5u3wg~`w(0GT0CH@kO%ms%(-v7%Zzc^AG9GVLb zS5Gb~-uI799h*KhudK&*Vk&X@b!;4;IzIjGys~kzqiW=ZI*yXVmU|{eG zv%mabfT2lEkf14Kh6}Y7e!(o;p1fHwtr=p=X3>fghQ4n?L_i@f1K5EH8Oe~442i72 zdb*Cc>!-z&Sa}W?<_fmOLZ_XDN=cXPCK+2M%JuqFnP~Jrg@+Vbp8FIUTw2OED8W< zFg`3ce=n$h6u%O`I#vsQeIdAOF1YK))>?4yLh#UB@X$?K3%wT962Z3_QTgCtTbd6qX$e02t;1 zgW&3<_nf->Hz$5~ z>er`ky*D?Ms;Ore)byO1uBn;osYRdqN8hG9T?5zT*`X8jT_VXO(`(bIr%l zi)Nc;uQz2Iu}eG9Y`>_)uz*-Po}P^v7G4~)4`Sv=%=~2FdT$+X^9M)8UKKZz#G|K0-29cqVx&dfzBO=cEx<(yfW0=h)*WpTET}KdsV~*k*n&Ddrw)Iv?){*BTE64&{z>=8^mG4?2Qq|4?zJA~ z@69XWXGPNs=Vylh3#%sMZ!{-kFFE)CFV}m;?K#Q#Z~tG(_^HvcqShnNi;*yBisliO zvUill(5_fPv0Vt8uRuB1&(lkrn~{nbG*2yRM0h2aqnwXd^7+ZAe--Gx&MXJ;z37@1 zsl3hb$Ivlo6V`_pEQ+1V+kdc7GAem`n7y&|uf+ca0CkxV zau+t=h0tBtaTf+ed*H9|%587w_sy#OQ1Ou7dKXBZ_xq;$rgvW3Q0=RcJ-0`W-12_b z{TP3A9?2l>txF!V-WeB~3eC3lUmLm+_|x`7)liKbUL4$dWB2dR-b#Izd5o1W&Nxz+ zB(lElN6li!_M0bgaN_o^k(=tL;m24P;lSghE-7T79(Z!(n`5)-T7oV087MF`~Uy| diff --git a/backend/__pycache__/models.cpython-312.pyc b/backend/__pycache__/models.cpython-312.pyc deleted file mode 100644 index d1097faf9eae733faba896fbf374d92f3efdbcfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmZXS&ui3B5Xa}`$0qyBZdEK&D~Kqrtz8h&f+BRSNQL%dy#yh=-8Z)B<|XY*V%ggY zJ$P*C!5%ymytHh=qkn|QuHZf>Qatr0R4<<7Ww%?wIV3aRnSAp;lYA)_a{vH49~;Y` z3BV6koQBy?PF?}Pdtktb51crJYmUZsN9TrPaMLk~>S=z4TaK0Hx^Hvau?c8^R=aQG zWHopO%vc9zVz#aKWGC0ml&xb`luem=68Z@bq%|AFxQIe#Uc|x+7Nu1ULmz1%?HL;5 zg2%B;WQk$jr-H`b8+2RGQT1`PDRsgVDp%%JrS8n0&g`@ycWaPH1Xs4a!J~*8&Hm}D|4>PLzeg|FSzb% zLj8WH=(;hj`PeIk`U=7T0I7LQs5MDLwWNuhdcMdgCF?~lt*b2yOU-AMs0ZPi%+&?b z7@14sJvdQVf9_V6LXH)z)tZ$Vj2dycQmOh0uF)7p%?}qVHCk_Az$!ds=tq+)O_5iw z>Z0tUIRIFPZx=^fb4S^s4QpqilfB)lcJsrVH@7crjUVK%wr0A8^PBg#uWvovi93af z*3)k3(#G1Z(J9?&&31=Jw(Z?ppCQg%J{M~3ssDUAFLTkVPyPB5^5z+Sik{M@ zi1OUo&}1mMum{{ml}6Y*@u(70?=eMgKkDuLvA6~R>c@$00KiY35b_R diff --git a/backend/__pycache__/user.cpython-312.pyc b/backend/__pycache__/user.cpython-312.pyc deleted file mode 100644 index c0a33c1b06de50761d267148579a5bcd95189f32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1477 zcmb_c&u<$=6n?Y6?1l|n$CR|Ft&O5I+M>ir6iz4yR0$+dE``fVXtmj$r0dM?rZZzv zS8m0@haiM#B}A^3;6N4r61ddz!Dv)Ys0VIU4VRwK+x5gzs5tQ?&%SwY-+Q0GZ)Sg8 zTwDME`2735?v?@Y2X3_4GiSO90Edu3LKtKuAOwAb8JQWFrEfATvjdxe0UttQ4I!~9 zIWnvI!09`F?N8kJM0q#*d3-&R(MM69Fv@+R96=e4rB9UgnV>w@^U=s`Gre45pb(G* z0wW5~=D_?fMY`U+w>GVoR;ga9#LuEQbA_B@XGc(} zY?fxJcY#UDpLqeeEe^bp14cjUHkfz ziQ5{vt%uIoU7NV;BX|8LI(Dy3O=D@{zg)q#Dq{q;A!|+xwVpWFYN#^Hpxc~rImZK}7Q`(UvG^v<`X#x_$%=$BQC@>; y%q5(KN3I6?6AX diff --git a/backend/config.py b/backend/config.py deleted file mode 100644 index 3bf6b86..0000000 --- a/backend/config.py +++ /dev/null @@ -1 +0,0 @@ -DATABASE_URL = 'mysql+aiomysql://noxios:@127.0.0.1:3306/nexiosdb' \ No newline at end of file diff --git a/backend/database.py b/backend/database.py deleted file mode 100644 index 6ebbf58..0000000 --- a/backend/database.py +++ /dev/null @@ -1,17 +0,0 @@ -from models.subscription import Base -from sqlalchemy.orm import sessionmaker -from sqlalchemy import create_engine - -DB_URL = "sqlite:///./test.db" - -engine = create_engine( - DB_URL, - connect_args={"check_same_thread": False} -) - -SessionLocal = sessionmaker( - autoflush=False, - bind=engine -) - -Base.metadata.create_all(bind=engine) \ No newline at end of file diff --git a/backend/test.db b/backend/dev.db similarity index 70% rename from backend/test.db rename to backend/dev.db index 382f39ffbbab61bc39bb884f91e20c97b11c4a62..fcfbf0a7d9744fcc80ae7e18f4b38c88e6a5db71 100644 GIT binary patch literal 12288 zcmeI$F;Ck-6bJBkKBtx~HCNFgVtW}PVX0#2&=o^ZC93NXlT>9uC}0zv1WpyZ6)Wuh zMofHyF5NqHjMNdqglt8^L9luJ|EBlO@7Ja^Vj`rBC^^GQituuON9Uc0000008N=$PUk~UTq=_#>4mvC%6}Z^ zCv)??Fth9^J)fAf`ik6%buiLAj{3u~=6>{1f8%Gnco1>DlQ*i({7V*2r`Ho#vX~s7 zrS+0}Y%LEO1>2#1vXSSSg!|D*f6_5WgAqsLFnq_JTb;mPgLr2*Sp70NDa_B5w+Dkz z2hmE?Ufll@#0UIYAMl1re9tf6<}Gzi>Q*h(U-esEH}$sx00000005u~Yb~36H!tRS zlIKaDBqp1-ZJWBwwKDglP3vWDvZ-s?)N#wo+z~dtEkmz*|KE_hQ~%XJ^+(+_aWen_ r000000BF{l^u_87pw*V$iz!!%{GrT literal 16384 zcmeI%&o9J46bJA(eQeY9V>rm3ByUe_f=C=(6%8A!s9oVCl__bmOQOYI_vYg7@-Of& zaB)J!LAoRjS&_JK_f5%KUf=}SF3eEscO00000004lW9I;)RE31wjADgHhxA%{ui=-K)X>__D zwZgcW$9+qI=hi)G_|>h3Cslvh+m#+WWW$$ymrQokRCcUFX}YXhJ?g|JU(O#zdS#Ez z*VM78oGZIjF00Ob8Xh#GJW>8+eWa|ri#6}l$%;;Fr0Unb6)zBfqb`1=26 zxWUq@8)OrkL3P~?_GHc5ldNj7(!HDO8`4kuPT&0Wn*jg-00000;6E8*rU`S_O2Wh> zp$QW+U@?tnGg)9Orm-|i(qh(|*AJv$^`n0HPhS8400000006($&q^_8qh&EW&inoU qmh`Q@*U!Jr3IG5A00000e`1s;)TjPG5At|-ChPxOHjg=3|NjjqD3bdC diff --git a/backend/main.py b/backend/main.py deleted file mode 100644 index 3f26c3f..0000000 --- a/backend/main.py +++ /dev/null @@ -1,56 +0,0 @@ -from fastapi import HTTPException -from typing import List -from models.subscription import Subscription -from fastapi import Depends -from database import SessionLocal -from fastapi import FastAPI - -from schemas.subscription import SubscriptionCreate, Subscription -app = FastAPI() - -def get_db(): - db = SessionLocal() - try: - yield db - finally: - db.close() - -@app.post("/newsletter/", response_model=Subscription) -def sub_newsletter(newsletter: SubscriptionCreate, db = Depends(get_db)): - db_newsletter = Subscription(**newsletter.dict()) - db.add(db_newsletter) - db.commit() - db.refresh(db_newsletter) - return db_newsletter - -@app.get("/subscriptions/", response_model=List[Subscription]) -def read_subscriptions(skip: int = 0, limit: int = 100, db = Depends(get_db)): - subscriptions = db.query(Subscription).offset(skip).limit(limit).all() - return subscriptions - -@app.get("/subscriptions/{subscription_id}", response_model=Subscription) -def read_subscription(subscription_id: int, db = Depends(get_db)): - db_subscription = db.query(Subscription).filter(Subscription.id == subscription_id).first() - if db_subscription is None: - raise HTTPException(status_code=404, detail="subscription not found") - return db_subscription - -@app.put("/subscriptions/{subscription_id}", response_model=Subscription) -def update_subscription(subscription_id: int, subscription: SubscriptionCreate, db = Depends(get_db)): - db_subscription = db.query(Subscription).filter(Subscription.id == subscription_id).first() - if db_subscription is None: - raise HTTPException(status_code=404, detail="subscription not found") - for key, value in subscription.model_dump().items(): - setattr(db_subscription, key, value) - db.commit() - db.refresh(db_subscription) - return db_subscription - -@app.delete("/subscriptions/{subscription_id}") -def delete_subscription(subscription_id: int, db = Depends(get_db)): - db_subscription = db.query(Subscription).filter(Subscription.id == subscription_id).first() - if db_subscription is None: - raise HTTPException(status_code=404, detail="subscription not found") - db.delete(db_subscription) - db.commit() - return {"message": "subscription deleted successfully"} \ No newline at end of file diff --git a/backend/models/__pycache__/newsletter.cpython-314.pyc b/backend/models/__pycache__/newsletter.cpython-314.pyc deleted file mode 100644 index 0db9303aa664363dbfdd9c9f05dc4fdf70e8b2a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 780 zcmYjOzfTlF6n?Y6ISw)Akf>24#A0K@7G9t+78uQ4j1&ttCdXuUci;y0$KC8(;kqk~ zHLV?`cK#Rs0aEBB6vWET1Y>Px?*Jz=lkdGR^XB{BdwgTA0RV9R_2d2<0`OA@m&=}l zi?;wUh8+k=7diyVlEy|CItCgwHoMR<(X6r6wK_K1OVG2Ip*<~u&H^k$XfHzO^qjUi zNuwLOE8u&-bm$Z1c5~!=T>3;gTPQ`or_u8wt+L!F>Sn^@lu3r-9j6g1c|5INFJ~HD zysXvs07(dF?09H~1TC$m=Y&RRgy#Cy|8>@@v({C1CbY2;IxFD2s<~A~Wh})2MUksU z&JW9!BXYUz8)|kSMaJZa9`KQ}MV{~@-;lEapqwff!-{`~O@CH-l;$ksl&S`$S&>w! z#!X6x6-%egJf*urmY9m1=LMx|j#6Y%$|t;88RRw&K3zB0^Ed{a_%AeI8>OY@`)GWXNTd7JEU&;sc&1 zK~^L@ErV;%tAmmBv<`jgQ?3BO2l(E4IDUOTGk@%!Y=3E;&a90$el%|#ubs3$C8y0N z?_bE{oD^QvjQ4cX t*=O<|01&P25di!)2_a|j;0*59d;Q#9{N~;nTYoHzw2#|=!6NOt%s-&_%hmt@ diff --git a/backend/models/__pycache__/subscription.cpython-314.pyc b/backend/models/__pycache__/subscription.cpython-314.pyc deleted file mode 100644 index 94e8a23b84498a3d6b280092434fb9778f841cbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 782 zcmYjOzfTlF6n?Y6xjV!d@S;YM5Q~ioTX=!SSYR}F1r!T5CdXuUci;y0$1(d>xb6yL zO>0M~o&SY@fD}3j1+lU-!C0HwJCMoDz0Q}U!)v~AH z@+|<2VFyCegDyd`sIk$5u7O64%^q}3G;3`2tgemrBJ}Mg=u9clS%4)7?KXr?-|3i> zG`gX?48HeEhdxnmFGs$|rB9Tzg;L~u8oeyiD$9MMZYMlWnPe#5aT>9b$5ZxtIn&_s zb*;7!NJ2nk$3rtDXlXTlCp1DMG}o^Gud`mAwXU->p^c5uSq9%#t*t65V=0Cxid;2v zepIF$k;`r0P|cwf8IvP=z(>j!dBTr2#KB-GR45@W1LnPADz~&hfsal}4M1~@!3{i@x zLS9lTX93_+_e5<3gCgSrkD^hq6%QmA5sES%1VdTu^BBuuJ+1f=LoTDV*b5>SAMiX0 zvLfMW8I(6VureG;Pb<-vKIJk1e1PxskH;GqGjk{I>GqfTvzgWL`j6I~lhxDtPsv&9 z+51=W?$xVJ-&2k9FlA{x;Mu75RQstds{8*-EBqK&Zp>Wj5i4t*m3$&XTbvNLb;Wx= u>Fo>o004+q_XGfbn}m>acytaA>%Dg2w!gXe#?~LpBAt`YU$980ruhem3(T+p diff --git a/backend/models/subscription.py b/backend/models/subscription.py deleted file mode 100644 index 7621dc8..0000000 --- a/backend/models/subscription.py +++ /dev/null @@ -1,12 +0,0 @@ -from sqlalchemy import Integer -from sqlalchemy import String -from sqlalchemy import Column -from sqlalchemy.ext.declarative import declarative_base - -Base = declarative_base() - -class Subscription(Base): - __tablename__ = "newsletter" - - id = Column(Integer, primary_key=True, index=True) - email = Column(String, index=True, unique=True) \ No newline at end of file diff --git a/backend/pyproject.toml b/backend/pyproject.toml new file mode 100644 index 0000000..b6ff302 --- /dev/null +++ b/backend/pyproject.toml @@ -0,0 +1,23 @@ +[project] +name = "backend" +version = "0.1.0" +description = "Add your description here" +readme = "README.md" +authors = [ + { name = "ebby", email = "ebbyplay@proton.me" } +] +requires-python = ">=3.14" +dependencies = [ + "fastapi>=0.141.1", + "sqlmodel>=0.0.42", +] + +[project.scripts] +backend = "backend:main" + +[build-system] +requires = ["uv_build>=0.12.9,<0.13.0"] +build-backend = "uv_build" + +[tool.fastapi] +entrypoint = "backend.main:app" \ No newline at end of file diff --git a/backend/schemas/__pycache__/newsletter.cpython-314.pyc b/backend/schemas/__pycache__/newsletter.cpython-314.pyc deleted file mode 100644 index 6f2a9de5e9f0fd0d2a06f49d77592e7b48ebaefe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1515 zcmbVMO^+Kz5PdaYwzJ+fN!S=dv<568jX>)IIUo^5QF7ozuoAP;N(k+?#^ZK8VLY?+ zv=!~mfhc?7kR$wr{1bixG~&dC+yJjgj;MNUV@G?UC6{`t%T=#lzv_3lHZK5x_tTH} z{{Zkie=L?i-^}g;nBoW#eS(ikQwQ643z5@Cw~Et_^?GeY{-Lw~O9o|?~kqhc(3vfn@H z?I$B8)4op2WYjxW#eJFRvUfY1$Oo~Os-G42di^;0TIPdZnT+H(E_?a1huz~7(-b1k z^Fqg33Sr(@Z*X_@kee%80A8HpTl})I_3+cbT@cN<`={6oYo;zl9*;TE1tG@8V3P5^ zDa1FEIGdlegczo()LEL#yb!`%Tq!b~o z4aP|aJZfpKLr3vTRY|CtuIi>XIqvnfW>-Wi8tao#-+1_uorDT&C5!rbbl5)B_EI2i z-o5scfUmKWjV;4MdU1*=o(JT2{sQ@(=QR+0H&+%1?uEXoAD;~3T&Ia*-B(j!1!vPS zrvH>^>Nl$4ys7vhVopnb4gYkB=r`<~c|@%zU!H-ebrujce%RrC<1Fx~^W^3~@Tg<6 F{R@G$JM91f diff --git a/backend/schemas/__pycache__/subscription.cpython-314.pyc b/backend/schemas/__pycache__/subscription.cpython-314.pyc deleted file mode 100644 index 3aaad28d4abe4430eb0992f1081f7f3ca19b6aa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1523 zcmbVM&u<$=6#m}+vfVg!+mM=8B?c@Zty;y0_E3omRqcTv5|P+Mxu9gUUa#vd>)mvA zER>sDs^-FhD}O@&6OKK?AWocmL4YILBYLy8Sw}fBlAmVYJiqt7Z@#xTFRotzfW4o7 zeEbK1-}$gu?tC-b12DxQ0{R@Ek)jSZ@c{y>jle#jJ9ZhTEaP?B2;2i}>9vj5Ya^&t zyiQQ>!f(9hzxt#b55gk;G9Scgw5ZO@njdDj0EC$00Ez-A>(EyARpi*mZ3?K3w62`M zQtm#K7ua3+j=r=z=@*eqj#QFooIWA|{Nv>SVBE8h0NkS~_Hk(4eGUw4;0C^;5%sW3 zU*lsdAdcz6w_YqVZR^1;>6k)jPdWK8|~F zzkl4@jYcv~`YI`+QSV6RkK;%cy$9(e{x(#x?5FvoUO$Y!iL*hkh(_@^EP6$yi|wOh z-4r6svRs8K7DB&ww#n`4H8)ta0K7fHGyJl4@#zluY^)6&GdXl9MP- zQz2fGTw_@L5cg#hfMlH+WAN5WyeD`L$=J=!iYgXwIJ;_exzvQG?0{GYUHG=XQl;jh zjG5s}0Cs#=Ugo@4*le(QhYcq)0cBN#>^l3{cnq0wzQC_ey^LW03NF?Zui5>xYHgHi zHIqPX1lFCovXx^LY#Rl;fup>As9NB5;d{DS?O>(Sk^#n0nTqCu0p-r8V56F2`(d69 zlSg}V9=!8-(5<1&$CXz+j~MNhndBA#X3D(U3;cY2>-$#8&il*`<6L0`mJOrVq#!m_zaS~<)@#K zpPQ}*RKdv<2s z)9YA1P^*M0r4lHs3J$JZFhveAryMx)CvcF;ia)wg;S^kalk8CDz=3)*vmY|)sp@&t z{ko@ruYd2?J)O-Y0RV1a{^aVPA^`uyk9LWL#`8ZDfEHW{N+})#!@Rw7E(|;=JRy+~Bn4e=N>xZj)1{5;0_W>yBx<4yQMH-EfRmzd1HX z8`P9j?$trL~lGMpk> zBnNh!$F(R=ECWw!WD3-nNG~<3p2@5Rw_Io8k}5G707R<6th&M0^=oupl|;mHYV@Xv zHXZAFlbT4BkSu`o!y(Tv0>D|)f@QcOz42>+nhY=w?~*lAf+g}x(8!5)x&Xkeq)EpC zu!qb_njG5FtfVPuPk|bFiiBMdl2sECS~o0PL=BT$H>fHL*>bp$Juc{R)Ay6)i|ue8KZOKWbOmT0xQURpBO7`3Y0^31hTgSl6!$-UBBc9Xtm zaLTH-yIQIm<~8cnN**&icHOX?lZ|ze)^#J~imr>Jy%9Xw+tmjE-U$Hs&nCPNkK?Hi zYrjqIC}$32Amqzbc1I~4M1YWkC}ak9l(Anj%XxNSMqadn*~0Dui+HG)+RH*=t8Q7cWy)O9he>mE0_W$Fg!%&Imy z^>iIQJFzpVZR@&9*f_$#?fwxf;G77{uY7#d0lpSI9v-_p^ZBLS;WMqb9uJJ%x%AmL zb_YtWA3q)%{oU!-g%=3!17H*F(U(*rBHXCj^j5S+Z=9@EZza9!w#Dh0QmG^c%r$CW z(>;s;Ut`p$T~LWgo37(flj{as^$w*DaBjERTQd5W+T{l6c%UHnb)&QBg?hd;`^kRf^WcJX%c zqvC(PBLMLJ=sEI9M2-9*d5+vmok{#9agKhYy!HTd;QOo{oiYF61S0H9uY8Gn{1>A|fxw^M~}r4VqUS9g)EKJK%=@Bgc=M!Gqm zNnMs`a<{!CPl2j1jJQbmqGNc*izuVK$sASk(_JLPGi{DGRKoJOP+ZX~fh-(DMqq^$ z_Yh(WUVuVI53u^w-pAKpf8oFWcF}JPP<8klBJxpP4N#HA4$r$~xx@4#ER)5M%e|$$ z_sit#a{bT@Fcq>x7P3*RiKyw;>lPO=Mpqd1)>Mh%J;V=*f1DgY9&mgp%-ER=@paX%a)YdNOftWiC1dYS+6v%%^11Ez%+3lHyS`!XS94<`0td=CnH@Y){a z_aOfdnEL|ezUr4re(R09Gyeve z$kwgT)4Pdtt>`m_5cOG9A|v~8$mX`*`(y00)cuK>?cB^4nb%v%FQb_ctd{(QD4XLO z;~!f0$>@PZNdCDD($Rgi4&sm;`Z(W;J|VHqv5m3q^!R;JK&NBqbPS!2?MFe1Z{|1h j+nK_Ba_lQfA*0w^+(&Ca3q*McgF7&|_5BAB$jko#PBN!) literal 0 HcmV?d00001 diff --git a/backend/src/backend/internal/__init__.py b/backend/src/backend/internal/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/src/backend/main.py b/backend/src/backend/main.py new file mode 100644 index 0000000..d6b4e54 --- /dev/null +++ b/backend/src/backend/main.py @@ -0,0 +1,56 @@ +from email.policy import default +from typing import Annotated +from fastapi import APIRouter +from contextlib import asynccontextmanager +from fastapi import Depends +from fastapi import FastAPI +from sqlmodel import Field, Session, SQLModel, create_engine, select + + +# TODO: sql zeugs richtig implementieren nach FastApi docs +# TODO: Integrationtests schreiben +# TODO: Api Specs definieren (Subscription, Comment, Like) +# TODO: Settings hinzufügen + +class Subscription(SQLModel, table=True): + id: int | None = Field(default=None, primary_key=True) + email: str = Field(index=True, unique=True) + active: bool = Field() + +sqlite_file = "dev.db" +sqlite_url = f"sqlite:///{sqlite_file}" + +connect_args = {"check_same_thread": False} +engine = create_engine(sqlite_url, connect_args=connect_args) + +def create_db_and_tables(): + SQLModel.metadata.create_all(engine) + +def get_session(): + with Session(engine) as session: + yield session + +SessionDep = Annotated[Session, Depends(get_session)] + +app = FastAPI() + +@app.on_event("startup") +def on_startup(): + create_db_and_tables() + + +router = APIRouter() + +@router.get("/subscription/") +def get_sub(): + return {"name":"TestSub"} + +@router.post("/subscription/") +def create_subscription(subscription: Subscription, session: SessionDep) -> Subscription: + session.add(subscription) + session.commit() + session.refresh(subscription) + return subscription + + +app.include_router(router) diff --git a/backend/src/backend/routers/__init__.py b/backend/src/backend/routers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/src/backend/routers/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/routers/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0e08ca7919d75bba3bcedd33ac885cb049fe931 GIT binary patch literal 185 zcmdPq*4ZW6I$|_UT%w)H`SA%)XzCK(o=_OEls5Dfsj6NT{|&68mkvRqho)w~I%3JWIeI@w}* z|B6NZR$qEko>7lR(cGKFQ$bmzn2e`hA^42ON_vNBNgqN*MU?VeZ>9I7i2wQ5C_Pz5 xG8U{*jOTJ#%(b(Z@uW=YzUTrV0OSUMFOv{bVY5Q7!k|L$y|w Subscription: +# session.add(subscription) +# session.commit() +# session.refresh(subscription) +# return subscription \ No newline at end of file diff --git a/backend/uv.lock b/backend/uv.lock new file mode 100644 index 0000000..264bc3b --- /dev/null +++ b/backend/uv.lock @@ -0,0 +1,237 @@ +version = 1 +revision = 3 +requires-python = ">=3.14" + +[[package]] +name = "annotated-doc" +version = "0.0.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/8e/38aa427ed5402449e226975b649c5dc73ccadfefeb95e6aecb8f8ea4b6b6/annotated_doc-0.0.5.tar.gz", hash = "sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb", size = 10758, upload-time = "2026-07-28T13:50:58.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3e/30/e900b21425a860e195f32e37657aa1f7c7f2b1bfb26f03ca209b90933c06/annotated_doc-0.0.5-py3-none-any.whl", hash = "sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101", size = 5302, upload-time = "2026-07-28T13:50:57.239Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/56/a8120250d128bed162cd73c76d45f6ef9991f3e068f62a8ee060afa3104a/annotated_types-0.8.0.tar.gz", hash = "sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7", size = 15893, upload-time = "2026-07-23T20:16:13.995Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/91/8acff4f5e50511b911bbccb72b8628a49c68ce14148cd9f6431094859a90/annotated_types-0.8.0-py3-none-any.whl", hash = "sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0", size = 13427, upload-time = "2026-07-23T20:16:12.938Z" }, +] + +[[package]] +name = "anyio" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "typing-extensions", marker = "python_full_version < '3.15'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/9a/c15a60547004a3f3cea20296c934f827ddd7bdba225a2e7e9fcb5ec48c80/anyio-4.15.0.tar.gz", hash = "sha256:b5c620ed540725e2579c31b17bb995b3bf02c9281c9cace04c7d186380bab85e", size = 276504, upload-time = "2026-09-02T21:46:36.957Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/a6/2b21ce5ebe4d8938a247c9b0dbb7271566ae559b01795c83ea4bb2660ed7/anyio-4.15.0-py3-none-any.whl", hash = "sha256:7ecd9937369ffce8bba0b5ccb9b3a9507b101b0ed50256aecfbab27e6c2acb99", size = 131908, upload-time = "2026-09-02T21:46:35.485Z" }, +] + +[[package]] +name = "backend" +version = "0.1.0" +source = { editable = "." } +dependencies = [ + { name = "fastapi" }, + { name = "sqlmodel" }, +] + +[package.metadata] +requires-dist = [ + { name = "fastapi", specifier = ">=0.141.1" }, + { name = "sqlmodel", specifier = ">=0.0.42" }, +] + +[[package]] +name = "fastapi" +version = "0.141.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc" }, + { name = "pydantic" }, + { name = "starlette" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/02/91e3416a8fdd715abb903a952a6bec7cdd8d14eed55d415fc8595524c319/fastapi-0.141.1.tar.gz", hash = "sha256:e8822fc40db1e1858054d7a949a888695bc9bdce70139178e33bd2871a453ca1", size = 425799, upload-time = "2026-07-29T17:18:05.568Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/03/10388a42375ee7e4ac9b94eb2c5c569c8b5795e377e701c9ac3ad63de890/fastapi-0.141.1-py3-none-any.whl", hash = "sha256:bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3", size = 131954, upload-time = "2026-07-29T17:18:04.364Z" }, +] + +[[package]] +name = "greenlet" +version = "3.5.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/d8/7cc97c142388aef03f622e001c572c4f84e9252a439549d483f555771970/greenlet-3.5.5.tar.gz", hash = "sha256:adb4bae02e91a8e863e48b177e4014bdcac8a6b5e047ea1df687a61534b85e6c", size = 207585, upload-time = "2026-08-10T15:09:36.136Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/8c/080e881fa2be95ff1ddbd6994b2bab3b1a78df3b3fcab39306011764fcc7/greenlet-3.5.5-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d4a389a852e392a6366058651a20fa5ba40d979865aa81bea2ccbdc44805070d", size = 295309, upload-time = "2026-08-10T13:26:03.032Z" }, + { url = "https://files.pythonhosted.org/packages/25/cc/0ac614e6586c0e42d4cc281a5819150f4f43685744a4c5ff77139286409d/greenlet-3.5.5-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70b157cd319873e8b544ddc2de158f55bbd0a9b0218c8ce9332039801518e328", size = 661185, upload-time = "2026-08-10T14:14:37.867Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b9/6808725354be8ad305dfe5172377664fc9642d4fc043be246b3314cf4482/greenlet-3.5.5-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8bdfd1424abcf26832961e766570cae79efdb9599d709088c9cb6ef82b194926", size = 673419, upload-time = "2026-08-10T14:27:28.652Z" }, + { url = "https://files.pythonhosted.org/packages/42/2e/40c509967da7f254680826a2fa0dd22138ec79946c70b97542d74cde8b43/greenlet-3.5.5-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:182de51c6b572a705f2fafaab2e783bcf7d2760940229dfe73086cbae037af3e", size = 670822, upload-time = "2026-08-10T13:40:51.833Z" }, + { url = "https://files.pythonhosted.org/packages/2d/22/c3c2eee4a8fe191d6d1d183086c56133d646024e3d70bfd414829f64560b/greenlet-3.5.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8fec3f165dfe332e490c3247c0f6c23b0bfc45f06496ad7f00ddb00e3d35e4dc", size = 1628469, upload-time = "2026-08-10T14:15:08.11Z" }, + { url = "https://files.pythonhosted.org/packages/f7/87/25babd09b94cb1f03e71db815fde463f0262e40cfbd953d58a8d77311351/greenlet-3.5.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c6ce25fee6cabc8bf22cb8b52e642cbb821be5b9aec8094d07ff03378141b8e9", size = 1691952, upload-time = "2026-08-10T13:40:33.502Z" }, + { url = "https://files.pythonhosted.org/packages/2e/3d/5cc9701117ea4dc0eb7bf1f4f9b7888a6e2e5277ddfae095805ace50f2b6/greenlet-3.5.5-cp314-cp314-win_amd64.whl", hash = "sha256:7dffc5c859fe6059974df1e37d7923d654a83e2ae18fdd616994270e001115e1", size = 327458, upload-time = "2026-08-10T13:27:02.868Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6b/594fa2de7fae7629168a404a4305d7d7e31a5742c50a801b1839543cb93d/greenlet-3.5.5-cp314-cp314-win_arm64.whl", hash = "sha256:5e2afcfc4d4305dd715809b03da5cbe437c8984f61d8917751eb5fe4aefa3e07", size = 311146, upload-time = "2026-08-10T13:27:25.046Z" }, + { url = "https://files.pythonhosted.org/packages/24/e0/50cd600b469e5734c72709b6b1838b6bc63f307b573c772c3132d6ecfe92/greenlet-3.5.5-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:0e5a7de979d764aea1f5b6e95cf92b5b37741b9823702041f34b126e7f690277", size = 305471, upload-time = "2026-08-10T13:26:20.568Z" }, + { url = "https://files.pythonhosted.org/packages/75/a3/77acd66dfc6387b5219b2080806c0cabb73c10eb1bb44b413c40a62015ba/greenlet-3.5.5-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fef01bd457f11fc158b130ca0027a3c365693280e8e231b65bdaf57999f39f5b", size = 672470, upload-time = "2026-08-10T14:14:39.058Z" }, + { url = "https://files.pythonhosted.org/packages/b9/71/0d178142dca3ec19f46fb2212ae73d30ad53b9d548dc64804086033a7089/greenlet-3.5.5-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5173a72310725a74afc82c164f0e52cb8ad0de62f2bb623f24f6c0cc07d80272", size = 679973, upload-time = "2026-08-10T14:27:30.072Z" }, + { url = "https://files.pythonhosted.org/packages/6e/31/46eb8567302eaf787abf88d09df014e14ae3baf460af1b8b0efdbd3efcd5/greenlet-3.5.5-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44f08341873200ba8a60a8bc14ace3d91f1754f7fa7bc66157714a8cd420a476", size = 676634, upload-time = "2026-08-10T13:40:53.004Z" }, + { url = "https://files.pythonhosted.org/packages/a3/e9/b88bbf5b29970cb84172dc2c32aa3e5e579ceb94c808e81c826454138850/greenlet-3.5.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d246c0db9a2513cd45f019ba178ea4d4d4705bd210ee465e2c15d76a1ab13874", size = 1637320, upload-time = "2026-08-10T14:15:09.317Z" }, + { url = "https://files.pythonhosted.org/packages/6d/8c/7631ed29cc6f0392f11830076e172ce4885e70b0bc2c1bce1731176d4b4e/greenlet-3.5.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:72507285b5caa1d17904a3f7c322ca780823a54170a0e04ec3f37bcc60d4db71", size = 1697412, upload-time = "2026-08-10T13:40:34.924Z" }, + { url = "https://files.pythonhosted.org/packages/da/0f/f7dd935f9c4cb1be49098770587f54d8a78518e55c89bce86c4fb4109057/greenlet-3.5.5-cp314-cp314t-win_amd64.whl", hash = "sha256:7805655781fb8f28a55d05fe57ed61f5f10f1892fb587673e3bb5264f28041f0", size = 331514, upload-time = "2026-08-10T13:29:20.611Z" }, + { url = "https://files.pythonhosted.org/packages/b7/e5/681b01f8fbc1b55232822f99e8f8afeb78a55a7c76a7bf9dbdc7ccb03a6d/greenlet-3.5.5-cp315-cp315-macosx_11_0_universal2.whl", hash = "sha256:c0db80fcd5b8aece93f66c64f78a786bbb6b96c5fe63ef5a5a4581ecf8bab206", size = 295975, upload-time = "2026-08-10T13:28:45.985Z" }, + { url = "https://files.pythonhosted.org/packages/11/f2/69b488cd9e7267bf4b0fe8cdebf25d8d6df680d21bdf41150d23e23d6652/greenlet-3.5.5-cp315-cp315-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b241c32f912ada659808d68e308c568baf577eebf757d15471472de0c18cfad", size = 666823, upload-time = "2026-08-10T14:14:40.222Z" }, + { url = "https://files.pythonhosted.org/packages/84/d4/d5bc2fdebbdda0c94555925ba79948b8395d75a7f6a36cc85dce5bab9f11/greenlet-3.5.5-cp315-cp315-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ef6a08349401d8eaf3cb12688ac8557de95788556b8631ef17555a4a173022c0", size = 677613, upload-time = "2026-08-10T14:27:31.543Z" }, + { url = "https://files.pythonhosted.org/packages/bd/93/542d8a3a90f3b35c6ad8bf7e56a03010287f2cafa289a5b7985b5207db39/greenlet-3.5.5-cp315-cp315-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2e3d061b8e13aec2f0441689b3c71b244a20e5d274a52cb0f7e31bd1d139552", size = 675930, upload-time = "2026-08-10T13:40:54.205Z" }, + { url = "https://files.pythonhosted.org/packages/52/b5/89c9f2e8460d71101037d47a1feed11928615a5edd42370be290e0657eeb/greenlet-3.5.5-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:9ab5f5b93655e77fe0d6c2dfd22b5eac751bb1f876d8ec21761b7c1fb9266007", size = 1633878, upload-time = "2026-08-10T14:15:10.693Z" }, + { url = "https://files.pythonhosted.org/packages/b8/60/297de93f3b02ac78a5e04d32bb8bbe3080f4a73d8ed95016561463b70618/greenlet-3.5.5-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:f0e5a21bd4452a88cf032fc43c4a5b307ab1380eacb63b5988f9c0317885e773", size = 1696597, upload-time = "2026-08-10T13:40:36.252Z" }, + { url = "https://files.pythonhosted.org/packages/18/25/54c6eaff4f337fb670215e89eb2d00d9499487b658e709d4b477be4a342e/greenlet-3.5.5-cp315-cp315-win_amd64.whl", hash = "sha256:469dbb0a78625642f4a626cfd0c6e8bccc0385b5e49189b6308bbe849ec88a8e", size = 327700, upload-time = "2026-08-10T13:28:06.752Z" }, + { url = "https://files.pythonhosted.org/packages/67/67/857e88a36301caa0e029870132c2478bd55d896630321432afab03a3115f/greenlet-3.5.5-cp315-cp315-win_arm64.whl", hash = "sha256:2d57406c3efd32d7a81e17a674314e8bd00792cdab49ea3228a49aa1bfb2e769", size = 311750, upload-time = "2026-08-10T13:34:08.815Z" }, + { url = "https://files.pythonhosted.org/packages/10/e2/3144c0a116067ac1e30457b0139a94d60d1d36a86e015de68e9ac87cb3bc/greenlet-3.5.5-cp315-cp315t-macosx_11_0_universal2.whl", hash = "sha256:68184dfcf50ccaa8e864770fe0633a7e27250ea9329f8192ef47ee9ecfd78e1c", size = 306387, upload-time = "2026-08-10T13:27:00.897Z" }, + { url = "https://files.pythonhosted.org/packages/5c/a1/cb4223a7e9b9f43b8807e8eb212358bfe2dfaa174a9ea2889eb1714dcba2/greenlet-3.5.5-cp315-cp315t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ec0dc0e59dc9c61af5c47348365ccbbd7addfafe0a93b00336ff3da2907bdc6", size = 676472, upload-time = "2026-08-10T14:14:41.417Z" }, + { url = "https://files.pythonhosted.org/packages/9e/cd/a154b4498e5d8f12ada291cfb3b8d596eadde2177f5bf09a9be699d2a446/greenlet-3.5.5-cp315-cp315t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e604f58e35833fc46ef20302bcb314dddbfd3fcf33a4f936216d51dd678d63ae", size = 684238, upload-time = "2026-08-10T14:27:32.946Z" }, + { url = "https://files.pythonhosted.org/packages/bf/bb/b0031d260c2968a3c87deebc51d80c64e499377f993aafe06ee3b7488cc2/greenlet-3.5.5-cp315-cp315t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:40239b5384f96da3963585cc6d7eaa9b56f8ae67e8d92cc82dd9e202fc847de3", size = 681246, upload-time = "2026-08-10T13:40:55.402Z" }, + { url = "https://files.pythonhosted.org/packages/9a/07/da554b71ab88e649da146e1065d86a48a5c5d92e50ab74ef41b504aa7f56/greenlet-3.5.5-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:a1eaccf5c3a1d3e46dead602c72e6836731e8e245c9de6a27764567b6b62d4c0", size = 1642735, upload-time = "2026-08-10T14:15:11.92Z" }, + { url = "https://files.pythonhosted.org/packages/78/76/26a3782a051677668af9d92beaa47cd87ba9dd5072f762961144a03dd4c6/greenlet-3.5.5-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:19e4e026fe20691f333b8eb1a3bc9625eceba8c3f9d62ec5a6f8581afbc6b5a5", size = 1700925, upload-time = "2026-08-10T13:40:37.656Z" }, + { url = "https://files.pythonhosted.org/packages/28/d9/fe7baf4190c2ae71f267efb9de21b3172bb35bc0ed1ef53dd6027d658e33/greenlet-3.5.5-cp315-cp315t-win_amd64.whl", hash = "sha256:712aee154f648bde84634654bb38bb78c69ac640c37a45c9effed800735049d8", size = 331829, upload-time = "2026-08-10T13:26:48.851Z" }, + { url = "https://files.pythonhosted.org/packages/df/af/419a4e383bd600858a9b67e9b280a60fdc383ee3f2fe5b6c0c1ef04e74d1/greenlet-3.5.5-cp315-cp315t-win_arm64.whl", hash = "sha256:7f049911ee81a16a03c33d5450d8d5867d27f596ca5fb201b86f4524e874468b", size = 315093, upload-time = "2026-08-10T13:29:34.949Z" }, +] + +[[package]] +name = "idna" +version = "3.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5f/f7/abb373e5757eaec4b922b92f97ec8d6d7e057cf06778247604fbc4e7c3f3/idna-3.19.tar.gz", hash = "sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15", size = 215237, upload-time = "2026-08-18T05:14:24.27Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/b0/0e52c878c53f245edd3a11020f20979b3f490f245af532c7cae3027754b5/idna-3.19-py3-none-any.whl", hash = "sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4", size = 68550, upload-time = "2026-08-18T05:14:22.343Z" }, +] + +[[package]] +name = "pydantic" +version = "2.13.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/53/ef/fc4f868f4e2cee79f863883abffceff107875f569b848507319842d2a681/pydantic-2.13.5.tar.gz", hash = "sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08", size = 845750, upload-time = "2026-08-28T14:04:00.916Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/47/c95ffc2009878c7aac0c5e08528022dcb885933252a88b5f170058014464/pydantic-2.13.5-py3-none-any.whl", hash = "sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73", size = 472589, upload-time = "2026-08-28T14:03:59.136Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.46.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/f9/8a06bea35ef8daf588f707784c973a7046e0034c8d8cfb08828eeffb8b75/pydantic_core-2.46.5.tar.gz", hash = "sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc", size = 472262, upload-time = "2026-08-28T10:01:31.677Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/8a/14596f2a8367da50cf7cbac48169ee5d9c8e11d486a3b527082384630c72/pydantic_core-2.46.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355", size = 2074081, upload-time = "2026-08-28T09:59:16.141Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d5/d8a4eb6d6c7f66b91dd37c576d76e9e60fba900caf5372c17bcf949febc2/pydantic_core-2.46.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e", size = 1920497, upload-time = "2026-08-28T09:59:18.065Z" }, + { url = "https://files.pythonhosted.org/packages/8e/26/092079428f86e927e030b2c0ced87df69dbb1c875cdeaa67bf42ea2be746/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3", size = 1952130, upload-time = "2026-08-28T09:59:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/08/c3/8ec0e290a9ebaebd64047bf5fda94be835c6b1551b02437e4b76778fbcd7/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c", size = 2026371, upload-time = "2026-08-28T09:59:22.227Z" }, + { url = "https://files.pythonhosted.org/packages/01/72/4fd20ad520fb8da0157f95b27a7eb05a72790ef08138e7701ac972c342ea/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21", size = 2202822, upload-time = "2026-08-28T09:59:24.277Z" }, + { url = "https://files.pythonhosted.org/packages/31/b0/d16e0771206b29314f0d52198b720be21e8a99ab2bf11e3bc0d7c9cebdff/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f", size = 2262756, upload-time = "2026-08-28T09:59:26.608Z" }, + { url = "https://files.pythonhosted.org/packages/2c/9b/59634b7ac631c63b2a37760eb6943af3e29573d6b59a4abc5e7f019d4cee/pydantic_core-2.46.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f", size = 2068352, upload-time = "2026-08-28T09:59:29.044Z" }, + { url = "https://files.pythonhosted.org/packages/08/7c/570abb1ad2155348dc754ea91be22e5aaa18eb6d69a6068f7c6f2679a6ed/pydantic_core-2.46.5-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a", size = 2104777, upload-time = "2026-08-28T09:59:30.95Z" }, + { url = "https://files.pythonhosted.org/packages/8e/25/5bf74adc65a1ac5b7be3f6cb0bcb5433615c1598a801c19d830d84c98ded/pydantic_core-2.46.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821", size = 2156312, upload-time = "2026-08-28T09:59:32.604Z" }, + { url = "https://files.pythonhosted.org/packages/90/6a/2ef38830675e050121040618135564ed56b860b45433b02d9b4ebece46f3/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2", size = 2150067, upload-time = "2026-08-28T09:59:34.453Z" }, + { url = "https://files.pythonhosted.org/packages/90/ef/a7dbb03a14a64c2a4621f989c615ed9a892535a6cad938fc27079f919d80/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47", size = 2304516, upload-time = "2026-08-28T09:59:36.194Z" }, + { url = "https://files.pythonhosted.org/packages/68/f8/6bb4c4b80e8a6fde1904c64a51c62a1d04fcdfa3ea521a66b2ddefa1d885/pydantic_core-2.46.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a", size = 2335223, upload-time = "2026-08-28T09:59:37.931Z" }, + { url = "https://files.pythonhosted.org/packages/2a/80/f46b8c681195190b2c1f1c7c0a81abce60663e987613e09ef64d433dd96b/pydantic_core-2.46.5-cp314-cp314-win32.whl", hash = "sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074", size = 1934827, upload-time = "2026-08-28T09:59:39.836Z" }, + { url = "https://files.pythonhosted.org/packages/f7/3c/60674207246bc0a4009d2391b7c7251c7159f279c8d2ab8aae8ef46f3dee/pydantic_core-2.46.5-cp314-cp314-win_amd64.whl", hash = "sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0", size = 2042648, upload-time = "2026-08-28T09:59:41.792Z" }, + { url = "https://files.pythonhosted.org/packages/69/0c/117c562c7c1babdf44576b72a5e496906506c93690387ecfbca7c729ae2e/pydantic_core-2.46.5-cp314-cp314-win_arm64.whl", hash = "sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5", size = 1989652, upload-time = "2026-08-28T09:59:43.702Z" }, + { url = "https://files.pythonhosted.org/packages/e8/66/9336ae58f9eb68c41d121894e52c4c89eccb07eb8f602a04ee9c3f37736a/pydantic_core-2.46.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7", size = 2065829, upload-time = "2026-08-28T09:59:45.364Z" }, + { url = "https://files.pythonhosted.org/packages/c5/02/bc19b47a96c2d3109760711acf22369e56bd7e405ca52f7ade164d2ead57/pydantic_core-2.46.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3", size = 1905716, upload-time = "2026-08-28T09:59:47.18Z" }, + { url = "https://files.pythonhosted.org/packages/52/a4/70b47c0509923dd98ccfed04fb3e32ea3849c82a0ff2205bb41009b43c00/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f", size = 1934216, upload-time = "2026-08-28T09:59:49.241Z" }, + { url = "https://files.pythonhosted.org/packages/52/ab/aa03b65f7bb198585edf806b906c3223ecf1795543e39e23aec4cce27ad2/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7", size = 2010635, upload-time = "2026-08-28T09:59:51.692Z" }, + { url = "https://files.pythonhosted.org/packages/3c/8b/0da06343f30b84ec549aafd309c6456223d5dc8bd36af504c573faad561d/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c", size = 2209369, upload-time = "2026-08-28T09:59:53.582Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5b/844c4defaa34a3df66eb9257087d121d70c201298b96abdf9f492fc2f1bf/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111", size = 2253238, upload-time = "2026-08-28T09:59:55.484Z" }, + { url = "https://files.pythonhosted.org/packages/f4/64/a4e536cb16d7f61a7fd3120b46c577fc7fa7325992f69c4f52bc786d77d8/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829", size = 2065740, upload-time = "2026-08-28T09:59:58.038Z" }, + { url = "https://files.pythonhosted.org/packages/5f/75/aaa38c6bc2d085f6605b34eabdc6a8a4e0b2e61fc9c8e6e52b28e97b3125/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa", size = 2087425, upload-time = "2026-08-28T09:59:59.898Z" }, + { url = "https://files.pythonhosted.org/packages/55/ae/fcab4cfc39aba3689e1d20c8b5250ad280957022c09af2ed9cd585602a5e/pydantic_core-2.46.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034", size = 2139306, upload-time = "2026-08-28T10:00:03.057Z" }, + { url = "https://files.pythonhosted.org/packages/2d/f4/f1d03a4bc9d9acbc62f4d742b8a319af52f71885079868b2ff8e48a651ee/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184", size = 2144589, upload-time = "2026-08-28T10:00:05.645Z" }, + { url = "https://files.pythonhosted.org/packages/83/f3/7a53bb1356de514a4cd295f25b6ac39237895620c0462d2592b76c16e114/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38", size = 2288882, upload-time = "2026-08-28T10:00:07.931Z" }, + { url = "https://files.pythonhosted.org/packages/cd/94/5a81583660c175c59d49ffb09f4b3a44debeaf86a19fca664ae1cdd9ee32/pydantic_core-2.46.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9", size = 2335210, upload-time = "2026-08-28T10:00:10.177Z" }, + { url = "https://files.pythonhosted.org/packages/5a/9f/5d685c2693b972d1a59c998586e8823712b66603aeff47ee60a4bdaafd37/pydantic_core-2.46.5-cp314-cp314t-win32.whl", hash = "sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9", size = 1921180, upload-time = "2026-08-28T10:00:12.35Z" }, + { url = "https://files.pythonhosted.org/packages/70/12/5c94ee16d65a37a15f9e869f5e6256df111154491173801a4c5e800ab548/pydantic_core-2.46.5-cp314-cp314t-win_amd64.whl", hash = "sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290", size = 2020515, upload-time = "2026-08-28T10:00:14.774Z" }, + { url = "https://files.pythonhosted.org/packages/63/19/67830dda664e6bdf9285ee2e40f355d0d7d6b92aa0c42e8d217bb8d33d36/pydantic_core-2.46.5-cp314-cp314t-win_arm64.whl", hash = "sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f", size = 1989276, upload-time = "2026-08-28T10:00:16.984Z" }, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.52" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3b/21/77b4c147963073040dc3c3a5cb7a8c3001a1893c0209432cb77f9df836aa/sqlalchemy-2.0.52.tar.gz", hash = "sha256:5e2d46356ac2ccb7d268ab6c2319ac6a2b42f1b8d5fd8bd3d46855cd82abee97", size = 9945637, upload-time = "2026-08-11T19:07:09.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/f5/71cb30af58c9b80a4e1fac0b73bb48f86d497a774a6a2eb6d2f1e657bb73/sqlalchemy-2.0.52-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:410d52be41d17f1a236d19520fbe776257dc16516ed06bd16d433311842aefd9", size = 2169537, upload-time = "2026-08-11T20:58:13.855Z" }, + { url = "https://files.pythonhosted.org/packages/4c/93/d07ebd645d1b07b6b5ed63450a70f063a346a7e0f2c8810daf2e532400cb/sqlalchemy-2.0.52-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfe9ce533dbe4d0a2ae1486546619bd30b76bcd670539a44d910361376175f5e", size = 3319606, upload-time = "2026-08-11T21:02:45.829Z" }, + { url = "https://files.pythonhosted.org/packages/ae/5c/290c84c7c2566ecd3b65baaae0fddec9bc33b033b398a06123bb86fbfc6e/sqlalchemy-2.0.52-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:812bae5138bfc0aa46fb0686da0fc7f581f68e2bbb05bc24c3713bebaedd1437", size = 3323642, upload-time = "2026-08-11T21:17:05.675Z" }, + { url = "https://files.pythonhosted.org/packages/13/f5/2cc160590ca49173359557880b92a0572293ccb899e8f6cedf150c5a3ddf/sqlalchemy-2.0.52-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:50bff43b632a56fbf5ed9afdd76307e1512b62051bcd5afb341ae67205bbb6c8", size = 3268125, upload-time = "2026-08-11T21:02:47.649Z" }, + { url = "https://files.pythonhosted.org/packages/35/f3/ea8933fc9f7d1353e9c2ff9965eae687c4cef181120574591ed2fa0633e1/sqlalchemy-2.0.52-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:49565daf5af554f538e23aef1fc81a95a4e49658f152285e45c02f5fc44f04cd", size = 3289516, upload-time = "2026-08-11T21:17:07.267Z" }, + { url = "https://files.pythonhosted.org/packages/45/67/05cf86541c1e1716fca1e4a996954a439cd74501707cda607fb7cb02ef50/sqlalchemy-2.0.52-cp314-cp314-win32.whl", hash = "sha256:ab9da41e61b9979b910499d633b241df20c51ee5037e5405b11c2faac3cbe1a2", size = 2130249, upload-time = "2026-08-11T21:14:57.273Z" }, + { url = "https://files.pythonhosted.org/packages/96/d7/8ac6ffa1e36169e762ef65bd835046abb2251b1bc17f8f6708e14ed8d31f/sqlalchemy-2.0.52-cp314-cp314-win_amd64.whl", hash = "sha256:a593db51b3bae75db17a5738ad5f992244b3a03863f83c28117ee482c6a3f76d", size = 2156718, upload-time = "2026-08-11T21:14:58.667Z" }, + { url = "https://files.pythonhosted.org/packages/dc/4b/e01a737eef378e734cc6394a82248a6ce13b167dfa36c731075ce9fc9c64/sqlalchemy-2.0.52-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1e61d08bdf4ee2f41024569e3400de7d6734ba498144766b11260936ccfa582", size = 2190344, upload-time = "2026-08-11T19:53:21.393Z" }, + { url = "https://files.pythonhosted.org/packages/b3/3f/3582293d1e185e71d19d7c731c3e2ee20ba21981c4a1115c0806c1f62120/sqlalchemy-2.0.52-py3-none-any.whl", hash = "sha256:3b81b8363a919ce53453591cdb93702e6bd54ade6c4fa2f468fc053baee5ed89", size = 1950700, upload-time = "2026-08-11T20:47:21.603Z" }, +] + +[[package]] +name = "sqlmodel" +version = "0.0.42" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic" }, + { name = "sqlalchemy" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ab/50/27188d8cbccabf9968d74d4095765399dbc4f9fcae95e928fda69aa44a21/sqlmodel-0.0.42.tar.gz", hash = "sha256:9ecec2b6aa4c2aa58da39d2572e7bef4373419dcd6ec52973c07de7be2b1c516", size = 91737, upload-time = "2026-08-28T19:42:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/37/d7d6b12b9066005c237de3d52b599298a2693ac423bff0e6b97a90b90bf8/sqlmodel-0.0.42-py3-none-any.whl", hash = "sha256:a732dab1a40e5cbd6ac250cf2b12e8d9b1bf1a47edf27c34d612f359e8875c63", size = 29991, upload-time = "2026-08-28T19:42:00.568Z" }, +] + +[[package]] +name = "starlette" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/b4/205b0d5241d934e8add0c38aa924c4f9fb7330834ff11e5444db964ec3f9/starlette-1.6.0.tar.gz", hash = "sha256:d4e3ac5e546444960c710297a3c9fc3f7ebae1b7e963f3d36173b49da535be9b", size = 2716969, upload-time = "2026-08-08T18:27:57.512Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/cb/6a6a47d5b464bd08695d254f3da6e7986cc70c9fa5d778eda57538edfe56/starlette-1.6.0-py3-none-any.whl", hash = "sha256:a86dd39d14bb45f85a3d18525215a9ef0cfd1f192ac793220e72598c90335f0c", size = 75969, upload-time = "2026-08-08T18:27:56.196Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/cc/6253133b5bb138fc3306cebfbda2c520f545d36b5be2c7255cc528bb45d6/typing_extensions-4.16.0.tar.gz", hash = "sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5", size = 113555, upload-time = "2026-07-02T08:40:05.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d3/b8441a820a491ddfc024b0b0cf0393375b75ea13866d9c66727e54c2fc80/typing_extensions-4.16.0-py3-none-any.whl", hash = "sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8", size = 45571, upload-time = "2026-07-02T08:40:04.659Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/26/b09b8010994eccc3c09092e6b34058f36a460eea2d4c3e8b910c695975a0/typing_inspection-0.4.4.tar.gz", hash = "sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47", size = 76928, upload-time = "2026-08-12T12:37:25.997Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/81/4add07e5172b7ac40d8ed5ff580409a7801a4fe26d529bdd915401dabfbe/typing_inspection-0.4.4-py3-none-any.whl", hash = "sha256:65b8397ba37ccbce054456aaccddfc91e6e3083c92824df348d96ca832f3f147", size = 14750, upload-time = "2026-08-12T12:37:24.648Z" }, +]