apitally 0.14.3__tar.gz → 0.14.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {apitally-0.14.3 → apitally-0.14.4}/.github/workflows/publish.yaml +2 -2
- {apitally-0.14.3 → apitally-0.14.4}/.github/workflows/tests.yaml +5 -5
- {apitally-0.14.3 → apitally-0.14.4}/.pre-commit-config.yaml +1 -1
- {apitally-0.14.3 → apitally-0.14.4}/PKG-INFO +1 -1
- {apitally-0.14.3 → apitally-0.14.4}/apitally/client/client_asyncio.py +7 -8
- {apitally-0.14.3 → apitally-0.14.4}/apitally/client/client_base.py +1 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/client/client_threading.py +7 -8
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_starlette.py +1 -0
- {apitally-0.14.3 → apitally-0.14.4}/uv.lock +75 -69
- {apitally-0.14.3 → apitally-0.14.4}/.github/workflows/summary.yaml +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/.gitignore +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/LICENSE +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/Makefile +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/README.md +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/__init__.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/client/__init__.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/client/consumers.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/client/logging.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/client/request_logging.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/client/requests.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/client/server_errors.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/client/validation_errors.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/common.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/django.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/django_ninja.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/django_rest_framework.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/fastapi.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/flask.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/litestar.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/py.typed +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/apitally/starlette.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/pyproject.toml +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/renovate.json +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/__init__.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/conftest.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/constants.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/django_ninja_urls.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/django_rest_framework_urls.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_client_asyncio.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_client_consumers.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_client_request_logging.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_client_requests.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_client_server_errors.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_client_threading.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_client_validation_errors.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_django_ninja.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_django_rest_framework.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_fastapi.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_flask.py +0 -0
- {apitally-0.14.3 → apitally-0.14.4}/tests/test_litestar.py +0 -0
@@ -24,12 +24,12 @@ jobs:
|
|
24
24
|
steps:
|
25
25
|
- uses: actions/checkout@v4
|
26
26
|
- name: Install uv
|
27
|
-
uses: astral-sh/setup-uv@
|
27
|
+
uses: astral-sh/setup-uv@v5
|
28
28
|
with:
|
29
|
-
version: "0.5.
|
29
|
+
version: "0.5.14"
|
30
30
|
enable-cache: true
|
31
31
|
- name: Install Python
|
32
|
-
run: uv python install 3.
|
32
|
+
run: uv python install 3.13
|
33
33
|
- name: Install dependencies
|
34
34
|
run: uv sync --all-extras --frozen
|
35
35
|
- name: Run checks
|
@@ -81,9 +81,9 @@ jobs:
|
|
81
81
|
steps:
|
82
82
|
- uses: actions/checkout@v4
|
83
83
|
- name: Install uv
|
84
|
-
uses: astral-sh/setup-uv@
|
84
|
+
uses: astral-sh/setup-uv@v5
|
85
85
|
with:
|
86
|
-
version: "0.5.
|
86
|
+
version: "0.5.14"
|
87
87
|
enable-cache: true
|
88
88
|
- name: Install Python
|
89
89
|
run: uv python install ${{ matrix.python }}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: apitally
|
3
|
-
Version: 0.14.
|
3
|
+
Version: 0.14.4
|
4
4
|
Summary: Simple API monitoring & analytics for REST APIs built with FastAPI, Flask, Django, Starlette and Litestar.
|
5
5
|
Project-URL: Homepage, https://apitally.io
|
6
6
|
Project-URL: Documentation, https://docs.apitally.io
|
@@ -6,7 +6,7 @@ import random
|
|
6
6
|
import time
|
7
7
|
from contextlib import suppress
|
8
8
|
from functools import partial
|
9
|
-
from typing import Any, AsyncIterator, Dict, Optional,
|
9
|
+
from typing import Any, AsyncIterator, Dict, Optional, Union
|
10
10
|
from uuid import UUID
|
11
11
|
|
12
12
|
import backoff
|
@@ -40,7 +40,7 @@ class ApitallyClient(ApitallyClientBase):
|
|
40
40
|
self.proxy = proxy
|
41
41
|
self._stop_sync_loop = False
|
42
42
|
self._sync_loop_task: Optional[asyncio.Task] = None
|
43
|
-
self._sync_data_queue: asyncio.Queue[
|
43
|
+
self._sync_data_queue: asyncio.Queue[Dict[str, Any]] = asyncio.Queue()
|
44
44
|
self._set_startup_data_task: Optional[asyncio.Task] = None
|
45
45
|
|
46
46
|
def get_http_client(self) -> httpx.AsyncClient:
|
@@ -103,20 +103,19 @@ class ApitallyClient(ApitallyClientBase):
|
|
103
103
|
|
104
104
|
async def send_sync_data(self, client: httpx.AsyncClient) -> None:
|
105
105
|
data = self.get_sync_data()
|
106
|
-
self._sync_data_queue.put_nowait(
|
106
|
+
self._sync_data_queue.put_nowait(data)
|
107
107
|
|
108
108
|
i = 0
|
109
109
|
while not self._sync_data_queue.empty():
|
110
|
-
|
110
|
+
data = self._sync_data_queue.get_nowait()
|
111
111
|
try:
|
112
|
-
if
|
112
|
+
if time.time() - data["timestamp"] <= MAX_QUEUE_TIME:
|
113
113
|
if i > 0:
|
114
|
-
await asyncio.sleep(random.uniform(0.1, 0.
|
115
|
-
data["time_offset"] = time_offset
|
114
|
+
await asyncio.sleep(random.uniform(0.1, 0.5))
|
116
115
|
await self._send_sync_data(client, data)
|
117
116
|
i += 1
|
118
117
|
except httpx.HTTPError:
|
119
|
-
self._sync_data_queue.put_nowait(
|
118
|
+
self._sync_data_queue.put_nowait(data)
|
120
119
|
break
|
121
120
|
finally:
|
122
121
|
self._sync_data_queue.task_done()
|
@@ -89,6 +89,7 @@ class ApitallyClientBase(ABC):
|
|
89
89
|
|
90
90
|
def get_sync_data(self) -> Dict[str, Any]:
|
91
91
|
data = {
|
92
|
+
"timestamp": time.time(),
|
92
93
|
"requests": self.request_counter.get_and_reset_requests(),
|
93
94
|
"validation_errors": self.validation_error_counter.get_and_reset_validation_errors(),
|
94
95
|
"server_errors": self.server_error_counter.get_and_reset_server_errors(),
|
@@ -8,7 +8,7 @@ from functools import partial
|
|
8
8
|
from io import BufferedReader
|
9
9
|
from queue import Queue
|
10
10
|
from threading import Event, Thread
|
11
|
-
from typing import Any, Callable, Dict, Optional
|
11
|
+
from typing import Any, Callable, Dict, Optional
|
12
12
|
from uuid import UUID
|
13
13
|
|
14
14
|
import backoff
|
@@ -58,7 +58,7 @@ class ApitallyClient(ApitallyClientBase):
|
|
58
58
|
self.proxies = {"https": proxy} if proxy else None
|
59
59
|
self._thread: Optional[Thread] = None
|
60
60
|
self._stop_sync_loop = Event()
|
61
|
-
self._sync_data_queue: Queue[
|
61
|
+
self._sync_data_queue: Queue[Dict[str, Any]] = Queue()
|
62
62
|
|
63
63
|
def start_sync_loop(self) -> None:
|
64
64
|
self._stop_sync_loop.clear()
|
@@ -114,20 +114,19 @@ class ApitallyClient(ApitallyClientBase):
|
|
114
114
|
|
115
115
|
def send_sync_data(self, session: requests.Session) -> None:
|
116
116
|
data = self.get_sync_data()
|
117
|
-
self._sync_data_queue.put_nowait(
|
117
|
+
self._sync_data_queue.put_nowait(data)
|
118
118
|
|
119
119
|
i = 0
|
120
120
|
while not self._sync_data_queue.empty():
|
121
|
-
|
121
|
+
data = self._sync_data_queue.get_nowait()
|
122
122
|
try:
|
123
|
-
if
|
123
|
+
if time.time() - data["timestamp"] <= MAX_QUEUE_TIME:
|
124
124
|
if i > 0:
|
125
|
-
time.sleep(random.uniform(0.1, 0.
|
126
|
-
data["time_offset"] = time_offset
|
125
|
+
time.sleep(random.uniform(0.1, 0.5))
|
127
126
|
self._send_sync_data(session, data)
|
128
127
|
i += 1
|
129
128
|
except requests.RequestException:
|
130
|
-
self._sync_data_queue.put_nowait(
|
129
|
+
self._sync_data_queue.put_nowait(data)
|
131
130
|
break
|
132
131
|
finally:
|
133
132
|
self._sync_data_queue.task_done()
|
@@ -328,6 +328,7 @@ def test_get_startup_data(app: Starlette, mocker: MockerFixture):
|
|
328
328
|
data = _get_startup_data(app=app.middleware_stack, app_version="1.2.3", openapi_url=None)
|
329
329
|
assert len(data["paths"]) == 7
|
330
330
|
assert {"method": "get", "path": "/api/foo"} in data["paths"]
|
331
|
+
assert {"method": "post", "path": "/test/task"} in data["paths"]
|
331
332
|
assert {"method": "get", "path": "/stream"} in data["paths"]
|
332
333
|
assert data["versions"]["starlette"]
|
333
334
|
assert data["versions"]["app"] == "1.2.3"
|
@@ -57,7 +57,7 @@ wheels = [
|
|
57
57
|
|
58
58
|
[[package]]
|
59
59
|
name = "apitally"
|
60
|
-
version = "0.14.
|
60
|
+
version = "0.14.4.dev2+g16999c8"
|
61
61
|
source = { editable = "." }
|
62
62
|
dependencies = [
|
63
63
|
{ name = "backoff" },
|
@@ -817,15 +817,15 @@ wheels = [
|
|
817
817
|
|
818
818
|
[[package]]
|
819
819
|
name = "faker"
|
820
|
-
version = "33.
|
820
|
+
version = "33.2.0"
|
821
821
|
source = { registry = "https://pypi.org/simple" }
|
822
822
|
dependencies = [
|
823
823
|
{ name = "python-dateutil" },
|
824
824
|
{ name = "typing-extensions" },
|
825
825
|
]
|
826
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
826
|
+
sdist = { url = "https://files.pythonhosted.org/packages/7c/80/ba358dbfa20b0dfb5d499d5bce4018da027c8eebfcccb687f31a6bcb9393/faker-33.2.0.tar.gz", hash = "sha256:32353a0c8cb1b230b29d3603ceb905da34e944d3320393f0fcfa9c2db2350b02", size = 1853684 }
|
827
827
|
wheels = [
|
828
|
-
{ url = "https://files.pythonhosted.org/packages/
|
828
|
+
{ url = "https://files.pythonhosted.org/packages/4e/c0/1f99da45d9d1aa07d0418c72725e57ea5ac1d6a63b300619601f39cd40a7/Faker-33.2.0-py3-none-any.whl", hash = "sha256:86314377ffee82bf94005b9f15975b3b7b8cbe8137bc58bff5bce149005f2dd2", size = 1892829 },
|
829
829
|
]
|
830
830
|
|
831
831
|
[[package]]
|
@@ -988,15 +988,15 @@ wheels = [
|
|
988
988
|
|
989
989
|
[[package]]
|
990
990
|
name = "identify"
|
991
|
-
version = "2.6.
|
991
|
+
version = "2.6.4"
|
992
992
|
source = { registry = "https://pypi.org/simple" }
|
993
993
|
resolution-markers = [
|
994
994
|
"python_full_version >= '3.10'",
|
995
995
|
"python_full_version == '3.9.*'",
|
996
996
|
]
|
997
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
997
|
+
sdist = { url = "https://files.pythonhosted.org/packages/49/a5/7de3053524ee006b91099968d7ecb2e0b420f7ae728094394c33e8a2a2b9/identify-2.6.4.tar.gz", hash = "sha256:285a7d27e397652e8cafe537a6cc97dd470a970f48fb2e9d979aa38eae5513ac", size = 99209 }
|
998
998
|
wheels = [
|
999
|
-
{ url = "https://files.pythonhosted.org/packages/
|
999
|
+
{ url = "https://files.pythonhosted.org/packages/a2/9d/52f036403ae86474804f699c0d084b4b071e333a390b20269bb8accc65e0/identify-2.6.4-py2.py3-none-any.whl", hash = "sha256:993b0f01b97e0568c179bb9196391ff391bfb88a99099dbf5ce392b68f42d0af", size = 99072 },
|
1000
1000
|
]
|
1001
1001
|
|
1002
1002
|
[[package]]
|
@@ -1619,46 +1619,52 @@ wheels = [
|
|
1619
1619
|
|
1620
1620
|
[[package]]
|
1621
1621
|
name = "mypy"
|
1622
|
-
version = "1.14.
|
1622
|
+
version = "1.14.1"
|
1623
1623
|
source = { registry = "https://pypi.org/simple" }
|
1624
1624
|
dependencies = [
|
1625
1625
|
{ name = "mypy-extensions" },
|
1626
1626
|
{ name = "tomli", marker = "python_full_version < '3.11'" },
|
1627
1627
|
{ name = "typing-extensions" },
|
1628
1628
|
]
|
1629
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
1630
|
-
wheels = [
|
1631
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1632
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1633
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1634
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1635
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1636
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1637
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1638
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1639
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1640
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1641
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1642
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1643
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1644
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1645
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1646
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1647
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1648
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1649
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1650
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1651
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1652
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1653
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1654
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1655
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1656
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1657
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1658
|
-
{ url = "https://files.pythonhosted.org/packages/bb/
|
1659
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1660
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1661
|
-
{ url = "https://files.pythonhosted.org/packages/
|
1629
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b9/eb/2c92d8ea1e684440f54fa49ac5d9a5f19967b7b472a281f419e69a8d228e/mypy-1.14.1.tar.gz", hash = "sha256:7ec88144fe9b510e8475ec2f5f251992690fcf89ccb4500b214b4226abcd32d6", size = 3216051 }
|
1630
|
+
wheels = [
|
1631
|
+
{ url = "https://files.pythonhosted.org/packages/9b/7a/87ae2adb31d68402da6da1e5f30c07ea6063e9f09b5e7cfc9dfa44075e74/mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb", size = 11211002 },
|
1632
|
+
{ url = "https://files.pythonhosted.org/packages/e1/23/eada4c38608b444618a132be0d199b280049ded278b24cbb9d3fc59658e4/mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0", size = 10358400 },
|
1633
|
+
{ url = "https://files.pythonhosted.org/packages/43/c9/d6785c6f66241c62fd2992b05057f404237deaad1566545e9f144ced07f5/mypy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:90716d8b2d1f4cd503309788e51366f07c56635a3309b0f6a32547eaaa36a64d", size = 12095172 },
|
1634
|
+
{ url = "https://files.pythonhosted.org/packages/c3/62/daa7e787770c83c52ce2aaf1a111eae5893de9e004743f51bfcad9e487ec/mypy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae753f5c9fef278bcf12e1a564351764f2a6da579d4a81347e1d5a15819997b", size = 12828732 },
|
1635
|
+
{ url = "https://files.pythonhosted.org/packages/1b/a2/5fb18318a3637f29f16f4e41340b795da14f4751ef4f51c99ff39ab62e52/mypy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0fe0f5feaafcb04505bcf439e991c6d8f1bf8b15f12b05feeed96e9e7bf1427", size = 13012197 },
|
1636
|
+
{ url = "https://files.pythonhosted.org/packages/28/99/e153ce39105d164b5f02c06c35c7ba958aaff50a2babba7d080988b03fe7/mypy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:7d54bd85b925e501c555a3227f3ec0cfc54ee8b6930bd6141ec872d1c572f81f", size = 9780836 },
|
1637
|
+
{ url = "https://files.pythonhosted.org/packages/da/11/a9422850fd506edbcdc7f6090682ecceaf1f87b9dd847f9df79942da8506/mypy-1.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f995e511de847791c3b11ed90084a7a0aafdc074ab88c5a9711622fe4751138c", size = 11120432 },
|
1638
|
+
{ url = "https://files.pythonhosted.org/packages/b6/9e/47e450fd39078d9c02d620545b2cb37993a8a8bdf7db3652ace2f80521ca/mypy-1.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d64169ec3b8461311f8ce2fd2eb5d33e2d0f2c7b49116259c51d0d96edee48d1", size = 10279515 },
|
1639
|
+
{ url = "https://files.pythonhosted.org/packages/01/b5/6c8d33bd0f851a7692a8bfe4ee75eb82b6983a3cf39e5e32a5d2a723f0c1/mypy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba24549de7b89b6381b91fbc068d798192b1b5201987070319889e93038967a8", size = 12025791 },
|
1640
|
+
{ url = "https://files.pythonhosted.org/packages/f0/4c/e10e2c46ea37cab5c471d0ddaaa9a434dc1d28650078ac1b56c2d7b9b2e4/mypy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:183cf0a45457d28ff9d758730cd0210419ac27d4d3f285beda038c9083363b1f", size = 12749203 },
|
1641
|
+
{ url = "https://files.pythonhosted.org/packages/88/55/beacb0c69beab2153a0f57671ec07861d27d735a0faff135a494cd4f5020/mypy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f2a0ecc86378f45347f586e4163d1769dd81c5a223d577fe351f26b179e148b1", size = 12885900 },
|
1642
|
+
{ url = "https://files.pythonhosted.org/packages/a2/75/8c93ff7f315c4d086a2dfcde02f713004357d70a163eddb6c56a6a5eff40/mypy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:ad3301ebebec9e8ee7135d8e3109ca76c23752bac1e717bc84cd3836b4bf3eae", size = 9777869 },
|
1643
|
+
{ url = "https://files.pythonhosted.org/packages/43/1b/b38c079609bb4627905b74fc6a49849835acf68547ac33d8ceb707de5f52/mypy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:30ff5ef8519bbc2e18b3b54521ec319513a26f1bba19a7582e7b1f58a6e69f14", size = 11266668 },
|
1644
|
+
{ url = "https://files.pythonhosted.org/packages/6b/75/2ed0d2964c1ffc9971c729f7a544e9cd34b2cdabbe2d11afd148d7838aa2/mypy-1.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cb9f255c18052343c70234907e2e532bc7e55a62565d64536dbc7706a20b78b9", size = 10254060 },
|
1645
|
+
{ url = "https://files.pythonhosted.org/packages/a1/5f/7b8051552d4da3c51bbe8fcafffd76a6823779101a2b198d80886cd8f08e/mypy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b4e3413e0bddea671012b063e27591b953d653209e7a4fa5e48759cda77ca11", size = 11933167 },
|
1646
|
+
{ url = "https://files.pythonhosted.org/packages/04/90/f53971d3ac39d8b68bbaab9a4c6c58c8caa4d5fd3d587d16f5927eeeabe1/mypy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553c293b1fbdebb6c3c4030589dab9fafb6dfa768995a453d8a5d3b23784af2e", size = 12864341 },
|
1647
|
+
{ url = "https://files.pythonhosted.org/packages/03/d2/8bc0aeaaf2e88c977db41583559319f1821c069e943ada2701e86d0430b7/mypy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fad79bfe3b65fe6a1efaed97b445c3d37f7be9fdc348bdb2d7cac75579607c89", size = 12972991 },
|
1648
|
+
{ url = "https://files.pythonhosted.org/packages/6f/17/07815114b903b49b0f2cf7499f1c130e5aa459411596668267535fe9243c/mypy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:8fa2220e54d2946e94ab6dbb3ba0a992795bd68b16dc852db33028df2b00191b", size = 9879016 },
|
1649
|
+
{ url = "https://files.pythonhosted.org/packages/9e/15/bb6a686901f59222275ab228453de741185f9d54fecbaacec041679496c6/mypy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:92c3ed5afb06c3a8e188cb5da4984cab9ec9a77ba956ee419c68a388b4595255", size = 11252097 },
|
1650
|
+
{ url = "https://files.pythonhosted.org/packages/f8/b3/8b0f74dfd072c802b7fa368829defdf3ee1566ba74c32a2cb2403f68024c/mypy-1.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dbec574648b3e25f43d23577309b16534431db4ddc09fda50841f1e34e64ed34", size = 10239728 },
|
1651
|
+
{ url = "https://files.pythonhosted.org/packages/c5/9b/4fd95ab20c52bb5b8c03cc49169be5905d931de17edfe4d9d2986800b52e/mypy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8c6d94b16d62eb3e947281aa7347d78236688e21081f11de976376cf010eb31a", size = 11924965 },
|
1652
|
+
{ url = "https://files.pythonhosted.org/packages/56/9d/4a236b9c57f5d8f08ed346914b3f091a62dd7e19336b2b2a0d85485f82ff/mypy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d4b19b03fdf54f3c5b2fa474c56b4c13c9dbfb9a2db4370ede7ec11a2c5927d9", size = 12867660 },
|
1653
|
+
{ url = "https://files.pythonhosted.org/packages/40/88/a61a5497e2f68d9027de2bb139c7bb9abaeb1be1584649fa9d807f80a338/mypy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0c911fde686394753fff899c409fd4e16e9b294c24bfd5e1ea4675deae1ac6fd", size = 12969198 },
|
1654
|
+
{ url = "https://files.pythonhosted.org/packages/54/da/3d6fc5d92d324701b0c23fb413c853892bfe0e1dbe06c9138037d459756b/mypy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:8b21525cb51671219f5307be85f7e646a153e5acc656e5cebf64bfa076c50107", size = 9885276 },
|
1655
|
+
{ url = "https://files.pythonhosted.org/packages/39/02/1817328c1372be57c16148ce7d2bfcfa4a796bedaed897381b1aad9b267c/mypy-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7084fb8f1128c76cd9cf68fe5971b37072598e7c31b2f9f95586b65c741a9d31", size = 11143050 },
|
1656
|
+
{ url = "https://files.pythonhosted.org/packages/b9/07/99db9a95ece5e58eee1dd87ca456a7e7b5ced6798fd78182c59c35a7587b/mypy-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8f845a00b4f420f693f870eaee5f3e2692fa84cc8514496114649cfa8fd5e2c6", size = 10321087 },
|
1657
|
+
{ url = "https://files.pythonhosted.org/packages/9a/eb/85ea6086227b84bce79b3baf7f465b4732e0785830726ce4a51528173b71/mypy-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:44bf464499f0e3a2d14d58b54674dee25c031703b2ffc35064bd0df2e0fac319", size = 12066766 },
|
1658
|
+
{ url = "https://files.pythonhosted.org/packages/4b/bb/f01bebf76811475d66359c259eabe40766d2f8ac8b8250d4e224bb6df379/mypy-1.14.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99f27732c0b7dc847adb21c9d47ce57eb48fa33a17bc6d7d5c5e9f9e7ae5bac", size = 12787111 },
|
1659
|
+
{ url = "https://files.pythonhosted.org/packages/2f/c9/84837ff891edcb6dcc3c27d85ea52aab0c4a34740ff5f0ccc0eb87c56139/mypy-1.14.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:bce23c7377b43602baa0bd22ea3265c49b9ff0b76eb315d6c34721af4cdf1d9b", size = 12974331 },
|
1660
|
+
{ url = "https://files.pythonhosted.org/packages/84/5f/901e18464e6a13f8949b4909535be3fa7f823291b8ab4e4b36cfe57d6769/mypy-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:8edc07eeade7ebc771ff9cf6b211b9a7d93687ff892150cb5692e4f4272b0837", size = 9763210 },
|
1661
|
+
{ url = "https://files.pythonhosted.org/packages/ca/1f/186d133ae2514633f8558e78cd658070ba686c0e9275c5a5c24a1e1f0d67/mypy-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3888a1816d69f7ab92092f785a462944b3ca16d7c470d564165fe703b0970c35", size = 11200493 },
|
1662
|
+
{ url = "https://files.pythonhosted.org/packages/af/fc/4842485d034e38a4646cccd1369f6b1ccd7bc86989c52770d75d719a9941/mypy-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:46c756a444117c43ee984bd055db99e498bc613a70bbbc120272bd13ca579fbc", size = 10357702 },
|
1663
|
+
{ url = "https://files.pythonhosted.org/packages/b4/e6/457b83f2d701e23869cfec013a48a12638f75b9d37612a9ddf99072c1051/mypy-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27fc248022907e72abfd8e22ab1f10e903915ff69961174784a3900a8cba9ad9", size = 12091104 },
|
1664
|
+
{ url = "https://files.pythonhosted.org/packages/f1/bf/76a569158db678fee59f4fd30b8e7a0d75bcbaeef49edd882a0d63af6d66/mypy-1.14.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:499d6a72fb7e5de92218db961f1a66d5f11783f9ae549d214617edab5d4dbdbb", size = 12830167 },
|
1665
|
+
{ url = "https://files.pythonhosted.org/packages/43/bc/0bc6b694b3103de9fed61867f1c8bd33336b913d16831431e7cb48ef1c92/mypy-1.14.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57961db9795eb566dc1d1b4e9139ebc4c6b0cb6e7254ecde69d1552bf7613f60", size = 13013834 },
|
1666
|
+
{ url = "https://files.pythonhosted.org/packages/b0/79/5f5ec47849b6df1e6943d5fd8e6632fbfc04b4fd4acfa5a5a9535d11b4e2/mypy-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:07ba89fdcc9451f2ebb02853deb6aaaa3d2239a236669a63ab3801bbf923ef5c", size = 9781231 },
|
1667
|
+
{ url = "https://files.pythonhosted.org/packages/a0/b5/32dd67b69a16d088e533962e5044e51004176a9952419de0370cdaead0f8/mypy-1.14.1-py3-none-any.whl", hash = "sha256:b66a60cc4073aeb8ae00057f9c1f64d49e90f918fbcef9a977eb121da8b8f1d1", size = 2752905 },
|
1662
1668
|
]
|
1663
1669
|
|
1664
1670
|
[[package]]
|
@@ -1787,7 +1793,7 @@ resolution-markers = [
|
|
1787
1793
|
]
|
1788
1794
|
dependencies = [
|
1789
1795
|
{ name = "cfgv", marker = "python_full_version >= '3.9'" },
|
1790
|
-
{ name = "identify", version = "2.6.
|
1796
|
+
{ name = "identify", version = "2.6.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.9'" },
|
1791
1797
|
{ name = "nodeenv", marker = "python_full_version >= '3.9'" },
|
1792
1798
|
{ name = "pyyaml", marker = "python_full_version >= '3.9'" },
|
1793
1799
|
{ name = "virtualenv", marker = "python_full_version >= '3.9'" },
|
@@ -2375,27 +2381,27 @@ wheels = [
|
|
2375
2381
|
|
2376
2382
|
[[package]]
|
2377
2383
|
name = "ruff"
|
2378
|
-
version = "0.8.
|
2379
|
-
source = { registry = "https://pypi.org/simple" }
|
2380
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
2381
|
-
wheels = [
|
2382
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2383
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2384
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2385
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2386
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2387
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2388
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2389
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2390
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2391
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2392
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2393
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2394
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2395
|
-
{ url = "https://files.pythonhosted.org/packages/0d/
|
2396
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2397
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2398
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2384
|
+
version = "0.8.5"
|
2385
|
+
source = { registry = "https://pypi.org/simple" }
|
2386
|
+
sdist = { url = "https://files.pythonhosted.org/packages/25/5d/4b5403f3e89837decfd54c51bea7f94b7d3fae77e08858603d0e04d7ad17/ruff-0.8.5.tar.gz", hash = "sha256:1098d36f69831f7ff2a1da3e6407d5fbd6dfa2559e4f74ff2d260c5588900317", size = 3454835 }
|
2387
|
+
wheels = [
|
2388
|
+
{ url = "https://files.pythonhosted.org/packages/73/f8/03391745a703ce11678eb37c48ae89ec60396ea821e9d0bcea7c8e88fd91/ruff-0.8.5-py3-none-linux_armv6l.whl", hash = "sha256:5ad11a5e3868a73ca1fa4727fe7e33735ea78b416313f4368c504dbeb69c0f88", size = 10626889 },
|
2389
|
+
{ url = "https://files.pythonhosted.org/packages/55/74/83bb74a44183b904216f3edfb9995b89830c83aaa6ce84627f74da0e0cf8/ruff-0.8.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f69ab37771ea7e0715fead8624ec42996d101269a96e31f4d31be6fc33aa19b7", size = 10398233 },
|
2390
|
+
{ url = "https://files.pythonhosted.org/packages/e8/7a/a162a4feb3ef85d594527165e366dde09d7a1e534186ff4ba5d127eda850/ruff-0.8.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b5462d7804558ccff9c08fe8cbf6c14b7efe67404316696a2dde48297b1925bb", size = 10001843 },
|
2391
|
+
{ url = "https://files.pythonhosted.org/packages/e7/9f/5ee5dcd135411402e35b6ec6a8dfdadbd31c5cd1c36a624d356a38d76090/ruff-0.8.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d56de7220a35607f9fe59f8a6d018e14504f7b71d784d980835e20fc0611cd50", size = 10872507 },
|
2392
|
+
{ url = "https://files.pythonhosted.org/packages/b6/67/db2df2dd4a34b602d7f6ebb1b3744c8157f0d3579973ffc58309c9c272e8/ruff-0.8.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9d99cf80b0429cbebf31cbbf6f24f05a29706f0437c40413d950e67e2d4faca4", size = 10377200 },
|
2393
|
+
{ url = "https://files.pythonhosted.org/packages/fe/ff/fe3a6a73006bced73e60d171d154a82430f61d97e787f511a24bd6302611/ruff-0.8.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b75ac29715ac60d554a049dbb0ef3b55259076181c3369d79466cb130eb5afd", size = 11433155 },
|
2394
|
+
{ url = "https://files.pythonhosted.org/packages/e3/95/c1d1a1fe36658c1f3e1b47e1cd5f688b72d5786695b9e621c2c38399a95e/ruff-0.8.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c9d526a62c9eda211b38463528768fd0ada25dad524cb33c0e99fcff1c67b5dc", size = 12139227 },
|
2395
|
+
{ url = "https://files.pythonhosted.org/packages/1b/fe/644b70d473a27b5112ac7a3428edcc1ce0db775c301ff11aa146f71886e0/ruff-0.8.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:587c5e95007612c26509f30acc506c874dab4c4abbacd0357400bd1aa799931b", size = 11697941 },
|
2396
|
+
{ url = "https://files.pythonhosted.org/packages/00/39/4f83e517ec173e16a47c6d102cd22a1aaebe80e1208a1f2e83ab9a0e4134/ruff-0.8.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:622b82bf3429ff0e346835ec213aec0a04d9730480cbffbb6ad9372014e31bbd", size = 12967686 },
|
2397
|
+
{ url = "https://files.pythonhosted.org/packages/1a/f6/52a2973ff108d74b5da706a573379eea160bece098f7cfa3f35dc4622710/ruff-0.8.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f99be814d77a5dac8a8957104bdd8c359e85c86b0ee0e38dca447cb1095f70fb", size = 11253788 },
|
2398
|
+
{ url = "https://files.pythonhosted.org/packages/ce/1f/3b30f3c65b1303cb8e268ec3b046b77ab21ed8e26921cfc7e8232aa57f2c/ruff-0.8.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c01c048f9c3385e0fd7822ad0fd519afb282af9cf1778f3580e540629df89725", size = 10860360 },
|
2399
|
+
{ url = "https://files.pythonhosted.org/packages/a5/a8/2a3ea6bacead963f7aeeba0c61815d9b27b0d638e6a74984aa5cc5d27733/ruff-0.8.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7512e8cb038db7f5db6aae0e24735ff9ea03bb0ed6ae2ce534e9baa23c1dc9ea", size = 10457922 },
|
2400
|
+
{ url = "https://files.pythonhosted.org/packages/17/47/8f9514b670969aab57c5fc826fb500a16aee8feac1bcf8a91358f153a5ba/ruff-0.8.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:762f113232acd5b768d6b875d16aad6b00082add40ec91c927f0673a8ec4ede8", size = 10958347 },
|
2401
|
+
{ url = "https://files.pythonhosted.org/packages/0d/d6/78a9af8209ad99541816d74f01ce678fc01ebb3f37dd7ab8966646dcd92b/ruff-0.8.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:03a90200c5dfff49e4c967b405f27fdfa81594cbb7c5ff5609e42d7fe9680da5", size = 11328882 },
|
2402
|
+
{ url = "https://files.pythonhosted.org/packages/54/77/5c8072ec7afdfdf42c7a4019044486a2b6c85ee73617f8875ec94b977fed/ruff-0.8.5-py3-none-win32.whl", hash = "sha256:8710ffd57bdaa6690cbf6ecff19884b8629ec2a2a2a2f783aa94b1cc795139ed", size = 8802515 },
|
2403
|
+
{ url = "https://files.pythonhosted.org/packages/bc/b6/47d2b06784de8ae992c45cceb2a30f3f205b3236a629d7ca4c0c134839a2/ruff-0.8.5-py3-none-win_amd64.whl", hash = "sha256:4020d8bf8d3a32325c77af452a9976a9ad6455773bcb94991cf15bd66b347e47", size = 9684231 },
|
2404
|
+
{ url = "https://files.pythonhosted.org/packages/bf/5e/ffee22bf9f9e4b2669d1f0179ae8804584939fb6502b51f2401e26b1e028/ruff-0.8.5-py3-none-win_arm64.whl", hash = "sha256:134ae019ef13e1b060ab7136e7828a6d83ea727ba123381307eb37c6bd5e01cb", size = 9124741 },
|
2399
2405
|
]
|
2400
2406
|
|
2401
2407
|
[[package]]
|
@@ -2575,11 +2581,11 @@ wheels = [
|
|
2575
2581
|
|
2576
2582
|
[[package]]
|
2577
2583
|
name = "types-pyyaml"
|
2578
|
-
version = "6.0.12.
|
2584
|
+
version = "6.0.12.20241230"
|
2579
2585
|
source = { registry = "https://pypi.org/simple" }
|
2580
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
2586
|
+
sdist = { url = "https://files.pythonhosted.org/packages/9a/f9/4d566925bcf9396136c0a2e5dc7e230ff08d86fa011a69888dd184469d80/types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c", size = 17078 }
|
2581
2587
|
wheels = [
|
2582
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2588
|
+
{ url = "https://files.pythonhosted.org/packages/e8/c1/48474fbead512b70ccdb4f81ba5eb4a58f69d100ba19f17c92c0c4f50ae6/types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6", size = 20029 },
|
2583
2589
|
]
|
2584
2590
|
|
2585
2591
|
[[package]]
|
@@ -2676,16 +2682,16 @@ wheels = [
|
|
2676
2682
|
|
2677
2683
|
[[package]]
|
2678
2684
|
name = "virtualenv"
|
2679
|
-
version = "20.28.
|
2685
|
+
version = "20.28.1"
|
2680
2686
|
source = { registry = "https://pypi.org/simple" }
|
2681
2687
|
dependencies = [
|
2682
2688
|
{ name = "distlib" },
|
2683
2689
|
{ name = "filelock" },
|
2684
2690
|
{ name = "platformdirs" },
|
2685
2691
|
]
|
2686
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
2692
|
+
sdist = { url = "https://files.pythonhosted.org/packages/50/39/689abee4adc85aad2af8174bb195a819d0be064bf55fcc73b49d2b28ae77/virtualenv-20.28.1.tar.gz", hash = "sha256:5d34ab240fdb5d21549b76f9e8ff3af28252f5499fb6d6f031adac4e5a8c5329", size = 7650532 }
|
2687
2693
|
wheels = [
|
2688
|
-
{ url = "https://files.pythonhosted.org/packages/
|
2694
|
+
{ url = "https://files.pythonhosted.org/packages/51/8f/dfb257ca6b4e27cb990f1631142361e4712badab8e3ca8dc134d96111515/virtualenv-20.28.1-py3-none-any.whl", hash = "sha256:412773c85d4dab0409b83ec36f7a6499e72eaf08c80e81e9576bca61831c71cb", size = 4276719 },
|
2689
2695
|
]
|
2690
2696
|
|
2691
2697
|
[[package]]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|