pico-ioc 2.1.0__tar.gz → 2.1.1__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 (109) hide show
  1. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/CHANGELOG.md +34 -0
  2. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/PKG-INFO +2 -2
  3. pico_ioc-2.1.1/docs/LEARN.md +1820 -0
  4. pico_ioc-2.1.1/docs/adr/adr-0009-flexible-provides.md +82 -0
  5. pico_ioc-2.1.1/docs/adr/adr-0010-unified-configuration.md +181 -0
  6. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/README.md +0 -7
  7. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/api-reference/README.md +1 -6
  8. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/api-reference/container.md +15 -16
  9. pico_ioc-2.1.1/docs/api-reference/event_bus.md +117 -0
  10. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/api-reference/glossary.md +27 -5
  11. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/architecture/README.md +0 -8
  12. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/architecture/comparison.md +23 -39
  13. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/README.md +1 -6
  14. pico_ioc-2.1.1/docs/cookbook/pattern-cli-app.md +207 -0
  15. pico_ioc-2.1.1/docs/cookbook/pattern-config-overrides.md +99 -0
  16. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/observability/README.md +0 -7
  17. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/observability/exporting-graph.md +9 -23
  18. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/overview.md +38 -39
  19. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/user-guide/README.md +2 -9
  20. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/user-guide/configuration-basic.md +29 -26
  21. pico_ioc-2.1.1/docs/user-guide/configuration-binding.md +211 -0
  22. pico_ioc-2.1.1/docs/user-guide/core-concepts.md +250 -0
  23. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/pyproject.toml +1 -1
  24. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/__init__.py +2 -1
  25. pico_ioc-2.1.1/src/pico_ioc/_version.py +1 -0
  26. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/aop.py +18 -7
  27. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/api.py +50 -18
  28. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/config_builder.py +1 -5
  29. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/config_registrar.py +21 -4
  30. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/config_runtime.py +39 -13
  31. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/container.py +41 -29
  32. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/decorators.py +2 -1
  33. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/event_bus.py +24 -25
  34. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/locator.py +0 -4
  35. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/registrar.py +20 -1
  36. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/scope.py +13 -4
  37. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc.egg-info/PKG-INFO +2 -2
  38. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc.egg-info/SOURCES.txt +5 -2
  39. pico_ioc-2.1.1/tests/test_config_value.py +160 -0
  40. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_configured.py +152 -75
  41. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_container_runtime.py +13 -5
  42. pico_ioc-2.1.1/tests/test_container_self_injection.py +27 -0
  43. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_pico_extends.py +10 -12
  44. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_pico_integration.py +6 -8
  45. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_scope.py +10 -15
  46. pico_ioc-2.1.0/docs/adr/adr-0009-flexible-provides.md +0 -85
  47. pico_ioc-2.1.0/docs/adr/adr-0010-unified-configuration.md +0 -135
  48. pico_ioc-2.1.0/docs/cookbook/pattern-cli-app.md +0 -240
  49. pico_ioc-2.1.0/docs/integrations/README.md +0 -19
  50. pico_ioc-2.1.0/docs/specs/spec-configuration.md +0 -169
  51. pico_ioc-2.1.0/docs/user-guide/configuration-binding.md +0 -291
  52. pico_ioc-2.1.0/docs/user-guide/core-concepts.md +0 -249
  53. pico_ioc-2.1.0/src/pico_ioc/_version.py +0 -1
  54. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/.coveragerc +0 -0
  55. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/.github/workflows/ci.yml +0 -0
  56. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/.github/workflows/publish-to-pypi.yml +0 -0
  57. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/LICENSE +0 -0
  58. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/MANIFEST.in +0 -0
  59. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/README.md +0 -0
  60. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/README.md +0 -0
  61. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/README.md +0 -0
  62. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0001-async-native.md +0 -0
  63. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0002-tree-based-configuration.md +0 -0
  64. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0003-context-aware-scopes.md +0 -0
  65. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0004-observability.md +0 -0
  66. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0005-aop.md +0 -0
  67. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0006-eager-validation.md +0 -0
  68. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0007-event_bus.md +0 -0
  69. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0008-circular-dependencies.md +0 -0
  70. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/aop-interceptors.md +0 -0
  71. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/async-resolution.md +0 -0
  72. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/conditional-binding.md +0 -0
  73. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/event-bus.md +0 -0
  74. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/health-checks.md +0 -0
  75. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/api-reference/decorators.md +0 -0
  76. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/api-reference/protocols.md +0 -0
  77. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/architecture/design-principles.md +0 -0
  78. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/architecture/internals.md +0 -0
  79. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-aop-feature-toggle.md +0 -0
  80. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-aop-profiling.md +0 -0
  81. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-aop-security.md +0 -0
  82. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-aop-structured-logging.md +0 -0
  83. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-cqrs.md +0 -0
  84. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-hot-reload.md +0 -0
  85. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-multi-tenant.md +0 -0
  86. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/getting-started.md +0 -0
  87. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/observability/container-context.md +0 -0
  88. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/observability/observers-metrics.md +0 -0
  89. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/user-guide/qualifiers-lists.md +0 -0
  90. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/user-guide/scopes-lifecycle.md +0 -0
  91. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/user-guide/testing.md +0 -0
  92. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/setup.cfg +0 -0
  93. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/analysis.py +0 -0
  94. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/component_scanner.py +0 -0
  95. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/constants.py +0 -0
  96. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/dependency_validator.py +0 -0
  97. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/exceptions.py +0 -0
  98. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/factory.py +0 -0
  99. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/provider_selector.py +0 -0
  100. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc.egg-info/dependency_links.txt +0 -0
  101. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc.egg-info/requires.txt +0 -0
  102. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc.egg-info/top_level.txt +0 -0
  103. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_container_context.py +0 -0
  104. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_event_bus.py +0 -0
  105. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_provides_module_functions.py +0 -0
  106. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_provides_static_methods.py +0 -0
  107. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_proxy_unit.py +0 -0
  108. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_resolution_graph.py +0 -0
  109. {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tox.ini +0 -0
@@ -5,6 +5,40 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.html).
7
7
 
