haiway 0.15.1__tar.gz → 0.16.0__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 (104) hide show
  1. {haiway-0.15.1 → haiway-0.16.0}/PKG-INFO +1 -1
  2. {haiway-0.15.1 → haiway-0.16.0}/junit/test-results.xml +1 -1
  3. {haiway-0.15.1 → haiway-0.16.0}/pyproject.toml +1 -1
  4. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/__init__.py +2 -0
  5. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/context/access.py +7 -6
  6. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/utils/__init__.py +2 -1
  7. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/utils/collections.py +43 -1
  8. {haiway-0.15.1 → haiway-0.16.0}/uv.lock +1 -1
  9. {haiway-0.15.1 → haiway-0.16.0}/.github/workflows/ci.yml +0 -0
  10. {haiway-0.15.1 → haiway-0.16.0}/.github/workflows/publish.yml +0 -0
  11. {haiway-0.15.1 → haiway-0.16.0}/.gitignore +0 -0
  12. {haiway-0.15.1 → haiway-0.16.0}/LICENSE +0 -0
  13. {haiway-0.15.1 → haiway-0.16.0}/Makefile +0 -0
  14. {haiway-0.15.1 → haiway-0.16.0}/README.md +0 -0
  15. {haiway-0.15.1 → haiway-0.16.0}/config/pre-push +0 -0
  16. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/.dockerignore +0 -0
  17. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/Dockerfile +0 -0
  18. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/Makefile +0 -0
  19. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/README.md +0 -0
  20. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/config/.env.example +0 -0
  21. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/config/unit.json +0 -0
  22. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/docker-compose.yml +0 -0
  23. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/pyproject.toml +0 -0
  24. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/features/__int__.py +0 -0
  25. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/features/todos/__init__.py +0 -0
  26. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/features/todos/config.py +0 -0
  27. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/features/todos/state.py +0 -0
  28. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/features/todos/types.py +0 -0
  29. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/features/todos/user_tasks.py +0 -0
  30. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/integrations/__init__.py +0 -0
  31. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/integrations/postgres/__init__.py +0 -0
  32. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/integrations/postgres/client.py +0 -0
  33. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/integrations/postgres/config.py +0 -0
  34. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/integrations/postgres/state.py +0 -0
  35. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/integrations/postgres/types.py +0 -0
  36. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/migrations/__init__.py +0 -0
  37. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/migrations/__main__.py +0 -0
  38. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/migrations/postgres/__init__.py +0 -0
  39. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/migrations/postgres/execution.py +0 -0
  40. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/migrations/postgres/migration_0.py +0 -0
  41. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/migrations/postgres/types.py +0 -0
  42. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/server/__init__.py +0 -0
  43. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/server/__main__.py +0 -0
  44. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/server/application.py +0 -0
  45. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/server/config.py +0 -0
  46. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/server/middlewares/__init__.py +0 -0
  47. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/server/middlewares/context.py +0 -0
  48. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/server/routes/__init__.py +0 -0
  49. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/server/routes/technical.py +0 -0
  50. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/server/routes/todos.py +0 -0
  51. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/solutions/__init__.py +0 -0
  52. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/solutions/user_tasks/__init__.py +0 -0
  53. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/solutions/user_tasks/config.py +0 -0
  54. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/solutions/user_tasks/postgres.py +0 -0
  55. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/solutions/user_tasks/state.py +0 -0
  56. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/src/solutions/user_tasks/types.py +0 -0
  57. {haiway-0.15.1 → haiway-0.16.0}/examples/fastAPI/uv.lock +0 -0
  58. {haiway-0.15.1 → haiway-0.16.0}/guidelines/functionalities.md +0 -0
  59. {haiway-0.15.1 → haiway-0.16.0}/guidelines/packages.md +0 -0
  60. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/context/__init__.py +0 -0
  61. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/context/disposables.py +0 -0
  62. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/context/identifier.py +0 -0
  63. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/context/logging.py +0 -0
  64. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/context/metrics.py +0 -0
  65. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/context/state.py +0 -0
  66. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/context/tasks.py +0 -0
  67. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/context/types.py +0 -0
  68. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/helpers/__init__.py +0 -0
  69. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/helpers/asynchrony.py +0 -0
  70. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/helpers/caching.py +0 -0
  71. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/helpers/metrics.py +0 -0
  72. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/helpers/retries.py +0 -0
  73. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/helpers/throttling.py +0 -0
  74. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/helpers/timeouted.py +0 -0
  75. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/helpers/tracing.py +0 -0
  76. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/py.typed +0 -0
  77. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/state/__init__.py +0 -0
  78. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/state/attributes.py +0 -0
  79. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/state/path.py +0 -0
  80. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/state/requirement.py +0 -0
  81. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/state/structure.py +0 -0
  82. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/state/validation.py +0 -0
  83. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/types/__init__.py +0 -0
  84. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/types/default.py +0 -0
  85. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/types/frozen.py +0 -0
  86. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/types/missing.py +0 -0
  87. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/utils/always.py +0 -0
  88. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/utils/env.py +0 -0
  89. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/utils/freezing.py +0 -0
  90. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/utils/logs.py +0 -0
  91. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/utils/mimic.py +0 -0
  92. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/utils/noop.py +0 -0
  93. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/utils/queue.py +0 -0
  94. {haiway-0.15.1 → haiway-0.16.0}/src/haiway/utils/stream.py +0 -0
  95. {haiway-0.15.1 → haiway-0.16.0}/tests/__init__.py +0 -0
  96. {haiway-0.15.1 → haiway-0.16.0}/tests/test_async_queue.py +0 -0
  97. {haiway-0.15.1 → haiway-0.16.0}/tests/test_async_stream.py +0 -0
  98. {haiway-0.15.1 → haiway-0.16.0}/tests/test_attribute_path.py +0 -0
  99. {haiway-0.15.1 → haiway-0.16.0}/tests/test_auto_retry.py +0 -0
  100. {haiway-0.15.1 → haiway-0.16.0}/tests/test_cache.py +0 -0
  101. {haiway-0.15.1 → haiway-0.16.0}/tests/test_context.py +0 -0
  102. {haiway-0.15.1 → haiway-0.16.0}/tests/test_state.py +0 -0
  103. {haiway-0.15.1 → haiway-0.16.0}/tests/test_streaming.py +0 -0
  104. {haiway-0.15.1 → haiway-0.16.0}/tests/test_timeout.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: haiway
