From be9fdc0e98910422f6f20d5e6b9f4a9e14c3537e Mon Sep 17 00:00:00 2001 From: ebby Date: Sat, 12 Sep 2026 12:47:08 +0300 Subject: [PATCH] alter structure and add pytest --- backend/dev.db | Bin 12288 -> 12288 bytes backend/pyproject.toml | 4 +- backend/pyrefly.toml | 2 +- .../backend/__pycache__/main.cpython-314.pyc | Bin 725 -> 725 bytes .../__pycache__/__init__.cpython-314.pyc | Bin 186 -> 186 bytes backend/src/backend/main.py | 3 +- backend/src/backend/models/__init__.py | 0 .../__pycache__/__init__.cpython-314.pyc | Bin 0 -> 184 bytes .../__pycache__/subscription.cpython-314.pyc | Bin 0 -> 1401 bytes backend/src/backend/models/subscription.py | 11 ++ .../__pycache__/subscriptions.cpython-314.pyc | Bin 2144 -> 1411 bytes ...subscriptions.cpython-314-pytest-9.1.1.pyc | Bin 0 -> 2325 bytes backend/src/backend/routers/subscriptions.py | 12 +- .../src/backend/routers/test_subscriptions.py | 9 ++ backend/uv.lock | 121 ++++++++++++++++++ 15 files changed, 149 insertions(+), 13 deletions(-) create mode 100644 backend/src/backend/models/__init__.py create mode 100644 backend/src/backend/models/__pycache__/__init__.cpython-314.pyc create mode 100644 backend/src/backend/models/__pycache__/subscription.cpython-314.pyc create mode 100644 backend/src/backend/models/subscription.py create mode 100644 backend/src/backend/routers/__pycache__/test_subscriptions.cpython-314-pytest-9.1.1.pyc create mode 100644 backend/src/backend/routers/test_subscriptions.py diff --git a/backend/dev.db b/backend/dev.db index 0fe3af0a6ddc3e7884a1904ea5de3d8a746dcf2c..dbb0fda200dfbf5da34f46774fc95bb443651c0f 100644 GIT binary patch delta 88 zcmZojXh@hK&B!)U#+i|AW5N=C9v1#H4E$gCpYh-1KeJg-U=KepHyaCsG^bf{Nl|8A o`sADP+B_`$ml*i(@n7Qq#{X)wpui!19&To7MyLw5$@lb?0Im!hX#fBK delta 63 zcmZojXh@hK&B!`Y#+i|IW5N=CE@u9l4E$gCpYh+^EU0jhe_{aF{s diff --git a/backend/pyproject.toml b/backend/pyproject.toml index b6ff302..d78a703 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -9,6 +9,8 @@ authors = [ requires-python = ">=3.14" dependencies = [ "fastapi>=0.141.1", + "httpx2>=2.12.0", + "pytest>=9.1.1", "sqlmodel>=0.0.42", ] @@ -20,4 +22,4 @@ 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 +entrypoint = "backend.main:app" diff --git a/backend/pyrefly.toml b/backend/pyrefly.toml index 906a017..718209c 100644 --- a/backend/pyrefly.toml +++ b/backend/pyrefly.toml @@ -1,5 +1,5 @@ [tool.pyrefly] project-includes = [ - "./**/*.py", + "./**/**/*.py", ] \ No newline at end of file diff --git a/backend/src/backend/__pycache__/main.cpython-314.pyc b/backend/src/backend/__pycache__/main.cpython-314.pyc index cc7f2199080ee0d6763e6328c0f28c82f275735c..54bf13dbd8068c4516ed59120c31b25ee562c4bc 100644 GIT binary patch delta 34 qcmcc0dX<$|n~#@^fq{Wxz0A_AYa4lwFf#H_zQnkXQE2i+CKmvsS_$?5 delta 34 qcmcc0dX<$|n~#@^fq{YHujtaOwHtYlFf#H^zQnkXk#F)uCKmvvQ3?(K diff --git a/backend/src/backend/internal/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/internal/__pycache__/__init__.cpython-314.pyc index a6c85caf94f102c3c1e92c72a9b2902c3f2b7be5..16a96f950a85f637c737655c2dbdf3c32d646d89 100644 GIT binary patch delta 18 ZcmdnRxQmfXn~#@^fq{XcPkbWR1^^<}1Hk|Q delta 18 ZcmdnRxQmfXn~#@^fq{V`n|&hJ1^^-E1C9Uy diff --git a/backend/src/backend/main.py b/backend/src/backend/main.py index 8bb7703..adf3598 100644 --- a/backend/src/backend/main.py +++ b/backend/src/backend/main.py @@ -4,9 +4,10 @@ from fastapi import APIRouter from fastapi import FastAPI -# TODO: Integrationtests schreiben +# TODO: Security and CORS # TODO: Api Specs definieren (Subscription, Comment, Like) # TODO: Settings hinzufügen +# TODO: Deploy app = FastAPI() diff --git a/backend/src/backend/models/__init__.py b/backend/src/backend/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/src/backend/models/__pycache__/__init__.cpython-314.pyc b/backend/src/backend/models/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eaefbcb7ddbe0ea4f4e4786b9f264202ec5902af GIT binary patch literal 184 zcmdPq`mJOrVq#!m_zaS~6{??+ zpPQlIYq;;_lhPbtkwwJTy}U;w+L7{vI*%*e=C#LU3J F001r-FCqW{ literal 0 HcmV?d00001 diff --git a/backend/src/backend/models/__pycache__/subscription.cpython-314.pyc b/backend/src/backend/models/__pycache__/subscription.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2312fbaf620511a629f03e7cf04c248c9606e699 GIT binary patch literal 1401 zcmaKs&uiR96vy8iNxSm;N9;OlCvIHhY_Tg^qCgEUNhrb4kU+bTSz{={9<c z(QF&vmb8#w3O)9iOCh=SPpQEd59CmK%B_tJ&M`b`*WH-V0X=3kKi+%a_nG;0V!Q?b z@Z`$x50??(ZyF3*wcj~z0zeP8fa5*5iy9ZG&+frprr842VG+1B3*6phD^|HjTg6{z z7I&AB=XR>t@~eplSMKK`)-To^asbc0U&@LY=TA( znr+$Int=>9?M2|ok+W4+uGP*4e2x@R;_3>wb#()@%bf;z6*JlDw)0TMyE@L&wIG-4 z9y3myM)I+#bklgRD?1H^P8M|&>W>Mr z*A0^X%mpE~W0mV9PGy=2p-4nEO1ex9`P=TMp%A7nM6LrJha%8g#qF+^xe&DSOsP;N zi4ZSPO;ChXp4;jIomm-}BJ@jT=sh@^n)z-0`NxM-e($SOO5jIO9}JehA2EI&G4~zB z7`OgItiXZ1vlLz+FYX=a^3QW_@ zuc?dVsZM5w%q*FLl11uWB}3Izm&weL`S4un=jkVz!awbJ^OQyPOpy++KFs>j&bw7q_{t23O0cWy*+UIp7dH6I=i3_bvvX3>d_M2=#nm> zqRR)f~B6&Y6HE$cd|Szoo=rKSEb>)hW0LoW{<2+$AtO~(0dKU zwV3>4snXhGv^Rek0NNz4oGm8eoJVsRrAeFQ!$~L@SO1c`7om{hJmR*}b=1fcSFz^N8FGiG z3(0tHUNWh(=hi$GQmgAH;=zg9)!Dokvvj(M*-L%^K!p}>0sJ%xAq6@G4h!rQXcl<* Ny;RSByHiVf{{wrqj6wha literal 2144 zcmZWq&2Q936n|rT?fuGz&DVy6kcL!|tf08Gk)VM3K|hoT8p0&X1vZw~o=ps1dzqPS z3B7DerJzccBDDv4<5H=;^-l>RhcIf?R_&#?ETPb2HQtYG=sS#_XP(FJ_j~X6Je})F z0|5Lm^yBTbD!`xep>4^QbNCVf>aeO{G!Ju#qj6XTtjsHODpzA)omb{GuEoAKpP19R z9{Y*;#GJv6xg<}H!yrrm)(e1*qJfh*bzW=U&r?Nh0&p51y*PRl)wZMPqB;RZ)PDCJg!>AB`wI}92vFyi93Gei zbMS8k08At@YlPd3Fy=?0iG=YnsglrRCK9O+7w2(QBtG>?;F*d@F5S5HS>%yG z7)#B!+;$?;60L{B5&$?*hazxYL3R4Xx;`c>{n;li@12*V>~rxtLLsZzh<&<*6M8N5@79PbDQ?jWvSca%99{!}%cu@3u&P}68o*NlPQeYdjx1P0HvyxwMhhYU zTvD(y1t3q*B?YT3U%8}UP5P5yCa8qDAQayd2~u(VK8>W0YLwiAXCcQ~kZsM!Mv%!(av%f6w4qmKZ zd6pk~wEWYXyLqer$+Q09@6OjheI>y?04jAEzr8HQ!ktn;?&pqkEP9Sn?thN}M8+eX z=DnXC7e27 zz{rw1QG_PB6~;1Qe5qEVr)0wM5~nUH5Jo%;Y9(p`z>wspC%)zPY~S{~JDIT^Z7hyH zCLLLt_=}h0*#8R$qgx%tVC7az^#E8s+PBn6Ftu1JBHK-qFj})o=#=mp4Naw4DOn{G z(Kt(4#WT$+o|LfUB2h7^!8*JG0}VIi@@wDe1JyvofAtI;Bn&kCLI=ICVHjw*iK~-a z3sa2ib`uv`Y!8brTY>hp9fuXPDC1wV_6&>9+tabjj@=*!23nAV!SOtyyHTa$b74?Y zri87V3Oy&`y)B{1RHvqzb?bL2k*e(`j$QzO5g93^T8D!)B(hsqH?MAIceSxSEwi<- zxv;AZNbmaQ_3dlB+QeR_u%i`XDi+LMk@rJRXy^npp2MAz!w8iCg;91Gcd9;>Q<>pLykG|iU&+HojI8YHn z`!Kx^qx&$n4(7@(0p8(B;|a=IFzvrzqdhVR-z}mro1R PFJ-65u)gO?yHoxH+Q8}1 diff --git a/backend/src/backend/routers/__pycache__/test_subscriptions.cpython-314-pytest-9.1.1.pyc b/backend/src/backend/routers/__pycache__/test_subscriptions.cpython-314-pytest-9.1.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8afa31ab8ae1621ebc11575ae9d3efa0f7dccf2e GIT binary patch literal 2325 zcmds3&2Jk;6o2Dgf2T>C00mUySfQb-7H=FoO`>30h>)BEQM9exOWI|e1SS3lcdjVNlML5Yke9iSDO<8F+-B#J$O8C@oPo@f zSQE*?sz@&)8i>VQsKKfnnd*y+9{s$Puf^u809&Px`rhVG0M}qGAyBI+p$#Mt+NGLQ zLfY_y(Ne73=hl!GTk}iEWp!wP7m|l^UtIuz<_8y68Wy;LftWUZ~pZ`kE{uZREl2|6yM< zk?Ozt3`nBtTH=k^gutru`EF}jZKxK%a0XKU;S8h%vls_wz?Bve`9@1lf^xY#qS8*C zn#6LM<+Q2lN$$?Hmm-+DPMczG&hXc4ci5m56E<=EhPyMTQ0|;t@#MDA!d~J&X7@UE z?kk@IE(E{@1^peXR20-L@$eaiX1?t!6BVCvTA>BX4A!B#=`?WW$wVcXm{q8Px=S2g z7GY&YguRAolRE9plN-u_W=^5Xke4w18_|=Rn0eXAdS2$PyTdSLx(p4soWUFZ%&(i} zw7($4A>Nq2?vR$jbo|)0jkdvOJeg;#qzS(WyewZVsCF@Gl%qx|FaoaIQDZ&|>(2yi zv%x-snBp`|1Hgn3?<;k~X<-%D>pSW_bAw>3&Mazfs4j6fvB{|Vx!u9r2E(LoJ59B2 zm|x>|L#4zFb>egwCRFuHdG2Ht+#PS&cN1(hbc^8@`49m3j_D}ke@4HKy#2iUwA*|C z=F!Nl-Rg_%*l9L*kj?evsr{1wI>=6)%Khg^p6X?Dp&2TB^Pzeuht^31ea!hnP*gdT zr(R^oo>!h$dUA2E^6XAeF77AxANR(KJ-OH$FCJuzr*i)}l8bwHLMv4G`hDwA4y_Z; z7fc)v;*NdN5Fb@eos}UkB@Q0p_r3R?9vsy|&{WH57YN=a7QKmec6i_*3#R0Pt@R kIt~DTN(iCf0KS7?;Mz-2eov2mzw|7(oA^tX(2O7dFMD{|82|tP literal 0 HcmV?d00001 diff --git a/backend/src/backend/routers/subscriptions.py b/backend/src/backend/routers/subscriptions.py index 3835620..a8fa7f1 100644 --- a/backend/src/backend/routers/subscriptions.py +++ b/backend/src/backend/routers/subscriptions.py @@ -1,16 +1,8 @@ +from ..models.subscription import Subscription from ..internal.database import get_session from fastapi import Depends from fastapi import APIRouter -from sqlmodel import Field -from sqlmodel import SQLModel, Session - - -class Subscription(SQLModel, table=True): - id: int | None = Field(default=None, primary_key=True) - email: str = Field(index=True, unique=True) - active: bool = Field() - - +from sqlmodel import Session router = APIRouter( prefix="/subscriptions", diff --git a/backend/src/backend/routers/test_subscriptions.py b/backend/src/backend/routers/test_subscriptions.py new file mode 100644 index 0000000..c7bdaf1 --- /dev/null +++ b/backend/src/backend/routers/test_subscriptions.py @@ -0,0 +1,9 @@ +from backend.main import app +from fastapi.testclient import TestClient + +client = TestClient(app) + +def test_read_item(): + response = client.get("/subscriptions/") + assert response.status_code == 200 + assert response.json() == { "name":"TestSub" } \ No newline at end of file diff --git a/backend/uv.lock b/backend/uv.lock index 264bc3b..e60ed2e 100644 --- a/backend/uv.lock +++ b/backend/uv.lock @@ -39,15 +39,28 @@ version = "0.1.0" source = { editable = "." } dependencies = [ { name = "fastapi" }, + { name = "httpx2" }, + { name = "pytest" }, { name = "sqlmodel" }, ] [package.metadata] requires-dist = [ { name = "fastapi", specifier = ">=0.141.1" }, + { name = "httpx2", specifier = ">=2.12.0" }, + { name = "pytest", specifier = ">=9.1.1" }, { name = "sqlmodel", specifier = ">=0.0.42" }, ] +[[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 = "fastapi" version = "0.141.1" @@ -103,6 +116,53 @@ wheels = [ { 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 = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "httpcore2" +version = "2.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "h11" }, + { name = "truststore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/be/ad/f4f0e57345f1870f3e8cb624e058d7eca6e5a27d33bcc3311d9b618734cd/httpcore2-2.12.0.tar.gz", hash = "sha256:9293522bba0aa7c4c8e9e3f040c16575bd8868e155a77fa30c7a9085a5eae648", size = 67548, upload-time = "2026-08-18T13:22:08.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/74/d370e55600d9bcfa0d9794b0166126d49291a3d2b20c268fc98c453a4948/httpcore2-2.12.0-py3-none-any.whl", hash = "sha256:7e04258ce01013d7d615e5b910a3b27fac937d7a95038227e79652b4ba3b4ceb", size = 83074, upload-time = "2026-08-18T13:22:05.854Z" }, +] + +[[package]] +name = "httpx2" +version = "2.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "sys_platform != 'emscripten'" }, + { name = "httpcore2", marker = "sys_platform != 'emscripten'" }, + { name = "httpx2-jsfetch", marker = "sys_platform == 'emscripten'" }, + { name = "idna" }, + { name = "truststore", marker = "sys_platform != 'emscripten'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7f/f8/579a8b51e42e38ee32647df9f08aa25643ae788e275cc625b199829c4671/httpx2-2.12.0.tar.gz", hash = "sha256:7631fe9887a8a2275f4a2540e053aa670fcc50742864a9ae7c66e609fdcf12cf", size = 100040, upload-time = "2026-08-18T13:22:09.086Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/95/411ba65569158e862368917aaf56597f3e5fa3b91b0502919638465a08f3/httpx2-2.12.0-py3-none-any.whl", hash = "sha256:cc8b6eecb8661c146b8f89a60e97456ee086e91a784ed31ac450c3a9e613dd36", size = 95427, upload-time = "2026-08-18T13:22:06.834Z" }, +] + +[[package]] +name = "httpx2-jsfetch" +version = "1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/0e5636363151a2a1795e0a77617168b9ca438e1748ec05fc9b5687f93d64/httpx2_jsfetch-1.0.tar.gz", hash = "sha256:70a0e3eabfef7cce5ad9c629f7d01ca05e418f586646f4ddf14782e4c1454c60", size = 6872, upload-time = "2026-08-07T00:13:07.492Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/43/832f631d32e4f1211caa2ba368317739fe71f0b8530e4c9d15dc454bac2a/httpx2_jsfetch-1.0-py3-none-any.whl", hash = "sha256:cb916b707601e69a07721aabc8f3f6659be3a6893bc1ff5c6f9e02241df2da32", size = 6382, upload-time = "2026-08-07T00:13:06.567Z" }, +] + [[package]] name = "idna" version = "3.19" @@ -112,6 +172,33 @@ 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 = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "packaging" +version = "26.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/fa/3944b40b07da9ce895c0e6303a5ab7d53da063554f534556b134a54d6093/packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79", size = 313412, upload-time = "2026-08-04T18:15:28.737Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/34/ba1c580383c9eada3711951fef0795c80b829a078d72188184bcab9dd527/packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c", size = 129956, upload-time = "2026-08-04T18:15:27.159Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + [[package]] name = "pydantic" version = "2.13.5" @@ -168,6 +255,31 @@ wheels = [ { 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 = "pygments" +version = "2.21.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/49/2e/ced460408999b33da6b31b0021b0f37d329e202d4169aeb164493778f25b/pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c", size = 5005329, upload-time = "2026-08-17T08:02:48.824Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/46/17f022dd3e953bf20a04a028a21ec746d942f8d2af30fa0f124fa0e6a684/pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9", size = 1250147, upload-time = "2026-08-17T08:02:44.912Z" }, +] + +[[package]] +name = "pytest" +version = "9.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" }, +] + [[package]] name = "sqlalchemy" version = "2.0.52" @@ -215,6 +327,15 @@ 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 = "truststore" +version = "0.10.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/a3/1585216310e344e8102c22482f6060c7a6ea0322b63e026372e6dcefcfd6/truststore-0.10.4.tar.gz", hash = "sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301", size = 26169, upload-time = "2025-08-12T18:49:02.73Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/97/56608b2249fe206a67cd573bc93cd9896e1efb9e98bce9c163bcdc704b88/truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981", size = 18660, upload-time = "2025-08-12T18:49:01.46Z" }, +] + [[package]] name = "typing-extensions" version = "4.16.0"