8
+ ---
9
+
10
+ ## [2.1.1] - 2025-11-02
11
+
12
+ ### Added
13
+
14
+ * ✨ **Inline Field Overrides**: Added support for overriding configuration fields directly in `@configured` classes using `Annotated[..., Value(...)]` (documented in ADR-0010).
15
+ * **Container Self-Injection**: `PicoContainer` is now registered as a singleton and can be injected into other components.
16
+ * **Flexible `@provides`**: `@provides` now supports module-level functions, `@staticmethod`, and `@classmethod` (ADR-0009), allowing for stateless providers without requiring a `@factory` instance.
17
+ * **New `websocket` Scope**: Added a new default scope named `websocket` to the `ScopeManager`, based on `contextvars`.
18
+
19
+ ### Changed
20
+
21
+ * **Simplified `custom_scopes` API**: `init(custom_scopes=...)` now accepts an `Iterable[str]` of scope names (instead of a dict), automatically registering them as `ContextVarScope`.
22
+ * **Strict Async Validation (Singletons)**: `init()` will now raise a `ConfigurationError` if a non-lazy (eager) singleton requires an async `@configure` method. This forces the developer to either use `aget()` or mark the component as `lazy=True`.
23
+ * **Async Validation (Other Scopes)**: Components with other scopes (e.g., `request`) that have an async `@configure` will now raise an `AsyncResolutionError` if retrieved with `get()` (sync) but will resolve correctly with `aget()` (async).
24
+
25
+ ### Fixed
26
+
27
+ * **EventBus Thread-Safety**: Fixed a bug to ensure `EventBus.post()` is fully thread-safe and correctly handles the worker's event loop context.
28
+ * **Lazy Proxy and Async**: The `UnifiedComponentProxy` (used for `lazy=True`) now correctly detects async `@configure` methods and raises an `AsyncResolutionError` if resolved synchronously.
29
+ * **Python Version**: Updated `requires-python` to `>=3.10` to reflect actual dependencies (like `contextvars` and `typing.Annotated`) and prevent installation errors.
30
+ * **Internal Wiring**: Cleaned up the import flow and internal logic in `api.init()` and `registrar.finalize()`.
31
+
32
+ ### Docs
33
+
34
+ * **User Guide & ADRs**: Updated all documentation (User Guide, Glossary, ADRs) to reflect the unified configuration API (ADR-0010), removing all references to the old `@configuration` decorator.
35
+ * **API Reference**: Updated the `init()` signature in `container.md` to show the change to `custom_scopes` and document the `validate_only` and `observers` parameters.
36
+ * Simplified `architecture/comparison.md` and corrected minor errors.
37
+
38
+ ### Tests
39
+
40
+ * Added `test_container_self_injection.py` to verify container self-injection.
41
+ * Updated assertions in log and stats tests to reflect new eager initialization and scope semantics.
8
42
 
9
43
  ---
10
44
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pico-ioc
3
- Version: 2.1.0
3
+ Version: 2.1.1
4
4
  Summary: A minimalist, zero-dependency Inversion of Control (IoC) container for Python.
5
5
  Author-email: David Perez Cabrera <dperezcabrera@gmail.com>
6
6
  License: MIT License
@@ -39,7 +39,7 @@ Classifier: Programming Language :: Python :: 3.13
39
39
  Classifier: Programming Language :: Python :: 3.14
40
40
  Classifier: License :: OSI Approved :: MIT License
41
41
  Classifier: Operating System :: OS Independent
42
- Requires-Python: >=3.8
42
+ Requires-Python: >=3.10
43
43
  Description-Content-Type: text/markdown
44
44
  License-File: LICENSE
45
45
  Provides-Extra: yaml