haiway 0.10.10__tar.gz → 0.10.11__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 (100) hide show
  1. {haiway-0.10.10 → haiway-0.10.11}/.github/workflows/publish.yml +0 -2
  2. {haiway-0.10.10 → haiway-0.10.11}/PKG-INFO +1 -1
  3. haiway-0.10.11/junit/test-results.xml +1 -0
  4. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/utils/collections.py +93 -16
  5. haiway-0.10.10/junit/test-results.xml +0 -1
  6. {haiway-0.10.10 → haiway-0.10.11}/.github/workflows/ci.yml +0 -0
  7. {haiway-0.10.10 → haiway-0.10.11}/.gitignore +0 -0
  8. {haiway-0.10.10 → haiway-0.10.11}/LICENSE +0 -0
  9. {haiway-0.10.10 → haiway-0.10.11}/Makefile +0 -0
  10. {haiway-0.10.10 → haiway-0.10.11}/README.md +0 -0
  11. {haiway-0.10.10 → haiway-0.10.11}/config/pre-push +0 -0
  12. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/.dockerignore +0 -0
  13. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/Dockerfile +0 -0
  14. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/Makefile +0 -0
  15. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/README.md +0 -0
  16. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/config/.env.example +0 -0
  17. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/config/unit.json +0 -0
  18. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/docker-compose.yml +0 -0
  19. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/pyproject.toml +0 -0
  20. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/features/__int__.py +0 -0
  21. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/features/todos/__init__.py +0 -0
  22. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/features/todos/calls.py +0 -0
  23. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/features/todos/config.py +0 -0
  24. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/features/todos/state.py +0 -0
  25. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/features/todos/types.py +0 -0
  26. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/features/todos/user_tasks.py +0 -0
  27. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/integrations/__init__.py +0 -0
  28. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/integrations/postgres/__init__.py +0 -0
  29. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/integrations/postgres/client.py +0 -0
  30. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/integrations/postgres/config.py +0 -0
  31. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/integrations/postgres/state.py +0 -0
  32. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/integrations/postgres/types.py +0 -0
  33. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/server/__init__.py +0 -0
  34. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/server/__main__.py +0 -0
  35. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/server/application.py +0 -0
  36. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/server/config.py +0 -0
  37. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/server/middlewares/__init__.py +0 -0
  38. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/server/middlewares/context.py +0 -0
  39. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/server/routes/__init__.py +0 -0
  40. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/server/routes/technical.py +0 -0
  41. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/server/routes/todos.py +0 -0
  42. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/solutions/__init__.py +0 -0
  43. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/solutions/user_tasks/__init__.py +0 -0
  44. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/solutions/user_tasks/calls.py +0 -0
  45. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/solutions/user_tasks/config.py +0 -0
  46. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/solutions/user_tasks/postgres.py +0 -0
  47. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/solutions/user_tasks/state.py +0 -0
  48. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/src/solutions/user_tasks/types.py +0 -0
  49. {haiway-0.10.10 → haiway-0.10.11}/examples/fastAPI/uv.lock +0 -0
  50. {haiway-0.10.10 → haiway-0.10.11}/guidelines/functionalities.md +0 -0
  51. {haiway-0.10.10 → haiway-0.10.11}/guidelines/packages.md +0 -0
  52. {haiway-0.10.10 → haiway-0.10.11}/hatch_version.py +0 -0
  53. {haiway-0.10.10 → haiway-0.10.11}/pyproject.toml +0 -0
  54. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/__init__.py +0 -0
  55. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/context/__init__.py +0 -0
  56. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/context/access.py +0 -0
  57. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/context/disposables.py +0 -0
  58. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/context/identifier.py +0 -0
  59. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/context/logging.py +0 -0
  60. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/context/metrics.py +0 -0
  61. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/context/state.py +0 -0
  62. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/context/tasks.py +0 -0
  63. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/context/types.py +0 -0
  64. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/helpers/__init__.py +0 -0
  65. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/helpers/asynchrony.py +0 -0
  66. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/helpers/caching.py +0 -0
  67. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/helpers/metrics.py +0 -0
  68. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/helpers/retries.py +0 -0
  69. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/helpers/throttling.py +0 -0
  70. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/helpers/timeouted.py +0 -0
  71. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/helpers/tracing.py +0 -0
  72. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/py.typed +0 -0
  73. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/state/__init__.py +0 -0
  74. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/state/attributes.py +0 -0
  75. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/state/path.py +0 -0
  76. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/state/requirement.py +0 -0
  77. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/state/structure.py +0 -0
  78. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/state/validation.py +0 -0
  79. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/types/__init__.py +0 -0
  80. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/types/default.py +0 -0
  81. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/types/frozen.py +0 -0
  82. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/types/missing.py +0 -0
  83. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/utils/__init__.py +0 -0
  84. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/utils/always.py +0 -0
  85. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/utils/env.py +0 -0
  86. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/utils/freezing.py +0 -0
  87. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/utils/logs.py +0 -0
  88. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/utils/mimic.py +0 -0
  89. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/utils/noop.py +0 -0
  90. {haiway-0.10.10 → haiway-0.10.11}/src/haiway/utils/queue.py +0 -0
  91. {haiway-0.10.10 → haiway-0.10.11}/tests/__init__.py +0 -0
  92. {haiway-0.10.10 → haiway-0.10.11}/tests/test_async_queue.py +0 -0
  93. {haiway-0.10.10 → haiway-0.10.11}/tests/test_attribute_path.py +0 -0
  94. {haiway-0.10.10 → haiway-0.10.11}/tests/test_auto_retry.py +0 -0
  95. {haiway-0.10.10 → haiway-0.10.11}/tests/test_cache.py +0 -0
  96. {haiway-0.10.10 → haiway-0.10.11}/tests/test_context.py +0 -0
  97. {haiway-0.10.10 → haiway-0.10.11}/tests/test_state.py +0 -0
  98. {haiway-0.10.10 → haiway-0.10.11}/tests/test_streaming.py +0 -0
  99. {haiway-0.10.10 → haiway-0.10.11}/tests/test_timeout.py +0 -0
  100. {haiway-0.10.10 → haiway-0.10.11}/uv.lock +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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: haiway
3
- Version: 0.10.10
3
+ Version: 0.10.11
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
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="utf-8"?><testsuites><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="79" time="1.154" timestamp="2025-02-24T10:21:16.952987" hostname="fv-az791-844"><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.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.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.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.001" /><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,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 +0,0 @@
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>
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