graphql-api 1.6.9__tar.gz → 1.6.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.
Files changed (109) hide show
  1. {graphql_api-1.6.9 → graphql_api-1.6.10}/PKG-INFO +1 -1
  2. graphql_api-1.6.10/VERSION +1 -0
  3. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/executor.py +14 -2
  4. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api.egg-info/PKG-INFO +1 -1
  5. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api.egg-info/SOURCES.txt +1 -0
  6. graphql_api-1.6.10/tests/test_executor_signature.py +116 -0
  7. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_performance.py +16 -10
  8. {graphql_api-1.6.9 → graphql_api-1.6.10}/uv.lock +59 -55
  9. graphql_api-1.6.9/VERSION +0 -1
  10. {graphql_api-1.6.9 → graphql_api-1.6.10}/.github/workflows/pages.yml +0 -0
  11. {graphql_api-1.6.9 → graphql_api-1.6.10}/.github/workflows/python-package.yml +0 -0
  12. {graphql_api-1.6.9 → graphql_api-1.6.10}/.gitignore +0 -0
  13. {graphql_api-1.6.9 → graphql_api-1.6.10}/.vscode/settings.json +0 -0
  14. {graphql_api-1.6.9 → graphql_api-1.6.10}/AGENTS.md +0 -0
  15. {graphql_api-1.6.9 → graphql_api-1.6.10}/CLAUDE.md +0 -0
  16. {graphql_api-1.6.9 → graphql_api-1.6.10}/LICENSE +0 -0
  17. {graphql_api-1.6.9 → graphql_api-1.6.10}/README.md +0 -0
  18. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/README.md +0 -0
  19. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/_index.md +0 -0
  20. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/_index.md +0 -0
  21. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/advanced-features/_index.md +0 -0
  22. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/advanced-features/directives.md +0 -0
  23. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/advanced-features/performance.md +0 -0
  24. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/advanced-features/schema-filtering.md +0 -0
  25. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/building-applications/_index.md +0 -0
  26. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/building-applications/documentation.md +0 -0
  27. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/building-applications/error-handling.md +0 -0
  28. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/distributed-systems/_index.md +0 -0
  29. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/distributed-systems/federation.md +0 -0
  30. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/distributed-systems/pagination-relay.md +0 -0
  31. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/distributed-systems/remote-graphql.md +0 -0
  32. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/fundamentals/_index.md +0 -0
  33. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/fundamentals/async-and-subscriptions.md +0 -0
  34. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/fundamentals/defining-schemas.md +0 -0
  35. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/fundamentals/enums-interfaces.md +0 -0
  36. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/fundamentals/field-types.md +0 -0
  37. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/fundamentals/getting-started.md +0 -0
  38. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/fundamentals/mutations.md +0 -0
  39. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/fundamentals/object-types.md +0 -0
  40. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/fundamentals/pydantic-and-dataclasses.md +0 -0
  41. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/production/_index.md +0 -0
  42. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/production/context-metadata.md +0 -0
  43. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/production/middleware.md +0 -0
  44. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/reference/_index.md +0 -0
  45. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/reference/api-reference.md +0 -0
  46. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/reference/contributing.md +0 -0
  47. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/content/docs/reference/examples.md +0 -0
  48. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/hugo.toml +0 -0
  49. {graphql_api-1.6.9 → graphql_api-1.6.10}/docs/index.md +0 -0
  50. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/__init__.py +0 -0
  51. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/api.py +0 -0
  52. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/context.py +0 -0
  53. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/dataclass_mapping.py +0 -0
  54. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/decorators.py +0 -0
  55. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/directives.py +0 -0
  56. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/error.py +0 -0
  57. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/exception.py +0 -0
  58. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/federation/__init__.py +0 -0
  59. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/federation/directives.py +0 -0
  60. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/federation/federation.py +0 -0
  61. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/federation/types.py +0 -0
  62. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/mapper.py +0 -0
  63. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/middleware.py +0 -0
  64. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/mutation_schema.py +0 -0
  65. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/pydantic.py +0 -0
  66. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/pydantic_utils.py +0 -0
  67. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/reduce.py +0 -0
  68. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/relay.py +0 -0
  69. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/remote.py +0 -0
  70. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/schema.py +0 -0
  71. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/schema_filter.py +0 -0
  72. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/type_utils.py +0 -0
  73. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/types.py +0 -0
  74. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api/utils.py +0 -0
  75. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api.egg-info/dependency_links.txt +0 -0
  76. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api.egg-info/requires.txt +0 -0
  77. {graphql_api-1.6.9 → graphql_api-1.6.10}/graphql_api.egg-info/top_level.txt +0 -0
  78. {graphql_api-1.6.9 → graphql_api-1.6.10}/pyproject.toml +0 -0
  79. {graphql_api-1.6.9 → graphql_api-1.6.10}/setup.cfg +0 -0
  80. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/__init__.py +0 -0
  81. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_async.py +0 -0
  82. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_calculator.py +0 -0
  83. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_custom_suffixes.py +0 -0
  84. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_custom_types.py +0 -0
  85. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_dataclass.py +0 -0
  86. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_dataclass_relationships.py +0 -0
  87. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_decorator_patterns.py +0 -0
  88. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_directives.py +0 -0
  89. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_docs_advanced.py +0 -0
  90. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_docs_async_subscriptions.py +0 -0
  91. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_docs_defining_schemas.py +0 -0
  92. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_docs_field_types.py +0 -0
  93. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_docs_getting_started.py +0 -0
  94. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_docs_relay.py +0 -0
  95. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_docstrings.py +0 -0
  96. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_error.py +0 -0
  97. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_federation.py +0 -0
  98. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_federation_example.graphql +0 -0
  99. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_federation_example.py +0 -0
  100. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_filtering.py +0 -0
  101. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_graphql.py +0 -0
  102. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_middleware.py +0 -0
  103. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_plain_functions.py +0 -0
  104. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_pydantic.py +0 -0
  105. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_relay.py +0 -0
  106. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_remote.py +0 -0
  107. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_schema.py +0 -0
  108. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_subscriptions.py +0 -0
  109. {graphql_api-1.6.9 → graphql_api-1.6.10}/tests/test_unified_vs_explicit_schema.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: graphql-api
