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.
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/CHANGELOG.md +34 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/PKG-INFO +2 -2
- pico_ioc-2.1.1/docs/LEARN.md +1820 -0
- pico_ioc-2.1.1/docs/adr/adr-0009-flexible-provides.md +82 -0
- pico_ioc-2.1.1/docs/adr/adr-0010-unified-configuration.md +181 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/README.md +0 -7
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/api-reference/README.md +1 -6
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/api-reference/container.md +15 -16
- pico_ioc-2.1.1/docs/api-reference/event_bus.md +117 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/api-reference/glossary.md +27 -5
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/architecture/README.md +0 -8
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/architecture/comparison.md +23 -39
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/README.md +1 -6
- pico_ioc-2.1.1/docs/cookbook/pattern-cli-app.md +207 -0
- pico_ioc-2.1.1/docs/cookbook/pattern-config-overrides.md +99 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/observability/README.md +0 -7
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/observability/exporting-graph.md +9 -23
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/overview.md +38 -39
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/user-guide/README.md +2 -9
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/user-guide/configuration-basic.md +29 -26
- pico_ioc-2.1.1/docs/user-guide/configuration-binding.md +211 -0
- pico_ioc-2.1.1/docs/user-guide/core-concepts.md +250 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/pyproject.toml +1 -1
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/__init__.py +2 -1
- pico_ioc-2.1.1/src/pico_ioc/_version.py +1 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/aop.py +18 -7
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/api.py +50 -18
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/config_builder.py +1 -5
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/config_registrar.py +21 -4
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/config_runtime.py +39 -13
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/container.py +41 -29
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/decorators.py +2 -1
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/event_bus.py +24 -25
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/locator.py +0 -4
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/registrar.py +20 -1
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/scope.py +13 -4
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc.egg-info/PKG-INFO +2 -2
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc.egg-info/SOURCES.txt +5 -2
- pico_ioc-2.1.1/tests/test_config_value.py +160 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_configured.py +152 -75
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_container_runtime.py +13 -5
- pico_ioc-2.1.1/tests/test_container_self_injection.py +27 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_pico_extends.py +10 -12
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_pico_integration.py +6 -8
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_scope.py +10 -15
- pico_ioc-2.1.0/docs/adr/adr-0009-flexible-provides.md +0 -85
- pico_ioc-2.1.0/docs/adr/adr-0010-unified-configuration.md +0 -135
- pico_ioc-2.1.0/docs/cookbook/pattern-cli-app.md +0 -240
- pico_ioc-2.1.0/docs/integrations/README.md +0 -19
- pico_ioc-2.1.0/docs/specs/spec-configuration.md +0 -169
- pico_ioc-2.1.0/docs/user-guide/configuration-binding.md +0 -291
- pico_ioc-2.1.0/docs/user-guide/core-concepts.md +0 -249
- pico_ioc-2.1.0/src/pico_ioc/_version.py +0 -1
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/.coveragerc +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/.github/workflows/ci.yml +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/.github/workflows/publish-to-pypi.yml +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/LICENSE +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/MANIFEST.in +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/README.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/README.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/README.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0001-async-native.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0002-tree-based-configuration.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0003-context-aware-scopes.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0004-observability.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0005-aop.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0006-eager-validation.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0007-event_bus.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/adr/adr-0008-circular-dependencies.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/aop-interceptors.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/async-resolution.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/conditional-binding.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/event-bus.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/advanced-features/health-checks.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/api-reference/decorators.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/api-reference/protocols.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/architecture/design-principles.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/architecture/internals.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-aop-feature-toggle.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-aop-profiling.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-aop-security.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-aop-structured-logging.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-cqrs.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-hot-reload.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/cookbook/pattern-multi-tenant.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/getting-started.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/observability/container-context.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/observability/observers-metrics.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/user-guide/qualifiers-lists.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/user-guide/scopes-lifecycle.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/docs/user-guide/testing.md +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/setup.cfg +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/analysis.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/component_scanner.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/constants.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/dependency_validator.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/exceptions.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/factory.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc/provider_selector.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc.egg-info/dependency_links.txt +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc.egg-info/requires.txt +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/src/pico_ioc.egg-info/top_level.txt +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_container_context.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_event_bus.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_provides_module_functions.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_provides_static_methods.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_proxy_unit.py +0 -0
- {pico_ioc-2.1.0 → pico_ioc-2.1.1}/tests/test_resolution_graph.py +0 -0
- {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.
|
|
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.
|
|
42
|
+
Requires-Python: >=3.10
|
|
43
43
|
Description-Content-Type: text/markdown
|
|
44
44
|
License-File: LICENSE
|
|
45
45
|
Provides-Extra: yaml
|