kenken999 commited on
Commit
819350f
·
1 Parent(s): 8d34a60
Files changed (6) hide show
  1. .vscode/launch.json +26 -0
  2. .vscode/settings.json +13 -7
  3. poetry.lock +180 -10
  4. pyproject.toml +2 -0
  5. test.php +0 -0
  6. test.py +37 -0
.vscode/launch.json ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "name": "Poetry FastAPI Debug (uvicorn)",
6
+ "type": "python",
7
+ "request": "launch",
8
+ "module": "uvicorn",
9
+ "args": [
10
+ "test:app",
11
+ "--reload"
12
+ ],
13
+ "python": "/home/user/.cache/pypoetry/virtualenvs/fastapi-django-zrSR0Z2A-py3.10/bin/python",
14
+ "justMyCode": false
15
+ },
16
+ {
17
+ "name": "Poetry Debug: Python File",
18
+ "type": "python",
19
+ "request": "launch",
20
+ "program": "${file}",
21
+ "python": "/home/user/.cache/pypoetry/virtualenvs/fastapi-django-zrSR0Z2A-py3.10/bin/python",
22
+ "justMyCode": false
23
+ }
24
+ ]
25
+ }
26
+
.vscode/settings.json CHANGED
@@ -1,8 +1,14 @@
1
  {
2
- "python.testing.pytestArgs": [
3
- "workspace"
4
- ],
5
- "python.testing.unittestEnabled": false,
6
- "python.testing.pytestEnabled": true,
7
- "continue.manuallyRunningServer": true
8
- }
 
 
 
 
 
 
 
1
  {
2
+ "version": "0.2.0",
3
+ "configurations": [
4
+ {
5
+ "name": "Run test.py directly",
6
+ "type": "python",
7
+ "request": "launch",
8
+ "program": "${workspaceFolder}/test.py",
9
+ "console": "integratedTerminal",
10
+ "justMyCode": false
11
+ }
12
+ ]
13
+ }
14
+
poetry.lock CHANGED
@@ -1,4 +1,4 @@
1
- # This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
2
 
3
  [[package]]
4
  name = "annotated-types"
@@ -6,6 +6,7 @@ version = "0.6.0"
6
  description = "Reusable constraint types to use with typing.Annotated"
7
  optional = false
8
  python-versions = ">=3.8"
 