3
- Version: 1.6.9
3
+ Version: 1.6.10
4
4
  Summary: A framework for building Python GraphQL APIs.
5
5
  Author-email: Robert Parker <rob@parob.com>
6
6
  License: MIT
@@ -0,0 +1 @@
1
+ 1.6.10
@@ -68,10 +68,21 @@ class ErrorProtectionExecutionContext(ExecutionContext):
68
68
  self,
69
69
  error: GraphQLError,
70
70
  return_type: GraphQLOutputType,
71
+ *args: Any,
72
+ **kwargs: Any,
71
73
  ) -> None:
72
74
  """
73
75
  Intercept field errors to decide whether to raise or suppress them based on the
74
76
  'error_protection' attribute, either on the error or its original error.
77
+
78
+ Anything after ``return_type`` is forwarded to graphql-core untouched.
79
+ graphql-core added a ``path`` argument to this method in 3.2.8, and an
80
+ override with a fixed arity turns every field error into a TypeError
81
+ raised from inside the executor — so the resolver's real error never
82
+ reaches the caller and a validation failure reads as a crash. Since
83
+ this class exists precisely to sit in the error path, it must not be
84
+ the thing that breaks it: accepting whatever the installed version
85
+ passes keeps it working across both signatures.
75
86
  """
76
87
  error_protection = self.default_error_protection
77
88
  original_error = error.original_error
@@ -86,8 +97,9 @@ class ErrorProtectionExecutionContext(ExecutionContext):
86
97
  if not error_protection:
87
98
  raise error.original_error if error.original_error is not None else error
88
99
 
89
- # Otherwise, call the default error handler
90
- return super().handle_field_error(error=error, return_type=return_type)
100
+ # Otherwise, call the default error handler. Positionally, because the
101
+ # trailing arguments differ by version and only the caller knows them.
102
+ return super().handle_field_error(error, return_type, *args, **kwargs)
91
103
 
92
104
 
93
105
  class NoErrorProtectionExecutionContext(ErrorProtectionExecutionContext):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: graphql-api
3
- Version: 1.6.9
3
+ Version: 1.6.10
4
4
  Summary: A framework for building Python GraphQL APIs.
5
5
  Author-email: Robert Parker <rob@parob.com>
6
6
  License: MIT
@@ -89,6 +89,7 @@ tests/test_docs_getting_started.py
89
89
  tests/test_docs_relay.py
90
90
  tests/test_docstrings.py
91
91
  tests/test_error.py
92
+ tests/test_executor_signature.py
92
93
  tests/test_federation.py
93
94
  tests/test_federation_example.graphql
94
95
  tests/test_federation_example.py
@@ -0,0 +1,116 @@
1
+ """The error path must survive graphql-core changing under us.
2
+
3
+ `ErrorProtectionExecutionContext` overrides `handle_field_error`, which
4
+ graphql-core calls positionally from inside the executor. graphql-core added a
5
+ `path` argument to it in 3.2.8; the override kept its three-argument shape, and
6
+ the result was that **every** field error became a `TypeError` raised from
7
+ inside the executor. A resolver raising `ValueError("title is required")` came
8
+ back to the caller as a crash with no message — the one thing an error path
9
+ must never do.
10
+
11
+ It went unnoticed because this library's own environment resolves an older
12
+ graphql-core than its consumers do, so the existing error tests all pass here
13
+ and fail there. Asserting against a pinned signature would repeat that mistake,
14
+ so these tests ask the *installed* graphql-core what it expects and check the
15
+ override against that.
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ import inspect
21
+
22
+ from graphql import GraphQLError, GraphQLInt
23
+ from graphql.execution.execute import ExecutionContext
24
+ from graphql.pyutils import Path
25
+
26
+ from graphql_api.api import GraphQLAPI
27
+ from graphql_api.executor import (
28
+ ErrorProtectionExecutionContext,
29
+ NoErrorProtectionExecutionContext,
30
+ )
31
+
32
+
33
+ def _accepted_arity(func) -> int:
34
+ """How many positional arguments this method takes, `self` excluded."""
35
+ parameters = [
36
+ p for name, p in inspect.signature(func).parameters.items()
37
+ if name != "self"
38
+ ]
39
+ return sum(
40
+ 1 for p in parameters
41
+ if p.kind in (p.POSITIONAL_ONLY, p.POSITIONAL_OR_KEYWORD)
42
+ )
43
+
44
+
45
+ class TestHandleFieldErrorSignature:
46
+ def test_override_accepts_everything_graphql_core_passes(self) -> None:
47
+ """The override must be callable however the installed version calls it."""
48
+ expected = _accepted_arity(ExecutionContext.handle_field_error)
49
+ override = inspect.signature(
50
+ ErrorProtectionExecutionContext.handle_field_error
51
+ )
52
+ # Either the arities match, or the override absorbs the difference.
53
+ absorbs = any(
54
+ p.kind is p.VAR_POSITIONAL for p in override.parameters.values()
55
+ )
56
+ assert absorbs or _accepted_arity(
57
+ ErrorProtectionExecutionContext.handle_field_error
58
+ ) == expected, (
59
+ f"graphql-core passes {expected} positional argument(s) to "
60
+ f"handle_field_error; the override does not accept them"
61
+ )
62
+
63
+ def test_survives_being_called_the_way_the_executor_calls_it(self) -> None:
64
+ """A direct call with graphql-core's own argument list.
65
+
66
+ This is the exact call that was raising TypeError in production.
67
+ """
68
+ context = ErrorProtectionExecutionContext.__new__(
69
+ ErrorProtectionExecutionContext
70
+ )
71
+ error = GraphQLError("boom", original_error=ValueError("boom"))
72
+ args = [error, GraphQLInt]
73
+ if _accepted_arity(ExecutionContext.handle_field_error) > 2:
74
+ # graphql-core >= 3.2.8 also passes the field's path.
75
+ args.append(Path(None, "field", None))
76
+
77
+ # Nullable return type, so the error is collected rather than re-raised;
78
+ # the point is only that the call itself is well-formed.
79
+ context.errors = []
80
+ try:
81
+ context.handle_field_error(*args)
82
+ except TypeError as exc: # pragma: no cover - this is the regression
83
+ raise AssertionError(
84
+ f"handle_field_error rejected graphql-core's own call: {exc}"
85
+ ) from exc
86
+ except Exception:
87
+ # Any GraphQL-level outcome is fine; a TypeError is not.
88
+ pass
89
+
90
+ def test_the_no_protection_variant_inherits_the_same_shape(self) -> None:
91
+ assert (
92
+ NoErrorProtectionExecutionContext.handle_field_error
93
+ is ErrorProtectionExecutionContext.handle_field_error
94
+ )
95
+
96
+
97
+ class TestResolverErrorsReachTheCaller:
98
+ def test_a_raising_resolver_produces_a_graphql_error_not_a_crash(self) -> None:
99
+ """End to end: the shape every consumer actually depends on.
100
+
101
+ A validating resolver — "status must be one of …" — has to come back as
102
+ a GraphQL error carrying its message, or callers cannot tell a bad
103
+ argument from a broken server.
104
+ """
105
+ api = GraphQLAPI()
106
+
107
+ @api.type(is_root_type=True)
108
+ class Root:
109
+ @api.field
110
+ def set_status(self, status: str) -> bool:
111
+ raise ValueError(f"status must be one of ['open', 'closed'], got {status!r}")
112
+
113
+ result = api.execute('query { setStatus(status: "banana") }')
114
+
115
+ assert result.errors, "the resolver's error never reached the caller"
116
+ assert "status must be one of" in str(result.errors[0])
@@ -601,23 +601,29 @@ class TestSchemaRebuilding:
601
601
  return []
602
602
 
603
603
  times = []
604
- for i in range(10):
604
+ for i in range(14):
605
605
  start_time = time.perf_counter()
606
606
  api = GraphQLAPI(root_type=API)
607
607
  schema, _ = api.build()
608
608
  end_time = time.perf_counter()
609
609
  times.append((end_time - start_time) * 1000)
610
610
 
611
- print("\n10 repeated schema builds:")
611
+ # Drop warm-up iterations (imports, first-touch caches), then compare
612
+ # the medians of the early and late halves. Comparing two single
613
+ # sub-millisecond samples is scheduler noise on shared CI runners and
614
+ # produced false failures.
615
+ warm = times[2:]
616
+ half = len(warm) // 2
617
+ early = sorted(warm[:half])[half // 2]
618
+ late = sorted(warm[half:])[half // 2]
619
+
620
+ print(f"\n{len(times)} repeated schema builds:")
612
621
  print(f" Times: {[f'{t:.2f}' for t in times]}")
613
- print(f" Average: {sum(times) / len(times):.2f}ms")
614
-
615
- # Later builds should not be significantly slower than first
616
- # Allow 50% variance
617
- first_build = times[0]
618
- last_build = times[-1]
619
- assert last_build < first_build * 1.5, \
620
- f"Performance degradation: first={first_build:.2f}ms, last={last_build:.2f}ms"
622
+ print(f" Early median: {early:.2f}ms, late median: {late:.2f}ms")
623
+
624
+ # Later builds should not degrade relative to earlier ones.
625
+ assert late < early * 2 + 1.0, \
626
+ f"Performance degradation: early median={early:.2f}ms, late median={late:.2f}ms"
621
627
 
622
628
 
623
629
  class TestDataclassNesting:
@@ -13,7 +13,7 @@ wheels = [
13
13
 
14
14
  [[package]]
15
15
  name = "aiohttp"
16
- version = "3.12.15"
16
+ version = "3.14.1"
17
17
  source = { registry = "https://pypi.org/simple" }
18
18
  dependencies = [
19
19
  { name = "aiohappyeyeballs" },
@@ -22,44 +22,47 @@ dependencies = [
22
22
  { name = "frozenlist" },
23
23
  { name = "multidict" },
24
24
  { name = "propcache" },
25
+ { name = "typing-extensions" },
25
26
  { name = "yarl" },
26
27
  ]
27
- sdist = { url = "https://files.pythonhosted.org/packages/9b/e7/d92a237d8802ca88483906c388f7c201bbe96cd80a165ffd0ac2f6a8d59f/aiohttp-3.12.15.tar.gz", hash = "sha256:4fc61385e9c98d72fcdf47e6dd81833f47b2f77c114c29cd64a361be57a763a2", size = 7823716 }
28
- wheels = [
29
- { url = "https://files.pythonhosted.org/packages/20/19/9e86722ec8e835959bd97ce8c1efa78cf361fa4531fca372551abcc9cdd6/aiohttp-3.12.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d3ce17ce0220383a0f9ea07175eeaa6aa13ae5a41f30bc61d84df17f0e9b1117", size = 711246 },
30
- { url = "https://files.pythonhosted.org/packages/71/f9/0a31fcb1a7d4629ac9d8f01f1cb9242e2f9943f47f5d03215af91c3c1a26/aiohttp-3.12.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:010cc9bbd06db80fe234d9003f67e97a10fe003bfbedb40da7d71c1008eda0fe", size = 483515 },
31
- { url = "https://files.pythonhosted.org/packages/62/6c/94846f576f1d11df0c2e41d3001000527c0fdf63fce7e69b3927a731325d/aiohttp-3.12.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3f9d7c55b41ed687b9d7165b17672340187f87a773c98236c987f08c858145a9", size = 471776 },
32
- { url = "https://files.pythonhosted.org/packages/f8/6c/f766d0aaafcee0447fad0328da780d344489c042e25cd58fde566bf40aed/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc4fbc61bb3548d3b482f9ac7ddd0f18c67e4225aaa4e8552b9f1ac7e6bda9e5", size = 1741977 },
33
- { url = "https://files.pythonhosted.org/packages/17/e5/fb779a05ba6ff44d7bc1e9d24c644e876bfff5abe5454f7b854cace1b9cc/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7fbc8a7c410bb3ad5d595bb7118147dfbb6449d862cc1125cf8867cb337e8728", size = 1690645 },
34
- { url = "https://files.pythonhosted.org/packages/37/4e/a22e799c2035f5d6a4ad2cf8e7c1d1bd0923192871dd6e367dafb158b14c/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74dad41b3458dbb0511e760fb355bb0b6689e0630de8a22b1b62a98777136e16", size = 1789437 },
35
- { url = "https://files.pythonhosted.org/packages/28/e5/55a33b991f6433569babb56018b2fb8fb9146424f8b3a0c8ecca80556762/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b6f0af863cf17e6222b1735a756d664159e58855da99cfe965134a3ff63b0b0", size = 1828482 },
36
- { url = "https://files.pythonhosted.org/packages/c6/82/1ddf0ea4f2f3afe79dffed5e8a246737cff6cbe781887a6a170299e33204/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5b7fe4972d48a4da367043b8e023fb70a04d1490aa7d68800e465d1b97e493b", size = 1730944 },
37
- { url = "https://files.pythonhosted.org/packages/1b/96/784c785674117b4cb3877522a177ba1b5e4db9ce0fd519430b5de76eec90/aiohttp-3.12.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6443cca89553b7a5485331bc9bedb2342b08d073fa10b8c7d1c60579c4a7b9bd", size = 1668020 },
38
- { url = "https://files.pythonhosted.org/packages/12/8a/8b75f203ea7e5c21c0920d84dd24a5c0e971fe1e9b9ebbf29ae7e8e39790/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6c5f40ec615e5264f44b4282ee27628cea221fcad52f27405b80abb346d9f3f8", size = 1716292 },
39
- { url = "https://files.pythonhosted.org/packages/47/0b/a1451543475bb6b86a5cfc27861e52b14085ae232896a2654ff1231c0992/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:2abbb216a1d3a2fe86dbd2edce20cdc5e9ad0be6378455b05ec7f77361b3ab50", size = 1711451 },
40
- { url = "https://files.pythonhosted.org/packages/55/fd/793a23a197cc2f0d29188805cfc93aa613407f07e5f9da5cd1366afd9d7c/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:db71ce547012a5420a39c1b744d485cfb823564d01d5d20805977f5ea1345676", size = 1691634 },
41
- { url = "https://files.pythonhosted.org/packages/ca/bf/23a335a6670b5f5dfc6d268328e55a22651b440fca341a64fccf1eada0c6/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ced339d7c9b5030abad5854aa5413a77565e5b6e6248ff927d3e174baf3badf7", size = 1785238 },
42
- { url = "https://files.pythonhosted.org/packages/57/4f/ed60a591839a9d85d40694aba5cef86dde9ee51ce6cca0bb30d6eb1581e7/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7c7dd29c7b5bda137464dc9bfc738d7ceea46ff70309859ffde8c022e9b08ba7", size = 1805701 },
43
- { url = "https://files.pythonhosted.org/packages/85/e0/444747a9455c5de188c0f4a0173ee701e2e325d4b2550e9af84abb20cdba/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:421da6fd326460517873274875c6c5a18ff225b40da2616083c5a34a7570b685", size = 1718758 },
44
- { url = "https://files.pythonhosted.org/packages/36/ab/1006278d1ffd13a698e5dd4bfa01e5878f6bddefc296c8b62649753ff249/aiohttp-3.12.15-cp311-cp311-win32.whl", hash = "sha256:4420cf9d179ec8dfe4be10e7d0fe47d6d606485512ea2265b0d8c5113372771b", size = 428868 },
45
- { url = "https://files.pythonhosted.org/packages/10/97/ad2b18700708452400278039272032170246a1bf8ec5d832772372c71f1a/aiohttp-3.12.15-cp311-cp311-win_amd64.whl", hash = "sha256:edd533a07da85baa4b423ee8839e3e91681c7bfa19b04260a469ee94b778bf6d", size = 453273 },
46
- { url = "https://files.pythonhosted.org/packages/63/97/77cb2450d9b35f517d6cf506256bf4f5bda3f93a66b4ad64ba7fc917899c/aiohttp-3.12.15-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:802d3868f5776e28f7bf69d349c26fc0efadb81676d0afa88ed00d98a26340b7", size = 702333 },
47
- { url = "https://files.pythonhosted.org/packages/83/6d/0544e6b08b748682c30b9f65640d006e51f90763b41d7c546693bc22900d/aiohttp-3.12.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2800614cd560287be05e33a679638e586a2d7401f4ddf99e304d98878c29444", size = 476948 },
48
- { url = "https://files.pythonhosted.org/packages/3a/1d/c8c40e611e5094330284b1aea8a4b02ca0858f8458614fa35754cab42b9c/aiohttp-3.12.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8466151554b593909d30a0a125d638b4e5f3836e5aecde85b66b80ded1cb5b0d", size = 469787 },
49
- { url = "https://files.pythonhosted.org/packages/38/7d/b76438e70319796bfff717f325d97ce2e9310f752a267bfdf5192ac6082b/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e5a495cb1be69dae4b08f35a6c4579c539e9b5706f606632102c0f855bcba7c", size = 1716590 },
50
- { url = "https://files.pythonhosted.org/packages/79/b1/60370d70cdf8b269ee1444b390cbd72ce514f0d1cd1a715821c784d272c9/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6404dfc8cdde35c69aaa489bb3542fb86ef215fc70277c892be8af540e5e21c0", size = 1699241 },
51
- { url = "https://files.pythonhosted.org/packages/a3/2b/4968a7b8792437ebc12186db31523f541943e99bda8f30335c482bea6879/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ead1c00f8521a5c9070fcb88f02967b1d8a0544e6d85c253f6968b785e1a2ab", size = 1754335 },
52
- { url = "https://files.pythonhosted.org/packages/fb/c1/49524ed553f9a0bec1a11fac09e790f49ff669bcd14164f9fab608831c4d/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6990ef617f14450bc6b34941dba4f12d5613cbf4e33805932f853fbd1cf18bfb", size = 1800491 },
53
- { url = "https://files.pythonhosted.org/packages/de/5e/3bf5acea47a96a28c121b167f5ef659cf71208b19e52a88cdfa5c37f1fcc/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd736ed420f4db2b8148b52b46b88ed038d0354255f9a73196b7bbce3ea97545", size = 1719929 },
54
- { url = "https://files.pythonhosted.org/packages/39/94/8ae30b806835bcd1cba799ba35347dee6961a11bd507db634516210e91d8/aiohttp-3.12.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c5092ce14361a73086b90c6efb3948ffa5be2f5b6fbcf52e8d8c8b8848bb97c", size = 1635733 },
55
- { url = "https://files.pythonhosted.org/packages/7a/46/06cdef71dd03acd9da7f51ab3a9107318aee12ad38d273f654e4f981583a/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:aaa2234bb60c4dbf82893e934d8ee8dea30446f0647e024074237a56a08c01bd", size = 1696790 },
56
- { url = "https://files.pythonhosted.org/packages/02/90/6b4cfaaf92ed98d0ec4d173e78b99b4b1a7551250be8937d9d67ecb356b4/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6d86a2fbdd14192e2f234a92d3b494dd4457e683ba07e5905a0b3ee25389ac9f", size = 1718245 },
57
- { url = "https://files.pythonhosted.org/packages/2e/e6/2593751670fa06f080a846f37f112cbe6f873ba510d070136a6ed46117c6/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a041e7e2612041a6ddf1c6a33b883be6a421247c7afd47e885969ee4cc58bd8d", size = 1658899 },
58
- { url = "https://files.pythonhosted.org/packages/8f/28/c15bacbdb8b8eb5bf39b10680d129ea7410b859e379b03190f02fa104ffd/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5015082477abeafad7203757ae44299a610e89ee82a1503e3d4184e6bafdd519", size = 1738459 },
59
- { url = "https://files.pythonhosted.org/packages/00/de/c269cbc4faa01fb10f143b1670633a8ddd5b2e1ffd0548f7aa49cb5c70e2/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56822ff5ddfd1b745534e658faba944012346184fbfe732e0d6134b744516eea", size = 1766434 },
60
- { url = "https://files.pythonhosted.org/packages/52/b0/4ff3abd81aa7d929b27d2e1403722a65fc87b763e3a97b3a2a494bfc63bc/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2acbbfff69019d9014508c4ba0401822e8bae5a5fdc3b6814285b71231b60f3", size = 1726045 },
61
- { url = "https://files.pythonhosted.org/packages/71/16/949225a6a2dd6efcbd855fbd90cf476052e648fb011aa538e3b15b89a57a/aiohttp-3.12.15-cp312-cp312-win32.whl", hash = "sha256:d849b0901b50f2185874b9a232f38e26b9b3d4810095a7572eacea939132d4e1", size = 423591 },
62
- { url = "https://files.pythonhosted.org/packages/2b/d8/fa65d2a349fe938b76d309db1a56a75c4fb8cc7b17a398b698488a939903/aiohttp-3.12.15-cp312-cp312-win_amd64.whl", hash = "sha256:b390ef5f62bb508a9d67cb3bba9b8356e23b3996da7062f1a57ce1a79d2b3d34", size = 450266 },
28
+ sdist = { url = "https://files.pythonhosted.org/packages/82/78/8ea7308cac6934de8c74a14f3d5f65d1c89287426688be79538d0e5c013d/aiohttp-3.14.1.tar.gz", hash = "sha256:307f2cff90a764d329e77040603fa032db89c5c24fdad50c4c15334cba744035", size = 7955794 }
29
+ wheels = [
30
+ { url = "https://files.pythonhosted.org/packages/26/dd/bf526e6f0a1120dd6f2df2e97bacfe4d358f13d17a0ff5847301a1375a51/aiohttp-3.14.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa00140699487bd435fde4342d85c94cb256b7cd3a5b9c3396c67f19922afda2", size = 765225 },
31
+ { url = "https://files.pythonhosted.org/packages/8f/e1/a2872aa55495a70f61310d411541c6ee23812d9a884e000c716e1bc3edbf/aiohttp-3.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c1af67559445498b502030c35c59db59966f47041ca9de5b4e707f86bd10b5f", size = 518743 },
32
+ { url = "https://files.pythonhosted.org/packages/5b/e7/c60c7b209e509cc787de3cea0550a518538cfc08003e1c1e14c1c63fff71/aiohttp-3.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d44ec478e713ee7f29b439f7eb8dc2b9d4079e11ae114d2c2ac3d5daf30516c8", size = 514139 },
33
+ { url = "https://files.pythonhosted.org/packages/5b/8d/614ace2f579702c9840ab1e1447fd8509e35b0b904f7196418fa2f57b25d/aiohttp-3.14.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d3b1a184a9a8f548a6b73f1e26b96b052193e4b3175ed7342aaf1151a1f00a04", size = 1784088 },
34
+ { url = "https://files.pythonhosted.org/packages/49/e0/726e90f99542bf292f81a96a12cc4847deb86f3ccf62c6f4014a201f4d33/aiohttp-3.14.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5f2504bc0322437c9a1ff6d3333ca56c7477b727c995f036b976ae17b98372c8", size = 1737835 },
35
+ { url = "https://files.pythonhosted.org/packages/0b/4b/d176d5c4db9d33dacf0543102ea59503bc1d528af4cfd0b719949ca49389/aiohttp-3.14.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:73f05ea02013e02512c3bf42714f1208c57168c779cc6fe23516e4543089d0a6", size = 1842801 },
36
+ { url = "https://files.pythonhosted.org/packages/dc/d6/5a99b563690ea0cbed912ae94a2ce33993a5709a651a3a4fe761e7dd973a/aiohttp-3.14.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:797457503c2d426bee06eef808d07b31ede30b65e054444e7de64cad0061b7af", size = 1929992 },
37
+ { url = "https://files.pythonhosted.org/packages/76/7f/a987b14a3859094b3cea3f4825219c3e5536242564af6e3f9c2f6c994eb2/aiohttp-3.14.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b821a1f7dedf7e37450654e620038ac3b2e81e8fa6ea269337e97101978ec730", size = 1786989 },
38
+ { url = "https://files.pythonhosted.org/packages/f1/1a/420e5c85a3e73349372ed22ce0b6af86bfa6ce16a4b20a64a2e94608c781/aiohttp-3.14.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4cd96b5ba05d67ed0cf00b5b405c8cd99586d8e3481e8ee0a831057591af7621", size = 1640129 },
39
+ { url = "https://files.pythonhosted.org/packages/a7/80/18a592ed3be0a402cc03670bd72ee1f8563ddbe1d8d5542dbf868f274136/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d459b98a932296c6f0e94f87511a0b1b90a8a02c30a50e60a297619cd5a58ee", size = 1756576 },
40
+ { url = "https://files.pythonhosted.org/packages/ec/0b/8b3d5713373858ff71a617daf6e3b0e81ad63e79d09a3cf2f6b6b983939c/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:764457a7be60825fb770a644852ff717bcbb5042f189f2bd16df61a81b3f6573", size = 1754668 },
41
+ { url = "https://files.pythonhosted.org/packages/9f/49/fd564575cf225821d7ba5a117cb8bc27213d8a7e1811162afb43ae077039/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f7a16ef45b081454ef844502d87a848876c490c4cb5c650c230f6ec79ed2c1e7", size = 1817019 },
42
+ { url = "https://files.pythonhosted.org/packages/ed/1b/e850c9ae6fc91356552ae668bb6c51e93fa29c8aef13398a10b56678557f/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2fbc3ed048b3475b9f0cbcb9978e9d2d3511acd91ead203af26ed9f0056004cf", size = 1631638 },
43
+ { url = "https://files.pythonhosted.org/packages/eb/94/3c337ba72451a89806ace6f75bddc92bafc5b8d53d90115a512858024b63/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:bedb0cd073cc2dc035e30aeb99444389d3cd2113afe4ef9fcd23d439f5bade85", size = 1835660 },
44
+ { url = "https://files.pythonhosted.org/packages/2b/9c/9c18cf367a0498212d9ba7daf990b504a5e8ae064cda4b504e2647c89c03/aiohttp-3.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b6feea921016eb3d4e04d65fc4e9ca402d1a3801f562aef94989f54694917af3", size = 1775698 },
45
+ { url = "https://files.pythonhosted.org/packages/b5/63/a251a9d2a6cb45065b2ddc0bde2b3dd10108740a9a42f632c66405a761a2/aiohttp-3.14.1-cp311-cp311-win32.whl", hash = "sha256:313701e488100074ce99850404ee36e741abf6330179fec908a1944ecf570126", size = 458386 },
46
+ { url = "https://files.pythonhosted.org/packages/17/ca/69274c51dcd6e8947d77b2806cf47a4a15f2c846e2cbeb1882547d3da283/aiohttp-3.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:03ab4530fdcb3a543a122ba4b65ac9919da9fe9f78a03d328a6e38ff962f7aa5", size = 483406 },
47
+ { url = "https://files.pythonhosted.org/packages/2c/8a/c25904f77690c3688ec140f87591ef11a0cfe36bf3d5c0f1f38056fb62b3/aiohttp-3.14.1-cp311-cp311-win_arm64.whl", hash = "sha256:486f7d16ed54c39c2cbd7ca71fd8ba2b8bb7860df65bd7b6ed640bab96a38a8b", size = 452987 },
48
+ { 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 },
49
+ { 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 },
50
+ { 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 },
51
+ { 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 },
52
+ { 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 },
53
+ { 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 },
54
+ { 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 },
55
+ { 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 },
56
+ { 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 },
57
+ { 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 },
58
+ { 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 },
59
+ { 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 },
60
+ { 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 },
61
+ { 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 },
62
+ { 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 },
63
+ { url = "https://files.pythonhosted.org/packages/3e/61/a0c0a8f327a9c52095cdd8e312391b00d3ed64ab6c72bb5c33d8ec251cf7/aiohttp-3.14.1-cp312-cp312-win32.whl", hash = "sha256:ec8dc383ee57ea3e883477dcca3f11b65d58199f1080acaf4cd6ad9a99698be4", size = 452771 },
64
+ { url = "https://files.pythonhosted.org/packages/df/d9/ea367c75f16ac9c6cdc8febb25e8318fa21a2b1bc8d6514d4b2d890bface/aiohttp-3.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2aa92c87868cd13674989f9ee83e5f9f7ea4237589b728048e1f0c8f6caa3271", size = 479873 },
65
+ { url = "https://files.pythonhosted.org/packages/03/64/8d96784a7851156db8a4c6c3f6f91042fdf39fb15a4cc38c8b3c14833c45/aiohttp-3.14.1-cp312-cp312-win_arm64.whl", hash = "sha256:2c840c90759922cb5e6dda94596e079a30fb5a5ba548e7e0dc00574703940847", size = 448073 },
63
66
  ]
64
67
 
65
68
  [[package]]
@@ -378,11 +381,11 @@ sdist = { url = "https://files.pythonhosted.org/packages/f4/7d/aed8cd5e4ca52bb85
378
381
 
379
382
  [[package]]
380
383
  name = "idna"
381
- version = "3.10"
384
+ version = "3.18"
382
385
  source = { registry = "https://pypi.org/simple" }
383
- sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 }
386
+ sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711 }
384
387
  wheels = [
385
- { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
388
+ { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455 },
386
389
  ]
387
390
 
388
391
  [[package]]
@@ -648,16 +651,16 @@ wheels = [
648
651
 
649
652
  [[package]]
650
653
  name = "pygments"
651
- version = "2.19.2"
654
+ version = "2.20.0"
652
655
  source = { registry = "https://pypi.org/simple" }
653
- sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631 }
656
+ sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991 }
654
657
  wheels = [
655
- { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217 },
658
+ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151 },
656
659
  ]
657
660
 
658
661
  [[package]]
659
662
  name = "pytest"
660
- version = "8.4.1"
663
+ version = "9.1.1"
661
664
  source = { registry = "https://pypi.org/simple" }
662
665
  dependencies = [
663
666
  { name = "colorama", marker = "sys_platform == 'win32'" },
@@ -666,21 +669,22 @@ dependencies = [
666
669
  { name = "pluggy" },
667
670
  { name = "pygments" },
668
671
  ]
669
- sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714 }
672
+ sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369 }
670
673
  wheels = [
671
- { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474 },
674
+ { url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536 },
672
675
  ]
673
676
 
674
677
  [[package]]
675
678
  name = "pytest-asyncio"
676
- version = "1.1.0"
679
+ version = "1.4.0"
677
680
  source = { registry = "https://pypi.org/simple" }
678
681
  dependencies = [
679
682
  { name = "pytest" },
683
+ { name = "typing-extensions" },
680
684
  ]
681
- sdist = { url = "https://files.pythonhosted.org/packages/4e/51/f8794af39eeb870e87a8c8068642fc07bce0c854d6865d7dd0f2a9d338c2/pytest_asyncio-1.1.0.tar.gz", hash = "sha256:796aa822981e01b68c12e4827b8697108f7205020f24b5793b3c41555dab68ea", size = 46652 }
685
+ sdist = { url = "https://files.pythonhosted.org/packages/43/7c/d36d04db312ecf4298932ef77e6e4a9e8ad017906e24e34f0b0c361a2473/pytest_asyncio-1.4.0.tar.gz", hash = "sha256:c6c0d2259945122819f171a32ecea2c349ead889ee28176caaf492143424be42", size = 58514 }
682
686
  wheels = [
683
- { url = "https://files.pythonhosted.org/packages/c7/9d/bf86eddabf8c6c9cb1ea9a869d6873b46f105a5d292d3a6f7071f5b07935/pytest_asyncio-1.1.0-py3-none-any.whl", hash = "sha256:5fe2d69607b0bd75c656d1211f969cadba035030156745ee09e7d71740e58ecf", size = 15157 },
687
+ { url = "https://files.pythonhosted.org/packages/03/e2/08a497ef684b88559c9cc5f4ad53a37e7b99e727094a86d6ea32536d5d3c/pytest_asyncio-1.4.0-py3-none-any.whl", hash = "sha256:933ca923a23075a87fb7070c0ec272a6848489824d887c85c812670932835aa1", size = 16930 },
684
688
  ]
685
689
 
686
690
  [[package]]
@@ -699,7 +703,7 @@ wheels = [
699
703
 
700
704
  [[package]]
701
705
  name = "requests"
702
- version = "2.32.5"
706
+ version = "2.34.2"
703
707
  source = { registry = "https://pypi.org/simple" }
704
708
  dependencies = [
705
709
  { name = "certifi" },
@@ -707,9 +711,9 @@ dependencies = [
707
711
  { name = "idna" },
708
712
  { name = "urllib3" },
709
713
  ]
710
- sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517 }
714
+ sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856 }
711
715
  wheels = [
712
- { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738 },
716
+ { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075 },
713
717
  ]
714
718
 
715
719
  [[package]]
@@ -892,11 +896,11 @@ wheels = [
892
896
 
893
897
  [[package]]
894
898
  name = "urllib3"
895
- version = "2.5.0"
899
+ version = "2.7.0"
896
900
  source = { registry = "https://pypi.org/simple" }
897
- sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185 }
901
+ sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602 }
898
902
  wheels = [
899
- { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 },
903
+ { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087 },
900
904
  ]
901
905
 
902
906
  [[package]]
graphql_api-1.6.9/VERSION DELETED
@@ -1 +0,0 @@
1
- 1.6.9
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