python-daynest 0.1.9__tar.gz → 0.1.10__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.
- {python_daynest-0.1.9 → python_daynest-0.1.10}/PKG-INFO +1 -1
- {python_daynest-0.1.9 → python_daynest-0.1.10}/pyproject.toml +4 -4
- {python_daynest-0.1.9 → python_daynest-0.1.10}/src/daynest/__init__.py +4 -0
- {python_daynest-0.1.9 → python_daynest-0.1.10}/src/daynest/client.py +114 -0
- {python_daynest-0.1.9 → python_daynest-0.1.10}/src/daynest/models.py +67 -0
- {python_daynest-0.1.9 → python_daynest-0.1.10}/tests/test_client.py +185 -1
- {python_daynest-0.1.9 → python_daynest-0.1.10}/uv.lock +114 -99
- {python_daynest-0.1.9 → python_daynest-0.1.10}/.gitignore +0 -0
- {python_daynest-0.1.9 → python_daynest-0.1.10}/src/daynest/exceptions.py +0 -0
- {python_daynest-0.1.9 → python_daynest-0.1.10}/tests/__init__.py +0 -0
- {python_daynest-0.1.9 → python_daynest-0.1.10}/tests/test_package.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "python-daynest"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.10"
|
|
4
4
|
description = "Python client library for the Daynest API"
|
|
5
5
|
requires-python = ">=3.12"
|
|
6
6
|
license = { text = "MIT" }
|
|
@@ -10,10 +10,10 @@ dependencies = [
|
|
|
10
10
|
|
|
11
11
|
[dependency-groups]
|
|
12
12
|
dev = [
|
|
13
|
-
"pytest==9.
|
|
13
|
+
"pytest==9.1.1",
|
|
14
14
|
"pytest-asyncio==1.4.0",
|
|
15
|
-
"ruff==0.15.
|
|
16
|
-
"pyright==1.1.
|
|
15
|
+
"ruff==0.15.22",
|
|
16
|
+
"pyright==1.1.411",
|
|
17
17
|
]
|
|
18
18
|
|
|
19
19
|
[build-system]
|
|
@@ -17,6 +17,8 @@ from daynest.models import (
|
|
|
17
17
|
DaynestApiResponse,
|
|
18
18
|
DaynestDashboard,
|
|
19
19
|
DaynestSummary,
|
|
20
|
+
MealPlan,
|
|
21
|
+
MealSlot,
|
|
20
22
|
PlannedItem,
|
|
21
23
|
RoutineTemplate,
|
|
22
24
|
)
|
|
@@ -33,6 +35,8 @@ __all__ = [
|
|
|
33
35
|
"DaynestApiResponse",
|
|
34
36
|
"DaynestSummary",
|
|
35
37
|
"DaynestDashboard",
|
|
38
|
+
"MealPlan",
|
|
39
|
+
"MealSlot",
|
|
36
40
|
"PlannedItem",
|
|
37
41
|
"RoutineTemplate",
|
|
38
42
|
"ChoreTemplate",
|
|
@@ -31,6 +31,8 @@ from daynest.models import (
|
|
|
31
31
|
DaynestApiResponse,
|
|
32
32
|
DaynestDashboard,
|
|
33
33
|
DaynestSummary,
|
|
34
|
+
MealPlan,
|
|
35
|
+
MealSlot,
|
|
34
36
|
PlannedItem,
|
|
35
37
|
RoutineTemplate,
|
|
36
38
|
)
|
|
@@ -385,6 +387,118 @@ class DaynestClient:
|
|
|
385
387
|
path += f"?scope={scope}"
|
|
386
388
|
await self._send_no_content_action("delete", path=path)
|
|
387
389
|
|
|
390
|
+
async def async_list_meal_plans(
|
|
391
|
+
self,
|
|
392
|
+
*,
|
|
393
|
+
week_start_from: date | None = None,
|
|
394
|
+
week_start_to: date | None = None,
|
|
395
|
+
) -> list[MealPlan]:
|
|
396
|
+
"""List meal plans, optionally filtered by week_start client-side."""
|
|
397
|
+
payload = await self._cached_call("async_list_meal_plans", lambda: self._request_list("/api/meal-plans"))
|
|
398
|
+
plans = [MealPlan.from_dict(item) for item in payload]
|
|
399
|
+
if week_start_from is not None:
|
|
400
|
+
plans = [plan for plan in plans if plan.week_start >= week_start_from]
|
|
401
|
+
if week_start_to is not None:
|
|
402
|
+
plans = [plan for plan in plans if plan.week_start <= week_start_to]
|
|
403
|
+
return plans
|
|
404
|
+
|
|
405
|
+
async def async_get_meal_plan_slots(self, meal_plan_id: int) -> list[MealSlot]:
|
|
406
|
+
"""Fetch and flatten slots for a meal plan week grid."""
|
|
407
|
+
payload = await self._cached_call(
|
|
408
|
+
"async_get_meal_plan_slots",
|
|
409
|
+
lambda: self._request_dict(f"/api/meal-plans/{meal_plan_id}/slots"),
|
|
410
|
+
meal_plan_id,
|
|
411
|
+
)
|
|
412
|
+
days = payload.get("days")
|
|
413
|
+
if not isinstance(days, list):
|
|
414
|
+
msg = "Malformed meal plan slots payload: expected days array"
|
|
415
|
+
raise DaynestMalformedResponseError(msg)
|
|
416
|
+
slots: list[MealSlot] = []
|
|
417
|
+
for day in days:
|
|
418
|
+
if not isinstance(day, dict):
|
|
419
|
+
continue
|
|
420
|
+
raw_slots = day.get("slots")
|
|
421
|
+
if not isinstance(raw_slots, dict):
|
|
422
|
+
continue
|
|
423
|
+
for raw_slot in raw_slots.values():
|
|
424
|
+
if isinstance(raw_slot, dict):
|
|
425
|
+
slots.append(MealSlot.from_dict(raw_slot))
|
|
426
|
+
return slots
|
|
427
|
+
|
|
428
|
+
async def async_list_shopping_lists(self, status: str = "active") -> list[dict[str, Any]]:
|
|
429
|
+
"""List shopping lists for the authenticated user."""
|
|
430
|
+
query = urlencode({"status": status})
|
|
431
|
+
return await self._cached_call(
|
|
432
|
+
"async_list_shopping_lists",
|
|
433
|
+
lambda: self._request_list(f"/api/shopping-lists?{query}"),
|
|
434
|
+
status,
|
|
435
|
+
)
|
|
436
|
+
|
|
437
|
+
async def async_list_shopping_items(self, shopping_list_id: int) -> list[dict[str, Any]]:
|
|
438
|
+
"""List planned items linked to a shopping list."""
|
|
439
|
+
payload = await self._cached_call(
|
|
440
|
+
"async_list_shopping_items",
|
|
441
|
+
lambda: self._request_list("/api/planned-items"),
|
|
442
|
+
)
|
|
443
|
+
return [
|
|
444
|
+
item
|
|
445
|
+
for item in payload
|
|
446
|
+
if item.get("module_key") == "shopping_list"
|
|
447
|
+
and str(item.get("linked_ref", "")) == str(shopping_list_id)
|
|
448
|
+
]
|
|
449
|
+
|
|
450
|
+
async def async_create_shopping_item(
|
|
451
|
+
self,
|
|
452
|
+
shopping_list_id: int,
|
|
453
|
+
*,
|
|
454
|
+
title: str,
|
|
455
|
+
planned_for: date | str,
|
|
456
|
+
notes: str | None = None,
|
|
457
|
+
tags: list[str] | None = None,
|
|
458
|
+
) -> dict[str, Any]:
|
|
459
|
+
"""Create an item linked to a shopping list."""
|
|
460
|
+
payload = {
|
|
461
|
+
"title": title,
|
|
462
|
+
"planned_for": planned_for.isoformat() if isinstance(planned_for, date) else planned_for,
|
|
463
|
+
"notes": notes,
|
|
464
|
+
"module_key": "shopping_list",
|
|
465
|
+
"linked_source": "shopping_list",
|
|
466
|
+
"linked_ref": str(shopping_list_id),
|
|
467
|
+
"priority": "normal",
|
|
468
|
+
"tags": tags or [],
|
|
469
|
+
}
|
|
470
|
+
return await self._send_action("post", path="/api/planned-items", payload=payload)
|
|
471
|
+
|
|
472
|
+
async def async_update_shopping_item(
|
|
473
|
+
self,
|
|
474
|
+
shopping_list_id: int,
|
|
475
|
+
item_id: int,
|
|
476
|
+
*,
|
|
477
|
+
title: str,
|
|
478
|
+
planned_for: date | str,
|
|
479
|
+
is_done: bool,
|
|
480
|
+
notes: str | None = None,
|
|
481
|
+
tags: list[str] | None = None,
|
|
482
|
+
priority: str = "normal",
|
|
483
|
+
) -> dict[str, Any]:
|
|
484
|
+
"""Update an item linked to a shopping list."""
|
|
485
|
+
payload = {
|
|
486
|
+
"title": title,
|
|
487
|
+
"planned_for": planned_for.isoformat() if isinstance(planned_for, date) else planned_for,
|
|
488
|
+
"notes": notes,
|
|
489
|
+
"module_key": "shopping_list",
|
|
490
|
+
"linked_source": "shopping_list",
|
|
491
|
+
"linked_ref": str(shopping_list_id),
|
|
492
|
+
"priority": priority,
|
|
493
|
+
"tags": tags or [],
|
|
494
|
+
"is_done": is_done,
|
|
495
|
+
}
|
|
496
|
+
return await self._send_action("put", path=f"/api/planned-items/{item_id}", payload=payload)
|
|
497
|
+
|
|
498
|
+
async def async_delete_shopping_item(self, item_id: int) -> None:
|
|
499
|
+
"""Delete an item linked to a shopping list."""
|
|
500
|
+
await self._send_no_content_action("delete", path=f"/api/planned-items/{item_id}")
|
|
501
|
+
|
|
388
502
|
async def async_get_calendar(
|
|
389
503
|
self,
|
|
390
504
|
start: date,
|
|
@@ -178,6 +178,73 @@ class PlannedItem:
|
|
|
178
178
|
)
|
|
179
179
|
|
|
180
180
|
|
|
181
|
+
@dataclass(slots=True, frozen=True)
|
|
182
|
+
class MealPlan:
|
|
183
|
+
"""Typed model for a meal plan."""
|
|
184
|
+
|
|
185
|
+
id: int
|
|
186
|
+
user_id: int
|
|
187
|
+
name: str
|
|
188
|
+
week_start: date
|
|
189
|
+
notes: str | None
|
|
190
|
+
created_at: datetime
|
|
191
|
+
|
|
192
|
+
@classmethod
|
|
193
|
+
def from_dict(cls, payload: dict[str, Any]) -> MealPlan:
|
|
194
|
+
if not isinstance(payload, dict):
|
|
195
|
+
msg = "Malformed meal plan payload: expected JSON object"
|
|
196
|
+
raise DaynestMalformedResponseError(msg)
|
|
197
|
+
return cls(
|
|
198
|
+
id=int(_require(payload, "id", context="meal plan")),
|
|
199
|
+
user_id=int(_require(payload, "user_id", context="meal plan")),
|
|
200
|
+
name=str(_require(payload, "name", context="meal plan")),
|
|
201
|
+
week_start=_parse_date(_require(payload, "week_start", context="meal plan"), field="week_start"),
|
|
202
|
+
notes=payload.get("notes") if isinstance(payload.get("notes"), str) else None,
|
|
203
|
+
created_at=_parse_datetime(_require(payload, "created_at", context="meal plan"), field="created_at"),
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
@dataclass(slots=True, frozen=True)
|
|
208
|
+
class MealSlot:
|
|
209
|
+
"""Typed model for a meal plan slot."""
|
|
210
|
+
|
|
211
|
+
id: int
|
|
212
|
+
meal_plan_id: int
|
|
213
|
+
slot_date: date
|
|
214
|
+
slot_type: str
|
|
215
|
+
title: str
|
|
216
|
+
recipe_url: str | None
|
|
217
|
+
ingredients_json: tuple[str, ...]
|
|
218
|
+
planned_item_id: int | None
|
|
219
|
+
|
|
220
|
+
@classmethod
|
|
221
|
+
def from_dict(cls, payload: dict[str, Any]) -> MealSlot:
|
|
222
|
+
if not isinstance(payload, dict):
|
|
223
|
+
msg = "Malformed meal slot payload: expected JSON object"
|
|
224
|
+
raise DaynestMalformedResponseError(msg)
|
|
225
|
+
ingredients = payload.get("ingredients_json")
|
|
226
|
+
ingredient_values = tuple(str(item) for item in ingredients) if isinstance(ingredients, list) else ()
|
|
227
|
+
planned_item_id_raw = payload.get("planned_item_id")
|
|
228
|
+
if planned_item_id_raw is not None:
|
|
229
|
+
try:
|
|
230
|
+
planned_item_id: int | None = int(planned_item_id_raw)
|
|
231
|
+
except (ValueError, TypeError) as err:
|
|
232
|
+
msg = "Malformed meal slot: planned_item_id is not a valid integer"
|
|
233
|
+
raise DaynestMalformedResponseError(msg) from err
|
|
234
|
+
else:
|
|
235
|
+
planned_item_id = None
|
|
236
|
+
return cls(
|
|
237
|
+
id=int(_require(payload, "id", context="meal slot")),
|
|
238
|
+
meal_plan_id=int(_require(payload, "meal_plan_id", context="meal slot")),
|
|
239
|
+
slot_date=_parse_date(_require(payload, "slot_date", context="meal slot"), field="slot_date"),
|
|
240
|
+
slot_type=str(_require(payload, "slot_type", context="meal slot")),
|
|
241
|
+
title=str(payload.get("title", "")),
|
|
242
|
+
recipe_url=payload.get("recipe_url") if isinstance(payload.get("recipe_url"), str) else None,
|
|
243
|
+
ingredients_json=ingredient_values,
|
|
244
|
+
planned_item_id=planned_item_id,
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
|
|
181
248
|
@dataclass(slots=True, frozen=True)
|
|
182
249
|
class RoutineTemplate:
|
|
183
250
|
"""Typed model for a routine template."""
|
|
@@ -16,7 +16,7 @@ from daynest.exceptions import (
|
|
|
16
16
|
DaynestServerUnavailableError,
|
|
17
17
|
DaynestTimeoutError,
|
|
18
18
|
)
|
|
19
|
-
from daynest.models import CalendarDay, CalendarEvent, ChoreTemplate, DaynestDashboard, DaynestSummary, PlannedItem, RoutineTemplate
|
|
19
|
+
from daynest.models import CalendarDay, CalendarEvent, ChoreTemplate, DaynestDashboard, DaynestSummary, MealPlan, MealSlot, PlannedItem, RoutineTemplate
|
|
20
20
|
|
|
21
21
|
VALID_SUMMARY_PAYLOAD = {
|
|
22
22
|
"sensor_daynest_chores_due": 2,
|
|
@@ -918,3 +918,187 @@ class TestDaynestClientCacheAndSSE:
|
|
|
918
918
|
|
|
919
919
|
session.get.assert_not_called()
|
|
920
920
|
callback.assert_not_awaited()
|
|
921
|
+
|
|
922
|
+
|
|
923
|
+
@pytest.mark.unit
|
|
924
|
+
class TestDaynestClientMealPlanMethods:
|
|
925
|
+
"""Tests for meal plan client helpers."""
|
|
926
|
+
|
|
927
|
+
async def test_list_meal_plans_filters_by_week_start(self) -> None:
|
|
928
|
+
response = _make_mock_response(
|
|
929
|
+
200,
|
|
930
|
+
[
|
|
931
|
+
{
|
|
932
|
+
"id": 1,
|
|
933
|
+
"user_id": 2,
|
|
934
|
+
"name": "Past",
|
|
935
|
+
"week_start": "2026-05-25",
|
|
936
|
+
"notes": None,
|
|
937
|
+
"created_at": "2026-05-01T00:00:00",
|
|
938
|
+
},
|
|
939
|
+
{
|
|
940
|
+
"id": 2,
|
|
941
|
+
"user_id": 2,
|
|
942
|
+
"name": "Current",
|
|
943
|
+
"week_start": "2026-06-01",
|
|
944
|
+
"notes": "Notes",
|
|
945
|
+
"created_at": "2026-05-01T00:00:00",
|
|
946
|
+
},
|
|
947
|
+
{
|
|
948
|
+
"id": 3,
|
|
949
|
+
"user_id": 2,
|
|
950
|
+
"name": "Next",
|
|
951
|
+
"week_start": "2026-06-08",
|
|
952
|
+
"notes": None,
|
|
953
|
+
"created_at": "2026-05-01T00:00:00",
|
|
954
|
+
},
|
|
955
|
+
],
|
|
956
|
+
)
|
|
957
|
+
client = _make_list_client(response)
|
|
958
|
+
|
|
959
|
+
plans = await client.async_list_meal_plans(
|
|
960
|
+
week_start_from=date(2026, 6, 1),
|
|
961
|
+
week_start_to=date(2026, 6, 8),
|
|
962
|
+
)
|
|
963
|
+
|
|
964
|
+
assert [plan.id for plan in plans] == [2, 3]
|
|
965
|
+
assert all(isinstance(plan, MealPlan) for plan in plans)
|
|
966
|
+
client._session.get.assert_called_once()
|
|
967
|
+
assert client._session.get.call_args.args[0] == "https://api.daynest.example/api/meal-plans"
|
|
968
|
+
|
|
969
|
+
async def test_get_meal_plan_slots_flattens_week_grid(self) -> None:
|
|
970
|
+
response = _make_mock_response(
|
|
971
|
+
200,
|
|
972
|
+
{
|
|
973
|
+
"meal_plan": {
|
|
974
|
+
"id": 2,
|
|
975
|
+
"user_id": 2,
|
|
976
|
+
"name": "Current",
|
|
977
|
+
"week_start": "2026-06-01",
|
|
978
|
+
"notes": None,
|
|
979
|
+
"created_at": "2026-05-01T00:00:00",
|
|
980
|
+
},
|
|
981
|
+
"days": [
|
|
982
|
+
{
|
|
983
|
+
"date": "2026-06-01",
|
|
984
|
+
"slots": {
|
|
985
|
+
"breakfast": {
|
|
986
|
+
"id": 10,
|
|
987
|
+
"meal_plan_id": 2,
|
|
988
|
+
"slot_date": "2026-06-01",
|
|
989
|
+
"slot_type": "breakfast",
|
|
990
|
+
"title": "Oats",
|
|
991
|
+
"recipe_url": "https://recipes.example/oats",
|
|
992
|
+
"ingredients_json": ["oats"],
|
|
993
|
+
"planned_item_id": None,
|
|
994
|
+
},
|
|
995
|
+
"dinner": {
|
|
996
|
+
"id": 11,
|
|
997
|
+
"meal_plan_id": 2,
|
|
998
|
+
"slot_date": "2026-06-01",
|
|
999
|
+
"slot_type": "dinner",
|
|
1000
|
+
"title": "Pasta",
|
|
1001
|
+
"recipe_url": None,
|
|
1002
|
+
"ingredients_json": [],
|
|
1003
|
+
"planned_item_id": 50,
|
|
1004
|
+
},
|
|
1005
|
+
},
|
|
1006
|
+
},
|
|
1007
|
+
],
|
|
1008
|
+
},
|
|
1009
|
+
)
|
|
1010
|
+
client = _make_list_client(response)
|
|
1011
|
+
|
|
1012
|
+
slots = await client.async_get_meal_plan_slots(2)
|
|
1013
|
+
|
|
1014
|
+
assert [slot.title for slot in slots] == ["Oats", "Pasta"]
|
|
1015
|
+
assert all(isinstance(slot, MealSlot) for slot in slots)
|
|
1016
|
+
assert slots[0].ingredients_json == ("oats",)
|
|
1017
|
+
assert slots[1].planned_item_id == 50
|
|
1018
|
+
assert client._session.get.call_args.args[0] == "https://api.daynest.example/api/meal-plans/2/slots"
|
|
1019
|
+
|
|
1020
|
+
async def test_get_meal_plan_slots_rejects_missing_days_array(self) -> None:
|
|
1021
|
+
response = _make_mock_response(200, {"meal_plan": {}, "days": "bad"})
|
|
1022
|
+
client = _make_list_client(response)
|
|
1023
|
+
|
|
1024
|
+
with pytest.raises(DaynestMalformedResponseError, match="expected days array"):
|
|
1025
|
+
await client.async_get_meal_plan_slots(2)
|
|
1026
|
+
|
|
1027
|
+
|
|
1028
|
+
@pytest.mark.unit
|
|
1029
|
+
class TestDaynestClientShoppingLists:
|
|
1030
|
+
"""Tests for shopping-list helpers."""
|
|
1031
|
+
|
|
1032
|
+
async def test_list_shopping_lists_requests_active_lists(self) -> None:
|
|
1033
|
+
response = _make_mock_response(200, [{"id": 1, "name": "Groceries", "status": "active"}])
|
|
1034
|
+
client = _make_client(response)
|
|
1035
|
+
|
|
1036
|
+
result = await client.async_list_shopping_lists(status="active")
|
|
1037
|
+
|
|
1038
|
+
assert result == [{"id": 1, "name": "Groceries", "status": "active"}]
|
|
1039
|
+
client._session.get.assert_called_once()
|
|
1040
|
+
url = client._session.get.call_args.args[0]
|
|
1041
|
+
assert url == "https://api.daynest.example/api/shopping-lists?status=active"
|
|
1042
|
+
|
|
1043
|
+
async def test_list_shopping_items_filters_linked_planned_items(self) -> None:
|
|
1044
|
+
response = _make_mock_response(
|
|
1045
|
+
200,
|
|
1046
|
+
[
|
|
1047
|
+
{"id": 1, "title": "Milk", "module_key": "shopping_list", "linked_ref": "7"},
|
|
1048
|
+
{"id": 2, "title": "Other", "module_key": "shopping_list", "linked_ref": "8"},
|
|
1049
|
+
{"id": 3, "title": "Task", "module_key": None, "linked_ref": None},
|
|
1050
|
+
{"id": 4, "title": "Eggs", "module_key": "shopping_list", "linked_ref": 7},
|
|
1051
|
+
],
|
|
1052
|
+
)
|
|
1053
|
+
client = _make_client(response)
|
|
1054
|
+
|
|
1055
|
+
result = await client.async_list_shopping_items(7)
|
|
1056
|
+
|
|
1057
|
+
assert result == [
|
|
1058
|
+
{"id": 1, "title": "Milk", "module_key": "shopping_list", "linked_ref": "7"},
|
|
1059
|
+
{"id": 4, "title": "Eggs", "module_key": "shopping_list", "linked_ref": 7},
|
|
1060
|
+
]
|
|
1061
|
+
|
|
1062
|
+
async def test_create_shopping_item_posts_linked_planned_item(self) -> None:
|
|
1063
|
+
response = _make_mock_response(200, {"id": 1, "title": "Milk"})
|
|
1064
|
+
session = MagicMock(spec=aiohttp.ClientSession)
|
|
1065
|
+
session.post = MagicMock(return_value=response)
|
|
1066
|
+
client = DaynestClient(base_url="https://api.daynest.example", integration_key="key", session=session)
|
|
1067
|
+
|
|
1068
|
+
result = await client.async_create_shopping_item(7, title="Milk", planned_for="2026-01-15", notes="2L")
|
|
1069
|
+
|
|
1070
|
+
assert result == {"id": 1, "title": "Milk"}
|
|
1071
|
+
payload = session.post.call_args.kwargs["json"]
|
|
1072
|
+
assert payload["module_key"] == "shopping_list"
|
|
1073
|
+
assert payload["linked_ref"] == "7"
|
|
1074
|
+
assert payload["title"] == "Milk"
|
|
1075
|
+
|
|
1076
|
+
async def test_update_shopping_item_puts_linked_planned_item(self) -> None:
|
|
1077
|
+
response = _make_mock_response(200, {"id": 1, "title": "Milk"})
|
|
1078
|
+
session = MagicMock(spec=aiohttp.ClientSession)
|
|
1079
|
+
session.put = MagicMock(return_value=response)
|
|
1080
|
+
client = DaynestClient(base_url="https://api.daynest.example", integration_key="key", session=session)
|
|
1081
|
+
|
|
1082
|
+
result = await client.async_update_shopping_item(
|
|
1083
|
+
7,
|
|
1084
|
+
1,
|
|
1085
|
+
title="Milk",
|
|
1086
|
+
planned_for="2026-01-15",
|
|
1087
|
+
is_done=True,
|
|
1088
|
+
)
|
|
1089
|
+
|
|
1090
|
+
assert result == {"id": 1, "title": "Milk"}
|
|
1091
|
+
assert session.put.call_args.args[0] == "https://api.daynest.example/api/planned-items/1"
|
|
1092
|
+
payload = session.put.call_args.kwargs["json"]
|
|
1093
|
+
assert payload["linked_ref"] == "7"
|
|
1094
|
+
assert payload["is_done"] is True
|
|
1095
|
+
|
|
1096
|
+
async def test_delete_shopping_item_deletes_planned_item(self) -> None:
|
|
1097
|
+
response = _make_mock_response(204, None)
|
|
1098
|
+
session = MagicMock(spec=aiohttp.ClientSession)
|
|
1099
|
+
session.delete = MagicMock(return_value=response)
|
|
1100
|
+
client = DaynestClient(base_url="https://api.daynest.example", integration_key="key", session=session)
|
|
1101
|
+
|
|
1102
|
+
await client.async_delete_shopping_item(1)
|
|
1103
|
+
|
|
1104
|
+
assert session.delete.call_args.args[0] == "https://api.daynest.example/api/planned-items/1"
|
|
@@ -13,7 +13,7 @@ wheels = [
|
|
|
13
13
|
|
|
14
14
|
[[package]]
|
|
15
15
|
name = "aiohttp"
|
|
16
|
-
version = "3.
|
|
16
|
+
version = "3.14.1"
|
|
17
17
|
source = { registry = "https://pypi.org/simple" }
|
|
18
18
|
dependencies = [
|
|
19
19
|
{ name = "aiohappyeyeballs" },
|
|
@@ -22,78 +22,93 @@ dependencies = [
|
|
|
22
22
|
{ name = "frozenlist" },
|
|
23
23
|
{ name = "multidict" },
|
|
24
24
|
{ name = "propcache" },
|
|
25
|
+
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
|
25
26
|
{ name = "yarl" },
|
|
26
27
|
]
|
|
27
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
28
|
+
sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794, upload-time = "2026-06-07T21:09:35.529Z" }
|
|
28
29
|
wheels = [
|
|
29
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
30
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
31
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
32
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
33
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
34
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
35
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
36
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
37
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
38
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
39
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
40
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
41
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
42
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
43
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
44
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
45
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
46
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
47
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
48
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
49
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
50
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
51
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
52
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
53
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
54
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
55
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
56
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
57
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
58
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
59
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
60
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
61
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
62
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
63
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
64
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
65
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
66
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
67
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
68
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
69
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
70
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
71
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
72
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
73
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
74
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
75
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
76
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
77
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
78
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
79
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
80
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
81
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
82
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
83
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
84
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
85
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
86
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
87
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
88
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
89
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
90
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
91
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
92
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
93
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
94
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
95
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
96
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
30
|
+
{ url = "https://files.pythonhosted.org/packages/1d/21/151624b51cd92553d95424daf4bf19f19ce9be9002d19253e7e7ce67197b/aiohttp-3.14.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d35143e27778b4bb0fb189562d7f275bff79c62ab8e98459717c0ea617ff2480", size = 757402, upload-time = "2026-06-07T21:06:40.311Z" },
|
|
31
|
+
{ url = "https://files.pythonhosted.org/packages/c2/82/280619e0bd7bf2454987e19282616e84762255dd9c8468f62382e8c191f1/aiohttp-3.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bcfb80a2cc36fba2534e5e5b5264dc7ae6fcd9bf15256da3e53d2f499e6fa29d", size = 512310, upload-time = "2026-06-07T21:06:42.207Z" },
|
|
32
|
+
{ url = "https://files.pythonhosted.org/packages/55/b2/2aac325583aaa1353045f96dffa586d8a34e8322e14a7ba49cffeb103ab4/aiohttp-3.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:27fd7c91e51729b4f7e1577865fa6d34c9adccbc39aabe9000285b48af9f0ec2", size = 512448, upload-time = "2026-06-07T21:06:43.813Z" },
|
|
33
|
+
{ url = "https://files.pythonhosted.org/packages/8a/72/a60607cb849faa8af8a356c9329ea2eb6f395d49e82cc82ccba1fd8deb8f/aiohttp-3.14.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:64c567bf9eaf664280116a8688f63016e6b32db2505908e2bdaca1b6438142f2", size = 1766854, upload-time = "2026-06-07T21:06:45.391Z" },
|
|
34
|
+
{ url = "https://files.pythonhosted.org/packages/b5/d3/d9fe1c9ec7557ab4d0d82bebaa728c6418f0b93295ec2f4ab015f7710cc7/aiohttp-3.14.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f5e6ff2bdbb8f4cd3fbe41f99e25bbcd58e3bf9f13d3dd31a11e7917251cc77a", size = 1740884, upload-time = "2026-06-07T21:06:47.413Z" },
|
|
35
|
+
{ url = "https://files.pythonhosted.org/packages/c1/dc/f2cecfaf9337ba3e63f181500814ff502aa3d00d9c7ec93a9d23d10a27b2/aiohttp-3.14.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2f73e01dc37122325caf079982621262f96d74823c179038a82fddfc50359264", size = 1810034, upload-time = "2026-06-07T21:06:50.165Z" },
|
|
36
|
+
{ url = "https://files.pythonhosted.org/packages/66/d7/2ff65c5e65c0d7476daf7e15c032e0805e36811185b9623e3238ad6c763e/aiohttp-3.14.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bb2c0c80d431c0d03f2c7dbf125150fedd4f0de17366a7ca33f7ccb822391842", size = 1904054, upload-time = "2026-06-07T21:06:52.035Z" },
|
|
37
|
+
{ url = "https://files.pythonhosted.org/packages/20/9c/d445818389df371f56d141d881153ba23183c4735a03f7356ffb43f7757d/aiohttp-3.14.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3e6fc1a85fa7194a1a7d19f44e8609180f4a8eb5fa4c7ed8b4355f080fad235c", size = 1790278, upload-time = "2026-06-07T21:06:54.049Z" },
|
|
38
|
+
{ url = "https://files.pythonhosted.org/packages/4d/aa/bf04cb4d865fc6101c2229a294ad744973b72e513fdc5a6b791e6983d72a/aiohttp-3.14.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:686b6c0d3911ec387b444ddf5dc62fb7f7c0a7d5186a7861626496a5ab4aff95", size = 1591795, upload-time = "2026-06-07T21:06:55.911Z" },
|
|
39
|
+
{ url = "https://files.pythonhosted.org/packages/dc/b4/4dac0038960427ba832f6609dfb4ea5437d7fd80c72001b9e48f834f428b/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c6fa4dc7ad6f8109c70bb1499e589f76b0b792baf39f9b017eb92c8a81d0a199", size = 1728397, upload-time = "2026-06-07T21:06:57.777Z" },
|
|
40
|
+
{ url = "https://files.pythonhosted.org/packages/2b/f9/7cd4e8ad7aa3b75f17d56bb5498dd604a93d4e6eece822ba0568c413fff0/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:87a5eea1b2a5e21e1ebdbb33ad4165359189327e63fc4e4894693e7f821ac817", size = 1766504, upload-time = "2026-06-07T21:07:00.009Z" },
|
|
41
|
+
{ url = "https://files.pythonhosted.org/packages/f9/df/fc01d9fcad0f73fed3f3d361f1f94f975947b50dff82919f6dc2bf4316cc/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c1421eb01d4fd608d88cc8290211d177a58532b55ad94076fb349c5bf467f0a", size = 1777806, upload-time = "2026-06-07T21:07:02.064Z" },
|
|
42
|
+
{ url = "https://files.pythonhosted.org/packages/41/09/47e2d090bddcc8fb4ccb4c314aadc32d7c5d9bb55f50f6ad1c92fc15d501/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:34b257ec41345c1e8f2df68fa908a7952f5de932723871eb633ecbbff396c9a4", size = 1580707, upload-time = "2026-06-07T21:07:03.942Z" },
|
|
43
|
+
{ url = "https://files.pythonhosted.org/packages/3d/36/f1a4ce904ae0b6930cfe9afc96d0896f7ec1a620c400405d63783bb95a9c/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:de538791a80e5d862addbc183f70f0158ac9b9bb872bb147f1fd2a683691e087", size = 1798121, upload-time = "2026-06-07T21:07:05.987Z" },
|
|
44
|
+
{ url = "https://files.pythonhosted.org/packages/70/0a/e0075ce9ca0279ee1d4f0c0b85f54fea02ebc83c3007651a72bece658fec/aiohttp-3.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f71173be42d3241d428f760122febb748de0623f44308a6f120d0dd9ec572e3", size = 1767580, upload-time = "2026-06-07T21:07:07.873Z" },
|
|
45
|
+
{ url = "https://files.pythonhosted.org/packages/3e/61/a0c0a8f327a9c52095cdd8e312391b00d3ed64ab6c72bb5c33d8ec251cf7/aiohttp-3.14.1-cp312-cp312-win32.whl", hash = "sha256:ec8dc383ee57ea3e883477dcca3f11b65d58199f1080acaf4cd6ad9a99698be4", size = 452771, upload-time = "2026-06-07T21:07:09.669Z" },
|
|
46
|
+
{ url = "https://files.pythonhosted.org/packages/df/d9/ea367c75f16ac9c6cdc8febb25e8318fa21a2b1bc8d6514d4b2d890bface/aiohttp-3.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2aa92c87868cd13674989f9ee83e5f9f7ea4237589b728048e1f0c8f6caa3271", size = 479873, upload-time = "2026-06-07T21:07:11.538Z" },
|
|
47
|
+
{ url = "https://files.pythonhosted.org/packages/03/64/8d96784a7851156db8a4c6c3f6f91042fdf39fb15a4cc38c8b3c14833c45/aiohttp-3.14.1-cp312-cp312-win_arm64.whl", hash = "sha256:2c840c90759922cb5e6dda94596e079a30fb5a5ba548e7e0dc00574703940847", size = 448073, upload-time = "2026-06-07T21:07:13.637Z" },
|
|
48
|
+
{ url = "https://files.pythonhosted.org/packages/bc/97/bd137012dd97e1649162b099135a80e1fd59aaa807b2430fc448d1029aff/aiohttp-3.14.1-cp313-cp313-android_21_arm64_v8a.whl", hash = "sha256:b3a03285a7f9c7b016324574a6d92a1c895da6b978cb8f1deee3ac72bc6da178", size = 506882, upload-time = "2026-06-07T21:07:15.501Z" },
|
|
49
|
+
{ url = "https://files.pythonhosted.org/packages/ef/79/e5cc690e9d922a66887ceeaca53a8ffd5a7b0be3816142b7abc433742d89/aiohttp-3.14.1-cp313-cp313-android_21_x86_64.whl", hash = "sha256:2a73f487ab8ef5abbb24b7aa9b73e98eaba9e9e031804ff2416f02eca315ccaf", size = 515270, upload-time = "2026-06-07T21:07:17.53Z" },
|
|
50
|
+
{ url = "https://files.pythonhosted.org/packages/fe/22/a73ccbf9dbd6e26dda0b24d5fd5db7da92ee3383a79f47677ffb834c5c5b/aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:915fbb7b41b115192259f8c9ae58f3ddc444d2b5579917270211858e606a4afd", size = 485841, upload-time = "2026-06-07T21:07:19.555Z" },
|
|
51
|
+
{ url = "https://files.pythonhosted.org/packages/3b/b9/57ed8eaf596321c2ad747bd480fb1700dbd7177c60dfc9e4c187f629662e/aiohttp-3.14.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:7fb4bdf95b0561a79f259f9d28fbc109728c5ee7f27aff6391f0ca703a329abe", size = 492088, upload-time = "2026-06-07T21:07:21.581Z" },
|
|
52
|
+
{ url = "https://files.pythonhosted.org/packages/78/c0/5ebe5270a7c140d7c6f79dcb018640225f14d406c149e4eec04a7d82fe71/aiohttp-3.14.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:1b9748363260121d2927704f5d4fc498150669ca3ae93625986ee89c8f80dcd4", size = 501564, upload-time = "2026-06-07T21:07:23.388Z" },
|
|
53
|
+
{ url = "https://files.pythonhosted.org/packages/75/7f/8cdaa24fc7983865e0915153b96a9ac5bcdd3548d64c5a27d17cecccad2d/aiohttp-3.14.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:86a6dab78b0e43e2897a3bbe15745aa60dc5423ca437b7b0b164c069bf91b876", size = 751998, upload-time = "2026-06-07T21:07:25.046Z" },
|
|
54
|
+
{ url = "https://files.pythonhosted.org/packages/b2/f4/c4227aacfacc5cb0cc2d119b65301d177912a6842cd64e120c47af76064f/aiohttp-3.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4dfd6e47d3c44c2279907607f73a4240b88c69eb8b90da7e2441a8045dfd21da", size = 510918, upload-time = "2026-06-07T21:07:27.28Z" },
|
|
55
|
+
{ url = "https://files.pythonhosted.org/packages/ab/01/a2d5f96cd4e74424864d30bc0a7e44d0a12dacdcfa91b5b2d1bd3dca6bf3/aiohttp-3.14.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:317acd9f8602858dc7d59679812c376c7f0b97bcbbf16e0d6237f54141d8a8a6", size = 508657, upload-time = "2026-06-07T21:07:29.252Z" },
|
|
56
|
+
{ url = "https://files.pythonhosted.org/packages/e8/ed/3c0fb5c500fdd8e7ebc10d1889c04384fffa1a9163eac1356088ca9da1b1/aiohttp-3.14.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd869c427324e5cb15195793de951295710db28be7d818247f3097b4ab5d4b96", size = 1757907, upload-time = "2026-06-07T21:07:31.03Z" },
|
|
57
|
+
{ url = "https://files.pythonhosted.org/packages/0b/ab/d4c924d9bd5be3050c226612413ce68cb54c70d2c31b661bfc8d9a5b6a70/aiohttp-3.14.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:93b032b5ec3255473c143627d21a69ac74ae12f7f33974cb587c564d11b1066f", size = 1737565, upload-time = "2026-06-07T21:07:33.031Z" },
|
|
58
|
+
{ url = "https://files.pythonhosted.org/packages/19/2a/37326821ff779084020cdc33224d20b19f42f4183a500ff92022a739eda7/aiohttp-3.14.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f234b4deb12f3ad59127e037bc57c40c21e45b45282df7d3a55a0f409f595296", size = 1799018, upload-time = "2026-06-07T21:07:35.003Z" },
|
|
59
|
+
{ url = "https://files.pythonhosted.org/packages/b3/4f/6e947ba73e4ce09070761c05ed3a8ceb7c21f5e46798671d8b2aac0e4626/aiohttp-3.14.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9af6779bfb46abf124068327abcdf9ce95c9ef8287a3e8da76ccf2d0f16c28fa", size = 1894416, upload-time = "2026-06-07T21:07:36.956Z" },
|
|
60
|
+
{ url = "https://files.pythonhosted.org/packages/9d/6e/dbf1d0625dc711fb2851f4f3c3055c39ed58bae92082d8c627dbe6013736/aiohttp-3.14.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:faccab372e66bc76d5731525e7f1143c922271725b9d38c9f97edcc66266b451", size = 1783881, upload-time = "2026-06-07T21:07:39.063Z" },
|
|
61
|
+
{ url = "https://files.pythonhosted.org/packages/44/c2/5e25098a67268ed369483ae7d1a58bd0a13d03aab860d2a0e4a6eb25b046/aiohttp-3.14.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f380468b09d2a81633ee863b0ec5648d364bd17bb8ecfb8c2f387f7ac1faf42c", size = 1587572, upload-time = "2026-06-07T21:07:41.058Z" },
|
|
62
|
+
{ url = "https://files.pythonhosted.org/packages/2a/bd/cf9cee17e140f942a3de73e658a543aa8fbf35a5fc67a9d2538d52d77f0b/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:97e704dcd26271f5bda3fa07c3ce0fb76d6d3f8659f4baa1a24442cc9ba177ca", size = 1722137, upload-time = "2026-06-07T21:07:43.014Z" },
|
|
63
|
+
{ url = "https://files.pythonhosted.org/packages/89/6d/5684f8c59045c96f81a18cefbc1fbbd79d25b88f1c622f2a5c5c08fcb632/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:269b76ac5394092b95bc4a098f4fc6c191c083c3bd12775d1e30e663132f6a09", size = 1755953, upload-time = "2026-06-07T21:07:45.933Z" },
|
|
64
|
+
{ url = "https://files.pythonhosted.org/packages/a8/40/35caf3170f8359760740a7d9aa0fff2e344bef98e1d1186f5a0f6dec17e6/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c0b3e614340c889d575451696374c9d17affd54cd607ca0babed8f8c37b9397", size = 1766479, upload-time = "2026-06-07T21:07:48.047Z" },
|
|
65
|
+
{ url = "https://files.pythonhosted.org/packages/6d/a1/b0c61e7a137f0d81de49a82023a6df73c3c16d6fefb0f8e4a93d21639002/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:5663ee9257cfa1add7253a7da3035a02f31b6600ec48261585e1800a81533080", size = 1580077, upload-time = "2026-06-07T21:07:50.069Z" },
|
|
66
|
+
{ url = "https://files.pythonhosted.org/packages/0b/41/194ea4623693009fcefebef7aef63c141754f153e9cd0d39d3b9e36c175c/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:603a2c834142172ffddc054067f5ec0ca65d57a0aa98a71bc81952573208e345", size = 1791688, upload-time = "2026-06-07T21:07:52.106Z" },
|
|
67
|
+
{ url = "https://files.pythonhosted.org/packages/ba/45/4de841f005cfe1fd63e2a2fe011262c515e2a62aa6994b15947e7d717ac9/aiohttp-3.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cb21957bb8aca671c1765e32f58164cf0c50e6bf41c0bbbd16da20732ecaf588", size = 1761094, upload-time = "2026-06-07T21:07:54.113Z" },
|
|
68
|
+
{ url = "https://files.pythonhosted.org/packages/e4/ae/dbce10533d3896d544d5053939ed75b7dc31a1b0973d959b1b5ae21028d6/aiohttp-3.14.1-cp313-cp313-win32.whl", hash = "sha256:e509a55f681e6158c20f70f102f9cf61fb20fbc382272bc6d94b7343f2582780", size = 452662, upload-time = "2026-06-07T21:07:56.06Z" },
|
|
69
|
+
{ url = "https://files.pythonhosted.org/packages/7b/d9/0bf1a19362c32f06229da5e7ddfcec91f93474d6307f7a2d3135e9c674dc/aiohttp-3.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:1ac8531b638959718e18c2207fbfe297819875da46a740b29dfa29beba64355a", size = 479748, upload-time = "2026-06-07T21:07:58.319Z" },
|
|
70
|
+
{ url = "https://files.pythonhosted.org/packages/22/0a/62e7232dc9484fbec112ceb32efb6a624cc7994ec6e2b019286f17c4e8f2/aiohttp-3.14.1-cp313-cp313-win_arm64.whl", hash = "sha256:250d14af67f6b6a1a4a811049b1afa69d61d617fca6bf33149b3ab1a6dbcf7b8", size = 447723, upload-time = "2026-06-07T21:08:00.154Z" },
|
|
71
|
+
{ url = "https://files.pythonhosted.org/packages/c4/a1/5fafa04e1ca91ddb47608699d60649c1c6db3cf41c99e78fc4056f9513db/aiohttp-3.14.1-cp314-cp314-android_24_arm64_v8a.whl", hash = "sha256:7c106c26852ca1c2047c6b80384f17100b4e439af276f21ef3d4e2f450ae7e15", size = 508531, upload-time = "2026-06-07T21:08:02.093Z" },
|
|
72
|
+
{ url = "https://files.pythonhosted.org/packages/fa/2e/bfa02f699d87ffc86d5959270b28f1cb410add3ccaced8ed2e0b8a5238fc/aiohttp-3.14.1-cp314-cp314-android_24_x86_64.whl", hash = "sha256:20205f7f5ade7aaec9f4b500549bbc071b046453aed72f9c06dcab87896a83e8", size = 514718, upload-time = "2026-06-07T21:08:04.476Z" },
|
|
73
|
+
{ url = "https://files.pythonhosted.org/packages/85/a5/9594ad6289eebbc97d167c44213d557807f90e59115caad24de21ad2c3b1/aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:62a759436b29e677181a9e76bab8b8f689a29cb9c535f45f7c48c9c830d3f8c3", size = 487918, upload-time = "2026-06-07T21:08:06.377Z" },
|
|
74
|
+
{ url = "https://files.pythonhosted.org/packages/b4/61/16a32c36c3c49edec122a3dc811f2057df2f94d3b14aa107c8017d981618/aiohttp-3.14.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:2964cbf553df4d7a57348da44d961d871895fc1ee4e8c322b2a95612c7b17fba", size = 494014, upload-time = "2026-06-07T21:08:08.263Z" },
|
|
75
|
+
{ url = "https://files.pythonhosted.org/packages/9b/89/3ebcf96ed99c05bec9c434aaac6963fd3cbab4a786ae739908a144d9ce44/aiohttp-3.14.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:237651caadc3a59badd39319c54642b5299e9cc98a3a194310e55d5bb9f5e397", size = 502398, upload-time = "2026-06-07T21:08:10.244Z" },
|
|
76
|
+
{ url = "https://files.pythonhosted.org/packages/fd/3d/b74870a0c2d40c355928cd5b96c7a11fa821b8a40fc41365e64479b151fb/aiohttp-3.14.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:896e12dfdbbab9d8f7e16d2b28c6769a60126fa92095d1ebf9473d02593a2448", size = 758018, upload-time = "2026-06-07T21:08:12.447Z" },
|
|
77
|
+
{ url = "https://files.pythonhosted.org/packages/d3/66/f42f5c984d99e49c6cff5f26f590750f2e2f7ef1fcfb99966ab5be1b632e/aiohttp-3.14.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d03f281ed22579314ba00821ce20115a7c0ac430660b4cc05704a3f818b3e004", size = 512462, upload-time = "2026-06-07T21:08:14.624Z" },
|
|
78
|
+
{ url = "https://files.pythonhosted.org/packages/e9/a7/248e1aebe0c7810b0271e021a0f2a5eb6e78a051885b3c9df49f42a5802d/aiohttp-3.14.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:07eabb979d236335fed927e137a928c9adfb7df3b9ec7aa31726f133a62be983", size = 512824, upload-time = "2026-06-07T21:08:16.572Z" },
|
|
79
|
+
{ url = "https://files.pythonhosted.org/packages/26/97/2aa0e5ba0727dc3bd5aaebb7ccbc510f7dfb7fb961ec87497cd496635ab1/aiohttp-3.14.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4fe1f1087cbadb280b5e1bb054a4f00d1423c74d6626c5e48400d871d34ecefe", size = 1749898, upload-time = "2026-06-07T21:08:18.635Z" },
|
|
80
|
+
{ url = "https://files.pythonhosted.org/packages/00/8d/e97f6c96c891d457c8479d92a514ba194d0412f981d72c70341ee18488ed/aiohttp-3.14.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:367a9314fdc79dab0fac96e216cb41dd73c85bdca85306ce8999118ba7e0f333", size = 1710114, upload-time = "2026-06-07T21:08:20.892Z" },
|
|
81
|
+
{ url = "https://files.pythonhosted.org/packages/6f/e6/aa8d7e863048c8fceb5cd6ce74017311cec3ead07847387e12265fb4444e/aiohttp-3.14.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a24f677ebe83749039e7bdf862ff0bbb16818ae4193d4ef96505e269375bcce0", size = 1802541, upload-time = "2026-06-07T21:08:23.044Z" },
|
|
82
|
+
{ url = "https://files.pythonhosted.org/packages/83/a8/72193137de57fda4ebfae4563182d082c8856e3b6e9871d0b46f028fb369/aiohttp-3.14.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c83afe0ba876be7e943d2e0ba645809ad441575d2840c895c21ee5de93b9377a", size = 1875776, upload-time = "2026-06-07T21:08:25.288Z" },
|
|
83
|
+
{ url = "https://files.pythonhosted.org/packages/a0/18/938441025db6769a3464596b2410af3afde0b21eb2f204c6f766f68af4bd/aiohttp-3.14.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:634e385930fb6d2d479cf3aa66515955863b77a5e3c2b5894ca259a25b308602", size = 1760329, upload-time = "2026-06-07T21:08:27.363Z" },
|
|
84
|
+
{ url = "https://files.pythonhosted.org/packages/60/29/bf2496b4065e76e09fe48015aaffe5ce161d8f089b06ac6982070f653076/aiohttp-3.14.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeea07c4397bbc57719c4eed8f9c284874d4f175f9b6d57f7a1546b976d455ca", size = 1587293, upload-time = "2026-06-07T21:08:29.805Z" },
|
|
85
|
+
{ url = "https://files.pythonhosted.org/packages/49/a2/2136674d52123b1354bd05dd5753c318db47dc0c927cc70b27bab3755456/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:335c0cc3e3545ce98dcb9cfcb836f40c3411f43fa03dab757597d80c89af8a35", size = 1714756, upload-time = "2026-06-07T21:08:32.094Z" },
|
|
86
|
+
{ url = "https://files.pythonhosted.org/packages/a7/b9/e5fd2e6f915503081c0f9b1e8540947037929c70c191da2e4d54b31a21a1/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:ae6be797afdef264e8a84864a85b196ca06045586481b3df8a967322fd2fa844", size = 1721052, upload-time = "2026-06-07T21:08:34.167Z" },
|
|
87
|
+
{ url = "https://files.pythonhosted.org/packages/63/5a/2833e324a2263e104e31e2e91bc5bbee81bc499afd32203faee048a883f0/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:8560b4d712474335d08907db7973f71912d3a9a8f1dee992ec06b5d2fe359496", size = 1766888, upload-time = "2026-06-07T21:08:36.95Z" },
|
|
88
|
+
{ url = "https://files.pythonhosted.org/packages/57/fa/dea6511870913162f3b2e8c42a7614eb203a4540b8c2da43e0bfb0548f3c/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7edd08e0a5deb1e8564a2fcd8f4561014a3f05252334671bbf55ddd47db0e5", size = 1581679, upload-time = "2026-06-07T21:08:39.292Z" },
|
|
89
|
+
{ url = "https://files.pythonhosted.org/packages/14/bd/3cf0d55e71784b33534e9710a67d382d900598b4787fbce6cc7317f8c42a/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:b6ff7fcee63287ae57b5df3e4f5957ce032122802509246dec1a5bcc55904c95", size = 1782021, upload-time = "2026-06-07T21:08:41.407Z" },
|
|
90
|
+
{ url = "https://files.pythonhosted.org/packages/c1/af/14bb5843eccbe234f4dfb78ab73e549d99727247e62ae5d62cbd22eaf5b0/aiohttp-3.14.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6ffbb2f4ec1ceaff7e07d43922954da26b223d188bf30658e561b98e23089444", size = 1742574, upload-time = "2026-06-07T21:08:43.795Z" },
|
|
91
|
+
{ url = "https://files.pythonhosted.org/packages/f2/1e/fbeb7af9210a67ac0f9c9bec0f8f4568497924e33137a3d5b48e1cf85f3f/aiohttp-3.14.1-cp314-cp314-win32.whl", hash = "sha256:a9875b46d910cff3ea2f5962f9d266b465459fe634e22556ab9bd6fc1192eea0", size = 457773, upload-time = "2026-06-07T21:08:46.168Z" },
|
|
92
|
+
{ url = "https://files.pythonhosted.org/packages/f0/2b/13e8d741a9ec5db7d900c060554cf8352ab85e44e2a4469ebb9d377bda17/aiohttp-3.14.1-cp314-cp314-win_amd64.whl", hash = "sha256:af8b4b81a960eeaf1234971ac3cd0ba5901f3cd42eae42a46b4d089a8b492719", size = 485001, upload-time = "2026-06-07T21:08:48.401Z" },
|
|
93
|
+
{ url = "https://files.pythonhosted.org/packages/df/30/491acfa2c4d6c3ff59c49a14fc1b50be3241e25bbb0c84c09e2da4d11395/aiohttp-3.14.1-cp314-cp314-win_arm64.whl", hash = "sha256:cf4491381b1b57425c315a56a439251b1bdac07b2275f19a8c44bc57744532ec", size = 453809, upload-time = "2026-06-07T21:08:50.7Z" },
|
|
94
|
+
{ url = "https://files.pythonhosted.org/packages/34/e3/19dbe1a1f4cc6230eb9e314de7fe68053b0992f9302b27d12141a0b5db53/aiohttp-3.14.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:819c054312f1af92947e6a55883d1b66feefab11531a7fc45e0fb9b63880b5c2", size = 793320, upload-time = "2026-06-07T21:08:52.775Z" },
|
|
95
|
+
{ url = "https://files.pythonhosted.org/packages/7f/20/1b7182219ba1b108430d6e4dc53d25ae02dcfcf5a045b33af4e8c5167527/aiohttp-3.14.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:10ee9c1753a8f706345b22496c79fbddb5be0599e0823f3738b1534058e25340", size = 529077, upload-time = "2026-06-07T21:08:55Z" },
|
|
96
|
+
{ url = "https://files.pythonhosted.org/packages/b9/c8/14ce60ec31a2e5f5274bb17d383a6f7a3aabca31ac04eee05585bbadab16/aiohttp-3.14.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1601cc37baf5750ccacae618ec2daf020769581695550e3b654a911f859c563d", size = 532476, upload-time = "2026-06-07T21:08:57.176Z" },
|
|
97
|
+
{ url = "https://files.pythonhosted.org/packages/7e/02/9ac85e081e53da2e061b02fa7758fe0a12d17b8ce2d1f5e6c7cb76730328/aiohttp-3.14.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d6e0ac9da31c9c04c84e1c0182ad8d6df35965a85cae29cd71d089621b3ae94", size = 1922347, upload-time = "2026-06-07T21:08:59.563Z" },
|
|
98
|
+
{ url = "https://files.pythonhosted.org/packages/c0/3e/d3ba07a0ab38b5389e10bec4362d21e10a4f667cba2d79ba30837b3a5059/aiohttp-3.14.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9e8f2d660c350b3d0e259c7a7e3d9b7fc8b41210cbcc3d4a7076ff0a5e5c2fdc", size = 1786465, upload-time = "2026-06-07T21:09:01.909Z" },
|
|
99
|
+
{ url = "https://files.pythonhosted.org/packages/0b/cb/e2ee978a00cfb2df829704a69528b18154eba5939f45bc1efa8f33aee4c5/aiohttp-3.14.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4691802dda97be727f79d86818acaad7eb8e9252626a1d6b519fedbb92d5e251", size = 1909423, upload-time = "2026-06-07T21:09:04.357Z" },
|
|
100
|
+
{ url = "https://files.pythonhosted.org/packages/73/5d/1430334858b1022b58ae50399a918f0bd6fe8fa7fa183598d657ff61e040/aiohttp-3.14.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c389c482a7e9b9dc3ee2701ac46c4125297a3818875b9c305ddb603c04828fd1", size = 2001906, upload-time = "2026-06-07T21:09:06.722Z" },
|
|
101
|
+
{ url = "https://files.pythonhosted.org/packages/66/4e/560c7472d3d198a23aa5c8b19a5115bf6a9b77b7d3e4bb363da320430ad2/aiohttp-3.14.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fc0cacab7ba4e56f0f81c82a98c09bed2f39c940107b03a34b168bdf7597edd3", size = 1877095, upload-time = "2026-06-07T21:09:09.011Z" },
|
|
102
|
+
{ url = "https://files.pythonhosted.org/packages/0d/f1/4745806578d447db4a784a8591e2dae3afdfc2bcb96f8f81271b13df6543/aiohttp-3.14.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:979ed4717f59b8bb12e3963378fa285d93d367e15bcd66c721311826d3c44a6c", size = 1676222, upload-time = "2026-06-07T21:09:11.461Z" },
|
|
103
|
+
{ url = "https://files.pythonhosted.org/packages/6a/c9/48255813cca749a229ef0ab476004ec623728ad79a9c0840616f6c076325/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:38e1e7daaea81df51c952e18483f323d878499a1e2bfe564790e0f9701d6f203", size = 1842922, upload-time = "2026-06-07T21:09:14.118Z" },
|
|
104
|
+
{ url = "https://files.pythonhosted.org/packages/3d/c0/bbd054e2bee909f529523a5af3891052606af5143c09f5f183ec3b234676/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:4132e72c608fe9fecb8f409113567605915b83e9bdd3ea56538d2f9cd35002f1", size = 1825035, upload-time = "2026-06-07T21:09:16.447Z" },
|
|
105
|
+
{ url = "https://files.pythonhosted.org/packages/a8/ae/90395d4376deceb74e09ec26b6adf7d2015a6f8802d6d84446af860fef04/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:eefd9cc9b6d4a2db5f00a26bc3e4f9acf71926a6ec557cd56c9c6f27c290b665", size = 1849512, upload-time = "2026-06-07T21:09:18.742Z" },
|
|
106
|
+
{ url = "https://files.pythonhosted.org/packages/93/bd/fb25f3049957553d4ce0ba6ae480aa2f592a6985497fca590837d16c1be0/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:b165790117eea512d7f3fb22f1f6dad3d55a7189571993eb015591c1401276d1", size = 1668571, upload-time = "2026-06-07T21:09:21.458Z" },
|
|
107
|
+
{ url = "https://files.pythonhosted.org/packages/3f/22/7f73303d64dd567ff3addca90b556690ed1233a47b8f55d242fb90af3681/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ed09c7eb1c391271c2ed0314a51903e72a3acb653d5ccfc264cdf3ef11f8269d", size = 1881159, upload-time = "2026-06-07T21:09:23.813Z" },
|
|
108
|
+
{ url = "https://files.pythonhosted.org/packages/44/be/0474c5a8b5640e1e4aa1923430a91f4151be82e511373fe764189b89aef5/aiohttp-3.14.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:99abd37084b82f5830c635fddd0b4993b9742a66eb746dacf433c8590e8f9e3c", size = 1841409, upload-time = "2026-06-07T21:09:26.207Z" },
|
|
109
|
+
{ url = "https://files.pythonhosted.org/packages/7b/3c/bb4a7cba26956cb3da4553cc2056cf67be5b5ff6e6d8fa4fbdff73bfb7ae/aiohttp-3.14.1-cp314-cp314t-win32.whl", hash = "sha256:47ddf841cdecc810749921d25606dee45857d12d2ad5ddb7b5bd7eab12e4b365", size = 494166, upload-time = "2026-06-07T21:09:28.505Z" },
|
|
110
|
+
{ url = "https://files.pythonhosted.org/packages/8a/84/ec80c2c1f66a952555a9f86df6b33af65108a6febfa0471b69013a12f807/aiohttp-3.14.1-cp314-cp314t-win_amd64.whl", hash = "sha256:5e78b522b7a6e27e0b25d19b247b75039ac4c94f99823e3c9e53ae1603a9f7e9", size = 530255, upload-time = "2026-06-07T21:09:30.843Z" },
|
|
111
|
+
{ url = "https://files.pythonhosted.org/packages/2a/71/6e22be134a4061ada85a92951b842f2657f17d926b727f3f94c56ae963d6/aiohttp-3.14.1-cp314-cp314t-win_arm64.whl", hash = "sha256:90d53f1609c29ccc2193945ef732428382a28f78d0456ae4d3daf0d48b74f0f6", size = 469640, upload-time = "2026-06-07T21:09:33.028Z" },
|
|
97
112
|
]
|
|
98
113
|
|
|
99
114
|
[[package]]
|
|
@@ -465,20 +480,20 @@ wheels = [
|
|
|
465
480
|
|
|
466
481
|
[[package]]
|
|
467
482
|
name = "pyright"
|
|
468
|
-
version = "1.1.
|
|
483
|
+
version = "1.1.411"
|
|
469
484
|
source = { registry = "https://pypi.org/simple" }
|
|
470
485
|
dependencies = [
|
|
471
486
|
{ name = "nodeenv" },
|
|
472
487
|
{ name = "typing-extensions" },
|
|
473
488
|
]
|
|
474
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
489
|
+
sdist = { url = "https://files.pythonhosted.org/packages/7e/ab/265f7dc69d28113ebba19092e57b075f41543b2ed048429c5f56e2b88eac/pyright-1.1.411.tar.gz", hash = "sha256:d885a0551f2e763b089a02702174e7f4ba77548cddabc972ab86d1f7f1b0f998", size = 4112861, upload-time = "2026-06-25T02:14:06.37Z" }
|
|
475
490
|
wheels = [
|
|
476
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
491
|
+
{ url = "https://files.pythonhosted.org/packages/0a/49/385be530a6a5b78d1cbcd5c2e38debc8959a2fc6bdb716f4e581002979fc/pyright-1.1.411-py3-none-any.whl", hash = "sha256:dc7c72a8e2700c55baa127554040e067041ea53ccfd50bf96308cc4291c7d5d9", size = 6181526, upload-time = "2026-06-25T02:14:04.691Z" },
|
|
477
492
|
]
|
|
478
493
|
|
|
479
494
|
[[package]]
|
|
480
495
|
name = "pytest"
|
|
481
|
-
version = "9.
|
|
496
|
+
version = "9.1.1"
|
|
482
497
|
source = { registry = "https://pypi.org/simple" }
|
|
483
498
|
dependencies = [
|
|
484
499
|
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
@@ -487,9 +502,9 @@ dependencies = [
|
|
|
487
502
|
{ name = "pluggy" },
|
|
488
503
|
{ name = "pygments" },
|
|
489
504
|
]
|
|
490
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
505
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
|
|
491
506
|
wheels = [
|
|
492
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
507
|
+
{ url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" },
|
|
493
508
|
]
|
|
494
509
|
|
|
495
510
|
[[package]]
|
|
@@ -507,7 +522,7 @@ wheels = [
|
|
|
507
522
|
|
|
508
523
|
[[package]]
|
|
509
524
|
name = "python-daynest"
|
|
510
|
-
version = "0.1.
|
|
525
|
+
version = "0.1.10"
|
|
511
526
|
source = { editable = "." }
|
|
512
527
|
dependencies = [
|
|
513
528
|
{ name = "aiohttp" },
|
|
@@ -526,35 +541,35 @@ requires-dist = [{ name = "aiohttp", specifier = ">=3.9" }]
|
|
|
526
541
|
|
|
527
542
|
[package.metadata.requires-dev]
|
|
528
543
|
dev = [
|
|
529
|
-
{ name = "pyright", specifier = "==1.1.
|
|
530
|
-
{ name = "pytest", specifier = "==9.
|
|
544
|
+
{ name = "pyright", specifier = "==1.1.411" },
|
|
545
|
+
{ name = "pytest", specifier = "==9.1.1" },
|
|
531
546
|
{ name = "pytest-asyncio", specifier = "==1.4.0" },
|
|
532
|
-
{ name = "ruff", specifier = "==0.15.
|
|
547
|
+
{ name = "ruff", specifier = "==0.15.22" },
|
|
533
548
|
]
|
|
534
549
|
|
|
535
550
|
[[package]]
|
|
536
551
|
name = "ruff"
|
|
537
|
-
version = "0.15.
|
|
552
|
+
version = "0.15.22"
|
|
538
553
|
source = { registry = "https://pypi.org/simple" }
|
|
539
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
554
|
+
sdist = { url = "https://files.pythonhosted.org/packages/3a/06/ae069393fc66e8ff33036d4b368003833bf6e88ccf182e17e7a2f1c754fd/ruff-0.15.22.tar.gz", hash = "sha256:3f15175b1fb580126f58285a5dae6b2ea89000136d980c64499211f116b54809", size = 4785063, upload-time = "2026-07-16T15:14:13.244Z" }
|
|
540
555
|
wheels = [
|
|
541
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
542
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
543
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
544
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
545
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
546
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
547
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
548
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
549
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
550
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
551
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
552
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
553
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
554
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
555
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
556
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
557
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
556
|
+
{ url = "https://files.pythonhosted.org/packages/23/18/ee54b7ae1e121be7a28ea6da4b67564ebb0530e183a54415ab7e3bcd2c4e/ruff-0.15.22-py3-none-linux_armv6l.whl", hash = "sha256:44423e73493737f5e7c5b41d475483898ff37afcdae38bc3da5085e29af1c2d8", size = 10781258, upload-time = "2026-07-16T15:13:19.452Z" },
|
|
557
|
+
{ url = "https://files.pythonhosted.org/packages/2f/d2/2520cb14761ddbeaf57642a76942fc36adcbdbe53b4532241995f6fc485c/ruff-0.15.22-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b82c6482946e9eda7ff2e091d25b8bad3f718684e1916d41bd56873cee05b697", size = 10999477, upload-time = "2026-07-16T15:13:23.318Z" },
|
|
558
|
+
{ url = "https://files.pythonhosted.org/packages/c9/10/74e53572aa758dfaa678c2a2646b5c5515d884b7ca56be4d2ce03ca4b560/ruff-0.15.22-py3-none-macosx_11_0_arm64.whl", hash = "sha256:11c1c715af53a09f714e011106bffc419751ec8232fcb5da42173284ea3fec6f", size = 10466716, upload-time = "2026-07-16T15:13:26.162Z" },
|
|
559
|
+
{ url = "https://files.pythonhosted.org/packages/1e/cc/44eaaf0844e028182f2d0a8f2190d0f359159aed0a9e5ab861d892f1ae2a/ruff-0.15.22-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:742a29cf29bddb7c8327895d6a10e0e6c5b38a96dd407af9b5d0857f809c0576", size = 10892644, upload-time = "2026-07-16T15:13:29.229Z" },
|
|
560
|
+
{ url = "https://files.pythonhosted.org/packages/9f/21/8edf559014d2b0f82beea19cfb713993ad802ccda16868769979c6090a84/ruff-0.15.22-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72af58b951b0ae395935ae79763dc349bc0eb706319d28f7a33ad2cfb3cfc178", size = 10576719, upload-time = "2026-07-16T15:13:32.35Z" },
|
|
561
|
+
{ url = "https://files.pythonhosted.org/packages/bf/1e/3a13abd392a3b50b62e5938a831f9ab6e588358cacad5c18545b716d2182/ruff-0.15.22-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62d425005c1835eb24e2ee4161cb90e8db263415f4a71c8c72c33abaa6c0c224", size = 11376494, upload-time = "2026-07-16T15:13:35.958Z" },
|
|
562
|
+
{ url = "https://files.pythonhosted.org/packages/bf/3e/422d3d95bcf04dd78e1aeac22184d4f9a8fb2c01865d39d44618484a0317/ruff-0.15.22-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8b9b3f8779a4f08c969defc3c8c35abffaa757e601ed5ae66d6d1db6519969a", size = 12208370, upload-time = "2026-07-16T15:13:39.185Z" },
|
|
563
|
+
{ url = "https://files.pythonhosted.org/packages/1e/91/5d065a0e0a02bf4813f5119ad278462eed081d2b832eb7c021ade0ec9e65/ruff-0.15.22-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e0dd1b2e4d3d585f897a0d137cbf4eaf6223bef4e8ce34d6bb12556c5f9249e", size = 11581098, upload-time = "2026-07-16T15:13:42.132Z" },
|
|
564
|
+
{ url = "https://files.pythonhosted.org/packages/f6/f9/a0d4871d12fae702eb1f41b686caf05f1f8b124dc6db6f784f53d74918fa/ruff-0.15.22-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:365523eb91d9224e1bcb03b022fbf0facb8f9e23792a2c53d9d4b3924bdbdebb", size = 11399422, upload-time = "2026-07-16T15:13:45.2Z" },
|
|
565
|
+
{ url = "https://files.pythonhosted.org/packages/18/80/c843a5176cddbceb0b7e8dd41cf9993490796c1c469348d384f5a5c13c56/ruff-0.15.22-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:fabfd168afdf29fee5be98b831efa9683c94d7c5a3b58b9ce5a2e38444589a74", size = 11381683, upload-time = "2026-07-16T15:13:48.46Z" },
|
|
566
|
+
{ url = "https://files.pythonhosted.org/packages/d4/00/8485de0ae92239438a36cfc51350db9b9e85c9ebdfaea91b18e422706662/ruff-0.15.22-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:225dbf095a87f1d9f90f5fd7924d2613ee452a75a4308c63a8f50f761787aa7c", size = 10850295, upload-time = "2026-07-16T15:13:51.655Z" },
|
|
567
|
+
{ url = "https://files.pythonhosted.org/packages/fa/91/24977ec2ec72eaf15e4394ace2959fdff2dd1e14f03e005e838023407169/ruff-0.15.22-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1877d63b9d24ed278744f1523fd11b85540566d54641f97c566d7d9dc5ca5296", size = 10579640, upload-time = "2026-07-16T15:13:54.79Z" },
|
|
568
|
+
{ url = "https://files.pythonhosted.org/packages/9c/47/9b51216951974df1f263ac19da550d34252e0ed7218c25f10c5ef9ed7517/ruff-0.15.22-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a1606c510bd7215680d32efab38965f7cdec3ef69f5170a3f4791404ffdd5262", size = 11105077, upload-time = "2026-07-16T15:13:57.915Z" },
|
|
569
|
+
{ url = "https://files.pythonhosted.org/packages/c2/47/20e9d4a3b8016778acea5fc32bb50d35d207500a17ddb529ffa6996feef8/ruff-0.15.22-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:630479b18625f5ffc373f77603a22a9f8ac0acd7ff0501178b5db28ec71e9c64", size = 11490980, upload-time = "2026-07-16T15:14:01.032Z" },
|
|
570
|
+
{ url = "https://files.pythonhosted.org/packages/4d/76/3f72d8fc38c1cb77b38c56a70da9d0c17700cc1cc50f9649c9d3c8f5ba71/ruff-0.15.22-py3-none-win32.whl", hash = "sha256:e5ba0e4a13fd14abbed2a77b517a3911290c6c6c59ef67784328d1668fab76cf", size = 10789165, upload-time = "2026-07-16T15:14:04.16Z" },
|
|
571
|
+
{ url = "https://files.pythonhosted.org/packages/cb/46/4965251734c2b6fcdca1b1b187d20bcac3af0ee5b083b89c910bb961ce3a/ruff-0.15.22-py3-none-win_amd64.whl", hash = "sha256:9be63ba1eb936acd2d1342fb8337c356353706fce233b2a15a09a97037e6acde", size = 11938297, upload-time = "2026-07-16T15:14:07.316Z" },
|
|
572
|
+
{ url = "https://files.pythonhosted.org/packages/57/c9/e69b1ff4c8b69093ef08b8919ab767af0569666865b39c30a8795d88d3c6/ruff-0.15.22-py3-none-win_arm64.whl", hash = "sha256:e1168075b72158510839f250027659cdd78476f40507dd517892304c41318661", size = 11298172, upload-time = "2026-07-16T15:14:10.51Z" },
|
|
558
573
|
]
|
|
559
574
|
|
|
560
575
|
[[package]]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|