objectstate 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.
- {objectstate-2.1.0 → objectstate-2.1.1}/.github/badges/coverage.svg +1 -1
- {objectstate-2.1.0 → objectstate-2.1.1}/PKG-INFO +1 -1
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/__init__.py +1 -1
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/lazy_factory.py +5 -5
- {objectstate-2.1.0 → objectstate-2.1.1}/.github/workflows/ci.yml +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/.github/workflows/coverage-pages.yml +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/.github/workflows/publish.yml +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/.gitignore +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/.readthedocs.yaml +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/BADGE_SETUP.md +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/LICENSE +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/README.md +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/.gitignore +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/Makefile +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/api/modules.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/architectural_fixes.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/architecture.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/archive/DOCUMENTATION_AUDIT.md +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/archive/DOCUMENTATION_FIXES.md +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/archive/README.md +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/conf.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/examples/atomic_operations.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/examples/basic.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/examples/dual_axis.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/examples/index.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/examples/ui.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/index.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/make.bat +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/performance/canonical-context-type-resolution-20261005.json +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/provenance.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/quickstart.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/state_management.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/state_propagation.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/docs/undo_redo.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/paper.bib +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/paper.md +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/plans/n_dimensional_inheritance.md +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/pyproject.toml +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/scripts/check_ruff_added_lines.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/scripts/release.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/scripts/update_and_release.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/scripts/update_version.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/scripts/verify_release_ready.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/codegen.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/collection_containers.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/config.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/construction_binding.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/context_manager.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/docs/configuration_framework.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/docs/context_system.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/docs/object_state_lifecycle.rst +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/dual_axis_resolver.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/edit_session.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/field_access.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/global_config.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/inspection.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/live_context_resolver.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/object_state.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/object_state_metadata.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/object_state_registry.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/parameter_owner.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/parameter_structure.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/parametric_axes.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/placeholder.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/reified_generics.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/scope_key.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/snapshot_model.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/subfield_semantics.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/time_travel_profile.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/token_cache.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/transaction_checkpoint.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/ui_visibility.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/value_semantics.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/__init__.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/conftest.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_authored_paths.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_callable_baseline.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_codegen.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_config.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_construction_history.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_context_manager.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_field_access.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_global_config.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_history_persistence.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_inspection.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_integration.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_lazy_factory.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_object_state_metadata_contracts.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_object_state_restore.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_object_state_update_instance.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_parameter_owner.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_parametric_axes.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_placeholder.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_registry_subscription.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_reified_generics.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_release_readiness.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_resolved_change_notifications.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_scope_key.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_subfield_semantics.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_timeline_projection.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_transaction_checkpoint.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_ui_visible_field_projection.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_undo_redo_cascade.py +0 -0
- {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_value_semantics.py +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage:
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 75.78%"><title>coverage: 75.78%</title><filter id="blur"><feGaussianBlur stdDeviation="16"/></filter><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#67ac09"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="315" y="150" fill-opacity=".8" filter="url(#blur)" textLength="510">coverage</text><text x="315" y="150" fill-opacity=".3" textLength="510">coverage</text></g><text x="315" y="140" textLength="510">coverage</text></g><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="865" y="150" fill-opacity=".8" filter="url(#blur)" textLength="430">75.78%</text><text x="865" y="150" fill-opacity=".3" textLength="430">75.78%</text></g><text x="865" y="140" textLength="430">75.78%</text></g></g></svg>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: objectstate
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: Generic lazy dataclass configuration framework with dual-axis inheritance and contextvars-based resolution
|
|
5
5
|
Project-URL: Homepage, https://github.com/OpenHCSDev/objectstate
|
|
6
6
|
Project-URL: Documentation, https://objectstate.readthedocs.io
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
# Standard library imports
|
|
4
4
|
import copy
|
|
5
5
|
import dataclasses
|
|
6
|
+
import inspect
|
|
6
7
|
import logging
|
|
7
8
|
import re
|
|
8
9
|
import sys
|
|
@@ -91,10 +92,9 @@ def get_inherited_field_names(cls: Type) -> set:
|
|
|
91
92
|
if dataclasses.is_dataclass(base):
|
|
92
93
|
parent_fields.update(base.__dataclass_fields__.keys())
|
|
93
94
|
|
|
94
|
-
#
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
own_defined = set(cls.__dict__['__annotations__'].keys())
|
|
95
|
+
# cls's OWN annotations (not inherited). Python 3.14 (PEP 649) no longer
|
|
96
|
+
# stores them in cls.__dict__['__annotations__'].
|
|
97
|
+
own_defined = set(inspect.get_annotations(cls, eval_str=False))
|
|
98
98
|
|
|
99
99
|
return parent_fields - own_defined
|
|
100
100
|
|
|
@@ -1455,7 +1455,7 @@ def _extract_abbreviations_from_annotations(cls: Type) -> Dict[str, str]:
|
|
|
1455
1455
|
continue
|
|
1456
1456
|
|
|
1457
1457
|
# Get this class's own annotations (not inherited)
|
|
1458
|
-
annotations =
|
|
1458
|
+
annotations = inspect.get_annotations(klass, eval_str=False)
|
|
1459
1459
|
|
|
1460
1460
|
for field_name, field_type in annotations.items():
|
|
1461
1461
|
# Check if this is an Annotated type
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|