From 8c7c4ceb19da9f71917a04558a34762e2bbba6c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miko=C5=82aj=20Kaczmarek?= <12432719+AN0DA@users.noreply.github.com> Date: Sun, 15 Jun 2025 21:49:12 +0200 Subject: [PATCH] init --- .gitignore | 10 + .python-version | 1 + README.md | 0 db_utils.py | 27 +++ logi.txt | 1 + main.py | 82 +++++++++ mojabaza.db | Bin 0 -> 12288 bytes pyproject.toml | 11 ++ static/humid.png | Bin 0 -> 5542 bytes static/rain.png | Bin 0 -> 5123 bytes static/style.css | 132 +++++++++++++ static/temp.png | Bin 0 -> 4804 bytes templates/frontpage.html | 23 +++ templates/frontpage2.html | 25 +++ templates/frontpage_style.html | 23 +++ templates/home.html | 23 +++ templates/logowanie.html | 44 +++++ templates/pogoda.html | 31 ++++ templates/signup.html | 22 +++ uv.lock | 326 +++++++++++++++++++++++++++++++++ weather_api.py | 26 +++ 21 files changed, 807 insertions(+) create mode 100644 .gitignore create mode 100644 .python-version create mode 100644 README.md create mode 100644 db_utils.py create mode 100644 logi.txt create mode 100644 main.py create mode 100644 mojabaza.db create mode 100644 pyproject.toml create mode 100644 static/humid.png create mode 100644 static/rain.png create mode 100644 static/style.css create mode 100644 static/temp.png create mode 100644 templates/frontpage.html create mode 100644 templates/frontpage2.html create mode 100644 templates/frontpage_style.html create mode 100644 templates/home.html create mode 100644 templates/logowanie.html create mode 100644 templates/pogoda.html create mode 100644 templates/signup.html create mode 100644 uv.lock create mode 100644 weather_api.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..505a3b1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +# Python-generated files +__pycache__/ +*.py[oc] +build/ +dist/ +wheels/ +*.egg-info + +# Virtual environments +.venv diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..24ee5b1 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.13 diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/db_utils.py b/db_utils.py new file mode 100644 index 0000000..bf1b574 --- /dev/null +++ b/db_utils.py @@ -0,0 +1,27 @@ +from sqlalchemy import create_engine, Column, Integer, String +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker + +# Inicjalizacja BD +engine = create_engine("sqlite:///mojabaza.db", echo=True) +Base = declarative_base() + +# Schemat BD +class User(Base): + __tablename__ = "user" + id = Column(Integer, primary_key=True, autoincrement=True) + username = Column(String, index=True) + password = Column(String) + + def __init__(self, username, password): + self.username = username + self.password = password + +# Metoda do tworzenia sesji... +def create_db_session(): + Session = sessionmaker(bind=engine) + session = Session() + + return session + +Base.metadata.create_all(engine) diff --git a/logi.txt b/logi.txt new file mode 100644 index 0000000..1621373 --- /dev/null +++ b/logi.txt @@ -0,0 +1 @@ +2025-06-07T10:22:26.585919: odwiedziny przez Kasia diff --git a/main.py b/main.py new file mode 100644 index 0000000..adea36a --- /dev/null +++ b/main.py @@ -0,0 +1,82 @@ +import flask +from flask import Flask, render_template, request, session +import os +import traceback +import json +import random +import datetime + +from db_utils import create_db_session, User +from weather_api import get_weather + +# Inicjalizacja web app +app = flask.Flask(__name__, + template_folder='templates', + static_folder='static') + +app.secret_key = os.urandom(24) + +@app.route('/') +def test(): + return "

To jesty test aplikacji!

" + +# Przekazywanie prostych parametrów... +@app.route('/hello/') +def hello(name): + return "

Hello, %s!

" % str(name) + +# Proste logowanie zdarzeń... +plik_logu = "logi.txt" +@app.route('/logi/') +def logi(name): + with open(plik_logu, 'a') as file: + now = datetime.datetime.now() + file.write(now.isoformat() + ": odwiedziny przez " + name + "\n") + + return "

Hello z logiem, %s!

" % name + +# Obsługa sesji... +@app.route("/zaloguj") +def zaloguj(): + session["zalogowany"] = True + if session["zalogowany"]: + return render_template("frontpage.html") + else: + return "Użytkownik niezalogowany!" + +@app.route("/wyloguj") +def wyloguj(): + session["zalogowany"] = False + return "Użytkownik wylogowany!" + +@app.route("/logowanie") +def logowanie(): + return render_template("logowanie.html") + +@app.route("/login", methods=["POST"]) +def login(): + # Twózs obiekt sesji BD... + sqlsession = create_db_session() + + # Zdefiniuj zapytanie do BD... + query = sqlsession.query(User).filter(User.username == request.form["username"]) + + # Zaadaj zapytanie... + user = query.first() + + result = "

Login

" + if request.form["username"]: + result += "

" + request.form["username"] + "

\n" + if request.form["password"]: + result += "

" + request.form["password"] + "