3
- Version: 0.15.1
3
+ Version: 0.16.0
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
@@ -1 +1 @@
1
- <?xml version="1.0" encoding="utf-8"?><testsuites><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="88" time="1.129" timestamp="2025-04-07T13:19:58.902913" hostname="fv-az1695-695"><testcase classname="tests.test_async_queue" name="test_fails_when_stream_fails" time="0.002" /><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_async_stream" name="test_fails_when_stream_fails" time="0.001" /><testcase classname="tests.test_async_stream" name="test_cancels_when_iteration_cancels" time="0.001" /><testcase classname="tests.test_async_stream" name="test_ends_when_stream_ends" time="0.001" /><testcase classname="tests.test_async_stream" name="test_finishes_without_buffer" time="0.001" /><testcase classname="tests.test_async_stream" name="test_fails_without_buffer" time="0.001" /><testcase classname="tests.test_async_stream" name="test_delivers_updates_when_sending" time="0.001" /><testcase classname="tests.test_async_stream" name="test_ignores_when_sending_to_finished" time="0.001" /><testcase classname="tests.test_async_stream" name="test_ignores_when_sending_to_failed" time="0.001" /><testcase classname="tests.test_async_stream" name="test_ignores_when_finishing_when_finished" time="0.001" /><testcase classname="tests.test_async_stream" name="test_delivers_all_when_sending_async" 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.001" /><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.000" /><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_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.001" /><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.001" /><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.012" /></testsuite></testsuites>
1
+ <?xml version="1.0" encoding="utf-8"?><testsuites><testsuite name="pytest" errors="0" failures="0" skipped="0" tests="88" time="1.113" timestamp="2025-04-16T11:24:51.501961" hostname="fv-az1296-225"><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_async_stream" name="test_fails_when_stream_fails" time="0.001" /><testcase classname="tests.test_async_stream" name="test_cancels_when_iteration_cancels" time="0.001" /><testcase classname="tests.test_async_stream" name="test_ends_when_stream_ends" time="0.001" /><testcase classname="tests.test_async_stream" name="test_finishes_without_buffer" time="0.001" /><testcase classname="tests.test_async_stream" name="test_fails_without_buffer" time="0.001" /><testcase classname="tests.test_async_stream" name="test_delivers_updates_when_sending" time="0.001" /><testcase classname="tests.test_async_stream" name="test_ignores_when_sending_to_finished" time="0.001" /><testcase classname="tests.test_async_stream" name="test_ignores_when_sending_to_failed" time="0.001" /><testcase classname="tests.test_async_stream" name="test_ignores_when_finishing_when_finished" time="0.001" /><testcase classname="tests.test_async_stream" name="test_delivers_all_when_sending_async" 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.001" /><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.000" /><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_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.012" /></testsuite></testsuites>
@@ -5,7 +5,7 @@ build-backend = "hatchling.build"
5
5
  [project]
6
6
  name = "haiway"
7
7
  description = "Framework for dependency injection and state management within structured concurrency model."
8
- version = "0.15.1"
8
+ version = "0.16.0"
9
9
  readme = "README.md"
10
10
  maintainers = [
11
11
  { name = "Kacper Kaliński", email = "kacper.kalinski@miquido.com" },
@@ -58,6 +58,7 @@ from haiway.utils import (
58
58
  mimic_function,
59
59
  noop,
60
60
  setup_logging,
61
+ without_missing,
61
62
  )
62
63
 
63
64
  __all__ = [
@@ -115,5 +116,6 @@ __all__ = [
115
116
  "timeout",
116
117
  "traced",
117
118
  "when_missing",
119
+ "without_missing",
118
120
  "wrap_async",
119
121
  ]
@@ -20,7 +20,7 @@ from haiway.context.disposables import Disposable, Disposables
20
20
  from haiway.context.identifier import ScopeIdentifier
21
21
  from haiway.context.logging import LoggerContext
22
22
  from haiway.context.metrics import MetricsContext, MetricsHandler
23
- from haiway.context.state import StateContext
23
+ from haiway.context.state import ScopeState, StateContext
24
24
  from haiway.context.tasks import TaskGroupContext
25
25
  from haiway.state import State
26
26
  from haiway.utils import mimic_function
@@ -70,9 +70,7 @@ class ScopeContext:
70
70
  object.__setattr__(
71
71
  self,
72
72
  "_task_group_context",
73
- TaskGroupContext(
74
- task_group=task_group,
75
- )
73
+ TaskGroupContext(task_group=task_group)
76
74
  if task_group is not None or self._identifier.is_root
77
75
  else None,
78
76
  )
@@ -175,8 +173,11 @@ class ScopeContext:
175
173
  self,
176
174
  "_state_context",
177
175
  StateContext(
178
- state=self._state_context._state.updated(
179
- await disposables.__aenter__(),
176
+ state=ScopeState(
177
+ (
178
+ *await disposables.__aenter__(),
179
+ *self._state_context._state._state.values(),
180
+ )
180
181
  ),
181
182
  ),
182
183
  )
@@ -1,5 +1,5 @@
1
1
  from haiway.utils.always import always, async_always
2
- from haiway.utils.collections import as_dict, as_list, as_set, as_tuple
2
+ from haiway.utils.collections import as_dict, as_list, as_set, as_tuple, without_missing
3
3
  from haiway.utils.env import (
4
4
  getenv_base64,
5
5
  getenv_bool,
@@ -35,4 +35,5 @@ __all__ = [
35
35
  "mimic_function",
36
36
  "noop",
37
37
  "setup_logging",
38
+ "without_missing",
38
39
  ]
@@ -1,11 +1,14 @@
1
1
  from collections.abc import Iterable, Mapping, Set
2
- from typing import overload
2
+ from typing import Any, cast, overload
3
+
4
+ from haiway.types.missing import MISSING
3
5
 
4
6
  __all__ = [
5
7
  "as_dict",
6
8
  "as_list",
7
9
  "as_set",
8
10
  "as_tuple",
11
+ "without_missing",
9
12
  ]
10
13
 
11
14
 
@@ -183,3 +186,42 @@ def as_dict[K, V](
183
186
 
184
187
  else:
185
188
  return dict(collection)
189
+
190
+
191
+ @overload
192
+ def without_missing[T: Mapping[str, Any]](
193
+ mapping: Mapping[str, Any],
194
+ /,
195
+ ) -> Mapping[str, Any]: ...
196
+
197
+
198
+ @overload
199
+ def without_missing[T: Mapping[str, Any]](
200
+ mapping: Mapping[str, Any],
201
+ /,
202
+ *,
203
+ typed: type[T],
204
+ ) -> T: ...
205
+
206
+
207
+ def without_missing[T: Mapping[str, Any]](
208
+ mapping: Mapping[str, Any],
209
+ /,
210
+ *,
211
+ typed: type[T] | None = None,
212
+ ) -> T | Mapping[str, Any]:
213
+ """
214
+ Strip items with missing values.
215
+
216
+ Parameters
217
+ ----------
218
+ mapping : Mapping[K, V]
219
+ The input mapping to be stripped.
220
+
221
+ Returns
222
+ -------
223
+ T | dict[str, Any]
224
+ A new mapping containing all items of the input mapping,\
225
+ except items with missing values.
226
+ """
227
+ return cast(T, {key: value for key, value in mapping.items() if value is not MISSING})
@@ -67,7 +67,7 @@ wheels = [
67
67
 
68
68
  [[package]]
69
69
  name = "haiway"
70
- version = "0.15.1"
70
+ version = "0.16.0"
71
71
  source = { editable = "." }
72
72
 
73
73
  [package.optional-dependencies]
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