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.
Files changed (104) hide show
  1. {objectstate-2.1.0 → objectstate-2.1.1}/.github/badges/coverage.svg +1 -1
  2. {objectstate-2.1.0 → objectstate-2.1.1}/PKG-INFO +1 -1
  3. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/__init__.py +1 -1
  4. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/lazy_factory.py +5 -5
  5. {objectstate-2.1.0 → objectstate-2.1.1}/.github/workflows/ci.yml +0 -0
  6. {objectstate-2.1.0 → objectstate-2.1.1}/.github/workflows/coverage-pages.yml +0 -0
  7. {objectstate-2.1.0 → objectstate-2.1.1}/.github/workflows/publish.yml +0 -0
  8. {objectstate-2.1.0 → objectstate-2.1.1}/.gitignore +0 -0
  9. {objectstate-2.1.0 → objectstate-2.1.1}/.readthedocs.yaml +0 -0
  10. {objectstate-2.1.0 → objectstate-2.1.1}/BADGE_SETUP.md +0 -0
  11. {objectstate-2.1.0 → objectstate-2.1.1}/LICENSE +0 -0
  12. {objectstate-2.1.0 → objectstate-2.1.1}/README.md +0 -0
  13. {objectstate-2.1.0 → objectstate-2.1.1}/docs/.gitignore +0 -0
  14. {objectstate-2.1.0 → objectstate-2.1.1}/docs/Makefile +0 -0
  15. {objectstate-2.1.0 → objectstate-2.1.1}/docs/api/modules.rst +0 -0
  16. {objectstate-2.1.0 → objectstate-2.1.1}/docs/architectural_fixes.rst +0 -0
  17. {objectstate-2.1.0 → objectstate-2.1.1}/docs/architecture.rst +0 -0
  18. {objectstate-2.1.0 → objectstate-2.1.1}/docs/archive/DOCUMENTATION_AUDIT.md +0 -0
  19. {objectstate-2.1.0 → objectstate-2.1.1}/docs/archive/DOCUMENTATION_FIXES.md +0 -0
  20. {objectstate-2.1.0 → objectstate-2.1.1}/docs/archive/README.md +0 -0
  21. {objectstate-2.1.0 → objectstate-2.1.1}/docs/conf.py +0 -0
  22. {objectstate-2.1.0 → objectstate-2.1.1}/docs/examples/atomic_operations.rst +0 -0
  23. {objectstate-2.1.0 → objectstate-2.1.1}/docs/examples/basic.rst +0 -0
  24. {objectstate-2.1.0 → objectstate-2.1.1}/docs/examples/dual_axis.rst +0 -0
  25. {objectstate-2.1.0 → objectstate-2.1.1}/docs/examples/index.rst +0 -0
  26. {objectstate-2.1.0 → objectstate-2.1.1}/docs/examples/ui.rst +0 -0
  27. {objectstate-2.1.0 → objectstate-2.1.1}/docs/index.rst +0 -0
  28. {objectstate-2.1.0 → objectstate-2.1.1}/docs/make.bat +0 -0
  29. {objectstate-2.1.0 → objectstate-2.1.1}/docs/performance/canonical-context-type-resolution-20261005.json +0 -0
  30. {objectstate-2.1.0 → objectstate-2.1.1}/docs/provenance.rst +0 -0
  31. {objectstate-2.1.0 → objectstate-2.1.1}/docs/quickstart.rst +0 -0
  32. {objectstate-2.1.0 → objectstate-2.1.1}/docs/state_management.rst +0 -0
  33. {objectstate-2.1.0 → objectstate-2.1.1}/docs/state_propagation.rst +0 -0
  34. {objectstate-2.1.0 → objectstate-2.1.1}/docs/undo_redo.rst +0 -0
  35. {objectstate-2.1.0 → objectstate-2.1.1}/paper.bib +0 -0
  36. {objectstate-2.1.0 → objectstate-2.1.1}/paper.md +0 -0
  37. {objectstate-2.1.0 → objectstate-2.1.1}/plans/n_dimensional_inheritance.md +0 -0
  38. {objectstate-2.1.0 → objectstate-2.1.1}/pyproject.toml +0 -0
  39. {objectstate-2.1.0 → objectstate-2.1.1}/scripts/check_ruff_added_lines.py +0 -0
  40. {objectstate-2.1.0 → objectstate-2.1.1}/scripts/release.py +0 -0
  41. {objectstate-2.1.0 → objectstate-2.1.1}/scripts/update_and_release.py +0 -0
  42. {objectstate-2.1.0 → objectstate-2.1.1}/scripts/update_version.py +0 -0
  43. {objectstate-2.1.0 → objectstate-2.1.1}/scripts/verify_release_ready.py +0 -0
  44. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/codegen.py +0 -0
  45. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/collection_containers.py +0 -0
  46. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/config.py +0 -0
  47. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/construction_binding.py +0 -0
  48. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/context_manager.py +0 -0
  49. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/docs/configuration_framework.rst +0 -0
  50. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/docs/context_system.rst +0 -0
  51. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/docs/object_state_lifecycle.rst +0 -0
  52. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/dual_axis_resolver.py +0 -0
  53. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/edit_session.py +0 -0
  54. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/field_access.py +0 -0
  55. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/global_config.py +0 -0
  56. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/inspection.py +0 -0
  57. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/live_context_resolver.py +0 -0
  58. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/object_state.py +0 -0
  59. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/object_state_metadata.py +0 -0
  60. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/object_state_registry.py +0 -0
  61. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/parameter_owner.py +0 -0
  62. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/parameter_structure.py +0 -0
  63. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/parametric_axes.py +0 -0
  64. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/placeholder.py +0 -0
  65. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/reified_generics.py +0 -0
  66. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/scope_key.py +0 -0
  67. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/snapshot_model.py +0 -0
  68. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/subfield_semantics.py +0 -0
  69. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/time_travel_profile.py +0 -0
  70. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/token_cache.py +0 -0
  71. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/transaction_checkpoint.py +0 -0
  72. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/ui_visibility.py +0 -0
  73. {objectstate-2.1.0 → objectstate-2.1.1}/src/objectstate/value_semantics.py +0 -0
  74. {objectstate-2.1.0 → objectstate-2.1.1}/tests/__init__.py +0 -0
  75. {objectstate-2.1.0 → objectstate-2.1.1}/tests/conftest.py +0 -0
  76. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_authored_paths.py +0 -0
  77. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_callable_baseline.py +0 -0
  78. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_codegen.py +0 -0
  79. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_config.py +0 -0
  80. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_construction_history.py +0 -0
  81. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_context_manager.py +0 -0
  82. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_field_access.py +0 -0
  83. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_global_config.py +0 -0
  84. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_history_persistence.py +0 -0
  85. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_inspection.py +0 -0
  86. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_integration.py +0 -0
  87. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_lazy_factory.py +0 -0
  88. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_object_state_metadata_contracts.py +0 -0
  89. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_object_state_restore.py +0 -0
  90. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_object_state_update_instance.py +0 -0
  91. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_parameter_owner.py +0 -0
  92. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_parametric_axes.py +0 -0
  93. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_placeholder.py +0 -0
  94. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_registry_subscription.py +0 -0
  95. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_reified_generics.py +0 -0
  96. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_release_readiness.py +0 -0
  97. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_resolved_change_notifications.py +0 -0
  98. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_scope_key.py +0 -0
  99. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_subfield_semantics.py +0 -0
  100. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_timeline_projection.py +0 -0
  101. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_transaction_checkpoint.py +0 -0
  102. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_ui_visible_field_projection.py +0 -0
  103. {objectstate-2.1.0 → objectstate-2.1.1}/tests/test_undo_redo_cascade.py +0 -0
  104. {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: 74.96%"><title>coverage: 74.96%</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="#ea7233"/><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">74.96%</text><text x="865" y="150" fill-opacity=".3" textLength="430">74.96%</text></g><text x="865" y="140" textLength="430">74.96%</text></g></g></svg>
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.0
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
@@ -212,7 +212,7 @@ __all__ = [
212
212
  'ObjectStateEditSession',
213
213
  ]
214
214
 
215
- __version__ = "2.1.0"
215
+ __version__ = "2.1.1"
216
216
  __author__ = 'OpenHCS Team'
217
217
  __description__ = 'Generic configuration framework for lazy dataclass resolution'
218
218
 
@@ -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
- # Get cls's OWN annotations (not inherited) - check __dict__ not getattr
95
- own_defined = set()
96
- if '__annotations__' in cls.__dict__:
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 = klass.__dict__.get('__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