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.
- {haiway-0.10.10 → haiway-0.10.13}/.github/workflows/publish.yml +0 -2
- {haiway-0.10.10 → haiway-0.10.13}/Makefile +1 -1
- {haiway-0.10.10 → haiway-0.10.13}/PKG-INFO +1 -1
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/tracing.py +3 -2
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/attributes.py +7 -1
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/collections.py +93 -16
- {haiway-0.10.10 → haiway-0.10.13}/junit/test-results.xml +1 -1
- {haiway-0.10.10 → haiway-0.10.13}/pyproject.toml +3 -6
- {haiway-0.10.10 → haiway-0.10.13}/uv.lock +25 -25
- {haiway-0.10.10 → haiway-0.10.13}/.github/workflows/ci.yml +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/.gitignore +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/LICENSE +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/README.md +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/config/pre-push +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/.dockerignore +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/Dockerfile +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/Makefile +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/README.md +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/config/.env.example +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/config/unit.json +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/docker-compose.yml +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/pyproject.toml +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/__int__.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/__init__.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/calls.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/config.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/state.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/types.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/features/todos/user_tasks.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/__init__.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/postgres/__init__.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/postgres/client.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/postgres/config.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/postgres/state.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/integrations/postgres/types.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/__init__.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/__main__.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/application.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/config.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/middlewares/__init__.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/middlewares/context.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/routes/__init__.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/routes/technical.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/server/routes/todos.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/__init__.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/__init__.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/calls.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/config.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/postgres.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/state.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/src/solutions/user_tasks/types.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/examples/fastAPI/uv.lock +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/guidelines/functionalities.md +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/guidelines/packages.md +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/__init__.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/__init__.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/access.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/disposables.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/identifier.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/logging.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/metrics.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/state.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/tasks.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/context/types.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/__init__.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/asynchrony.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/caching.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/metrics.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/retries.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/throttling.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/helpers/timeouted.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/py.typed +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/__init__.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/path.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/requirement.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/structure.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/state/validation.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/types/__init__.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/types/default.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/types/frozen.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/types/missing.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/__init__.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/always.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/env.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/freezing.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/logs.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/mimic.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/noop.py +0 -0
- {haiway-0.10.10/src → haiway-0.10.13}/haiway/utils/queue.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/hatch_version.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/tests/__init__.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/tests/test_async_queue.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/tests/test_attribute_path.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/tests/test_auto_retry.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/tests/test_cache.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/tests/test_context.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/tests/test_state.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/tests/test_streaming.py +0 -0
- {haiway-0.10.10 → haiway-0.10.13}/tests/test_timeout.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: haiway
|
3
|
-
Version: 0.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 =
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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.
|
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.
|
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/
|
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/
|
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.
|
265
|
+
version = "0.9.9"
|
266
266
|
source = { registry = "https://pypi.org/simple" }
|
267
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
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/
|
270
|
-
{ url = "https://files.pythonhosted.org/packages/
|
271
|
-
{ url = "https://files.pythonhosted.org/packages/
|
272
|
-
{ url = "https://files.pythonhosted.org/packages/
|
273
|
-
{ url = "https://files.pythonhosted.org/packages/
|
274
|
-
{ url = "https://files.pythonhosted.org/packages/
|
275
|
-
{ url = "https://files.pythonhosted.org/packages/
|
276
|
-
{ url = "https://files.pythonhosted.org/packages/
|
277
|
-
{ url = "https://files.pythonhosted.org/packages/
|
278
|
-
{ url = "https://files.pythonhosted.org/packages/
|
279
|
-
{ url = "https://files.pythonhosted.org/packages/
|
280
|
-
{ url = "https://files.pythonhosted.org/packages/
|
281
|
-
{ url = "https://files.pythonhosted.org/packages/
|
282
|
-
{ url = "https://files.pythonhosted.org/packages/
|
283
|
-
{ url = "https://files.pythonhosted.org/packages/
|
284
|
-
{ url = "https://files.pythonhosted.org/packages/
|
285
|
-
{ url = "https://files.pythonhosted.org/packages/
|
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.
|
290
|
+
version = "75.8.2"
|
291
291
|
source = { registry = "https://pypi.org/simple" }
|
292
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
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/
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|