haiway 0.10.10__tar.gz → 0.10.13__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 (99) hide show
  1. {haiway-0.10.10 → haiway-0.10.13}/.github/workflows/publish.yml +0 -2
  2. {haiway-0.10.10 → haiway-0.10.13}/Makefile +1 -1
  3. {haiway-0.10.10 → haiway-0.10.13}/PKG-INFO +1 -1
  4. {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/tracing.py +3 -2
  5. {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/attributes.py +7 -1
  6. {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/collections.py +93 -16
  7. {haiway-0.10.10 → haiway-0.10.13}/junit/test-results.xml +1 -1
  8. {haiway-0.10.10 → haiway-0.10.13}/pyproject.toml +3 -6
  9. {haiway-0.10.10 → haiway-0.10.13}/uv.lock +25 -25
  10. {haiway-0.10.10 → haiway-0.10.13}/.github/workflows/ci.yml +0 -0
  11. {haiway-0.10.10 → haiway-0.10.13}/.gitignore +0 -0
  12. {haiway-0.10.10 → haiway-0.10.13}/LICENSE +0 -0
  13. {haiway-0.10.10 → haiway-0.10.13}/README.md +0 -0
  14. {haiway-0.10.10 → haiway-0.10.13}/config/pre-push +0 -0
  15. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/.dockerignore +0 -0
  16. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/Dockerfile +0 -0
  17. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/Makefile +0 -0
  18. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/README.md +0 -0
  19. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/config/.env.example +0 -0
  20. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/config/unit.json +0 -0
  21. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/docker-compose.yml +0 -0
  22. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/pyproject.toml +0 -0
  23. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/__int__.py +0 -0
  24. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/__init__.py +0 -0
  25. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/calls.py +0 -0
  26. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/config.py +0 -0
  27. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/state.py +0 -0
  28. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/types.py +0 -0
  29. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/user_tasks.py +0 -0
  30. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/__init__.py +0 -0
  31. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/postgres/__init__.py +0 -0
  32. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/postgres/client.py +0 -0
  33. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/postgres/config.py +0 -0
  34. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/postgres/state.py +0 -0
  35. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/postgres/types.py +0 -0
  36. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/__init__.py +0 -0
  37. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/__main__.py +0 -0
  38. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/application.py +0 -0
  39. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/config.py +0 -0
  40. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/middlewares/__init__.py +0 -0
  41. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/middlewares/context.py +0 -0
  42. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/routes/__init__.py +0 -0
  43. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/routes/technical.py +0 -0
  44. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/routes/todos.py +0 -0
  45. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/__init__.py +0 -0
  46. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/__init__.py +0 -0
  47. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/calls.py +0 -0
  48. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/config.py +0 -0
  49. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/postgres.py +0 -0
  50. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/state.py +0 -0
  51. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/types.py +0 -0
  52. {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/uv.lock +0 -0
  53. {haiway-0.10.10 → haiway-0.10.13}/guidelines/functionalities.md +0 -0
  54. {haiway-0.10.10 → haiway-0.10.13}/guidelines/packages.md +0 -0
  55. {haiway-0.10.10/src → haiway-0.10.13}/haiway/__init__.py +0 -0
  56. {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/__init__.py +0 -0
  57. {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/access.py +0 -0
  58. {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/disposables.py +0 -0
  59. {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/identifier.py +0 -0
  60. {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/logging.py +0 -0
  61. {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/metrics.py +0 -0
  62. {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/state.py +0 -0
  63. {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/tasks.py +0 -0
  64. {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/types.py +0 -0
  65. {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/__init__.py +0 -0
  66. {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/asynchrony.py +0 -0
  67. {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/caching.py +0 -0
  68. {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/metrics.py +0 -0
  69. {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/retries.py +0 -0
  70. {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/throttling.py +0 -0
  71. {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/timeouted.py +0 -0
  72. {haiway-0.10.10/src → haiway-0.10.13}/haiway/py.typed +0 -0
  73. {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/__init__.py +0 -0
  74. {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/path.py +0 -0
  75. {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/requirement.py +0 -0
  76. {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/structure.py +0 -0
  77. {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/validation.py +0 -0
  78. {haiway-0.10.10/src → haiway-0.10.13}/haiway/types/__init__.py +0 -0
  79. {haiway-0.10.10/src → haiway-0.10.13}/haiway/types/default.py +0 -0
  80. {haiway-0.10.10/src → haiway-0.10.13}/haiway/types/frozen.py +0 -0
  81. {haiway-0.10.10/src → haiway-0.10.13}/haiway/types/missing.py +0 -0
  82. {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/__init__.py +0 -0
  83. {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/always.py +0 -0
  84. {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/env.py +0 -0
  85. {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/freezing.py +0 -0
  86. {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/logs.py +0 -0
  87. {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/mimic.py +0 -0
  88. {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/noop.py +0 -0
  89. {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/queue.py +0 -0
  90. {haiway-0.10.10 → haiway-0.10.13}/hatch_version.py +0 -0
  91. {haiway-0.10.10 → haiway-0.10.13}/tests/__init__.py +0 -0
  92. {haiway-0.10.10 → haiway-0.10.13}/tests/test_async_queue.py +0 -0
  93. {haiway-0.10.10 → haiway-0.10.13}/tests/test_attribute_path.py +0 -0
  94. {haiway-0.10.10 → haiway-0.10.13}/tests/test_auto_retry.py +0 -0
  95. {haiway-0.10.10 → haiway-0.10.13}/tests/test_cache.py +0 -0
  96. {haiway-0.10.10 → haiway-0.10.13}/tests/test_context.py +0 -0
  97. {haiway-0.10.10 → haiway-0.10.13}/tests/test_state.py +0 -0
  98. {haiway-0.10.10 → haiway-0.10.13}/tests/test_streaming.py +0 -0
  99. {haiway-0.10.10 → haiway-0.10.13}/tests/test_timeout.py +0 -0
@@ -14,8 +14,6 @@ jobs:
14
14
  - uses: actions/checkout@v4
15
15
  with:
16
16
  ref: ${{ github.event.release.tag_name }}
17
- fetch-depth: 1
18
- fetch-tags: false
19
17
 
20
18
  - name: Install uv and set the python version
21
19
  uses: astral-sh/setup-uv@v5
@@ -10,7 +10,7 @@ TESTS_PATH := tests
10
10
  -include .env
11
11
 
12
12
  ifndef UV_VERSION
13
- UV_VERSION := 0.6.2
13
+ UV_VERSION := 0.6.4
14
14
  endif
15
15
 
16
16
  .PHONY: uv_check venv sync update format lint test release
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: haiway
3
- Version: 0.10.10
3
+ Version: 0.10.13
4
4
  Summary: Framework for dependency injection and state management within structured concurrency model.
5
5
  Project-URL: Homepage, https://miquido.com
6
6
  Project-URL: Repository, https://github.com/miquido/haiway.git
@@ -74,6 +74,7 @@ def traced[**Args, Result](
74
74
  label=function.__name__,
75
75
  ),
76
76
  )
77
+
77
78
  else:
78
79
  return _traced_sync(
79
80
  function,
@@ -101,7 +102,7 @@ def _traced_sync[**Args, Result](
101
102
  return result
102
103
 
103
104
  except BaseException as exc:
104
- ctx.record(ResultTrace.of(exc))
105
+ ctx.record(ResultTrace.of(f"{type(exc)}: {exc}"))
105
106
  raise exc
106
107
 
107
108
  return mimic_function(
@@ -127,7 +128,7 @@ def _traced_async[**Args, Result](
127
128
  return result
128
129
 
129
130
  except BaseException as exc:
130
- ctx.record(ResultTrace.of(exc))
131
+ ctx.record(ResultTrace.of(f"{type(exc)}: {exc}"))
131
132
  raise exc
132
133
 
133
134
  return mimic_function(
@@ -66,6 +66,9 @@ class AttributeAnnotation:
66
66
  return self
67
67
 
68
68
  def __str__(self) -> str:
69
+ if alias := self.extra.get("TYPE_ALIAS"):
70
+ return alias
71
+
69
72
  origin_str: str = getattr(self.origin, "__name__", str(self.origin))
70
73
  arguments_str: str
71
74
  if self.arguments:
@@ -337,7 +340,10 @@ def _resolve_type_alias(
337
340
 
338
341
  resolved_attribute.origin = resolved.origin
339
342
  resolved_attribute.arguments = resolved.arguments
340
- resolved_attribute.extra = resolved.extra
343
+ resolved_attribute.extra = {
344
+ **resolved.extra,
345
+ "TYPE_ALIAS": annotation.__name__,
346
+ }
341
347
  resolved_attribute.required = resolved.required
342
348
 
343
349
  return resolved_attribute
@@ -1,4 +1,5 @@
1
1
  from collections.abc import Mapping, Sequence, Set
2
+ from typing import overload
2
3
 
3
4
  __all__ = [
4
5
  "as_dict",
@@ -8,24 +9,43 @@ __all__ = [
8
9
  ]
9
10
 
10
11
 
12
+ @overload
11
13
  def as_list[T](
12
14
  collection: Sequence[T],
13
15
  /,
14
- ) -> list[T]:
16
+ ) -> list[T]: ...
17
+
18
+
19
+ @overload
20
+ def as_list[T](
21
+ collection: Sequence[T] | None,
22
+ /,
23
+ ) -> list[T] | None: ...
24
+
25
+
26
+ def as_list[T](
27
+ collection: Sequence[T] | None,
28
+ /,
29
+ ) -> list[T] | None:
15
30
  """
16
31
  Converts any given Sequence into a list.
17
32
 
18
33
  Parameters
19
34
  ----------
20
- collection : Sequence[T]
35
+ collection : Sequence[T] | None
21
36
  The input collection to be converted.
22
37
 
23
38
  Returns
24
39
  -------
25
- list[T]
26
- A new list containing all elements of the input collection,
27
- or the original list if it was already one.
40
+ list[T] | None
41
+ A new list containing all elements of the input collection,\
42
+ or the original list if it was already one.
43
+ None if no value was provided.
28
44
  """
45
+
46
+ if collection is None:
47
+ return None
48
+
29
49
  if isinstance(collection, list):
30
50
  return collection
31
51
 
@@ -33,24 +53,43 @@ def as_list[T](
33
53
  return list(collection)
34
54
 
35
55
 
56
+ @overload
36
57
  def as_tuple[T](
37
58
  collection: Sequence[T],
38
59
  /,
39
- ) -> tuple[T, ...]:
60
+ ) -> tuple[T, ...]: ...
61
+
62
+
63
+ @overload
64
+ def as_tuple[T](
65
+ collection: Sequence[T] | None,
66
+ /,
67
+ ) -> tuple[T, ...] | None: ...
68
+
69
+
70
+ def as_tuple[T](
71
+ collection: Sequence[T] | None,
72
+ /,
73
+ ) -> tuple[T, ...] | None:
40
74
  """
41
75
  Converts any given Sequence into a tuple.
42
76
 
43
77
  Parameters
44
78
  ----------
45
- collection : Sequence[T]
79
+ collection : Sequence[T] | None
46
80
  The input collection to be converted.
47
81
 
48
82
  Returns
49
83
  -------
50
- tuple[T]
51
- A new tuple containing all elements of the input collection,
52
- or the original tuple if it was already one.
84
+ tuple[T] | None
85
+ A new tuple containing all elements of the input collection,\
86
+ or the original tuple if it was already one.
87
+ None if no value was provided.
53
88
  """
89
+
90
+ if collection is None:
91
+ return None
92
+
54
93
  if isinstance(collection, tuple):
55
94
  return collection
56
95
 
@@ -58,10 +97,24 @@ def as_tuple[T](
58
97
  return tuple(collection)
59
98
 
60
99
 
100
+ @overload
61
101
  def as_set[T](
62
102
  collection: Set[T],
63
103
  /,
64
- ) -> set[T]:
104
+ ) -> set[T]: ...
105
+
106
+
107
+ @overload
108
+ def as_set[T](
109
+ collection: Set[T] | None,
110
+ /,
111
+ ) -> set[T] | None: ...
112
+
113
+
114
+ def as_set[T](
115
+ collection: Set[T] | None,
116
+ /,
117
+ ) -> set[T] | None:
65
118
  """
66
119
  Converts any given Set into a set.
67
120
 
@@ -73,9 +126,14 @@ def as_set[T](
73
126
  Returns
74
127
  -------
75
128
  set[T]
76
- A new set containing all elements of the input collection,
77
- or the original set if it was already one.
129
+ A new set containing all elements of the input collection,\
130
+ or the original set if it was already one.
131
+ None if no value was provided.
78
132
  """
133
+
134
+ if collection is None:
135
+ return None
136
+
79
137
  if isinstance(collection, set):
80
138
  return collection
81
139
 
@@ -83,10 +141,24 @@ def as_set[T](
83
141
  return set(collection)
84
142
 
85
143
 
144
+ @overload
86
145
  def as_dict[K, V](
87
146
  collection: Mapping[K, V],
88
147
  /,
89
- ) -> dict[K, V]:
148
+ ) -> dict[K, V]: ...
149
+
150
+
151
+ @overload
152
+ def as_dict[K, V](
153
+ collection: Mapping[K, V] | None,
154
+ /,
155
+ ) -> dict[K, V] | None: ...
156
+
157
+
158
+ def as_dict[K, V](
159
+ collection: Mapping[K, V] | None,
160
+ /,
161
+ ) -> dict[K, V] | None:
90
162
  """
91
163
  Converts any given Mapping into a dict.
92
164
 
@@ -98,9 +170,14 @@ def as_dict[K, V](
98
170
  Returns
99
171
  -------
100
172
  dict[K, V]
101
- A new dict containing all elements of the input collection,
102
- or the original dict if it was already one.
173
+ A new dict containing all elements of the input collection,\
174
+ or the original dict if it was already one.
175
+ None if no value was provided.
103
176
  """
177
+
178
+ if collection is None:
179
+ return None
180
+
104
181
  if isinstance(collection, dict):
105
182
  return collection
106
183
 
@@ -1 +1 @@
1
- <?xml version="1.0" encoding="utf-8"?><testsuites><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="79" time="1.146" timestamp="2025-02-21T14:03:26.720970" hostname="fv-az1705-503"><testcase classname="tests.test_async_queue" name="test_fails_when_stream_fails" time="0.001" /><testcase classname="tests.test_async_queue" name="test_cancels_when_iteration_cancels" time="0.001" /><testcase classname="tests.test_async_queue" name="test_ends_when_stream_ends" time="0.001" /><testcase classname="tests.test_async_queue" name="test_buffers_values_when_not_reading" time="0.001" /><testcase classname="tests.test_async_queue" name="test_delivers_buffer_when_streaming_fails" time="0.001" /><testcase classname="tests.test_async_queue" name="test_delivers_updates_when_sending" time="0.001" /><testcase classname="tests.test_async_queue" name="test_fails_when_sending_to_finished" time="0.001" /><testcase classname="tests.test_async_queue" name="test_ignores_when_finishing_when_finished" time="0.001" /><testcase classname="tests.test_attribute_path" name="test_id_path_points_to_self" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_attribute_path_points_to_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_nested_attribute_path_points_to_nested_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_recursive_attribute_path_points_to_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_list_item_path_points_to_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_tuple_item_path_points_to_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_mixed_tuple_item_path_points_to_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_dict_item_path_points_to_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_id_path_set_updates_self" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_attribute_path_set_updates_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_nested_attribute_path_set_updates_nested_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_recursive_attribute_set_updates_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_list_item_path_set_updates_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_tuple_item_path_set_updates_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_mixed_tuple_item_set_updates_item" time="0.001" /><testcase classname="tests.test_attribute_path" name="test_dict_item_path_set_updates_item" time="0.000" /><testcase classname="tests.test_auto_retry" name="test_returns_value_without_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_retries_with_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_logs_issue_with_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_fails_with_exceeding_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_fails_with_cancellation" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_retries_with_selected_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_fails_with_not_selected_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_returns_value_without_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_retries_with_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_fails_with_exceeding_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_fails_with_cancellation" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_fails_when_cancelled" time="0.021" /><testcase classname="tests.test_auto_retry" name="test_async_uses_delay_with_errors" time="0.101" /><testcase classname="tests.test_auto_retry" name="test_async_uses_computed_delay_with_errors" time="0.107" /><testcase classname="tests.test_auto_retry" name="test_async_logs_issue_with_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_retries_with_selected_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_fails_with_not_selected_errors" time="0.001" /><testcase classname="tests.test_cache" name="test_returns_cache_value_with_same_argument" time="0.000" /><testcase classname="tests.test_cache" name="test_returns_fresh_value_with_different_argument" time="0.000" /><testcase classname="tests.test_cache" name="test_returns_fresh_value_with_limit_exceed" time="0.000" /><testcase classname="tests.test_cache" name="test_returns_same_value_with_repeating_argument" time="0.000" /><testcase classname="tests.test_cache" name="test_fails_with_error" time="0.000" /><testcase classname="tests.test_cache" name="test_returns_fresh_value_with_expiration_time_exceed" time="0.021" /><testcase classname="tests.test_cache" name="test_async_returns_cache_value_with_same_argument" time="0.001" /><testcase classname="tests.test_cache" name="test_async_returns_fresh_value_with_different_argument" time="0.001" /><testcase classname="tests.test_cache" name="test_async_returns_fresh_value_with_limit_exceed" time="0.001" /><testcase classname="tests.test_cache" name="test_async_returns_same_value_with_repeating_argument" time="0.001" /><testcase classname="tests.test_cache" name="test_async_returns_fresh_value_with_expiration_time_exceed" time="0.021" /><testcase classname="tests.test_cache" name="test_async_cancel_waiting_does_not_cancel_task" time="0.502" /><testcase classname="tests.test_cache" name="test_async_expiration_does_not_cancel_task" time="0.021" /><testcase classname="tests.test_cache" name="test_async_expiration_creates_new_task" time="0.041" /><testcase classname="tests.test_cache" name="test_async_fails_with_error" time="0.001" /><testcase classname="tests.test_context" name="test_state_is_available_according_to_context" time="0.001" /><testcase classname="tests.test_context" name="test_state_update_updates_local_context" time="0.001" /><testcase classname="tests.test_context" name="test_exceptions_are_propagated" time="0.001" /><testcase classname="tests.test_state" name="test_basic_initializes_with_arguments" time="0.002" /><testcase classname="tests.test_state" name="test_basic_initializes_with_defaults" time="0.001" /><testcase classname="tests.test_state" name="test_basic_equals_checks_properties" time="0.000" /><testcase classname="tests.test_state" name="test_basic_initializes_with_arguments_and_defaults" time="0.001" /><testcase classname="tests.test_state" name="test_parametrized_initializes_with_proper_parameters" time="0.000" /><testcase classname="tests.test_state" name="test_nested_initializes_with_proper_arguments" time="0.001" /><testcase classname="tests.test_state" name="test_dict_skips_missing_properties" time="0.000" /><testcase classname="tests.test_state" name="test_initialization_allows_missing_properties" time="0.000" /><testcase classname="tests.test_state" name="test_generic_subtypes_validation" time="0.002" /><testcase classname="tests.test_state" name="test_copying_leaves_same_object" time="0.001" /><testcase classname="tests.test_streaming" name="test_fails_when_generator_fails" time="0.001" /><testcase classname="tests.test_streaming" name="test_cancels_when_iteration_cancels" time="0.001" /><testcase classname="tests.test_streaming" name="test_ends_when_generator_ends" time="0.001" /><testcase classname="tests.test_streaming" name="test_delivers_updates_when_generating" time="0.001" /><testcase classname="tests.test_streaming" name="test_streaming_context_variables_access_is_preserved" time="0.001" /><testcase classname="tests.test_streaming" name="test_nested_streaming_streams_correctly" time="0.001" /><testcase classname="tests.test_timeout" name="test_returns_result_when_returning_value" time="0.001" /><testcase classname="tests.test_timeout" name="test_raises_with_error" time="0.001" /><testcase classname="tests.test_timeout" name="test_raises_with_cancel" time="0.011" /><testcase classname="tests.test_timeout" name="test_raises_with_timeout" time="0.011" /></testsuite></testsuites>
1
+ <?xml version="1.0" encoding="utf-8"?><testsuites><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="79" time="1.118" timestamp="2025-03-04T12:06:25.447170" hostname="fv-az1384-307"><testcase classname="tests.test_async_queue" name="test_fails_when_stream_fails" time="0.001" /><testcase classname="tests.test_async_queue" name="test_cancels_when_iteration_cancels" time="0.001" /><testcase classname="tests.test_async_queue" name="test_ends_when_stream_ends" time="0.001" /><testcase classname="tests.test_async_queue" name="test_buffers_values_when_not_reading" time="0.001" /><testcase classname="tests.test_async_queue" name="test_delivers_buffer_when_streaming_fails" time="0.001" /><testcase classname="tests.test_async_queue" name="test_delivers_updates_when_sending" time="0.001" /><testcase classname="tests.test_async_queue" name="test_fails_when_sending_to_finished" time="0.001" /><testcase classname="tests.test_async_queue" name="test_ignores_when_finishing_when_finished" time="0.001" /><testcase classname="tests.test_attribute_path" name="test_id_path_points_to_self" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_attribute_path_points_to_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_nested_attribute_path_points_to_nested_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_recursive_attribute_path_points_to_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_list_item_path_points_to_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_tuple_item_path_points_to_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_mixed_tuple_item_path_points_to_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_dict_item_path_points_to_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_id_path_set_updates_self" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_attribute_path_set_updates_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_nested_attribute_path_set_updates_nested_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_recursive_attribute_set_updates_attribute" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_list_item_path_set_updates_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_tuple_item_path_set_updates_item" time="0.000" /><testcase classname="tests.test_attribute_path" name="test_mixed_tuple_item_set_updates_item" time="0.001" /><testcase classname="tests.test_attribute_path" name="test_dict_item_path_set_updates_item" time="0.000" /><testcase classname="tests.test_auto_retry" name="test_returns_value_without_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_retries_with_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_logs_issue_with_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_fails_with_exceeding_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_fails_with_cancellation" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_retries_with_selected_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_fails_with_not_selected_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_returns_value_without_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_retries_with_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_fails_with_exceeding_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_fails_with_cancellation" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_fails_when_cancelled" time="0.021" /><testcase classname="tests.test_auto_retry" name="test_async_uses_delay_with_errors" time="0.102" /><testcase classname="tests.test_auto_retry" name="test_async_uses_computed_delay_with_errors" time="0.106" /><testcase classname="tests.test_auto_retry" name="test_async_logs_issue_with_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_retries_with_selected_errors" time="0.001" /><testcase classname="tests.test_auto_retry" name="test_async_fails_with_not_selected_errors" time="0.001" /><testcase classname="tests.test_cache" name="test_returns_cache_value_with_same_argument" time="0.001" /><testcase classname="tests.test_cache" name="test_returns_fresh_value_with_different_argument" time="0.000" /><testcase classname="tests.test_cache" name="test_returns_fresh_value_with_limit_exceed" time="0.000" /><testcase classname="tests.test_cache" name="test_returns_same_value_with_repeating_argument" time="0.000" /><testcase classname="tests.test_cache" name="test_fails_with_error" time="0.000" /><testcase classname="tests.test_cache" name="test_returns_fresh_value_with_expiration_time_exceed" time="0.020" /><testcase classname="tests.test_cache" name="test_async_returns_cache_value_with_same_argument" time="0.001" /><testcase classname="tests.test_cache" name="test_async_returns_fresh_value_with_different_argument" time="0.001" /><testcase classname="tests.test_cache" name="test_async_returns_fresh_value_with_limit_exceed" time="0.001" /><testcase classname="tests.test_cache" name="test_async_returns_same_value_with_repeating_argument" time="0.001" /><testcase classname="tests.test_cache" name="test_async_returns_fresh_value_with_expiration_time_exceed" time="0.021" /><testcase classname="tests.test_cache" name="test_async_cancel_waiting_does_not_cancel_task" time="0.502" /><testcase classname="tests.test_cache" name="test_async_expiration_does_not_cancel_task" time="0.021" /><testcase classname="tests.test_cache" name="test_async_expiration_creates_new_task" time="0.041" /><testcase classname="tests.test_cache" name="test_async_fails_with_error" time="0.001" /><testcase classname="tests.test_context" name="test_state_is_available_according_to_context" time="0.001" /><testcase classname="tests.test_context" name="test_state_update_updates_local_context" time="0.001" /><testcase classname="tests.test_context" name="test_exceptions_are_propagated" time="0.001" /><testcase classname="tests.test_state" name="test_basic_initializes_with_arguments" time="0.002" /><testcase classname="tests.test_state" name="test_basic_initializes_with_defaults" time="0.001" /><testcase classname="tests.test_state" name="test_basic_equals_checks_properties" time="0.000" /><testcase classname="tests.test_state" name="test_basic_initializes_with_arguments_and_defaults" time="0.001" /><testcase classname="tests.test_state" name="test_parametrized_initializes_with_proper_parameters" time="0.000" /><testcase classname="tests.test_state" name="test_nested_initializes_with_proper_arguments" time="0.001" /><testcase classname="tests.test_state" name="test_dict_skips_missing_properties" time="0.000" /><testcase classname="tests.test_state" name="test_initialization_allows_missing_properties" time="0.000" /><testcase classname="tests.test_state" name="test_generic_subtypes_validation" time="0.002" /><testcase classname="tests.test_state" name="test_copying_leaves_same_object" time="0.001" /><testcase classname="tests.test_streaming" name="test_fails_when_generator_fails" time="0.001" /><testcase classname="tests.test_streaming" name="test_cancels_when_iteration_cancels" time="0.001" /><testcase classname="tests.test_streaming" name="test_ends_when_generator_ends" time="0.001" /><testcase classname="tests.test_streaming" name="test_delivers_updates_when_generating" time="0.001" /><testcase classname="tests.test_streaming" name="test_streaming_context_variables_access_is_preserved" time="0.001" /><testcase classname="tests.test_streaming" name="test_nested_streaming_streams_correctly" time="0.001" /><testcase classname="tests.test_timeout" name="test_returns_result_when_returning_value" time="0.001" /><testcase classname="tests.test_timeout" name="test_raises_with_error" time="0.001" /><testcase classname="tests.test_timeout" name="test_raises_with_cancel" time="0.011" /><testcase classname="tests.test_timeout" name="test_raises_with_timeout" time="0.011" /></testsuite></testsuites>
@@ -37,6 +37,9 @@ dev = [
37
37
  "pytest-asyncio~=0.23",
38
38
  ]
39
39
 
40
+ [tool.hatch.build]
41
+ sources = ["./src"]
42
+
40
43
  [tool.hatch.metadata.hooks.custom]
41
44
  path = "hatch_version.py"
42
45
 
@@ -67,9 +70,3 @@ useLibraryCodeForTypes = true
67
70
  [tool.pyright.analysis]
68
71
  diagnosticMode = "workspace"
69
72
  typeCheckingMode = "strict"
70
-
71
- [tool.setuptools]
72
- include-package-data = true
73
-
74
- [tool.setuptools.packages.find]
75
- where = ["src"]
@@ -170,15 +170,15 @@ wheels = [
170
170
 
171
171
  [[package]]
172
172
  name = "pyright"
173
- version = "1.1.394"
173
+ version = "1.1.396"
174
174
  source = { registry = "https://pypi.org/simple" }
175
175
  dependencies = [
176
176
  { name = "nodeenv" },
177
177
  { name = "typing-extensions" },
178
178
  ]
179
- sdist = { url = "https://files.pythonhosted.org/packages/b1/e4/79f4d8a342eed6790fdebdb500e95062f319ee3d7d75ae27304ff995ae8c/pyright-1.1.394.tar.gz", hash = "sha256:56f2a3ab88c5214a451eb71d8f2792b7700434f841ea219119ade7f42ca93608", size = 3809348 }
179
+ sdist = { url = "https://files.pythonhosted.org/packages/bd/73/f20cb1dea1bdc1774e7f860fb69dc0718c7d8dea854a345faec845eb086a/pyright-1.1.396.tar.gz", hash = "sha256:142901f5908f5a0895be3d3befcc18bedcdb8cc1798deecaec86ef7233a29b03", size = 3814400 }
180
180
  wheels = [
181
- { url = "https://files.pythonhosted.org/packages/d6/4c/50c74e3d589517a9712a61a26143b587dba6285434a17aebf2ce6b82d2c3/pyright-1.1.394-py3-none-any.whl", hash = "sha256:5f74cce0a795a295fb768759bbeeec62561215dea657edcaab48a932b031ddbb", size = 5679540 },
181
+ { url = "https://files.pythonhosted.org/packages/80/be/ecb7cfb42d242b7ee764b52e6ff4782beeec00e3b943a3ec832b281f9da6/pyright-1.1.396-py3-none-any.whl", hash = "sha256:c635e473095b9138c471abccca22b9fedbe63858e0b40d4fc4b67da041891844", size = 5689355 },
182
182
  ]
183
183
 
184
184
  [[package]]
@@ -262,36 +262,36 @@ wheels = [
262
262
 
263
263
  [[package]]
264
264
  name = "ruff"
265
- version = "0.9.7"
265
+ version = "0.9.9"
266
266
  source = { registry = "https://pypi.org/simple" }
267
- sdist = { url = "https://files.pythonhosted.org/packages/39/8b/a86c300359861b186f18359adf4437ac8e4c52e42daa9eedc731ef9d5b53/ruff-0.9.7.tar.gz", hash = "sha256:643757633417907510157b206e490c3aa11cab0c087c912f60e07fbafa87a4c6", size = 3669813 }
267
+ sdist = { url = "https://files.pythonhosted.org/packages/6f/c3/418441a8170e8d53d05c0b9dad69760dbc7b8a12c10dbe6db1e1205d2377/ruff-0.9.9.tar.gz", hash = "sha256:0062ed13f22173e85f8f7056f9a24016e692efeea8704d1a5e8011b8aa850933", size = 3717448 }
268
268
  wheels = [
269
- { url = "https://files.pythonhosted.org/packages/b1/f3/3a1d22973291226df4b4e2ff70196b926b6f910c488479adb0eeb42a0d7f/ruff-0.9.7-py3-none-linux_armv6l.whl", hash = "sha256:99d50def47305fe6f233eb8dabfd60047578ca87c9dcb235c9723ab1175180f4", size = 11774588 },
270
- { url = "https://files.pythonhosted.org/packages/8e/c9/b881f4157b9b884f2994fd08ee92ae3663fb24e34b0372ac3af999aa7fc6/ruff-0.9.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d59105ae9c44152c3d40a9c40d6331a7acd1cdf5ef404fbe31178a77b174ea66", size = 11746848 },
271
- { url = "https://files.pythonhosted.org/packages/14/89/2f546c133f73886ed50a3d449e6bf4af27d92d2f960a43a93d89353f0945/ruff-0.9.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f313b5800483770bd540cddac7c90fc46f895f427b7820f18fe1822697f1fec9", size = 11177525 },
272
- { url = "https://files.pythonhosted.org/packages/d7/93/6b98f2c12bf28ab9def59c50c9c49508519c5b5cfecca6de871cf01237f6/ruff-0.9.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:042ae32b41343888f59c0a4148f103208bf6b21c90118d51dc93a68366f4e903", size = 11996580 },
273
- { url = "https://files.pythonhosted.org/packages/8e/3f/b3fcaf4f6d875e679ac2b71a72f6691a8128ea3cb7be07cbb249f477c061/ruff-0.9.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:87862589373b33cc484b10831004e5e5ec47dc10d2b41ba770e837d4f429d721", size = 11525674 },
274
- { url = "https://files.pythonhosted.org/packages/f0/48/33fbf18defb74d624535d5d22adcb09a64c9bbabfa755bc666189a6b2210/ruff-0.9.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a17e1e01bee0926d351a1ee9bc15c445beae888f90069a6192a07a84af544b6b", size = 12739151 },
275
- { url = "https://files.pythonhosted.org/packages/63/b5/7e161080c5e19fa69495cbab7c00975ef8a90f3679caa6164921d7f52f4a/ruff-0.9.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7c1f880ac5b2cbebd58b8ebde57069a374865c73f3bf41f05fe7a179c1c8ef22", size = 13416128 },
276
- { url = "https://files.pythonhosted.org/packages/4e/c8/b5e7d61fb1c1b26f271ac301ff6d9de5e4d9a9a63f67d732fa8f200f0c88/ruff-0.9.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e63fc20143c291cab2841dbb8260e96bafbe1ba13fd3d60d28be2c71e312da49", size = 12870858 },
277
- { url = "https://files.pythonhosted.org/packages/da/cb/2a1a8e4e291a54d28259f8fc6a674cd5b8833e93852c7ef5de436d6ed729/ruff-0.9.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91ff963baed3e9a6a4eba2a02f4ca8eaa6eba1cc0521aec0987da8d62f53cbef", size = 14786046 },
278
- { url = "https://files.pythonhosted.org/packages/ca/6c/c8f8a313be1943f333f376d79724260da5701426c0905762e3ddb389e3f4/ruff-0.9.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88362e3227c82f63eaebf0b2eff5b88990280fb1ecf7105523883ba8c3aaf6fb", size = 12550834 },
279
- { url = "https://files.pythonhosted.org/packages/9d/ad/f70cf5e8e7c52a25e166bdc84c082163c9c6f82a073f654c321b4dff9660/ruff-0.9.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0372c5a90349f00212270421fe91874b866fd3626eb3b397ede06cd385f6f7e0", size = 11961307 },
280
- { url = "https://files.pythonhosted.org/packages/52/d5/4f303ea94a5f4f454daf4d02671b1fbfe2a318b5fcd009f957466f936c50/ruff-0.9.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d76b8ab60e99e6424cd9d3d923274a1324aefce04f8ea537136b8398bbae0a62", size = 11612039 },
281
- { url = "https://files.pythonhosted.org/packages/eb/c8/bd12a23a75603c704ce86723be0648ba3d4ecc2af07eecd2e9fa112f7e19/ruff-0.9.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0c439bdfc8983e1336577f00e09a4e7a78944fe01e4ea7fe616d00c3ec69a3d0", size = 12168177 },
282
- { url = "https://files.pythonhosted.org/packages/cc/57/d648d4f73400fef047d62d464d1a14591f2e6b3d4a15e93e23a53c20705d/ruff-0.9.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:115d1f15e8fdd445a7b4dc9a30abae22de3f6bcabeb503964904471691ef7606", size = 12610122 },
283
- { url = "https://files.pythonhosted.org/packages/49/79/acbc1edd03ac0e2a04ae2593555dbc9990b34090a9729a0c4c0cf20fb595/ruff-0.9.7-py3-none-win32.whl", hash = "sha256:e9ece95b7de5923cbf38893f066ed2872be2f2f477ba94f826c8defdd6ec6b7d", size = 9988751 },
284
- { url = "https://files.pythonhosted.org/packages/6d/95/67153a838c6b6ba7a2401241fd8a00cd8c627a8e4a0491b8d853dedeffe0/ruff-0.9.7-py3-none-win_amd64.whl", hash = "sha256:3770fe52b9d691a15f0b87ada29c45324b2ace8f01200fb0c14845e499eb0c2c", size = 11002987 },
285
- { url = "https://files.pythonhosted.org/packages/63/6a/aca01554949f3a401991dc32fe22837baeaccb8a0d868256cbb26a029778/ruff-0.9.7-py3-none-win_arm64.whl", hash = "sha256:b075a700b2533feb7a01130ff656a4ec0d5f340bb540ad98759b8401c32c2037", size = 10177763 },
269
+ { url = "https://files.pythonhosted.org/packages/bc/c3/2c4afa9ba467555d074b146d9aed0633a56ccdb900839fb008295d037b89/ruff-0.9.9-py3-none-linux_armv6l.whl", hash = "sha256:628abb5ea10345e53dff55b167595a159d3e174d6720bf19761f5e467e68d367", size = 10027252 },
270
+ { url = "https://files.pythonhosted.org/packages/33/d1/439e58487cf9eac26378332e25e7d5ade4b800ce1eec7dc2cfc9b0d7ca96/ruff-0.9.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b6cd1428e834b35d7493354723543b28cc11dc14d1ce19b685f6e68e07c05ec7", size = 10840721 },
271
+ { url = "https://files.pythonhosted.org/packages/50/44/fead822c38281ba0122f1b76b460488a175a9bd48b130650a6fb6dbcbcf9/ruff-0.9.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5ee162652869120ad260670706f3cd36cd3f32b0c651f02b6da142652c54941d", size = 10161439 },
272
+ { url = "https://files.pythonhosted.org/packages/11/ae/d404a2ab8e61ddf6342e09cc6b7f7846cce6b243e45c2007dbe0ca928a5d/ruff-0.9.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3aa0f6b75082c9be1ec5a1db78c6d4b02e2375c3068438241dc19c7c306cc61a", size = 10336264 },
273
+ { url = "https://files.pythonhosted.org/packages/6a/4e/7c268aa7d84cd709fb6f046b8972313142cffb40dfff1d2515c5e6288d54/ruff-0.9.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:584cc66e89fb5f80f84b05133dd677a17cdd86901d6479712c96597a3f28e7fe", size = 9908774 },
274
+ { url = "https://files.pythonhosted.org/packages/cc/26/c618a878367ef1b76270fd027ca93692657d3f6122b84ba48911ef5f2edc/ruff-0.9.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abf3369325761a35aba75cd5c55ba1b5eb17d772f12ab168fbfac54be85cf18c", size = 11428127 },
275
+ { url = "https://files.pythonhosted.org/packages/d7/9a/c5588a93d9bfed29f565baf193fe802fa676a0c837938137ea6cf0576d8c/ruff-0.9.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:3403a53a32a90ce929aa2f758542aca9234befa133e29f4933dcef28a24317be", size = 12133187 },
276
+ { url = "https://files.pythonhosted.org/packages/3e/ff/e7980a7704a60905ed7e156a8d73f604c846d9bd87deda9cabfa6cba073a/ruff-0.9.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:18454e7fa4e4d72cffe28a37cf6a73cb2594f81ec9f4eca31a0aaa9ccdfb1590", size = 11602937 },
277
+ { url = "https://files.pythonhosted.org/packages/24/78/3690444ad9e3cab5c11abe56554c35f005b51d1d118b429765249095269f/ruff-0.9.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fadfe2c88724c9617339f62319ed40dcdadadf2888d5afb88bf3adee7b35bfb", size = 13771698 },
278
+ { url = "https://files.pythonhosted.org/packages/6e/bf/e477c2faf86abe3988e0b5fd22a7f3520e820b2ee335131aca2e16120038/ruff-0.9.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6df104d08c442a1aabcfd254279b8cc1e2cbf41a605aa3e26610ba1ec4acf0b0", size = 11249026 },
279
+ { url = "https://files.pythonhosted.org/packages/f7/82/cdaffd59e5a8cb5b14c408c73d7a555a577cf6645faaf83e52fe99521715/ruff-0.9.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d7c62939daf5b2a15af48abbd23bea1efdd38c312d6e7c4cedf5a24e03207e17", size = 10220432 },
280
+ { url = "https://files.pythonhosted.org/packages/fe/a4/2507d0026225efa5d4412b6e294dfe54725a78652a5c7e29e6bd0fc492f3/ruff-0.9.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9494ba82a37a4b81b6a798076e4a3251c13243fc37967e998efe4cce58c8a8d1", size = 9874602 },
281
+ { url = "https://files.pythonhosted.org/packages/d5/be/f3aab1813846b476c4bcffe052d232244979c3cd99d751c17afb530ca8e4/ruff-0.9.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:4efd7a96ed6d36ef011ae798bf794c5501a514be369296c672dab7921087fa57", size = 10851212 },
282
+ { url = "https://files.pythonhosted.org/packages/8b/45/8e5fd559bea0d2f57c4e12bf197a2fade2fac465aa518284f157dfbca92b/ruff-0.9.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ab90a7944c5a1296f3ecb08d1cbf8c2da34c7e68114b1271a431a3ad30cb660e", size = 11327490 },
283
+ { url = "https://files.pythonhosted.org/packages/42/55/e6c90f13880aeef327746052907e7e930681f26a164fe130ddac28b08269/ruff-0.9.9-py3-none-win32.whl", hash = "sha256:6b4c376d929c25ecd6d87e182a230fa4377b8e5125a4ff52d506ee8c087153c1", size = 10227912 },
284
+ { url = "https://files.pythonhosted.org/packages/35/b2/da925693cb82a1208aa34966c0f36cb222baca94e729dd22a587bc22d0f3/ruff-0.9.9-py3-none-win_amd64.whl", hash = "sha256:837982ea24091d4c1700ddb2f63b7070e5baec508e43b01de013dc7eff974ff1", size = 11355632 },
285
+ { url = "https://files.pythonhosted.org/packages/31/d8/de873d1c1b020d668d8ec9855d390764cb90cf8f6486c0983da52be8b7b7/ruff-0.9.9-py3-none-win_arm64.whl", hash = "sha256:3ac78f127517209fe6d96ab00f3ba97cafe38718b23b1db3e96d8b2d39e37ddf", size = 10435860 },
286
286
  ]
287
287
 
288
288
  [[package]]
289
289
  name = "setuptools"
290
- version = "75.8.0"
290
+ version = "75.8.2"
291
291
  source = { registry = "https://pypi.org/simple" }
292
- sdist = { url = "https://files.pythonhosted.org/packages/92/ec/089608b791d210aec4e7f97488e67ab0d33add3efccb83a056cbafe3a2a6/setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6", size = 1343222 }
292
+ sdist = { url = "https://files.pythonhosted.org/packages/d1/53/43d99d7687e8cdef5ab5f9ec5eaf2c0423c2b35133a2b7e7bc276fc32b21/setuptools-75.8.2.tar.gz", hash = "sha256:4880473a969e5f23f2a2be3646b2dfd84af9028716d398e46192f84bc36900d2", size = 1344083 }
293
293
  wheels = [
294
- { url = "https://files.pythonhosted.org/packages/69/8a/b9dc7678803429e4a3bc9ba462fa3dd9066824d3c607490235c6a796be5a/setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3", size = 1228782 },
294
+ { url = "https://files.pythonhosted.org/packages/a9/38/7d7362e031bd6dc121e5081d8cb6aa6f6fedf2b67bf889962134c6da4705/setuptools-75.8.2-py3-none-any.whl", hash = "sha256:558e47c15f1811c1fa7adbd0096669bf76c1d3f433f58324df69f3f5ecac4e8f", size = 1229385 },
295
295
  ]
296
296
 
297
297
  [[package]]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes