haiway 0.15.1__tar.gz → 0.15.2__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.15.2}/PKG-INFO +1 -1
  2. {haiway-0.15.1 → haiway-0.15.2}/junit/test-results.xml +1 -1
  3. {haiway-0.15.1 → haiway-0.15.2}/pyproject.toml +1 -1
  4. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/__init__.py +2 -0
  5. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/utils/__init__.py +2 -1
  6. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/utils/collections.py +43 -1
  7. {haiway-0.15.1 → haiway-0.15.2}/uv.lock +1 -1
  8. {haiway-0.15.1 → haiway-0.15.2}/.github/workflows/ci.yml +0 -0
  9. {haiway-0.15.1 → haiway-0.15.2}/.github/workflows/publish.yml +0 -0
  10. {haiway-0.15.1 → haiway-0.15.2}/.gitignore +0 -0
  11. {haiway-0.15.1 → haiway-0.15.2}/LICENSE +0 -0
  12. {haiway-0.15.1 → haiway-0.15.2}/Makefile +0 -0
  13. {haiway-0.15.1 → haiway-0.15.2}/README.md +0 -0
  14. {haiway-0.15.1 → haiway-0.15.2}/config/pre-push +0 -0
  15. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/.dockerignore +0 -0
  16. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/Dockerfile +0 -0
  17. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/Makefile +0 -0
  18. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/README.md +0 -0
  19. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/config/.env.example +0 -0
  20. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/config/unit.json +0 -0
  21. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/docker-compose.yml +0 -0
  22. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/pyproject.toml +0 -0
  23. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/features/__int__.py +0 -0
  24. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/features/todos/__init__.py +0 -0
  25. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/features/todos/config.py +0 -0
  26. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/features/todos/state.py +0 -0
  27. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/features/todos/types.py +0 -0
  28. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/features/todos/user_tasks.py +0 -0
  29. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/integrations/__init__.py +0 -0
  30. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/integrations/postgres/__init__.py +0 -0
  31. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/integrations/postgres/client.py +0 -0
  32. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/integrations/postgres/config.py +0 -0
  33. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/integrations/postgres/state.py +0 -0
  34. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/integrations/postgres/types.py +0 -0
  35. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/migrations/__init__.py +0 -0
  36. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/migrations/__main__.py +0 -0
  37. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/migrations/postgres/__init__.py +0 -0
  38. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/migrations/postgres/execution.py +0 -0
  39. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/migrations/postgres/migration_0.py +0 -0
  40. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/migrations/postgres/types.py +0 -0
  41. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/server/__init__.py +0 -0
  42. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/server/__main__.py +0 -0
  43. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/server/application.py +0 -0
  44. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/server/config.py +0 -0
  45. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/server/middlewares/__init__.py +0 -0
  46. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/server/middlewares/context.py +0 -0
  47. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/server/routes/__init__.py +0 -0
  48. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/server/routes/technical.py +0 -0
  49. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/server/routes/todos.py +0 -0
  50. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/solutions/__init__.py +0 -0
  51. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/solutions/user_tasks/__init__.py +0 -0
  52. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/solutions/user_tasks/config.py +0 -0
  53. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/solutions/user_tasks/postgres.py +0 -0
  54. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/solutions/user_tasks/state.py +0 -0
  55. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/src/solutions/user_tasks/types.py +0 -0
  56. {haiway-0.15.1 → haiway-0.15.2}/examples/fastAPI/uv.lock +0 -0
  57. {haiway-0.15.1 → haiway-0.15.2}/guidelines/functionalities.md +0 -0
  58. {haiway-0.15.1 → haiway-0.15.2}/guidelines/packages.md +0 -0
  59. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/context/__init__.py +0 -0
  60. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/context/access.py +0 -0
  61. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/context/disposables.py +0 -0
  62. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/context/identifier.py +0 -0
  63. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/context/logging.py +0 -0
  64. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/context/metrics.py +0 -0
  65. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/context/state.py +0 -0
  66. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/context/tasks.py +0 -0
  67. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/context/types.py +0 -0
  68. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/helpers/__init__.py +0 -0
  69. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/helpers/asynchrony.py +0 -0
  70. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/helpers/caching.py +0 -0
  71. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/helpers/metrics.py +0 -0
  72. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/helpers/retries.py +0 -0
  73. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/helpers/throttling.py +0 -0
  74. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/helpers/timeouted.py +0 -0
  75. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/helpers/tracing.py +0 -0
  76. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/py.typed +0 -0
  77. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/state/__init__.py +0 -0
  78. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/state/attributes.py +0 -0
  79. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/state/path.py +0 -0
  80. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/state/requirement.py +0 -0
  81. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/state/structure.py +0 -0
  82. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/state/validation.py +0 -0
  83. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/types/__init__.py +0 -0
  84. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/types/default.py +0 -0
  85. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/types/frozen.py +0 -0
  86. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/types/missing.py +0 -0
  87. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/utils/always.py +0 -0
  88. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/utils/env.py +0 -0
  89. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/utils/freezing.py +0 -0
  90. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/utils/logs.py +0 -0
  91. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/utils/mimic.py +0 -0
  92. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/utils/noop.py +0 -0
  93. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/utils/queue.py +0 -0
  94. {haiway-0.15.1 → haiway-0.15.2}/src/haiway/utils/stream.py +0 -0
  95. {haiway-0.15.1 → haiway-0.15.2}/tests/__init__.py +0 -0
  96. {haiway-0.15.1 → haiway-0.15.2}/tests/test_async_queue.py +0 -0
  97. {haiway-0.15.1 → haiway-0.15.2}/tests/test_async_stream.py +0 -0
  98. {haiway-0.15.1 → haiway-0.15.2}/tests/test_attribute_path.py +0 -0
  99. {haiway-0.15.1 → haiway-0.15.2}/tests/test_auto_retry.py +0 -0
  100. {haiway-0.15.1 → haiway-0.15.2}/tests/test_cache.py +0 -0
  101. {haiway-0.15.1 → haiway-0.15.2}/tests/test_context.py +0 -0
  102. {haiway-0.15.1 → haiway-0.15.2}/tests/test_state.py +0 -0
  103. {haiway-0.15.1 → haiway-0.15.2}/tests/test_streaming.py +0 -0
  104. {haiway-0.15.1 → haiway-0.15.2}/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.15.2
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.162" timestamp="2025-04-08T15:51:19.365637" hostname="fv-az1788-294"><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.002" /><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.022" /><testcase classname="tests.test_auto_retry" name="test_async_uses_delay_with_errors" time="0.103" /><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.000" /><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.15.2"
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
  ]
@@ -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.15.2"
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