9
  files = [
10
  {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"},
11
  {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"},
@@ -17,6 +18,7 @@ version = "4.3.0"
17
  description = "High level compatibility layer for multiple asynchronous event loop implementations"
18
  optional = false
19
  python-versions = ">=3.8"
 
20
  files = [
21
  {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"},
22
  {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"},
@@ -30,7 +32,7 @@ typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""}
30
 
31
  [package.extras]
32
  doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
33
- test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"]
34
  trio = ["trio (>=0.23)"]
35
 
36
  [[package]]
@@ -39,6 +41,7 @@ version = "3.8.1"
39
  description = "ASGI specs, helper code, and adapters"
40
  optional = false
41
  python-versions = ">=3.8"
 
42
  files = [
43
  {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"},
44
  {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"},
@@ -56,6 +59,7 @@ version = "2.4.1"
56
  description = "Annotate AST trees with source code positions"
57
  optional = false
58
  python-versions = "*"
 
59
  files = [
60
  {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"},
61
  {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"},
@@ -65,8 +69,8 @@ files = [
65
  six = ">=1.12.0"
66
 
67
  [package.extras]
68
- astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"]
69
- test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"]
70
 
71
  [[package]]
72
  name = "click"
@@ -74,6 +78,7 @@ version = "8.1.7"
74
  description = "Composable command line interface toolkit"
75
  optional = false
76
  python-versions = ">=3.7"
 
77
  files = [
78
  {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
79
  {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
@@ -88,10 +93,48 @@ version = "0.4.6"
88
  description = "Cross-platform colored terminal text."
89
  optional = false
90
  python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
 
91
  files = [
92
  {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
93
  {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
94
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
 
96
  [[package]]
97
  name = "decorator"
@@ -99,6 +142,7 @@ version = "5.1.1"
99
  description = "Decorators for Humans"
100
  optional = false
101
  python-versions = ">=3.5"
 
102
  files = [
103
  {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
104
  {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
@@ -110,6 +154,7 @@ version = "5.0.4"
110
  description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
111
  optional = false
112
  python-versions = ">=3.10"
 
113
  files = [
114
  {file = "Django-5.0.4-py3-none-any.whl", hash = "sha256:916423499d75d62da7aa038d19aef23d23498d8df229775eb0a6309ee1013775"},
115
  {file = "Django-5.0.4.tar.gz", hash = "sha256:4bd01a8c830bb77a8a3b0e7d8b25b887e536ad17a81ba2dce5476135c73312bd"},
@@ -130,6 +175,7 @@ version = "4.2.7"
130
  description = "Mypy stubs for Django"
131
  optional = false
132
  python-versions = ">=3.8"
 
133
  files = [
134
  {file = "django-stubs-4.2.7.tar.gz", hash = "sha256:8ccd2ff4ee5adf22b9e3b7b1a516d2e1c2191e9d94e672c35cc2bc3dd61e0f6b"},
135
  {file = "django_stubs-4.2.7-py3-none-any.whl", hash = "sha256:4cf4de258fa71adc6f2799e983091b9d46cfc67c6eebc68fe111218c9a62b3b8"},
@@ -153,6 +199,7 @@ version = "4.2.7"
153
  description = "Monkey-patching and extensions for django-stubs"
154
  optional = false
155
  python-versions = ">=3.8"
 
156
  files = [
157
  {file = "django-stubs-ext-4.2.7.tar.gz", hash = "sha256:519342ac0849cda1559746c9a563f03ff99f636b0ebe7c14b75e816a00dfddc3"},
158
  {file = "django_stubs_ext-4.2.7-py3-none-any.whl", hash = "sha256:45a5d102417a412e3606e3c358adb4744988a92b7b58ccf3fd64bddd5d04d14c"},
@@ -168,6 +215,8 @@ version = "1.2.0"
168
  description = "Backport of PEP 654 (exception groups)"
169
  optional = false
170
  python-versions = ">=3.7"
 
 
171
  files = [
172
  {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"},
173
  {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"},
@@ -182,13 +231,14 @@ version = "2.0.1"
182
  description = "Get the currently executing AST node of a frame, and other information"
183
  optional = false
184
  python-versions = ">=3.5"
 
185
  files = [
186
  {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"},
187
  {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"},
188
  ]
189
 
190
  [package.extras]
191
- tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"]
192
 
193
  [[package]]
194
  name = "fastapi"
@@ -196,6 +246,7 @@ version = "0.110.1"
196
  description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
197
  optional = false
198
  python-versions = ">=3.8"
 
199
  files = [
200
  {file = "fastapi-0.110.1-py3-none-any.whl", hash = "sha256:5df913203c482f820d31f48e635e022f8cbfe7350e4830ef05a3163925b1addc"},
201
  {file = "fastapi-0.110.1.tar.gz", hash = "sha256:6feac43ec359dfe4f45b2c18ec8c94edb8dc2dfc461d417d9e626590c071baad"},
@@ -215,6 +266,7 @@ version = "0.14.0"
215
  description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
216
  optional = false
217
  python-versions = ">=3.7"
 
218
  files = [
219
  {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
220
  {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
@@ -226,6 +278,7 @@ version = "3.7"
226
  description = "Internationalized Domain Names in Applications (IDNA)"
227
  optional = false
228
  python-versions = ">=3.5"
 
229
  files = [
230
  {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"},
231
  {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"},
@@ -237,6 +290,7 @@ version = "8.23.0"
237
  description = "IPython: Productive Interactive Computing"
238
  optional = false
239
  python-versions = ">=3.10"
 
240
  files = [
241
  {file = "ipython-8.23.0-py3-none-any.whl", hash = "sha256:07232af52a5ba146dc3372c7bf52a0f890a23edf38d77caef8d53f9cdc2584c1"},
242
  {file = "ipython-8.23.0.tar.gz", hash = "sha256:7468edaf4f6de3e1b912e57f66c241e6fd3c7099f2ec2136e239e142e800274d"},
@@ -275,6 +329,7 @@ version = "0.19.1"
275
  description = "An autocompletion tool for Python that can be used for text editors."
276
  optional = false
277
  python-versions = ">=3.6"
 
278
  files = [
279
  {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"},
280
  {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"},
@@ -294,6 +349,7 @@ version = "0.1.6"
294
  description = "Inline Matplotlib backend for Jupyter"
295
  optional = false
296
  python-versions = ">=3.5"
 
297
  files = [
298
  {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"},
299
  {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"},
@@ -308,6 +364,7 @@ version = "1.7.1"
308
  description = "Optional static typing for Python"
309
  optional = false
310
  python-versions = ">=3.8"
 
311
  files = [
312
  {file = "mypy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cce78e329838d70a204293e7b29af9faa3ab14899aec397798a4b41be7f340"},
313
  {file = "mypy-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1484b8fa2c10adf4474f016e09d7a159602f3239075c7bf9f1627f5acf40ad49"},
@@ -355,6 +412,7 @@ version = "1.0.0"
355
  description = "Type system extensions for programs checked with the mypy type checker."
356
  optional = false
357
  python-versions = ">=3.5"
 
358
  files = [
359
  {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
360
  {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
@@ -366,6 +424,7 @@ version = "0.8.4"
366
  description = "A Python Parser"
367
  optional = false
368
  python-versions = ">=3.6"
 
369
  files = [
370
  {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"},
371
  {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"},
@@ -381,6 +440,8 @@ version = "4.9.0"
381
  description = "Pexpect allows easy control of interactive console applications."
382
  optional = false
383
  python-versions = "*"
 
 
384
  files = [
385
  {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"},
386
  {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"},
@@ -395,6 +456,7 @@ version = "3.0.43"
395
  description = "Library for building powerful interactive command lines in Python"
396
  optional = false
397
  python-versions = ">=3.7.0"
 
398
  files = [
399
  {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"},
400
  {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"},
@@ -409,6 +471,7 @@ version = "2.9.9"
409
  description = "psycopg2 - Python-PostgreSQL Database Adapter"
410
  optional = false
411
  python-versions = ">=3.7"
 
412
  files = [
413
  {file = "psycopg2-2.9.9-cp310-cp310-win32.whl", hash = "sha256:38a8dcc6856f569068b47de286b472b7c473ac7977243593a288ebce0dc89516"},
414
  {file = "psycopg2-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3"},
@@ -431,6 +494,8 @@ version = "0.7.0"
431
  description = "Run a subprocess in a pseudo terminal"
432
  optional = false
433
  python-versions = "*"
 
 
434
  files = [
435
  {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
436
  {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
@@ -442,6 +507,7 @@ version = "0.2.2"
442
  description = "Safely evaluate AST nodes without side effects"
443
  optional = false
444
  python-versions = "*"
 
445
  files = [
446
  {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"},
447
  {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"},
@@ -456,6 +522,7 @@ version = "2.6.4"
456
  description = "Data validation using Python type hints"
457
  optional = false
458
  python-versions = ">=3.8"
 
459
  files = [
460
  {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"},
461
  {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"},
@@ -475,6 +542,7 @@ version = "2.16.3"
475
  description = ""
476
  optional = false
477
  python-versions = ">=3.8"
 
478
  files = [
479
  {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"},
480
  {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"},
@@ -566,21 +634,105 @@ version = "2.17.2"
566
  description = "Pygments is a syntax highlighting package written in Python."
567
  optional = false
568
  python-versions = ">=3.7"
 
569
  files = [
570
  {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"},
571
  {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"},
572
  ]
573
 
574
  [package.extras]
575
- plugins = ["importlib-metadata"]
576
  windows-terminal = ["colorama (>=0.4.6)"]
577
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
578
  [[package]]
579
  name = "ruff"
580
  version = "0.3.5"
581
  description = "An extremely fast Python linter and code formatter, written in Rust."
582
  optional = false
583
  python-versions = ">=3.7"
 
584
  files = [
585
  {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:aef5bd3b89e657007e1be6b16553c8813b221ff6d92c7526b7e0227450981eac"},
586
  {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:89b1e92b3bd9fca249153a97d23f29bed3992cff414b222fcd361d763fc53f12"},
@@ -607,6 +759,7 @@ version = "1.16.0"
607
  description = "Python 2 and 3 compatibility utilities"
608
  optional = false
609
  python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
 
610
  files = [
611
  {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
612
  {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
@@ -618,6 +771,7 @@ version = "1.3.1"
618
  description = "Sniff out which async library your code is running under"
619
  optional = false
620
  python-versions = ">=3.7"
 
621
  files = [
622
  {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"},
623
  {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"},
@@ -629,6 +783,7 @@ version = "0.5.0"
629
  description = "A non-validating SQL parser."
630
  optional = false
631
  python-versions = ">=3.8"
 
632
  files = [
633
  {file = "sqlparse-0.5.0-py3-none-any.whl", hash = "sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663"},
634
  {file = "sqlparse-0.5.0.tar.gz", hash = "sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93"},
@@ -644,6 +799,7 @@ version = "0.6.3"
644
  description = "Extract data from python stack frames and tracebacks for informative displays"
645
  optional = false
646
  python-versions = "*"
 
647
  files = [
648
  {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"},
649
  {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"},
@@ -663,6 +819,7 @@ version = "0.37.2"
663
  description = "The little ASGI library that shines."
664
  optional = false
665
  python-versions = ">=3.8"
 
666
  files = [
667
  {file = "starlette-0.37.2-py3-none-any.whl", hash = "sha256:6fe59f29268538e5d0d182f2791a479a0c64638e6935d1c6989e63fb2699c6ee"},
668
  {file = "starlette-0.37.2.tar.gz", hash = "sha256:9af890290133b79fc3db55474ade20f6220a364a0402e0b556e7cd5e1e093823"},
@@ -680,6 +837,8 @@ version = "2.0.1"
680
  description = "A lil' TOML parser"
681
  optional = false
682
  python-versions = ">=3.7"
 
 
683
  files = [
684
  {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
685
  {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
@@ -691,6 +850,7 @@ version = "5.14.2"
691
  description = "Traitlets Python configuration system"
692
  optional = false
693
  python-versions = ">=3.8"
 
694
  files = [
695
  {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"},
696
  {file = "traitlets-5.14.2.tar.gz", hash = "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9"},
@@ -706,6 +866,7 @@ version = "2024.1.0.20240203"
706
  description = "Typing stubs for pytz"
707
  optional = false
708
  python-versions = ">=3.8"
 
709
  files = [
710
  {file = "types-pytz-2024.1.0.20240203.tar.gz", hash = "sha256:c93751ee20dfc6e054a0148f8f5227b9a00b79c90a4d3c9f464711a73179c89e"},
711
  {file = "types_pytz-2024.1.0.20240203-py3-none-any.whl", hash = "sha256:9679eef0365db3af91ef7722c199dbb75ee5c1b67e3c4dd7bfbeb1b8a71c21a3"},
@@ -717,6 +878,7 @@ version = "6.0.12.20240311"
717
  description = "Typing stubs for PyYAML"
718
  optional = false
719
  python-versions = ">=3.8"
 
720
  files = [
721
  {file = "types-PyYAML-6.0.12.20240311.tar.gz", hash = "sha256:a9e0f0f88dc835739b0c1ca51ee90d04ca2a897a71af79de9aec5f38cb0a5342"},
722
  {file = "types_PyYAML-6.0.12.20240311-py3-none-any.whl", hash = "sha256:b845b06a1c7e54b8e5b4c683043de0d9caf205e7434b3edc678ff2411979b8f6"},
@@ -728,6 +890,7 @@ version = "4.11.0"
728
  description = "Backported and Experimental Type Hints for Python 3.8+"
729
  optional = false
730
  python-versions = ">=3.8"
 
731
  files = [
732
  {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"},
733
  {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"},
@@ -739,6 +902,8 @@ version = "2024.1"
739
  description = "Provider of IANA time zone data"
740
  optional = false
741
  python-versions = ">=2"
 
 
742
  files = [
743
  {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"},
744
  {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"},
@@ -750,6 +915,7 @@ version = "0.29.0"
750
  description = "The lightning-fast ASGI server."
751
  optional = false
752
  python-versions = ">=3.8"
 
753
  files = [
754
  {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"},
755
  {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"},
@@ -761,7 +927,7 @@ h11 = ">=0.8"
761
  typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
762
 
763
  [package.extras]
764
- standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"]
765
 
766
  [[package]]
767
  name = "uvloop"
@@ -769,6 +935,8 @@ version = "0.19.0"
769
  description = "Fast implementation of asyncio event loop on top of libuv"
770
  optional = false
771
  python-versions = ">=3.8.0"
 
 
772
  files = [
773
  {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"},
774
  {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"},
@@ -805,7 +973,7 @@ files = [
805
 
806
  [package.extras]
807
  docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"]
808
- test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"]
809
 
810
  [[package]]
811
  name = "wcwidth"
@@ -813,6 +981,7 @@ version = "0.2.13"
813
  description = "Measures the displayed width of unicode strings in a terminal"
814
  optional = false
815
  python-versions = "*"
 
816
  files = [
817
  {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"},
818
  {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"},
@@ -824,6 +993,7 @@ version = "6.6.0"
824
  description = "Radically simplified static file serving for WSGI applications"
825
  optional = false
826
  python-versions = ">=3.8"
 
827
  files = [
828
  {file = "whitenoise-6.6.0-py3-none-any.whl", hash = "sha256:b1f9db9bf67dc183484d760b99f4080185633136a273a03f6436034a41064146"},
829
  {file = "whitenoise-6.6.0.tar.gz", hash = "sha256:8998f7370973447fac1e8ef6e8ded2c5209a7b1f67c1012866dbcd09681c3251"},
@@ -833,6 +1003,6 @@ files = [
833
  brotli = ["Brotli"]
834
 
835
  [metadata]
836
- lock-version = "2.0"
837
  python-versions = "^3.10"
838
- content-hash = "f3864c362623a1b46dab3b99f482c9a534bb0c001df3c56413b863fba6ad4e3d"
 
1
+ # This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand.
2
 
3
  [[package]]
4
  name = "annotated-types"
 
6
  description = "Reusable constraint types to use with typing.Annotated"
7
  optional = false
8
  python-versions = ">=3.8"
9
+ groups = ["main"]
10
  files = [
11
  {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"},
12
  {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"},
 
18
  description = "High level compatibility layer for multiple asynchronous event loop implementations"
19
  optional = false
20
  python-versions = ">=3.8"
21
+ groups = ["main"]
22
  files = [
23
  {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"},
24
  {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"},
 
32
 
33
  [package.extras]
34
  doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"]
35
+ test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\""]
36
  trio = ["trio (>=0.23)"]
37
 
38
  [[package]]
 
41
  description = "ASGI specs, helper code, and adapters"
42
  optional = false
43
  python-versions = ">=3.8"
44
+ groups = ["main", "dev"]
45
  files = [
46
  {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"},
47
  {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"},
 
59
  description = "Annotate AST trees with source code positions"
60
  optional = false
61
  python-versions = "*"
62
+ groups = ["dev"]
63
  files = [
64
  {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"},
65
  {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"},
 
69
  six = ">=1.12.0"
70
 
71
  [package.extras]
72
+ astroid = ["astroid (>=1,<2) ; python_version < \"3\"", "astroid (>=2,<4) ; python_version >= \"3\""]
73
+ test = ["astroid (>=1,<2) ; python_version < \"3\"", "astroid (>=2,<4) ; python_version >= \"3\"", "pytest"]
74
 
75
  [[package]]
76
  name = "click"
 
78
  description = "Composable command line interface toolkit"
79
  optional = false
80
  python-versions = ">=3.7"
81
+ groups = ["main"]
82
  files = [
83
  {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
84
  {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
 
93
  description = "Cross-platform colored terminal text."
94
  optional = false
95
  python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
96
+ groups = ["main", "dev"]
97
  files = [
98
  {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
99
  {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
100
  ]
101
+ markers = {main = "platform_system == \"Windows\"", dev = "sys_platform == \"win32\""}
102
+
103
+ [[package]]
104
+ name = "debugpy"
105
+ version = "1.8.14"
106
+ description = "An implementation of the Debug Adapter Protocol for Python"
107
+ optional = false
108
+ python-versions = ">=3.8"
109
+ groups = ["main"]
110
+ files = [
111
+ {file = "debugpy-1.8.14-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:93fee753097e85623cab1c0e6a68c76308cd9f13ffdf44127e6fab4fbf024339"},
112
+ {file = "debugpy-1.8.14-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d937d93ae4fa51cdc94d3e865f535f185d5f9748efb41d0d49e33bf3365bd79"},
113
+ {file = "debugpy-1.8.14-cp310-cp310-win32.whl", hash = "sha256:c442f20577b38cc7a9aafecffe1094f78f07fb8423c3dddb384e6b8f49fd2987"},
114
+ {file = "debugpy-1.8.14-cp310-cp310-win_amd64.whl", hash = "sha256:f117dedda6d969c5c9483e23f573b38f4e39412845c7bc487b6f2648df30fe84"},
115
+ {file = "debugpy-1.8.14-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:1b2ac8c13b2645e0b1eaf30e816404990fbdb168e193322be8f545e8c01644a9"},
116
+ {file = "debugpy-1.8.14-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf431c343a99384ac7eab2f763980724834f933a271e90496944195318c619e2"},
117
+ {file = "debugpy-1.8.14-cp311-cp311-win32.whl", hash = "sha256:c99295c76161ad8d507b413cd33422d7c542889fbb73035889420ac1fad354f2"},
118
+ {file = "debugpy-1.8.14-cp311-cp311-win_amd64.whl", hash = "sha256:7816acea4a46d7e4e50ad8d09d963a680ecc814ae31cdef3622eb05ccacf7b01"},
119
+ {file = "debugpy-1.8.14-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84"},
120
+ {file = "debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826"},
121
+ {file = "debugpy-1.8.14-cp312-cp312-win32.whl", hash = "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f"},
122
+ {file = "debugpy-1.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f"},
123
+ {file = "debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f"},
124
+ {file = "debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15"},
125
+ {file = "debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e"},
126
+ {file = "debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e"},
127
+ {file = "debugpy-1.8.14-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:d5582bcbe42917bc6bbe5c12db1bffdf21f6bfc28d4554b738bf08d50dc0c8c3"},
128
+ {file = "debugpy-1.8.14-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5349b7c3735b766a281873fbe32ca9cca343d4cc11ba4a743f84cb854339ff35"},
129
+ {file = "debugpy-1.8.14-cp38-cp38-win32.whl", hash = "sha256:7118d462fe9724c887d355eef395fae68bc764fd862cdca94e70dcb9ade8a23d"},
130
+ {file = "debugpy-1.8.14-cp38-cp38-win_amd64.whl", hash = "sha256:d235e4fa78af2de4e5609073972700523e372cf5601742449970110d565ca28c"},
131
+ {file = "debugpy-1.8.14-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:413512d35ff52c2fb0fd2d65e69f373ffd24f0ecb1fac514c04a668599c5ce7f"},
132
+ {file = "debugpy-1.8.14-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c9156f7524a0d70b7a7e22b2e311d8ba76a15496fb00730e46dcdeedb9e1eea"},
133
+ {file = "debugpy-1.8.14-cp39-cp39-win32.whl", hash = "sha256:b44985f97cc3dd9d52c42eb59ee9d7ee0c4e7ecd62bca704891f997de4cef23d"},
134
+ {file = "debugpy-1.8.14-cp39-cp39-win_amd64.whl", hash = "sha256:b1528cfee6c1b1c698eb10b6b096c598738a8238822d218173d21c3086de8123"},
135
+ {file = "debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20"},
136
+ {file = "debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322"},
137
+ ]
138
 
139
  [[package]]
140
  name = "decorator"
 
142
  description = "Decorators for Humans"
143
  optional = false
144
  python-versions = ">=3.5"
145
+ groups = ["dev"]
146
  files = [
147
  {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"},
148
  {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"},
 
154
  description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design."
155
  optional = false
156
  python-versions = ">=3.10"
157
+ groups = ["main", "dev"]
158
  files = [
159
  {file = "Django-5.0.4-py3-none-any.whl", hash = "sha256:916423499d75d62da7aa038d19aef23d23498d8df229775eb0a6309ee1013775"},
160
  {file = "Django-5.0.4.tar.gz", hash = "sha256:4bd01a8c830bb77a8a3b0e7d8b25b887e536ad17a81ba2dce5476135c73312bd"},
 
175
  description = "Mypy stubs for Django"
176
  optional = false
177
  python-versions = ">=3.8"
178
+ groups = ["dev"]
179
  files = [
180
  {file = "django-stubs-4.2.7.tar.gz", hash = "sha256:8ccd2ff4ee5adf22b9e3b7b1a516d2e1c2191e9d94e672c35cc2bc3dd61e0f6b"},
181
  {file = "django_stubs-4.2.7-py3-none-any.whl", hash = "sha256:4cf4de258fa71adc6f2799e983091b9d46cfc67c6eebc68fe111218c9a62b3b8"},
 
199
  description = "Monkey-patching and extensions for django-stubs"
200
  optional = false
201
  python-versions = ">=3.8"
202
+ groups = ["dev"]
203
  files = [
204
  {file = "django-stubs-ext-4.2.7.tar.gz", hash = "sha256:519342ac0849cda1559746c9a563f03ff99f636b0ebe7c14b75e816a00dfddc3"},
205
  {file = "django_stubs_ext-4.2.7-py3-none-any.whl", hash = "sha256:45a5d102417a412e3606e3c358adb4744988a92b7b58ccf3fd64bddd5d04d14c"},
 
215
  description = "Backport of PEP 654 (exception groups)"
216
  optional = false
217
  python-versions = ">=3.7"
218
+ groups = ["main", "dev"]
219
+ markers = "python_version == \"3.10\""
220
  files = [
221
  {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"},
222
  {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"},
 
231
  description = "Get the currently executing AST node of a frame, and other information"
232
  optional = false
233
  python-versions = ">=3.5"
234
+ groups = ["dev"]
235
  files = [
236
  {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"},
237
  {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"},
238
  ]
239
 
240
  [package.extras]
241
+ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""]
242
 
243
  [[package]]
244
  name = "fastapi"
 
246
  description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
247
  optional = false
248
  python-versions = ">=3.8"
249
+ groups = ["main"]
250
  files = [
251
  {file = "fastapi-0.110.1-py3-none-any.whl", hash = "sha256:5df913203c482f820d31f48e635e022f8cbfe7350e4830ef05a3163925b1addc"},
252
  {file = "fastapi-0.110.1.tar.gz", hash = "sha256:6feac43ec359dfe4f45b2c18ec8c94edb8dc2dfc461d417d9e626590c071baad"},
 
266
  description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
267
  optional = false
268
  python-versions = ">=3.7"
269
+ groups = ["main"]
270
  files = [
271
  {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"},
272
  {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"},
 
278
  description = "Internationalized Domain Names in Applications (IDNA)"
279
  optional = false
280
  python-versions = ">=3.5"
281
+ groups = ["main"]
282
  files = [
283
  {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"},
284
  {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"},
 
290
  description = "IPython: Productive Interactive Computing"
291
  optional = false
292
  python-versions = ">=3.10"
293
+ groups = ["dev"]
294
  files = [
295
  {file = "ipython-8.23.0-py3-none-any.whl", hash = "sha256:07232af52a5ba146dc3372c7bf52a0f890a23edf38d77caef8d53f9cdc2584c1"},
296
  {file = "ipython-8.23.0.tar.gz", hash = "sha256:7468edaf4f6de3e1b912e57f66c241e6fd3c7099f2ec2136e239e142e800274d"},
 
329
  description = "An autocompletion tool for Python that can be used for text editors."
330
  optional = false
331
  python-versions = ">=3.6"
332
+ groups = ["dev"]
333
  files = [
334
  {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"},
335
  {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"},
 
349
  description = "Inline Matplotlib backend for Jupyter"
350
  optional = false
351
  python-versions = ">=3.5"
352
+ groups = ["dev"]
353
  files = [
354
  {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"},
355
  {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"},
 
364
  description = "Optional static typing for Python"
365
  optional = false
366
  python-versions = ">=3.8"
367
+ groups = ["dev"]
368
  files = [
369
  {file = "mypy-1.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:12cce78e329838d70a204293e7b29af9faa3ab14899aec397798a4b41be7f340"},
370
  {file = "mypy-1.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1484b8fa2c10adf4474f016e09d7a159602f3239075c7bf9f1627f5acf40ad49"},
 
412
  description = "Type system extensions for programs checked with the mypy type checker."
413
  optional = false
414
  python-versions = ">=3.5"
415
+ groups = ["dev"]
416
  files = [
417
  {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"},
418
  {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"},
 
424
  description = "A Python Parser"
425
  optional = false
426
  python-versions = ">=3.6"
427
+ groups = ["dev"]
428
  files = [
429
  {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"},
430
  {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"},
 
440
  description = "Pexpect allows easy control of interactive console applications."
441
  optional = false
442
  python-versions = "*"
443
+ groups = ["dev"]
444
+ markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""
445
  files = [
446
  {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"},
447
  {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"},
 
456
  description = "Library for building powerful interactive command lines in Python"
457
  optional = false
458
  python-versions = ">=3.7.0"
459
+ groups = ["dev"]
460
  files = [
461
  {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"},
462
  {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"},
 
471
  description = "psycopg2 - Python-PostgreSQL Database Adapter"
472
  optional = false
473
  python-versions = ">=3.7"
474
+ groups = ["main"]
475
  files = [
476
  {file = "psycopg2-2.9.9-cp310-cp310-win32.whl", hash = "sha256:38a8dcc6856f569068b47de286b472b7c473ac7977243593a288ebce0dc89516"},
477
  {file = "psycopg2-2.9.9-cp310-cp310-win_amd64.whl", hash = "sha256:426f9f29bde126913a20a96ff8ce7d73fd8a216cfb323b1f04da402d452853c3"},
 
494
  description = "Run a subprocess in a pseudo terminal"
495
  optional = false
496
  python-versions = "*"
497
+ groups = ["dev"]
498
+ markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""
499
  files = [
500
  {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"},
501
  {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"},
 
507
  description = "Safely evaluate AST nodes without side effects"
508
  optional = false
509
  python-versions = "*"
510
+ groups = ["dev"]
511
  files = [
512
  {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"},
513
  {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"},
 
522
  description = "Data validation using Python type hints"
523
  optional = false
524
  python-versions = ">=3.8"
525
+ groups = ["main"]
526
  files = [
527
  {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"},
528
  {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"},
 
542
  description = ""
543
  optional = false
544
  python-versions = ">=3.8"
545
+ groups = ["main"]
546
  files = [
547
  {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"},
548
  {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"},
 
634
  description = "Pygments is a syntax highlighting package written in Python."
635
  optional = false
636
  python-versions = ">=3.7"
637
+ groups = ["dev"]
638
  files = [
639
  {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"},
640
  {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"},
641
  ]
642
 
643
  [package.extras]
644
+ plugins = ["importlib-metadata ; python_version < \"3.8\""]
645
  windows-terminal = ["colorama (>=0.4.6)"]
646
 
647
+ [[package]]
648
+ name = "pyngrok"
649
+ version = "7.2.4"
650
+ description = "A Python wrapper for ngrok"
651
+ optional = false
652
+ python-versions = ">=3.8"
653
+ groups = ["main"]
654
+ files = [
655
+ {file = "pyngrok-7.2.4-py3-none-any.whl", hash = "sha256:aab9a49a76f51dd2c69dffc0fdf07d67369118442d12c3fec78eab30590e19b1"},
656
+ {file = "pyngrok-7.2.4.tar.gz", hash = "sha256:ebb2ec80155ce7e00ebf9247bfd9a367be714857b350ed7cd2267b3400ee5d2d"},
657
+ ]
658
+
659
+ [package.dependencies]
660
+ PyYAML = ">=5.1"
661
+
662
+ [package.extras]
663
+ dev = ["coverage[toml]", "flake8", "flake8-pyproject", "pep8-naming", "psutil", "pytest"]
664
+ docs = ["Sphinx (<8.2)", "mypy", "sphinx-notfound-page", "sphinx-substitution-extensions", "sphinx_autodoc_typehints (==1.25.2)", "types-PyYAML"]
665
+
666
+ [[package]]
667
+ name = "pyyaml"
668
+ version = "6.0.2"
669
+ description = "YAML parser and emitter for Python"
670
+ optional = false
671
+ python-versions = ">=3.8"
672
+ groups = ["main"]
673
+ files = [
674
+ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
675
+ {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
676
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"},
677
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"},
678
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"},
679
+ {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"},
680
+ {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"},
681
+ {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"},
682
+ {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"},
683
+ {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"},
684
+ {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"},
685
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"},
686
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"},
687
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"},
688
+ {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"},
689
+ {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"},
690
+ {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"},
691
+ {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"},
692
+ {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"},
693
+ {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"},
694
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"},
695
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"},
696
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"},
697
+ {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"},
698
+ {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"},
699
+ {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"},
700
+ {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"},
701
+ {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"},
702
+ {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"},
703
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"},
704
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"},
705
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"},
706
+ {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"},
707
+ {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"},
708
+ {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"},
709
+ {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"},
710
+ {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"},
711
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"},
712
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"},
713
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"},
714
+ {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"},
715
+ {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"},
716
+ {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"},
717
+ {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"},
718
+ {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"},
719
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"},
720
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"},
721
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"},
722
+ {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"},
723
+ {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"},
724
+ {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"},
725
+ {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"},
726
+ {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
727
+ ]
728
+
729
  [[package]]
730
  name = "ruff"
731
  version = "0.3.5"
732
  description = "An extremely fast Python linter and code formatter, written in Rust."
733
  optional = false
734
  python-versions = ">=3.7"
735
+ groups = ["dev"]
736
  files = [
737
  {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:aef5bd3b89e657007e1be6b16553c8813b221ff6d92c7526b7e0227450981eac"},
738
  {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:89b1e92b3bd9fca249153a97d23f29bed3992cff414b222fcd361d763fc53f12"},
 
759
  description = "Python 2 and 3 compatibility utilities"
760
  optional = false
761
  python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
762
+ groups = ["dev"]
763
  files = [
764
  {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
765
  {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
 
771
  description = "Sniff out which async library your code is running under"
772
  optional = false
773
  python-versions = ">=3.7"
774
+ groups = ["main"]
775
  files = [
776
  {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"},
777
  {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"},
 
783
  description = "A non-validating SQL parser."
784
  optional = false
785
  python-versions = ">=3.8"
786
+ groups = ["main", "dev"]
787
  files = [
788
  {file = "sqlparse-0.5.0-py3-none-any.whl", hash = "sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663"},
789
  {file = "sqlparse-0.5.0.tar.gz", hash = "sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93"},
 
799
  description = "Extract data from python stack frames and tracebacks for informative displays"
800
  optional = false
801
  python-versions = "*"
802
+ groups = ["dev"]
803
  files = [
804
  {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"},
805
  {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"},
 
819
  description = "The little ASGI library that shines."
820
  optional = false
821
  python-versions = ">=3.8"
822
+ groups = ["main"]
823
  files = [
824
  {file = "starlette-0.37.2-py3-none-any.whl", hash = "sha256:6fe59f29268538e5d0d182f2791a479a0c64638e6935d1c6989e63fb2699c6ee"},
825
  {file = "starlette-0.37.2.tar.gz", hash = "sha256:9af890290133b79fc3db55474ade20f6220a364a0402e0b556e7cd5e1e093823"},
 
837
  description = "A lil' TOML parser"
838
  optional = false
839
  python-versions = ">=3.7"
840
+ groups = ["dev"]
841
+ markers = "python_version == \"3.10\""
842
  files = [
843
  {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
844
  {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
 
850
  description = "Traitlets Python configuration system"
851
  optional = false
852
  python-versions = ">=3.8"
853
+ groups = ["dev"]
854
  files = [
855
  {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"},
856
  {file = "traitlets-5.14.2.tar.gz", hash = "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9"},
 
866
  description = "Typing stubs for pytz"
867
  optional = false
868
  python-versions = ">=3.8"
869
+ groups = ["dev"]
870
  files = [
871
  {file = "types-pytz-2024.1.0.20240203.tar.gz", hash = "sha256:c93751ee20dfc6e054a0148f8f5227b9a00b79c90a4d3c9f464711a73179c89e"},
872
  {file = "types_pytz-2024.1.0.20240203-py3-none-any.whl", hash = "sha256:9679eef0365db3af91ef7722c199dbb75ee5c1b67e3c4dd7bfbeb1b8a71c21a3"},
 
878
  description = "Typing stubs for PyYAML"
879
  optional = false
880
  python-versions = ">=3.8"
881
+ groups = ["dev"]
882
  files = [
883
  {file = "types-PyYAML-6.0.12.20240311.tar.gz", hash = "sha256:a9e0f0f88dc835739b0c1ca51ee90d04ca2a897a71af79de9aec5f38cb0a5342"},
884
  {file = "types_PyYAML-6.0.12.20240311-py3-none-any.whl", hash = "sha256:b845b06a1c7e54b8e5b4c683043de0d9caf205e7434b3edc678ff2411979b8f6"},
 
890
  description = "Backported and Experimental Type Hints for Python 3.8+"
891
  optional = false
892
  python-versions = ">=3.8"
893
+ groups = ["main", "dev"]
894
  files = [
895
  {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"},
896
  {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"},
 
902
  description = "Provider of IANA time zone data"
903
  optional = false
904
  python-versions = ">=2"
905
+ groups = ["main", "dev"]
906
+ markers = "sys_platform == \"win32\""
907
  files = [
908
  {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"},
909
  {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"},
 
915
  description = "The lightning-fast ASGI server."
916
  optional = false
917
  python-versions = ">=3.8"
918
+ groups = ["main"]
919
  files = [
920
  {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"},
921
  {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"},
 
927
  typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
928
 
929
  [package.extras]
930
+ standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"]
931
 
932
  [[package]]
933
  name = "uvloop"
 
935
  description = "Fast implementation of asyncio event loop on top of libuv"
936
  optional = false
937
  python-versions = ">=3.8.0"
938
+ groups = ["main"]
939
+ markers = "sys_platform != \"win32\""
940
  files = [
941
  {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"},
942
  {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"},
 
973
 
974
  [package.extras]
975
  docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"]
976
+ test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0) ; python_version >= \"3.12\"", "aiohttp (>=3.8.1) ; python_version < \"3.12\"", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"]
977
 
978
  [[package]]
979
  name = "wcwidth"
 
981
  description = "Measures the displayed width of unicode strings in a terminal"
982
  optional = false
983
  python-versions = "*"
984
+ groups = ["dev"]
985
  files = [
986
  {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"},
987
  {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"},
 
993
  description = "Radically simplified static file serving for WSGI applications"
994
  optional = false
995
  python-versions = ">=3.8"
996
+ groups = ["main"]
997
  files = [
998
  {file = "whitenoise-6.6.0-py3-none-any.whl", hash = "sha256:b1f9db9bf67dc183484d760b99f4080185633136a273a03f6436034a41064146"},
999
  {file = "whitenoise-6.6.0.tar.gz", hash = "sha256:8998f7370973447fac1e8ef6e8ded2c5209a7b1f67c1012866dbcd09681c3251"},
 
1003
  brotli = ["Brotli"]
1004
 
1005
  [metadata]
1006
+ lock-version = "2.1"
1007
  python-versions = "^3.10"
1008
+ content-hash = "996ea1f710728315785262d485e929345327d6342345df0df6f4f5291a16c6f6"
pyproject.toml CHANGED
@@ -22,6 +22,8 @@ uvloop = {version = "^0.19.0", markers = 'sys_platform != "win32"'}
22
  psycopg2 = "^2.9.5"
23
  # you don't need whitenoise if you mount the django APP with FastAPI
24
  whitenoise = "^6.2.0"
 
 
25
 
26
  [tool.poetry.group.dev.dependencies]
27
  django-stubs = {extras = ["compatible-mypy"], version = "^4.2.3"}
 
22
  psycopg2 = "^2.9.5"
23
  # you don't need whitenoise if you mount the django APP with FastAPI
24
  whitenoise = "^6.2.0"
25
+ pyngrok = "^7.2.4"
26
+ debugpy = "^1.8.14"
27
 
28
  [tool.poetry.group.dev.dependencies]
29
  django-stubs = {extras = ["compatible-mypy"], version = "^4.2.3"}
test.php DELETED
File without changes
test.py ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ import uvicorn
3
+ import asyncio
4
+ from pyngrok import ngrok, conf
5
+ import threading
6
+
7
+ # 設定
8
+ FASTAPI_PORT = 7861
9
+ NGROK_AUTHTOKEN = "2fAuM2mXP4rwyzcb6T7EjY8zkL6_4mkaaSLXVpf1enNc8c3Ff"
10
+
11
+ # FastAPI アプリ
12
+ app = FastAPI()
13
+
14
+ @app.get("/")
15
+ def root():
16
+ print("📍 エンドポイント hit!")
17
+ return {"message": "Hello from FastAPI with ngrok!"}
18
+
19
+ # ngrok 起動スレッド
20
+ def start_ngrok():
21
+ conf.get_default().auth_token = NGROK_AUTHTOKEN
22
+ public_url = ngrok.connect(FASTAPI_PORT)
23
+ print(f"🚪 公開URL: {public_url}")
24
+
25
+ threading.Thread(target=start_ngrok, daemon=True).start()
26
+
27
+ # 非同期で uvicorn サーバーを起動(VSCodeでも例のエラーが出ない方法)
28
+ async def start_server():
29
+ config = uvicorn.Config(app=app, host="0.0.0.0", port=FASTAPI_PORT)
30
+ server = uvicorn.Server(config)
31
+ await server.serve()
32
+
33
+ # すでにイベントループが動いてるか確認して処理を分ける
34
+ try:
35
+ asyncio.get_running_loop().create_task(start_server())
36
+ except RuntimeError:
37
+ asyncio.run(start_server())