\n" + + return result + +@app.route("/pogoda") +def pogoda(): + temp, humidity, type, rain = get_weather() + + return render_template("pogoda.html", temp=temp, humid=humidity, weathertype=type, rain=rain) + +if __name__ == '__main__': + app.run(debug=False) \ No newline at end of file diff --git a/mojabaza.db b/mojabaza.db new file mode 100644 index 0000000000000000000000000000000000000000..0c00b341e5c68e900f2c97ee8af0702cbe60f752 GIT binary patch literal 12288 zcmeI#-AcnS6bJB=PLvg7-jv;*%N0}*U%)tnj@53)D)ve$tq`!Av=s+liQsdalof{H z133PHq&fLGkYBIP?M-Bwf}fXFnKgV$2P6cYF%ywzd(ZZ+xp=1w>{o2e|C)Mq{2lJw zU2kwggD*RvK>z{}fB*y_009U<00Izz00jPnz}(v%9tEN_i@aEw)#F=TRPC_H%EAS` zu~srsJc%#V1OGn3vzXl}9=Xxo2|vW%FbKqF+GI~JZ3?&Lt2KB?DxA|d@uF*N@}=3.1.1", + "requests>=2.32.4", + "sqlalchemy>=2.0.41", +] diff --git a/static/humid.png b/static/humid.png new file mode 100644 index 0000000000000000000000000000000000000000..149dc62b77c6f16e17e28e6fcaca2feba5c74c6e GIT binary patch literal 5542 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 fRllQM|0{@OX^*cr4@mnTMfs}z literal 0 HcmV?d00001 diff --git a/static/rain.png b/static/rain.png new file mode 100644 index 0000000000000000000000000000000000000000..ccc72b270a771b21a9c814bea4e9e3047f32c348 GIT binary patch literal 5123 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 literal 0 HcmV?d00001 diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..d4a5905 --- /dev/null +++ b/static/style.css @@ -0,0 +1,132 @@ +* { +box-sizing: border-box; +} + +*:focus { +outline: none; +} + +body { +font-family: Arial; +background-color: #3498DB; +padding: 50px; +font-size: 0.7em; +font-weight: 200; +color: #777; +} + + +.login { +margin: 20px auto; +width: 300px; +} +.login-screen { +background-color: #FFF; +padding: 20px; +border-radius: 5px +} + +.app-title { +text-align: center; +color: #777; +} + +.login-form { +text-align: center; +} +.control-group { +margin-bottom: 10px; +} + +input { +text-align: center; +background-color: #ECF0F1; +border: 2px solid transparent; +border-radius: 3px; +font-size: 16px; +font-weight: 200; +padding: 10px 0; +width: 250px; +transition: border .5s; +} + +input:focus { +border: 2px solid #3498DB; +box-shadow: none; +} + +.btn { +border: 2px solid transparent; +background: #3498DB; +color: #ffffff; +font-size: 16px; +line-height: 25px; +padding: 10px 0; +text-decoration: none; +text-shadow: none; +border-radius: 3px; +box-shadow: none; +transition: 0.25s; +display: block; +width: 250px; +margin: 0 auto; +} + +p#signupparagraph { + margin-top: 1.5em; +} + +.btn:hover { +background-color: #2980B9; +} + +.login-link { +font-size: 12px; +color: #444; +display: block; +margin-top: 12px; +} + +#cutsiegif{ + width:100%; + height:90%; +} + +#logout{ + margin-top: 25px; + left:50%; +} + +#error{ + font-size:16px; + color: red; +} + +.weatherimg{ + margin-top: 10px; + width: 50px; + height: 50px; +} + +/* How to make it better - https://sarahleejane.github.io/learning/python/2015/08/09/simple-tables-in-webapps-using-flask-and-pandas-with-python.html */ +#gradestable{ +font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif; +border-bottom: 2px solid #eee; +background-color: white; +margin: auto; +width: 50%; +} + +.tableheader{ + background-color: #add8e6; + color: white; + border-bottom: 2px solid #eee; +} + +.graderow{ + font-size: 2.2em; + padding: 10px; + margin-bottom: 40px; + background-color:rgba(229, 231, 238, 0.082); + color: black; +} \ No newline at end of file diff --git a/static/temp.png b/static/temp.png new file mode 100644 index 0000000000000000000000000000000000000000..7c2b147f2a7f348fe9515dae88fde00cef242c62 GIT binary patch literal 4804 zcmYjV2|Sc*)E{GFh#FDZ%3NEeFlMpUz0G2nv5YasHnPsbU>GxF43&@~MNwJPwQpCh zhO|hDq|H`QmKI5(EEQQQzSphq`+dLXoo6}EIp=xKdCv2H&pRim6gy=_O+^q0q)aB+ z(112!?FW?u>hZz>DhMPyDlY6afkYT1Fvey`x*5^{g~OnM3Ta`2Mp-g`@dpI4!+$Hp zm>>WJJ3YAJtcYkK(529U$_xRJQFx#SOqc`mYh8&sdKb{(`1~-o2RqP#3#@L7L0Oof z%mMOF2NK=M(Ev#R`eEEqHqh9ynV}JDB7|T;1P`FtTAG<4Owb54+QbZH2~4;KZ~_F} z|EFfn8n!4P=$9pEQFOQ)87Z_0bVOO;qhi8B$pFI|kC-hGawEcjv6-O&tyaG#L@|8! zFDi>I<}!gr0T&PfXa4pYAj|#jClN7*Bxae1yHhL>jBp0cCQMBFr6fE6*zJG*rUI@q zHv6R{gh6G|Bcr2>OI!1}<&Q^pN z7jle!u!Bo13K4A)&akpG53q=|;7f#71gA)$y&c(|#tx%kh%Pa10pv)kRS1hi4n>+t z&~7%7AweQ1qNgxA9FGqou|seU$OyL(vU@~KEX|SUL1DWf(DwEiz;^^Riy(G!jC4W@ zBWPkY!Nb!kL}W$ribU`+OfC=L2(seYI#5FyPC(z?3ga5XB4QX6`^ZQR4((!q#D|H( zoY72jIFD~0&Ikesz~ew+aYz~7mg(9YeL<8~+oFxiq))r<9Sd1_ZK>%>a zgt?I-tz0>lT#|_F>cVskjS3gK*jrkddwJ679&YAgd^*EDjN(C!#?jCWfhf>}C$JBt zQ9`KZbPIDlhZ*P*>O=yL3m?HCdN|tISh%1(ox&}}BpN1C}f`zL^GKVB4IRI;1x^eqCE(nT&4)+#&8XC!bCf=LL~0g*l<)RJ{s?Z3k;=4p|jef5`qT!#TJ3Kp^-_Jh*)Ycl1p?7l8D)KjJY}2(lLVR5#k(ya`mzoTE$T5NJ8{l z46QxDov{7i`1>yyf${IljUvj_8*c)EHk>Bg;OG+HDIZ~tPq*sdgSH|1PP`!!Z-^68 z+Q=JfO!F|j!W;Ve^RFGR^KVAa#LRU1ej0c>t#A6Xq(1NG@Iddh!sqeszxT6LW9L4o zoHueyHSxKj&%39hXIqL1?WayWDJx6cb+8a7mbr6stLe@oD?da(m!k%d#dQH~Px>!; zS4lp0di!|!_Fv~cf@9n0w zQ#lb3R*j1(re6thn|%JSjtnHB_ffVf_em)kE&k-W{9~!U2iD`bSNsVUQi80P!WZX1 zZY?8av@VVbb^#t~;E&*|sYT$c3NNnoxh&YV}bk3{^CMhsuOGbzg$AE*zqRk|}>st<+TJ*B#1Lv!qW zs=@2&mrYOaXXts|#F=f|A9vx)*dx1P_+)~td?mFAzx{M*l)Qc7o7Q9N&shmMSz*Pt zY4!^ThOzQxqnQCSo1|Dbay2vrjoez8z6 z_OK!RrFH*4Hx6wRgg z3@|B^)0x-K*p!}l_k?P_fW^*&I zh)^FkAT@aL+05kL)xEnE5<~i`dk3$CdP&C^UuwEmn9|ro8P{WvdK_)BN!5hBiqA?u z?Aff~etM>8F)2UPsSqQ>g#`m8XM%EA8~XRoR}ud6hMs@kS}@QQonE%==}7o%!(1d* z6S7vylgk_Pb>JD~fNzexstZ?MNl;*XRW&Wcq3^7ysa`cjqEM`~LI6V_PPe90Tm^{6~+`{I&{8!6x5Y zMR-f8p6w~pq8NFrD%gSshB)P+iw*;_a`awQsIfansts|- zHYtmppS*r$1qhhjxCivRbtu{1mIT?CD=={ttt=S0Mryh?(5w9{qMie8_Cv3peYVNA z=7S5A;3>1fyM>pT9kdeLG{<98yPyb-LzYc|^0~PQ*P`nQF<;(2cvkDPcSP)tsZ)cv z{o}rQWl{ocfIC0gcTS(2iDkc6h7}6c{{axIh}n^@Fy;L2e#QiF_k356*Z1f{a*So~ zylOtUhJ|2PgVB#4c6-#8LREAjgBxr)xkz^K>dMcWTSaM`^hq$*5lqOl!p?k)`eh-a zuiEY8&*q?_^usM-8c=CaceuLC0VD6mJ(v7$Uu;cMU=F?mZW=mvE_gKbW5nxQV`7Kd zuOox=Q$yKOPG`vAbjN8OdKJxJu#uWrR-9zXE)eJA&Ej+vT)y;^qUUjSAC2T<{Kyt{rp4U-xI6Oa3{ z8X%Bk>$jF4mES1Ml3D#ed|h}B$+q9RV(NEG{hn4jG(zRxKm%75K$eGP4iKr7^#DKf z`gV}AyuZ(NL3@L#yL@I&>CrcD+fSbRgCO_q%bRtgi6`yHR)JOMH$+@((Fa(QsRK zc&wylerkDcqHVHGwR~U9m!6TfWaZJ`{oDSGeO9;e8pOFWxVQL#c;XNZ2P#nvGD?2a z__8Uwdu*#{e$tKLbYyj<;AvXNK2<}Z_FJPS%6xLx(fC_y%srYS(7zOS|^h( zqb;vJ*;^u?rf$}Htgis18g#Qo0=yf@(KD~2KC5S$`gKusWE*sSkL~yxRdI<9qt_nD zH4l5yk~jX~><)!q+^Xnfzj2#Gyc7KF;|3X}r~_;O_+wp=%13=7SiVL6)q*VD(S`>ik2(melBafPwabw zjZacU9@j>Gy`*yaq$Z|%uB64x4^n!DFzehDJyV`(;2_Ad0m8%_|I{cG4TBf8MV<90 zw-tYLrgkK>e`7N8yB&8~F990+$6}c-V5pQk95M_9FYTzDGWh;_azX0m-3&v*GaPVK7A=c)uKu3{ z&?Pz6UN?O%9BUAsp-c2c<{;UMK)PfOn#s_!tHdUNYrfs`$5(5Jz{)D<4ULJY4*Z!VfEYah^~q!S|-7>MKJ$56yk(^*Z0a*q+Zb z|CH2za;rnO-WPdO-<$js{*BzH$IG4n?#kPk8hl1X%P38Rd(%i*mc|M>g&zO<%0QH|l@#=Qzo*vt zC?-w-IYW}Q-D;Bbas&6N^u|52d(G_5$(~1!G+Z60Q?uH)**a9A(g;5lj~cn5IgIg2 z0zJPG_3^;*k1v}nly&~PfKk?F*6Gj^h}b`;b~xcO%2YDCSFUh>BCr|_yliB~~dM_pgGX@1&o2m)nO zABS%lmAgXP(6XU>fFv*TZqM>|nMuU}dY($i!Yrp}{^N7vw}Eq8%|ZBnjvYud1(Muy z`V4YkE`OvoW}k(h*k1u!7my;8@=P)B`l$_f-WYCL(TRdihpdyxP*=Nb3z269HEsgrvUw$=B z`^Sg%wnopjuzS@LB`FSlZ)vO2Iwc4U_ONqy_xnvIQM%hg0Dr-E|>ye1`SsJw(47Nn~ygsv~J5q$7?}1 z;_j~Ji&V|SJoWYmigWw4gkOm|S&5+aU{GB~@on>lV@Amarw^V;&=Be3+cISG!J4UB z^89HXO+{jvSoaYQ6!1rlW{&qg6~kfyV)o2XhpOeBg0EeNbv2UIFzAyX24-%X-i%1H zGoG@wj|briOIyI`i<@c_+s+fFw^#Y9CsZ<9KI%!jp+y|^G=zF&AMf?8!=FTas<5qH z{ajyuv*7JS-l3Pi8Zfw7k{|MvS(8e<9DzFa14~7^$w6}70iQoenk&`iScIFA*-E)t|(H#KxM+w8(QvvYDX`m^slwI&DZD@JZb?#?`9V0F_p-ZHTO zjMMhoxe?r<`=)E8_ruc)XJP-C+x81fgyapFi?#I*J3VbcjWP*L7sOpyZ`&iCTZYeM z;c*EEj%|}BOh0TB!})vE;PC;+hq^40H;E~Ky&X}wRxRoFoKJ*B)C@HO)7#l0k{z%k zDJvuC@s(5Y2W8q*H>0-qw(PDFM=#kV1RR7}nyQoGbdw?&q|Ao|IlMTVFk1+rb@L}? zle6tz5UD+1ZZ}Re3RH+HmzG|hZSkv67*=h&{nGyEo7b<7Fz0`z! + + + + + +

+ <
+ +
+ Zalogowano pomyslnie! + +
+ + + \ No newline at end of file diff --git a/templates/frontpage2.html b/templates/frontpage2.html new file mode 100644 index 0000000..912bc2c --- /dev/null +++ b/templates/frontpage2.html @@ -0,0 +1,25 @@ + + + + + + + +

+ <
+ +
+ Zalogowano pomyslnie! + +
+ + Wyloguj + + + \ No newline at end of file diff --git a/templates/frontpage_style.html b/templates/frontpage_style.html new file mode 100644 index 0000000..e3784d7 --- /dev/null +++ b/templates/frontpage_style.html @@ -0,0 +1,23 @@ + + + + + + + +

+ <
+ +
+ Zalogowano pomyslnie! + +
+ + + \ No newline at end of file diff --git a/templates/home.html b/templates/home.html new file mode 100644 index 0000000..e3784d7 --- /dev/null +++ b/templates/home.html @@ -0,0 +1,23 @@ + + + + + + + +

+ <
+ +
+ Zalogowano pomyslnie! + +
+ + + \ No newline at end of file diff --git a/templates/logowanie.html b/templates/logowanie.html new file mode 100644 index 0000000..155be15 --- /dev/null +++ b/templates/logowanie.html @@ -0,0 +1,44 @@ + + + + + + + Login + + +
+ +
+ + \ No newline at end of file diff --git a/templates/pogoda.html b/templates/pogoda.html new file mode 100644 index 0000000..80cff85 --- /dev/null +++ b/templates/pogoda.html @@ -0,0 +1,31 @@ + + + + + + + + +
+
+
+
Weather: {{ weathertype }}
+
+ +
{{ temp }} Degrees Celcius
+
+
+ +
Humidity: {{ humid }}
+
+
+ +
{{ rain }}
+
+
+
+
+ + + \ No newline at end of file diff --git a/templates/signup.html b/templates/signup.html new file mode 100644 index 0000000..69b5888 --- /dev/null +++ b/templates/signup.html @@ -0,0 +1,22 @@ + {% block body %} +
+ +
+{% endblock%} \ No newline at end of file diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..0fad757 --- /dev/null +++ b/uv.lock @@ -0,0 +1,326 @@ +version = 1 +revision = 2 +requires-python = ">=3.11" + +[[package]] +name = "blinker" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460, upload-time = "2024-11-08T17:25:47.436Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458, upload-time = "2024-11-08T17:25:46.184Z" }, +] + +[[package]] +name = "certifi" +version = "2025.6.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/73/f7/f14b46d4bcd21092d7d3ccef689615220d8a08fb25e564b65d20738e672e/certifi-2025.6.15.tar.gz", hash = "sha256:d747aa5a8b9bbbb1bb8c22bb13e22bd1f18e9796defa16bab421f7f7a317323b", size = 158753, upload-time = "2025-06-15T02:45:51.329Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/ae/320161bd181fc06471eed047ecce67b693fd7515b16d495d8932db763426/certifi-2025.6.15-py3-none-any.whl", hash = "sha256:2e0c7ce7cb5d8f8634ca55d2ba7e6ec2689a2fd6537d8dec1296a477a4910057", size = 157650, upload-time = "2025-06-15T02:45:49.977Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload-time = "2025-05-02T08:34:42.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794, upload-time = "2025-05-02T08:32:11.945Z" }, + { url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846, upload-time = "2025-05-02T08:32:13.946Z" }, + { url = "https://files.pythonhosted.org/packages/66/82/a37989cda2ace7e37f36c1a8ed16c58cf48965a79c2142713244bf945c89/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", size = 153350, upload-time = "2025-05-02T08:32:15.873Z" }, + { url = "https://files.pythonhosted.org/packages/df/68/a576b31b694d07b53807269d05ec3f6f1093e9545e8607121995ba7a8313/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", size = 145657, upload-time = "2025-05-02T08:32:17.283Z" }, + { url = "https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f", size = 147260, upload-time = "2025-05-02T08:32:18.807Z" }, + { url = "https://files.pythonhosted.org/packages/a6/e6/8aebae25e328160b20e31a7e9929b1578bbdc7f42e66f46595a432f8539e/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", size = 149164, upload-time = "2025-05-02T08:32:20.333Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f2/b3c2f07dbcc248805f10e67a0262c93308cfa149a4cd3d1fe01f593e5fd2/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", size = 144571, upload-time = "2025-05-02T08:32:21.86Z" }, + { url = "https://files.pythonhosted.org/packages/60/5b/c3f3a94bc345bc211622ea59b4bed9ae63c00920e2e8f11824aa5708e8b7/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", size = 151952, upload-time = "2025-05-02T08:32:23.434Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4d/ff460c8b474122334c2fa394a3f99a04cf11c646da895f81402ae54f5c42/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", size = 155959, upload-time = "2025-05-02T08:32:24.993Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2b/b964c6a2fda88611a1fe3d4c400d39c66a42d6c169c924818c848f922415/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", size = 153030, upload-time = "2025-05-02T08:32:26.435Z" }, + { url = "https://files.pythonhosted.org/packages/59/2e/d3b9811db26a5ebf444bc0fa4f4be5aa6d76fc6e1c0fd537b16c14e849b6/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", size = 148015, upload-time = "2025-05-02T08:32:28.376Z" }, + { url = "https://files.pythonhosted.org/packages/90/07/c5fd7c11eafd561bb51220d600a788f1c8d77c5eef37ee49454cc5c35575/charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", size = 98106, upload-time = "2025-05-02T08:32:30.281Z" }, + { url = "https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", size = 105402, upload-time = "2025-05-02T08:32:32.191Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload-time = "2025-05-02T08:32:33.712Z" }, + { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload-time = "2025-05-02T08:32:35.768Z" }, + { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload-time = "2025-05-02T08:32:37.284Z" }, + { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload-time = "2025-05-02T08:32:38.803Z" }, + { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload-time = "2025-05-02T08:32:40.251Z" }, + { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload-time = "2025-05-02T08:32:41.705Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload-time = "2025-05-02T08:32:43.709Z" }, + { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload-time = "2025-05-02T08:32:46.197Z" }, + { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload-time = "2025-05-02T08:32:48.105Z" }, + { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload-time = "2025-05-02T08:32:49.719Z" }, + { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload-time = "2025-05-02T08:32:51.404Z" }, + { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload-time = "2025-05-02T08:32:53.079Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload-time = "2025-05-02T08:32:54.573Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload-time = "2025-05-02T08:32:56.363Z" }, + { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload-time = "2025-05-02T08:32:58.551Z" }, + { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload-time = "2025-05-02T08:33:00.342Z" }, + { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload-time = "2025-05-02T08:33:02.081Z" }, + { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload-time = "2025-05-02T08:33:04.063Z" }, + { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload-time = "2025-05-02T08:33:06.418Z" }, + { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload-time = "2025-05-02T08:33:08.183Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload-time = "2025-05-02T08:33:09.986Z" }, + { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload-time = "2025-05-02T08:33:11.814Z" }, + { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload-time = "2025-05-02T08:33:13.707Z" }, + { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload-time = "2025-05-02T08:33:15.458Z" }, + { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload-time = "2025-05-02T08:33:17.06Z" }, + { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload-time = "2025-05-02T08:33:18.753Z" }, + { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload-time = "2025-05-02T08:34:40.053Z" }, +] + +[[package]] +name = "click" +version = "8.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "flask" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blinker" }, + { name = "click" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/de/e47735752347f4128bcf354e0da07ef311a78244eba9e3dc1d4a5ab21a98/flask-3.1.1.tar.gz", hash = "sha256:284c7b8f2f58cb737f0cf1c30fd7eaf0ccfcde196099d24ecede3fc2005aa59e", size = 753440, upload-time = "2025-05-13T15:01:17.447Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/68/9d4508e893976286d2ead7f8f571314af6c2037af34853a30fd769c02e9d/flask-3.1.1-py3-none-any.whl", hash = "sha256:07aae2bb5eaf77993ef57e357491839f5fd9f4dc281593a81a9e4d79a24f295c", size = 103305, upload-time = "2025-05-13T15:01:15.591Z" }, +] + +[[package]] +name = "greenlet" +version = "3.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/92/bb85bd6e80148a4d2e0c59f7c0c2891029f8fd510183afc7d8d2feeed9b6/greenlet-3.2.3.tar.gz", hash = "sha256:8b0dd8ae4c0d6f5e54ee55ba935eeb3d735a9b58a8a1e5b5cbab64e01a39f365", size = 185752, upload-time = "2025-06-05T16:16:09.955Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/2e/d4fcb2978f826358b673f779f78fa8a32ee37df11920dc2bb5589cbeecef/greenlet-3.2.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:784ae58bba89fa1fa5733d170d42486580cab9decda3484779f4759345b29822", size = 270219, upload-time = "2025-06-05T16:10:10.414Z" }, + { url = "https://files.pythonhosted.org/packages/16/24/929f853e0202130e4fe163bc1d05a671ce8dcd604f790e14896adac43a52/greenlet-3.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0921ac4ea42a5315d3446120ad48f90c3a6b9bb93dd9b3cf4e4d84a66e42de83", size = 630383, upload-time = "2025-06-05T16:38:51.785Z" }, + { url = "https://files.pythonhosted.org/packages/d1/b2/0320715eb61ae70c25ceca2f1d5ae620477d246692d9cc284c13242ec31c/greenlet-3.2.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:d2971d93bb99e05f8c2c0c2f4aa9484a18d98c4c3bd3c62b65b7e6ae33dfcfaf", size = 642422, upload-time = "2025-06-05T16:41:35.259Z" }, + { url = "https://files.pythonhosted.org/packages/bd/49/445fd1a210f4747fedf77615d941444349c6a3a4a1135bba9701337cd966/greenlet-3.2.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c667c0bf9d406b77a15c924ef3285e1e05250948001220368e039b6aa5b5034b", size = 638375, upload-time = "2025-06-05T16:48:18.235Z" }, + { url = "https://files.pythonhosted.org/packages/7e/c8/ca19760cf6eae75fa8dc32b487e963d863b3ee04a7637da77b616703bc37/greenlet-3.2.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:592c12fb1165be74592f5de0d70f82bc5ba552ac44800d632214b76089945147", size = 637627, upload-time = "2025-06-05T16:13:02.858Z" }, + { url = "https://files.pythonhosted.org/packages/65/89/77acf9e3da38e9bcfca881e43b02ed467c1dedc387021fc4d9bd9928afb8/greenlet-3.2.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29e184536ba333003540790ba29829ac14bb645514fbd7e32af331e8202a62a5", size = 585502, upload-time = "2025-06-05T16:12:49.642Z" }, + { url = "https://files.pythonhosted.org/packages/97/c6/ae244d7c95b23b7130136e07a9cc5aadd60d59b5951180dc7dc7e8edaba7/greenlet-3.2.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:93c0bb79844a367782ec4f429d07589417052e621aa39a5ac1fb99c5aa308edc", size = 1114498, upload-time = "2025-06-05T16:36:46.598Z" }, + { url = "https://files.pythonhosted.org/packages/89/5f/b16dec0cbfd3070658e0d744487919740c6d45eb90946f6787689a7efbce/greenlet-3.2.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:751261fc5ad7b6705f5f76726567375bb2104a059454e0226e1eef6c756748ba", size = 1139977, upload-time = "2025-06-05T16:12:38.262Z" }, + { url = "https://files.pythonhosted.org/packages/66/77/d48fb441b5a71125bcac042fc5b1494c806ccb9a1432ecaa421e72157f77/greenlet-3.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:83a8761c75312361aa2b5b903b79da97f13f556164a7dd2d5448655425bd4c34", size = 297017, upload-time = "2025-06-05T16:25:05.225Z" }, + { url = "https://files.pythonhosted.org/packages/f3/94/ad0d435f7c48debe960c53b8f60fb41c2026b1d0fa4a99a1cb17c3461e09/greenlet-3.2.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:25ad29caed5783d4bd7a85c9251c651696164622494c00802a139c00d639242d", size = 271992, upload-time = "2025-06-05T16:11:23.467Z" }, + { url = "https://files.pythonhosted.org/packages/93/5d/7c27cf4d003d6e77749d299c7c8f5fd50b4f251647b5c2e97e1f20da0ab5/greenlet-3.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88cd97bf37fe24a6710ec6a3a7799f3f81d9cd33317dcf565ff9950c83f55e0b", size = 638820, upload-time = "2025-06-05T16:38:52.882Z" }, + { url = "https://files.pythonhosted.org/packages/c6/7e/807e1e9be07a125bb4c169144937910bf59b9d2f6d931578e57f0bce0ae2/greenlet-3.2.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:baeedccca94880d2f5666b4fa16fc20ef50ba1ee353ee2d7092b383a243b0b0d", size = 653046, upload-time = "2025-06-05T16:41:36.343Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ab/158c1a4ea1068bdbc78dba5a3de57e4c7aeb4e7fa034320ea94c688bfb61/greenlet-3.2.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:be52af4b6292baecfa0f397f3edb3c6092ce071b499dd6fe292c9ac9f2c8f264", size = 647701, upload-time = "2025-06-05T16:48:19.604Z" }, + { url = "https://files.pythonhosted.org/packages/cc/0d/93729068259b550d6a0288da4ff72b86ed05626eaf1eb7c0d3466a2571de/greenlet-3.2.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0cc73378150b8b78b0c9fe2ce56e166695e67478550769536a6742dca3651688", size = 649747, upload-time = "2025-06-05T16:13:04.628Z" }, + { url = "https://files.pythonhosted.org/packages/f6/f6/c82ac1851c60851302d8581680573245c8fc300253fc1ff741ae74a6c24d/greenlet-3.2.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:706d016a03e78df129f68c4c9b4c4f963f7d73534e48a24f5f5a7101ed13dbbb", size = 605461, upload-time = "2025-06-05T16:12:50.792Z" }, + { url = "https://files.pythonhosted.org/packages/98/82/d022cf25ca39cf1200650fc58c52af32c90f80479c25d1cbf57980ec3065/greenlet-3.2.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:419e60f80709510c343c57b4bb5a339d8767bf9aef9b8ce43f4f143240f88b7c", size = 1121190, upload-time = "2025-06-05T16:36:48.59Z" }, + { url = "https://files.pythonhosted.org/packages/f5/e1/25297f70717abe8104c20ecf7af0a5b82d2f5a980eb1ac79f65654799f9f/greenlet-3.2.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:93d48533fade144203816783373f27a97e4193177ebaaf0fc396db19e5d61163", size = 1149055, upload-time = "2025-06-05T16:12:40.457Z" }, + { url = "https://files.pythonhosted.org/packages/1f/8f/8f9e56c5e82eb2c26e8cde787962e66494312dc8cb261c460e1f3a9c88bc/greenlet-3.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:7454d37c740bb27bdeddfc3f358f26956a07d5220818ceb467a483197d84f849", size = 297817, upload-time = "2025-06-05T16:29:49.244Z" }, + { url = "https://files.pythonhosted.org/packages/b1/cf/f5c0b23309070ae93de75c90d29300751a5aacefc0a3ed1b1d8edb28f08b/greenlet-3.2.3-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:500b8689aa9dd1ab26872a34084503aeddefcb438e2e7317b89b11eaea1901ad", size = 270732, upload-time = "2025-06-05T16:10:08.26Z" }, + { url = "https://files.pythonhosted.org/packages/48/ae/91a957ba60482d3fecf9be49bc3948f341d706b52ddb9d83a70d42abd498/greenlet-3.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a07d3472c2a93117af3b0136f246b2833fdc0b542d4a9799ae5f41c28323faef", size = 639033, upload-time = "2025-06-05T16:38:53.983Z" }, + { url = "https://files.pythonhosted.org/packages/6f/df/20ffa66dd5a7a7beffa6451bdb7400d66251374ab40b99981478c69a67a8/greenlet-3.2.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:8704b3768d2f51150626962f4b9a9e4a17d2e37c8a8d9867bbd9fa4eb938d3b3", size = 652999, upload-time = "2025-06-05T16:41:37.89Z" }, + { url = "https://files.pythonhosted.org/packages/51/b4/ebb2c8cb41e521f1d72bf0465f2f9a2fd803f674a88db228887e6847077e/greenlet-3.2.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:5035d77a27b7c62db6cf41cf786cfe2242644a7a337a0e155c80960598baab95", size = 647368, upload-time = "2025-06-05T16:48:21.467Z" }, + { url = "https://files.pythonhosted.org/packages/8e/6a/1e1b5aa10dced4ae876a322155705257748108b7fd2e4fae3f2a091fe81a/greenlet-3.2.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2d8aa5423cd4a396792f6d4580f88bdc6efcb9205891c9d40d20f6e670992efb", size = 650037, upload-time = "2025-06-05T16:13:06.402Z" }, + { url = "https://files.pythonhosted.org/packages/26/f2/ad51331a157c7015c675702e2d5230c243695c788f8f75feba1af32b3617/greenlet-3.2.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2c724620a101f8170065d7dded3f962a2aea7a7dae133a009cada42847e04a7b", size = 608402, upload-time = "2025-06-05T16:12:51.91Z" }, + { url = "https://files.pythonhosted.org/packages/26/bc/862bd2083e6b3aff23300900a956f4ea9a4059de337f5c8734346b9b34fc/greenlet-3.2.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:873abe55f134c48e1f2a6f53f7d1419192a3d1a4e873bace00499a4e45ea6af0", size = 1119577, upload-time = "2025-06-05T16:36:49.787Z" }, + { url = "https://files.pythonhosted.org/packages/86/94/1fc0cc068cfde885170e01de40a619b00eaa8f2916bf3541744730ffb4c3/greenlet-3.2.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:024571bbce5f2c1cfff08bf3fbaa43bbc7444f580ae13b0099e95d0e6e67ed36", size = 1147121, upload-time = "2025-06-05T16:12:42.527Z" }, + { url = "https://files.pythonhosted.org/packages/27/1a/199f9587e8cb08a0658f9c30f3799244307614148ffe8b1e3aa22f324dea/greenlet-3.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:5195fb1e75e592dd04ce79881c8a22becdfa3e6f500e7feb059b1e6fdd54d3e3", size = 297603, upload-time = "2025-06-05T16:20:12.651Z" }, + { url = "https://files.pythonhosted.org/packages/d8/ca/accd7aa5280eb92b70ed9e8f7fd79dc50a2c21d8c73b9a0856f5b564e222/greenlet-3.2.3-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:3d04332dddb10b4a211b68111dabaee2e1a073663d117dc10247b5b1642bac86", size = 271479, upload-time = "2025-06-05T16:10:47.525Z" }, + { url = "https://files.pythonhosted.org/packages/55/71/01ed9895d9eb49223280ecc98a557585edfa56b3d0e965b9fa9f7f06b6d9/greenlet-3.2.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8186162dffde068a465deab08fc72c767196895c39db26ab1c17c0b77a6d8b97", size = 683952, upload-time = "2025-06-05T16:38:55.125Z" }, + { url = "https://files.pythonhosted.org/packages/ea/61/638c4bdf460c3c678a0a1ef4c200f347dff80719597e53b5edb2fb27ab54/greenlet-3.2.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f4bfbaa6096b1b7a200024784217defedf46a07c2eee1a498e94a1b5f8ec5728", size = 696917, upload-time = "2025-06-05T16:41:38.959Z" }, + { url = "https://files.pythonhosted.org/packages/22/cc/0bd1a7eb759d1f3e3cc2d1bc0f0b487ad3cc9f34d74da4b80f226fde4ec3/greenlet-3.2.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:ed6cfa9200484d234d8394c70f5492f144b20d4533f69262d530a1a082f6ee9a", size = 692443, upload-time = "2025-06-05T16:48:23.113Z" }, + { url = "https://files.pythonhosted.org/packages/67/10/b2a4b63d3f08362662e89c103f7fe28894a51ae0bc890fabf37d1d780e52/greenlet-3.2.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:02b0df6f63cd15012bed5401b47829cfd2e97052dc89da3cfaf2c779124eb892", size = 692995, upload-time = "2025-06-05T16:13:07.972Z" }, + { url = "https://files.pythonhosted.org/packages/5a/c6/ad82f148a4e3ce9564056453a71529732baf5448ad53fc323e37efe34f66/greenlet-3.2.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:86c2d68e87107c1792e2e8d5399acec2487a4e993ab76c792408e59394d52141", size = 655320, upload-time = "2025-06-05T16:12:53.453Z" }, + { url = "https://files.pythonhosted.org/packages/5c/4f/aab73ecaa6b3086a4c89863d94cf26fa84cbff63f52ce9bc4342b3087a06/greenlet-3.2.3-cp314-cp314-win_amd64.whl", hash = "sha256:8c47aae8fbbfcf82cc13327ae802ba13c9c36753b67e760023fd116bc124a62a", size = 301236, upload-time = "2025-06-05T16:15:20.111Z" }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, +] + +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, +] + +[[package]] +name = "requests" +version = "2.32.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" }, +] + +[[package]] +name = "simpleflask" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "flask" }, + { name = "requests" }, + { name = "sqlalchemy" }, +] + +[package.metadata] +requires-dist = [ + { name = "flask", specifier = ">=3.1.1" }, + { name = "requests", specifier = ">=2.32.4" }, + { name = "sqlalchemy", specifier = ">=2.0.41" }, +] + +[[package]] +name = "sqlalchemy" +version = "2.0.41" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet", marker = "(python_full_version < '3.14' and platform_machine == 'AMD64') or (python_full_version < '3.14' and platform_machine == 'WIN32') or (python_full_version < '3.14' and platform_machine == 'aarch64') or (python_full_version < '3.14' and platform_machine == 'amd64') or (python_full_version < '3.14' and platform_machine == 'ppc64le') or (python_full_version < '3.14' and platform_machine == 'win32') or (python_full_version < '3.14' and platform_machine == 'x86_64')" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/66/45b165c595ec89aa7dcc2c1cd222ab269bc753f1fc7a1e68f8481bd957bf/sqlalchemy-2.0.41.tar.gz", hash = "sha256:edba70118c4be3c2b1f90754d308d0b79c6fe2c0fdc52d8ddf603916f83f4db9", size = 9689424, upload-time = "2025-05-14T17:10:32.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/4e/b00e3ffae32b74b5180e15d2ab4040531ee1bef4c19755fe7926622dc958/sqlalchemy-2.0.41-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6375cd674fe82d7aa9816d1cb96ec592bac1726c11e0cafbf40eeee9a4516b5f", size = 2121232, upload-time = "2025-05-14T17:48:20.444Z" }, + { url = "https://files.pythonhosted.org/packages/ef/30/6547ebb10875302074a37e1970a5dce7985240665778cfdee2323709f749/sqlalchemy-2.0.41-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9f8c9fdd15a55d9465e590a402f42082705d66b05afc3ffd2d2eb3c6ba919560", size = 2110897, upload-time = "2025-05-14T17:48:21.634Z" }, + { url = "https://files.pythonhosted.org/packages/9e/21/59df2b41b0f6c62da55cd64798232d7349a9378befa7f1bb18cf1dfd510a/sqlalchemy-2.0.41-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32f9dc8c44acdee06c8fc6440db9eae8b4af8b01e4b1aee7bdd7241c22edff4f", size = 3273313, upload-time = "2025-05-14T17:51:56.205Z" }, + { url = "https://files.pythonhosted.org/packages/62/e4/b9a7a0e5c6f79d49bcd6efb6e90d7536dc604dab64582a9dec220dab54b6/sqlalchemy-2.0.41-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c11ceb9a1f482c752a71f203a81858625d8df5746d787a4786bca4ffdf71c6", size = 3273807, upload-time = "2025-05-14T17:55:26.928Z" }, + { url = "https://files.pythonhosted.org/packages/39/d8/79f2427251b44ddee18676c04eab038d043cff0e764d2d8bb08261d6135d/sqlalchemy-2.0.41-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:911cc493ebd60de5f285bcae0491a60b4f2a9f0f5c270edd1c4dbaef7a38fc04", size = 3209632, upload-time = "2025-05-14T17:51:59.384Z" }, + { url = "https://files.pythonhosted.org/packages/d4/16/730a82dda30765f63e0454918c982fb7193f6b398b31d63c7c3bd3652ae5/sqlalchemy-2.0.41-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03968a349db483936c249f4d9cd14ff2c296adfa1290b660ba6516f973139582", size = 3233642, upload-time = "2025-05-14T17:55:29.901Z" }, + { url = "https://files.pythonhosted.org/packages/04/61/c0d4607f7799efa8b8ea3c49b4621e861c8f5c41fd4b5b636c534fcb7d73/sqlalchemy-2.0.41-cp311-cp311-win32.whl", hash = "sha256:293cd444d82b18da48c9f71cd7005844dbbd06ca19be1ccf6779154439eec0b8", size = 2086475, upload-time = "2025-05-14T17:56:02.095Z" }, + { url = "https://files.pythonhosted.org/packages/9d/8e/8344f8ae1cb6a479d0741c02cd4f666925b2bf02e2468ddaf5ce44111f30/sqlalchemy-2.0.41-cp311-cp311-win_amd64.whl", hash = "sha256:3d3549fc3e40667ec7199033a4e40a2f669898a00a7b18a931d3efb4c7900504", size = 2110903, upload-time = "2025-05-14T17:56:03.499Z" }, + { url = "https://files.pythonhosted.org/packages/3e/2a/f1f4e068b371154740dd10fb81afb5240d5af4aa0087b88d8b308b5429c2/sqlalchemy-2.0.41-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:81f413674d85cfd0dfcd6512e10e0f33c19c21860342a4890c3a2b59479929f9", size = 2119645, upload-time = "2025-05-14T17:55:24.854Z" }, + { url = "https://files.pythonhosted.org/packages/9b/e8/c664a7e73d36fbfc4730f8cf2bf930444ea87270f2825efbe17bf808b998/sqlalchemy-2.0.41-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:598d9ebc1e796431bbd068e41e4de4dc34312b7aa3292571bb3674a0cb415dd1", size = 2107399, upload-time = "2025-05-14T17:55:28.097Z" }, + { url = "https://files.pythonhosted.org/packages/5c/78/8a9cf6c5e7135540cb682128d091d6afa1b9e48bd049b0d691bf54114f70/sqlalchemy-2.0.41-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a104c5694dfd2d864a6f91b0956eb5d5883234119cb40010115fd45a16da5e70", size = 3293269, upload-time = "2025-05-14T17:50:38.227Z" }, + { url = "https://files.pythonhosted.org/packages/3c/35/f74add3978c20de6323fb11cb5162702670cc7a9420033befb43d8d5b7a4/sqlalchemy-2.0.41-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6145afea51ff0af7f2564a05fa95eb46f542919e6523729663a5d285ecb3cf5e", size = 3303364, upload-time = "2025-05-14T17:51:49.829Z" }, + { url = "https://files.pythonhosted.org/packages/6a/d4/c990f37f52c3f7748ebe98883e2a0f7d038108c2c5a82468d1ff3eec50b7/sqlalchemy-2.0.41-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b46fa6eae1cd1c20e6e6f44e19984d438b6b2d8616d21d783d150df714f44078", size = 3229072, upload-time = "2025-05-14T17:50:39.774Z" }, + { url = "https://files.pythonhosted.org/packages/15/69/cab11fecc7eb64bc561011be2bd03d065b762d87add52a4ca0aca2e12904/sqlalchemy-2.0.41-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41836fe661cc98abfae476e14ba1906220f92c4e528771a8a3ae6a151242d2ae", size = 3268074, upload-time = "2025-05-14T17:51:51.736Z" }, + { url = "https://files.pythonhosted.org/packages/5c/ca/0c19ec16858585d37767b167fc9602593f98998a68a798450558239fb04a/sqlalchemy-2.0.41-cp312-cp312-win32.whl", hash = "sha256:a8808d5cf866c781150d36a3c8eb3adccfa41a8105d031bf27e92c251e3969d6", size = 2084514, upload-time = "2025-05-14T17:55:49.915Z" }, + { url = "https://files.pythonhosted.org/packages/7f/23/4c2833d78ff3010a4e17f984c734f52b531a8c9060a50429c9d4b0211be6/sqlalchemy-2.0.41-cp312-cp312-win_amd64.whl", hash = "sha256:5b14e97886199c1f52c14629c11d90c11fbb09e9334fa7bb5f6d068d9ced0ce0", size = 2111557, upload-time = "2025-05-14T17:55:51.349Z" }, + { url = "https://files.pythonhosted.org/packages/d3/ad/2e1c6d4f235a97eeef52d0200d8ddda16f6c4dd70ae5ad88c46963440480/sqlalchemy-2.0.41-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4eeb195cdedaf17aab6b247894ff2734dcead6c08f748e617bfe05bd5a218443", size = 2115491, upload-time = "2025-05-14T17:55:31.177Z" }, + { url = "https://files.pythonhosted.org/packages/cf/8d/be490e5db8400dacc89056f78a52d44b04fbf75e8439569d5b879623a53b/sqlalchemy-2.0.41-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d4ae769b9c1c7757e4ccce94b0641bc203bbdf43ba7a2413ab2523d8d047d8dc", size = 2102827, upload-time = "2025-05-14T17:55:34.921Z" }, + { url = "https://files.pythonhosted.org/packages/a0/72/c97ad430f0b0e78efaf2791342e13ffeafcbb3c06242f01a3bb8fe44f65d/sqlalchemy-2.0.41-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a62448526dd9ed3e3beedc93df9bb6b55a436ed1474db31a2af13b313a70a7e1", size = 3225224, upload-time = "2025-05-14T17:50:41.418Z" }, + { url = "https://files.pythonhosted.org/packages/5e/51/5ba9ea3246ea068630acf35a6ba0d181e99f1af1afd17e159eac7e8bc2b8/sqlalchemy-2.0.41-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc56c9788617b8964ad02e8fcfeed4001c1f8ba91a9e1f31483c0dffb207002a", size = 3230045, upload-time = "2025-05-14T17:51:54.722Z" }, + { url = "https://files.pythonhosted.org/packages/78/2f/8c14443b2acea700c62f9b4a8bad9e49fc1b65cfb260edead71fd38e9f19/sqlalchemy-2.0.41-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c153265408d18de4cc5ded1941dcd8315894572cddd3c58df5d5b5705b3fa28d", size = 3159357, upload-time = "2025-05-14T17:50:43.483Z" }, + { url = "https://files.pythonhosted.org/packages/fc/b2/43eacbf6ccc5276d76cea18cb7c3d73e294d6fb21f9ff8b4eef9b42bbfd5/sqlalchemy-2.0.41-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f67766965996e63bb46cfbf2ce5355fc32d9dd3b8ad7e536a920ff9ee422e23", size = 3197511, upload-time = "2025-05-14T17:51:57.308Z" }, + { url = "https://files.pythonhosted.org/packages/fa/2e/677c17c5d6a004c3c45334ab1dbe7b7deb834430b282b8a0f75ae220c8eb/sqlalchemy-2.0.41-cp313-cp313-win32.whl", hash = "sha256:bfc9064f6658a3d1cadeaa0ba07570b83ce6801a1314985bf98ec9b95d74e15f", size = 2082420, upload-time = "2025-05-14T17:55:52.69Z" }, + { url = "https://files.pythonhosted.org/packages/e9/61/e8c1b9b6307c57157d328dd8b8348ddc4c47ffdf1279365a13b2b98b8049/sqlalchemy-2.0.41-cp313-cp313-win_amd64.whl", hash = "sha256:82ca366a844eb551daff9d2e6e7a9e5e76d2612c8564f58db6c19a726869c1df", size = 2108329, upload-time = "2025-05-14T17:55:54.495Z" }, + { url = "https://files.pythonhosted.org/packages/1c/fc/9ba22f01b5cdacc8f5ed0d22304718d2c758fce3fd49a5372b886a86f37c/sqlalchemy-2.0.41-py3-none-any.whl", hash = "sha256:57df5dc6fdb5ed1a88a1ed2195fd31927e705cad62dedd86b46972752a80f576", size = 1911224, upload-time = "2025-05-14T17:39:42.154Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423, upload-time = "2025-06-02T14:52:11.399Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839, upload-time = "2025-06-02T14:52:10.026Z" }, +] + +[[package]] +name = "urllib3" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/78/16493d9c386d8e60e442a35feac5e00f0913c0f4b7c217c11e8ec2ff53e0/urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466", size = 390672, upload-time = "2025-04-10T15:23:39.232Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/11/cc635220681e93a0183390e26485430ca2c7b5f9d33b15c74c2861cb8091/urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813", size = 128680, upload-time = "2025-04-10T15:23:37.377Z" }, +] + +[[package]] +name = "werkzeug" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925, upload-time = "2024-11-08T15:52:18.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498, upload-time = "2024-11-08T15:52:16.132Z" }, +] diff --git a/weather_api.py b/weather_api.py new file mode 100644 index 0000000..e898a33 --- /dev/null +++ b/weather_api.py @@ -0,0 +1,26 @@ +import requests +import json + + +def decode_weather(weather): + weather_from_json = json.loads(weather) + temp = weather_from_json["main"]["temp"] + humidity = weather_from_json["main"]["humidity"] + type = weather_from_json["weather"][0]["main"] + rain = "RAIN" if type == "rain" else "NO RAIN" + + return temp, humidity, type, rain + + +def get_weather(): + weather_request = requests.get( + "http://samples.openweathermap.org/data/2.5/weather?q=Warsaw,pl&units=metric" + ) + + # Czyszczenie odpowiedzi... + weather = weather_request.content.strip() + + temp, humidity, type, rain = decode_weather(weather) + + return temp, humidity, type, rain +