sincpro-framework 3.28.0__tar.gz → 3.28.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.
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/PKG-INFO +1 -1
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/pyproject.toml +1 -1
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/drafts.py +1 -1
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/numbering.py +1 -1
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/domain/relations.py +6 -6
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/database.py +4 -4
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/aggregation.py +9 -6
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/cascade.py +33 -4
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/data_mapper.py +9 -7
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/model_introspection.py +9 -8
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/relation_resolver.py +7 -6
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/workflows/writing.py +4 -4
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/repositories/memory_repository.py +17 -16
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/__init__.py +22 -20
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/__init__.py +2 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/grouping.py +48 -28
- sincpro_framework-3.28.2/sincpro_framework/ddd/editing/__init__.py +23 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/editing/drafts.py +1 -1
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/editing/editing.py +120 -92
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/editing/edits.py +30 -25
- sincpro_framework-3.28.2/sincpro_framework/ddd/editing/preview.py +115 -0
- sincpro_framework-3.28.0/sincpro_framework/ddd/entity/derivations.py → sincpro_framework-3.28.2/sincpro_framework/ddd/entity/computations.py +9 -9
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/computed.py +7 -5
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/entity.py +3 -3
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/entity_meta.py +122 -82
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/presentation.py +3 -3
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/relations.py +78 -8
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/exceptions.py +25 -7
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/reads/__init__.py +5 -5
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/reads/reads.py +136 -90
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/repository.py +3 -3
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/introspection/entity_tags.py +6 -17
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/computed_fields.py +2 -2
- sincpro_framework-3.28.0/sincpro_framework/ddd/editing/__init__.py +0 -26
- sincpro_framework-3.28.0/sincpro_framework/ddd/editing/preview.py +0 -74
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/LICENSE.md +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/README.md +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/aio/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/aio/bus.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/aio/bus.pyi +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/adapters/api_key_provider.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/adapters/role_permissions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/adapters/service_token_provider.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/adapters/static_provider.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/domain/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/domain/identity.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/domain/permissions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/domain/provider.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/entrypoint/access_control.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/entrypoint/asgi.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/entrypoint/security.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/infrastructure/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/infrastructure/security_context.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/services/guard.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus.pyi +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/events.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/events.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/incomes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/listeners.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/mixins/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/mixins/bus_incomes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/interceptors/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/interceptors/interceptor.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/interceptors/mixins/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/interceptors/mixins/bus_interceptors.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/listeners.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/events.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/listeners.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/mixins/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/mixins/bus_outcomes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/outcomes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/circuit_breaker/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/circuit_breaker/circuit_breaker.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/aws/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/aws/clients.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/failures/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/failures/classification.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/failures/problem.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/ids/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/ids/uuid7.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/naming/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/naming/case.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/naming/registered_name.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/ordering/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/ordering/placement.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/reads/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/reads/noting.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/serialization/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/serialization/values.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/transport/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/transport/grpc.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/conf/sincpro_framework_conf.yml +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/adapters/codecs.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/adapters/entries.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/adapters/propagation.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/adapters/stores.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/codec.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/execution.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/keys.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/level.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/node.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/owner.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/providers.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/sessions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/store.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/travel.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/bus.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/bus_context.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/bus_store.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/executions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/facade.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/propagation.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/providers.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/resolution.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/scopes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/threads.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/closed_scopes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/distributed.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/outage.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/shared.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/travel.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/tree.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/drafts.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/executions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/nodes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/propagation.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/providers.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/sessions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/eviction.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/json_codec.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/key_value_records.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/keys.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/observers.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/codec.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/eviction.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/failure.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/freshness.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/idempotency_records.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/idempotent_command.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/observer.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/policies.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/validation.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/entrypoint/bus_caching.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/entrypoint/facades.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/infrastructure/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/infrastructure/clock.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/infrastructure/flight.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/services/cache.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/services/idempotency.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/services/query_caching.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/data_analysis/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/data_analysis/arrow.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/data_analysis/cache.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/data_analysis/frame.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/adapters/in_memory.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/adapters/manifest.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/context_migrations.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/engine.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/status.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/step.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/entrypoint/command_line.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/entrypoint/orchestrator.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/infrastructure/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/infrastructure/step_ids.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/services/authoring.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/services/moves.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/services/system.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/services/timeline.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/adapters/http_source.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/adapters/in_memory.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/adapters/local.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/adapters/s3_compatible.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/domain/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/domain/fetch.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/domain/object_store.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/domain/publication.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/entrypoint/object_storage.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/contents.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/ids.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/objects.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/publications.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/transfers.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/migrations/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/migrations/engine.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/migrations/environment/env.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/migrations/environment/script.py.mako +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/runtime_use_cases.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/domain/consolidation.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/domain/custom_fields.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/domain/transaction.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/aggregate_repository.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/idempotency_records.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/mapping.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/repository.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/archive.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/audit.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/entity.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/events.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/idempotency.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/numbering.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/properties.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/runtime_use_cases.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/change_tracking.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/engine_errors.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/flushing.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/in_place_changes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/mapping_registry.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/observability.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/read_tracking.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/transaction_hooks.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/transaction_opening.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/unit_in_play.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/cache_invalidation.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/event_mapping.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/extension_mapping.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/extension_typing.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/extension_writing.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/sql_translator.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/upsert.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/workflows/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/workflows/reading.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/workflows/repository_state.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/workflows/unit_of_work.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/repositories/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/repositories/memory_numbering.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/repositories/memory_unit.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/adapters/dynamodb.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/adapters/in_memory.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/adapters/memcached.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/adapters/redis.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/domain/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/domain/key_value.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/domain/lease.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/infrastructure/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/infrastructure/client.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/services/bypass.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/services/leases.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/criteria.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/expression.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/pagination.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/resolution.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/sort.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/strict.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/values.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/entrypoint/aggregation.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/entrypoint/evaluation.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/entrypoint/resolution.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/axes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/comparison.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/dynamic_values.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/evaluation.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/reading.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/entity_collection.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/extensions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/mixins/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/mixins/archivable.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/mixins/audited.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/mixins/event_sourced.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/utils/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/utils/annotations.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/events/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/events/domain_event.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/events/mixins/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/events/mixins/change_tracking.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/events/mixins/deliverable.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/exchange_rates.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/iso_4217.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/money.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/multi_currency.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/multi_language.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/query.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/reads/defaults.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/aggregate_repository.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/capabilities.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/fingerprint.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/hooks.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/mixins/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/mixins/change_tracking.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/numbering.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/publication.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/value_object.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/dependencies.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/aws_lambda/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/aws_lambda/sqs.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/adapters/clocks.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/adapters/in_memory_runs.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/adapters/key_value_runs.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/domain/clock.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/domain/cron.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/domain/runs.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/domain/schedule.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/gateway/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/gateway/gateway.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/gateway/process.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/registry.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/fastapi/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/fastapi/calling.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/fastapi/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/fastapi/problems.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/fastapi/wire.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/client.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/naming.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/proto.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/wire.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/mcp/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/mcp/auth.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/mcp/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/mcp/mcp.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/mcp/wire.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/channels.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/flavours.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/inbox.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/sqs.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/verdicts.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/wire.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rest/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rest/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rest/openapi.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rest/routing.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rest/serving.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/errors.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/jrpc.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/serving.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/wire.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/bindings.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/layers.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/packed.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/readiness.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/surface.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/aws_lambda.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/decorators.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/fastapi.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/grpc.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/mcp.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/queue.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/rest.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/rpc.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/workers.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/infrastructure/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/infrastructure/http.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/infrastructure/json_schema.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/infrastructure/registry.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/services/catalog.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/services/gateway.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/services/readiness.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/services/scalar_execution.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/error_handler.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/aws/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/aws/attributes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/aws/queues.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/background_queue.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/faststream/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/faststream/queue.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/sync_queue.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/broker.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/envelope.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/forwarding.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/queue.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/subscribes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/entrypoint/publisher.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/entrypoint/subscriber.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/services/dispatch.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/services/forwarding.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/services/publication.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/introspection/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/introspection/inspector.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/introspection/operations.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ioc.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/api.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/correlation.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/domain.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/errors/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/errors/record_error.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/errors/setup.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/failure.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/field_paths.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/http.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/adapters/in_memory.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/adapters/otel.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/adapters/prometheus.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/bus_observability.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/declarations.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/instruments.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/naming.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/recorder.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/entrypoint/facade.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/infrastructure/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/infrastructure/active.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/infrastructure/registry.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/declaring.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/labels.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/measuring.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/outcomes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/recording.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/testing.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/mixins/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/mixins/bus_observability.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/otlp.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/registry.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/attributes.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/propagation.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/setup.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/span_context.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/span_error.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/span_execution.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/domain/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/domain/reads.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/domain/recipe.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/domain/run.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/entrypoint/bus_pipelines.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/entrypoint/pipeline.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/entrypoint/reads.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/services/recorder.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/services/runs.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/py.typed +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/registry.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/adapters/grpc.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/adapters/http.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/address.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/failure_codec.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/payload.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/transport.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/grpc.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/host_process.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/hosted_context.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/hosts.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/http.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/infrastructure/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/infrastructure/configuration.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/services/hosted_execution.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/services/transports.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/domain.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/in_memory.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/loading.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/registry.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/analysis/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/analysis/architecture.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/analysis/function_order.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/analysis/settings_scope.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/auth_provider.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/caching_strategies.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/exchange_rates.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/extension.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/idempotency_records.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/key_value_store.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/object_store.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/auth.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/clock.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/context.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/dependencies.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/events.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/exceptions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/adapters/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/adapters/aws.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/adapters/environment.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/adapters/yaml_file.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/domain/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/domain/config.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/domain/description.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/entrypoint/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/entrypoint/building.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/services/__init__.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/services/building.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/services/description.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/services/resolution.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/sincpro_abstractions.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/sincpro_abstractions.pyi +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/sincpro_conf.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/sincpro_logger.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/use_bus.py +0 -0
- {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/use_bus.pyi +0 -0
{sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/drafts.py
RENAMED
|
@@ -16,7 +16,7 @@ after an expiry — so a tab still holding an old one cannot win.
|
|
|
16
16
|
|
|
17
17
|
The draft is not the record. Activating it is the project's Command: read the stored record,
|
|
18
18
|
`refuse_stale(draft, record)` (`sincpro_framework.ddd`) — a record changed since the draft started
|
|
19
|
-
is `StaleAggregate` — then `
|
|
19
|
+
is `StaleAggregate` — then `apply_values(record, draft.values)`, save it and discard the draft.
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
22
|
from datetime import datetime
|
|
@@ -139,7 +139,7 @@ class DatabaseNumbering(INumbering):
|
|
|
139
139
|
|
|
140
140
|
numbering.take("F", count=3, scope="branch-1/2026") -> range(41, 44)
|
|
141
141
|
|
|
142
|
-
1. Refused inside `
|
|
142
|
+
1. Refused inside `read_only()` and for a count below one.
|
|
143
143
|
2. The session: the unit of work in play (refused when read-only), or a transaction of
|
|
144
144
|
its own, warned in the log.
|
|
145
145
|
3. The counter moved in one statement where the dialect has an upsert (Postgres,
|
|
@@ -15,7 +15,7 @@ from sqlalchemy import Table
|
|
|
15
15
|
|
|
16
16
|
from sincpro_framework.ddd.criteria import Criteria
|
|
17
17
|
from sincpro_framework.ddd.entity import relations
|
|
18
|
-
from sincpro_framework.ddd.entity.relations import Resolver
|
|
18
|
+
from sincpro_framework.ddd.entity.relations import RelationKind, Resolver
|
|
19
19
|
|
|
20
20
|
REPOSITORY = "sincpro_repository"
|
|
21
21
|
"""The key under which a unit of work leaves its repository on the session, so a relation
|
|
@@ -135,7 +135,7 @@ class TableRelation(relations.Relation):
|
|
|
135
135
|
|
|
136
136
|
def __init__(
|
|
137
137
|
self,
|
|
138
|
-
kind: str,
|
|
138
|
+
kind: RelationKind | str,
|
|
139
139
|
related: type,
|
|
140
140
|
identified_by: str = "",
|
|
141
141
|
resolver: Resolver | None = None,
|
|
@@ -152,7 +152,7 @@ class TableRelation(relations.Relation):
|
|
|
152
152
|
every kind's options at once. `through` and `related_key` are read by `many_to_many`
|
|
153
153
|
only; `owned` and `orphans` by a to-many `foreign_key` only.
|
|
154
154
|
|
|
155
|
-
TableRelation(
|
|
155
|
+
TableRelation(RelationKind.MANY_TO_MANY, Tag, "dataset_id", through=dataset_tag,
|
|
156
156
|
related_key="tag_id")
|
|
157
157
|
-> as TableRelation.many_to_many(Tag, dataset_tag, "dataset_id", "tag_id")
|
|
158
158
|
|
|
@@ -203,7 +203,7 @@ class TableRelation(relations.Relation):
|
|
|
203
203
|
own its parent, and `owned` is read only on a to-many.
|
|
204
204
|
"""
|
|
205
205
|
return cls(
|
|
206
|
-
|
|
206
|
+
RelationKind.FOREIGN_KEY,
|
|
207
207
|
related,
|
|
208
208
|
identified_by,
|
|
209
209
|
scope=scope,
|
|
@@ -226,7 +226,7 @@ class TableRelation(relations.Relation):
|
|
|
226
226
|
"""Same database: the pairs live in `through`, `this_key` pointing here and
|
|
227
227
|
`related_key` pointing at the related aggregate."""
|
|
228
228
|
return cls(
|
|
229
|
-
|
|
229
|
+
RelationKind.MANY_TO_MANY,
|
|
230
230
|
related,
|
|
231
231
|
this_key,
|
|
232
232
|
through=through,
|
|
@@ -239,4 +239,4 @@ class TableRelation(relations.Relation):
|
|
|
239
239
|
cls, related: type, identified_by: str, scope: Criteria | None = None
|
|
240
240
|
) -> "TableRelation":
|
|
241
241
|
"""Same database, no foreign key: this aggregate holds a list of the related ids."""
|
|
242
|
-
return cls(
|
|
242
|
+
return cls(RelationKind.ID_LIST, related, identified_by, scope=scope)
|
|
@@ -38,7 +38,7 @@ from sincpro_framework.data_layer.orm.sqlalchemy.infrastructure.read_tracking im
|
|
|
38
38
|
from sincpro_framework.data_layer.orm.sqlalchemy.infrastructure.transaction_hooks import (
|
|
39
39
|
install as hooks_per_transaction,
|
|
40
40
|
)
|
|
41
|
-
from sincpro_framework.ddd.editing.preview import
|
|
41
|
+
from sincpro_framework.ddd.editing.preview import is_read_only
|
|
42
42
|
from sincpro_framework.ddd.entity import utc_now
|
|
43
43
|
from sincpro_framework.ddd.repositories.repository import refuse_writing_in_preview
|
|
44
44
|
|
|
@@ -276,7 +276,7 @@ class Database:
|
|
|
276
276
|
|
|
277
277
|
|
|
278
278
|
def _refused_in_preview(session: Session) -> None:
|
|
279
|
-
"""A flush with something to write, inside `
|
|
279
|
+
"""A flush with something to write, inside `read_only()`, is refused: `record_changes`,
|
|
280
280
|
the commit of a unit of work tracking changes, a record added to the session by hand.
|
|
281
281
|
|
|
282
282
|
Outside the guard: a statement sent on a raw connection, and a thread started without the
|
|
@@ -306,14 +306,14 @@ def _reads_only(sql: str) -> bool:
|
|
|
306
306
|
|
|
307
307
|
|
|
308
308
|
def _statement_refused_in_preview(state: Any) -> None:
|
|
309
|
-
"""A statement sent through a session inside `
|
|
309
|
+
"""A statement sent through a session inside `read_only()` that writes or locks is refused:
|
|
310
310
|
an INSERT, UPDATE or DELETE, a text statement that is not a read, a read that locks rows.
|
|
311
311
|
|
|
312
312
|
UPDATE … / text("DELETE …") → ProgrammingError
|
|
313
313
|
SELECT … FOR UPDATE → ProgrammingError
|
|
314
314
|
SELECT … / text("SELECT …") → runs, without an autoflush
|
|
315
315
|
"""
|
|
316
|
-
if not
|
|
316
|
+
if not is_read_only():
|
|
317
317
|
return
|
|
318
318
|
if state.is_select:
|
|
319
319
|
# A read inside a preview never flushes what the unit of work holds pending: that
|
|
@@ -20,6 +20,7 @@ from sincpro_framework.ddd.criteria import (
|
|
|
20
20
|
Grouping,
|
|
21
21
|
GroupingLevel,
|
|
22
22
|
Measure,
|
|
23
|
+
MeasureFunction,
|
|
23
24
|
PivotCell,
|
|
24
25
|
Resolution,
|
|
25
26
|
)
|
|
@@ -50,7 +51,7 @@ NATIVE_BOOLEAN_FOLDS = frozenset({"postgresql", "duckdb"})
|
|
|
50
51
|
them» is a minimum of 1 and «any of them» a maximum of 1."""
|
|
51
52
|
|
|
52
53
|
|
|
53
|
-
def _boolean_fold(function:
|
|
54
|
+
def _boolean_fold(function: MeasureFunction, column: Any, dialect: str) -> Any:
|
|
54
55
|
"""`bool_and` / `bool_or` over a boolean column, in the dialect's own words.
|
|
55
56
|
|
|
56
57
|
in bool_and, Invoice.paid, "postgresql" → out bool_and(invoice.paid)
|
|
@@ -58,7 +59,9 @@ def _boolean_fold(function: str, column: Any, dialect: str) -> Any:
|
|
|
58
59
|
"""
|
|
59
60
|
if dialect in NATIVE_BOOLEAN_FOLDS:
|
|
60
61
|
return getattr(func, function)(column)
|
|
61
|
-
return (
|
|
62
|
+
return (
|
|
63
|
+
func.min(column) if function is MeasureFunction.BOOL_AND else func.max(column)
|
|
64
|
+
) == 1
|
|
62
65
|
|
|
63
66
|
|
|
64
67
|
def measure_columns(
|
|
@@ -99,19 +102,19 @@ def measure_columns(
|
|
|
99
102
|
meta.field(measure.field)
|
|
100
103
|
column = sql_translator.column_attribute(model, measure.field)
|
|
101
104
|
|
|
102
|
-
if measure.function
|
|
105
|
+
if measure.function is MeasureFunction.COUNT_DISTINCT:
|
|
103
106
|
columns.append(func.count(distinct(column)).label(name))
|
|
104
|
-
elif measure.function in (
|
|
107
|
+
elif measure.function in (MeasureFunction.PERCENTILE, MeasureFunction.MEDIAN):
|
|
105
108
|
if dialect in WITHOUT_PERCENTILES:
|
|
106
109
|
raise exceptions.InvalidCriteria(
|
|
107
110
|
f"'{dialect}' does not compute percentiles; ask for one over a database "
|
|
108
111
|
"that does, or answer it in memory"
|
|
109
112
|
)
|
|
110
|
-
fraction = 0.5 if measure.function
|
|
113
|
+
fraction = 0.5 if measure.function is MeasureFunction.MEDIAN else measure.argument
|
|
111
114
|
columns.append(
|
|
112
115
|
func.percentile_cont(fraction).within_group(column.asc()).label(name)
|
|
113
116
|
)
|
|
114
|
-
elif measure.function in (
|
|
117
|
+
elif measure.function in (MeasureFunction.BOOL_AND, MeasureFunction.BOOL_OR):
|
|
115
118
|
Grouping(measures={name: measure}).check_measures(
|
|
116
119
|
{measure.field: meta.field(measure.field).type.value}
|
|
117
120
|
)
|
|
@@ -52,7 +52,7 @@ from sincpro_framework.data_layer.orm.sqlalchemy.services.model_introspection im
|
|
|
52
52
|
)
|
|
53
53
|
from sincpro_framework.data_layer.orm.sqlalchemy.services.upsert import unique_on
|
|
54
54
|
from sincpro_framework.ddd.entity.entity_collection import identity_name, identity_of
|
|
55
|
-
from sincpro_framework.ddd.entity.relations import key_pair
|
|
55
|
+
from sincpro_framework.ddd.entity.relations import RelationKind, key_pair
|
|
56
56
|
from sincpro_framework.sincpro_logger import logger
|
|
57
57
|
|
|
58
58
|
WRITTEN = {Held.ASSIGNED: Held.WHOLE, Held.BLIND: Held.CUT}
|
|
@@ -228,7 +228,11 @@ def owned_by(model: type) -> list[Owned]:
|
|
|
228
228
|
owned: list[Owned] = []
|
|
229
229
|
for name, relation in mapping_registry.relations_of(model).items():
|
|
230
230
|
declared = meta.fields.get(name)
|
|
231
|
-
to_many =
|
|
231
|
+
to_many = (
|
|
232
|
+
declared is not None
|
|
233
|
+
and declared.many
|
|
234
|
+
and relation.kind is RelationKind.FOREIGN_KEY
|
|
235
|
+
)
|
|
232
236
|
if not to_many or getattr(relation, "owned", True) is False:
|
|
233
237
|
continue
|
|
234
238
|
here, there = key_pair(meta.identity, relation, many=True)
|
|
@@ -258,7 +262,7 @@ def linked_by(model: type) -> list[Linked]:
|
|
|
258
262
|
for name, relation in mapping_registry.relations_of(model).items():
|
|
259
263
|
through = getattr(relation, "through", None)
|
|
260
264
|
related_key = getattr(relation, "related_key", None)
|
|
261
|
-
if relation.kind
|
|
265
|
+
if relation.kind is RelationKind.MANY_TO_MANY and through is not None and related_key:
|
|
262
266
|
linked.append(Linked(name, through, relation.identified_by, related_key))
|
|
263
267
|
return linked
|
|
264
268
|
|
|
@@ -357,6 +361,29 @@ def _refuse_a_child_removed_before(records: list[Any]) -> None:
|
|
|
357
361
|
)
|
|
358
362
|
|
|
359
363
|
|
|
364
|
+
def _refuse_a_reference_not_stored(plan: Plan, saved: set[int]) -> None:
|
|
365
|
+
"""A many-to-many that references a record never stored is refused before any statement:
|
|
366
|
+
a pair points at a row, and a reference never writes the record it names — so the pair
|
|
367
|
+
would point at nothing, silently on an engine that does not check its foreign keys.
|
|
368
|
+
|
|
369
|
+
Ticket(labels=[Label(name="new")]); save(ticket)
|
|
370
|
+
-> ProgrammingError: Ticket.labels references Label 0192…, which is not stored …
|
|
371
|
+
save([label, ticket]) -> written: the label is part of this save
|
|
372
|
+
|
|
373
|
+
Context: a form never reaches here with one — the ids it sends are read from the store
|
|
374
|
+
(`EntityReads.referenced`); it is the domain building a reference by hand.
|
|
375
|
+
"""
|
|
376
|
+
for record, name in plan.linked:
|
|
377
|
+
for one in HeldRelations(record).value(name) or ():
|
|
378
|
+
if getattr(one, "is_new", False) and id(one) not in saved:
|
|
379
|
+
raise exceptions.ProgrammingError(
|
|
380
|
+
f"{type(record).__name__}.{name} references {type(one).__name__} "
|
|
381
|
+
f"{identity_of(one)}, which is not stored: a many-to-many links stored "
|
|
382
|
+
f"records — save the {type(one).__name__} first, or in the same call: "
|
|
383
|
+
f"save([{type(one).__name__.lower()}, {type(record).__name__.lower()}])"
|
|
384
|
+
)
|
|
385
|
+
|
|
386
|
+
|
|
360
387
|
def _paired(session: Session, plan: Plan, record: Any, linked: Linked, how: Held) -> bool:
|
|
361
388
|
"""The pairs one many-to-many of `record` inserts and deletes, put on the plan; whether it
|
|
362
389
|
changes any.
|
|
@@ -420,7 +447,8 @@ def planned_save(session: Session, records: list[Any]) -> Plan:
|
|
|
420
447
|
-> Plan(writes=[invoice, l1], moved=[]): a new root has no version to raise
|
|
421
448
|
|
|
422
449
|
1. Walk each root and, through every relation it writes, its children, depth first: the
|
|
423
|
-
roots are always written, a child only when it is new or changed
|
|
450
|
+
roots are always written, a child only when it is new or changed; a many-to-many may
|
|
451
|
+
reference only stored records, or records of this same save.
|
|
424
452
|
1.1 Each child gets the root's key on the field that holds it.
|
|
425
453
|
1.2 A relation nobody read is skipped; a read one only saves what it holds; a blind
|
|
426
454
|
assignment does the same and is logged.
|
|
@@ -490,6 +518,7 @@ def planned_save(session: Session, records: list[Any]) -> Plan:
|
|
|
490
518
|
for one in records:
|
|
491
519
|
visit(one, explicit=True, root=one)
|
|
492
520
|
_refuse_a_child_removed_before(plan.writes)
|
|
521
|
+
_refuse_a_reference_not_stored(plan, seen)
|
|
493
522
|
|
|
494
523
|
orphans: list[Any] = []
|
|
495
524
|
for (owner, name), (owned, read_by_key) in settling.items():
|
|
@@ -44,14 +44,14 @@ from sincpro_framework.data_layer.orm.sqlalchemy.services.relation_resolver impo
|
|
|
44
44
|
resolve_whole,
|
|
45
45
|
)
|
|
46
46
|
from sincpro_framework.ddd.entity import relations
|
|
47
|
-
from sincpro_framework.ddd.entity.computed import
|
|
47
|
+
from sincpro_framework.ddd.entity.computed import computed_fields_of
|
|
48
48
|
from sincpro_framework.ddd.entity.entity_collection import identity_name
|
|
49
49
|
from sincpro_framework.ddd.entity.entity_meta import (
|
|
50
50
|
annotations_of,
|
|
51
51
|
related_class,
|
|
52
52
|
without_optional,
|
|
53
53
|
)
|
|
54
|
-
from sincpro_framework.ddd.entity.relations import key_pair
|
|
54
|
+
from sincpro_framework.ddd.entity.relations import RelationKind, key_pair
|
|
55
55
|
from sincpro_framework.ddd.query import serialising
|
|
56
56
|
|
|
57
57
|
|
|
@@ -64,6 +64,8 @@ class RelatedAttribute:
|
|
|
64
64
|
|
|
65
65
|
A data descriptor, so it wins over the value a dataclass `__init__` stores: a record built
|
|
66
66
|
in memory holds what its constructor was given, a record the mapper loaded starts unresolved.
|
|
67
|
+
It is the vocabulary's `RelationAttribute`: `joined_by`, `holds_whole`, `held_in_part` and
|
|
68
|
+
`named_by_id` are what the domain asks it, without reading anything.
|
|
67
69
|
"""
|
|
68
70
|
|
|
69
71
|
def __init__(
|
|
@@ -163,7 +165,7 @@ class RelatedAttribute:
|
|
|
163
165
|
"""Whether a save of the record writes this relation — the only case its reading is
|
|
164
166
|
worth a query before an assignment."""
|
|
165
167
|
if (
|
|
166
|
-
self.relation.kind
|
|
168
|
+
self.relation.kind is not RelationKind.FOREIGN_KEY
|
|
167
169
|
or getattr(self.relation, "owned", None) is False
|
|
168
170
|
):
|
|
169
171
|
return False
|
|
@@ -177,7 +179,7 @@ class RelatedAttribute:
|
|
|
177
179
|
Sale.lines → ("id", "sale_id") a new line takes the sale's id
|
|
178
180
|
Sale.customer → None another aggregate, not written from here
|
|
179
181
|
|
|
180
|
-
What `
|
|
182
|
+
What `apply_values` asks before building a line a form sent without its key: the form cannot
|
|
181
183
|
know it, least of all for a sale that is not stored yet.
|
|
182
184
|
"""
|
|
183
185
|
if not self._written_by_root(record):
|
|
@@ -192,10 +194,10 @@ class RelatedAttribute:
|
|
|
192
194
|
Sale.lines → False the lines are parts, sent whole
|
|
193
195
|
Run.dataset → False
|
|
194
196
|
|
|
195
|
-
What `EntityReads.referenced` asks before `
|
|
197
|
+
What `EntityReads.referenced` asks before `apply_values`: the ids a form sends are read as the
|
|
196
198
|
records they name.
|
|
197
199
|
"""
|
|
198
|
-
return self.relation.kind
|
|
200
|
+
return self.relation.kind is RelationKind.MANY_TO_MANY
|
|
199
201
|
|
|
200
202
|
def __set__(self, record: Any, value: Any) -> None:
|
|
201
203
|
"""An assignment replaces the set. Context: inside a unit of work, a stored record whose
|
|
@@ -307,7 +309,7 @@ def computed_properties(entity: type, table: Table) -> dict[str, Any]:
|
|
|
307
309
|
refused here, at boot, naming the field and the column, and not on the first query.
|
|
308
310
|
"""
|
|
309
311
|
found: dict[str, Any] = {}
|
|
310
|
-
for name, computation in
|
|
312
|
+
for name, computation in computed_fields_of(entity).items():
|
|
311
313
|
if computation.sql is None:
|
|
312
314
|
continue
|
|
313
315
|
try:
|
|
@@ -47,18 +47,19 @@ from sincpro_framework.ddd.entity.entity_meta import (
|
|
|
47
47
|
with_computed,
|
|
48
48
|
without_optional,
|
|
49
49
|
)
|
|
50
|
-
from sincpro_framework.ddd.entity.relations import key_pair
|
|
50
|
+
from sincpro_framework.ddd.entity.relations import RelationKind, key_pair
|
|
51
51
|
from sincpro_framework.ddd.multi_language import MultiLanguage
|
|
52
52
|
|
|
53
53
|
|
|
54
|
-
def _relational_type(kind:
|
|
55
|
-
"""The field type a relation is described as
|
|
54
|
+
def _relational_type(kind: RelationKind | None, many: bool) -> FieldType:
|
|
55
|
+
"""The field type a relation is described as; one nothing declared (`None`) is read by its
|
|
56
|
+
cardinality, as a foreign key is.
|
|
56
57
|
|
|
57
|
-
(
|
|
58
|
-
(
|
|
59
|
-
(
|
|
58
|
+
(MANY_TO_MANY, _) -> MANY2MANY
|
|
59
|
+
(FOREIGN_KEY, True) -> ONE2MANY
|
|
60
|
+
(None, False) -> MANY2ONE
|
|
60
61
|
"""
|
|
61
|
-
if kind
|
|
62
|
+
if kind is RelationKind.MANY_TO_MANY:
|
|
62
63
|
return FieldType.MANY2MANY
|
|
63
64
|
return FieldType.ONE2MANY if many else FieldType.MANY2ONE
|
|
64
65
|
|
|
@@ -230,7 +231,7 @@ class ModelIntrospection:
|
|
|
230
231
|
if relation is None and (related is None or not is_mapped(related)):
|
|
231
232
|
continue
|
|
232
233
|
related_name = relation.related.__name__ if relation is not None else related.__name__ # type: ignore[union-attr]
|
|
233
|
-
logical = _relational_type(relation.kind if relation else
|
|
234
|
+
logical = _relational_type(relation.kind if relation else None, many)
|
|
234
235
|
identified_by = relation.identified_by if relation is not None else None
|
|
235
236
|
# The pair is published expanded, whichever way it was declared, so a client reads how
|
|
236
237
|
# the two sides meet without knowing the cardinality convention `identified_by` obeys.
|
|
@@ -42,6 +42,7 @@ from sincpro_framework.ddd.entity.entity_collection import (
|
|
|
42
42
|
from sincpro_framework.ddd.entity.entity_meta import FieldType, Meta
|
|
43
43
|
from sincpro_framework.ddd.entity.relations import (
|
|
44
44
|
Groups,
|
|
45
|
+
RelationKind,
|
|
45
46
|
cut,
|
|
46
47
|
key_pair,
|
|
47
48
|
limit_of,
|
|
@@ -329,27 +330,27 @@ def _resolve(
|
|
|
329
330
|
the scope is merged here and nowhere else, so every kind honours it alike."""
|
|
330
331
|
node = _scoped(declared, node)
|
|
331
332
|
limit = limit_of(node, whole)
|
|
332
|
-
if declared.kind
|
|
333
|
+
if declared.kind is RelationKind.RESOLVER:
|
|
333
334
|
return resolve_elsewhere(meta, parents, declared, node, many, limit)
|
|
334
335
|
relation = cast("TableRelation", declared)
|
|
335
336
|
match relation.kind:
|
|
336
|
-
case
|
|
337
|
+
case RelationKind.FOREIGN_KEY if many:
|
|
337
338
|
return _by_foreign_key_on_related(
|
|
338
339
|
prepare, session, meta, parents, relation, node, limit, dropped
|
|
339
340
|
)
|
|
340
|
-
case
|
|
341
|
+
case RelationKind.FOREIGN_KEY:
|
|
341
342
|
return _by_foreign_key_here(
|
|
342
343
|
prepare, session, meta, parents, relation, node, dropped
|
|
343
344
|
)
|
|
344
|
-
case
|
|
345
|
+
case RelationKind.MANY_TO_MANY:
|
|
345
346
|
return _through_table(
|
|
346
347
|
prepare, session, meta, parents, relation, node, limit, dropped
|
|
347
348
|
)
|
|
348
|
-
case
|
|
349
|
+
case RelationKind.ID_LIST:
|
|
349
350
|
return _by_id_list(
|
|
350
351
|
prepare, session, meta, parents, relation, node, limit, dropped
|
|
351
352
|
)
|
|
352
|
-
case
|
|
353
|
+
case RelationKind.RESOLVER:
|
|
353
354
|
return resolve_elsewhere(meta, parents, relation, node, many, limit)
|
|
354
355
|
raise ValueError(f"unknown relation kind {relation.kind!r}")
|
|
355
356
|
|
|
@@ -200,8 +200,8 @@ class Writing(RepositoryState, Extends):
|
|
|
200
200
|
for batch in _by_dependency(plan.detached):
|
|
201
201
|
session.add_all(batch)
|
|
202
202
|
self._written(session, batch)
|
|
203
|
-
|
|
204
|
-
|
|
203
|
+
for statement in plan.unlinks:
|
|
204
|
+
with session.no_autoflush, named(f"a pair of {statement.table.name}"):
|
|
205
205
|
session.execute(statement)
|
|
206
206
|
for level in reversed(plan.removals):
|
|
207
207
|
for one in level:
|
|
@@ -210,8 +210,8 @@ class Writing(RepositoryState, Extends):
|
|
|
210
210
|
for batch in _by_dependency(plan.writes):
|
|
211
211
|
session.add_all(batch)
|
|
212
212
|
self._written(session, batch)
|
|
213
|
-
|
|
214
|
-
|
|
213
|
+
for statement in plan.links:
|
|
214
|
+
with session.no_autoflush, named(f"a pair of {statement.table.name}"):
|
|
215
215
|
session.execute(statement)
|
|
216
216
|
plan.written()
|
|
217
217
|
self._store_facts(session, [*plan.stored, *plan.removed])
|
|
@@ -61,13 +61,14 @@ from sincpro_framework.ddd.criteria import (
|
|
|
61
61
|
Grouping,
|
|
62
62
|
GroupingLevel,
|
|
63
63
|
Measure,
|
|
64
|
+
MeasureFunction,
|
|
64
65
|
Node,
|
|
65
66
|
Operator,
|
|
66
67
|
Resolution,
|
|
67
68
|
Sort,
|
|
68
69
|
)
|
|
69
70
|
from sincpro_framework.ddd.entity import ArchivableMixin, Entity, extensions, utc_now
|
|
70
|
-
from sincpro_framework.ddd.entity.computed import
|
|
71
|
+
from sincpro_framework.ddd.entity.computed import computed_fields_of
|
|
71
72
|
from sincpro_framework.ddd.entity.entity_collection import (
|
|
72
73
|
Count,
|
|
73
74
|
Dropped,
|
|
@@ -132,25 +133,25 @@ def _percentile(values: list[Any], fraction: float) -> Any:
|
|
|
132
133
|
return ordered[below] + (ordered[above] - ordered[below]) * reach
|
|
133
134
|
|
|
134
135
|
|
|
135
|
-
MEASURES: dict[
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
136
|
+
MEASURES: dict[MeasureFunction, Callable[..., Any]] = {
|
|
137
|
+
MeasureFunction.COUNT: lambda values: len(values),
|
|
138
|
+
MeasureFunction.COUNT_DISTINCT: lambda values: len(set(values)),
|
|
139
|
+
MeasureFunction.SUM: lambda values: sum(values),
|
|
140
|
+
MeasureFunction.MIN: lambda values: min(values, default=None),
|
|
141
|
+
MeasureFunction.MAX: lambda values: max(values, default=None),
|
|
142
|
+
MeasureFunction.AVG: lambda values: (sum(values) / len(values)) if values else None,
|
|
143
|
+
MeasureFunction.PERCENTILE: _percentile,
|
|
144
|
+
MeasureFunction.MEDIAN: lambda values: _percentile(values, 0.5),
|
|
145
|
+
MeasureFunction.BOOL_AND: lambda values: all(values) if values else None,
|
|
146
|
+
MeasureFunction.BOOL_OR: lambda values: any(values) if values else None,
|
|
146
147
|
}
|
|
147
148
|
|
|
148
149
|
|
|
149
150
|
def _measure_of(values: list[Any], measure: Measure) -> Any:
|
|
150
151
|
"""One measure over the values a group holds. The only place that knows a percentile takes
|
|
151
152
|
its fraction and every other function takes nothing."""
|
|
152
|
-
if measure.function
|
|
153
|
-
return MEASURES[
|
|
153
|
+
if measure.function is MeasureFunction.PERCENTILE:
|
|
154
|
+
return MEASURES[MeasureFunction.PERCENTILE](values, measure.argument)
|
|
154
155
|
return MEASURES[measure.function](values)
|
|
155
156
|
|
|
156
157
|
|
|
@@ -590,7 +591,7 @@ class MemoryRepository(
|
|
|
590
591
|
"""The record with its computed fields set from `python`, which is what a store in memory
|
|
591
592
|
answers where a database would run the field's `sql`. A field with only `sql` stays at its
|
|
592
593
|
default here, and `_refuse_unanswerable` stops a criteria from asking for it."""
|
|
593
|
-
for name, computation in
|
|
594
|
+
for name, computation in computed_fields_of(type(record)).items():
|
|
594
595
|
if computation.python is not None:
|
|
595
596
|
setattr(record, name, computation.python(record))
|
|
596
597
|
return record
|
|
@@ -600,7 +601,7 @@ class MemoryRepository(
|
|
|
600
601
|
value would be a second implementation that quietly differs: it is refused, naming it.
|
|
601
602
|
"""
|
|
602
603
|
for name in names:
|
|
603
|
-
computation =
|
|
604
|
+
computation = computed_fields_of(aggregate).get(name)
|
|
604
605
|
if computation is not None and computation.python is None:
|
|
605
606
|
raise exceptions.InvalidCriteria(
|
|
606
607
|
f"{aggregate.__name__}.{name} is computed in SQL and has no `python`: a "
|
|
@@ -35,12 +35,9 @@ from sincpro_framework.ddd.criteria import (
|
|
|
35
35
|
Specification,
|
|
36
36
|
Today,
|
|
37
37
|
)
|
|
38
|
-
from sincpro_framework.ddd.editing.
|
|
39
|
-
refuse_stale,
|
|
40
|
-
)
|
|
41
|
-
from sincpro_framework.ddd.editing.editing import assign, recompute, recompute_whole
|
|
38
|
+
from sincpro_framework.ddd.editing.editing import apply_values, recompute
|
|
42
39
|
from sincpro_framework.ddd.editing.edits import Edit, EditAction, EntityEdits, ResponseEdit
|
|
43
|
-
from sincpro_framework.ddd.editing.preview import
|
|
40
|
+
from sincpro_framework.ddd.editing.preview import FormWarning, read_only, warn_form
|
|
44
41
|
from sincpro_framework.ddd.entity import (
|
|
45
42
|
ArchivableMixin,
|
|
46
43
|
AuditedMixin,
|
|
@@ -49,8 +46,8 @@ from sincpro_framework.ddd.entity import (
|
|
|
49
46
|
new_entity_id,
|
|
50
47
|
utc_now,
|
|
51
48
|
)
|
|
49
|
+
from sincpro_framework.ddd.entity.computations import Computations, Compute
|
|
52
50
|
from sincpro_framework.ddd.entity.computed import computed
|
|
53
|
-
from sincpro_framework.ddd.entity.derivations import Derivations, Derive
|
|
54
51
|
from sincpro_framework.ddd.entity.entity_collection import (
|
|
55
52
|
Changes,
|
|
56
53
|
Count,
|
|
@@ -67,7 +64,13 @@ from sincpro_framework.ddd.entity.presentation import (
|
|
|
67
64
|
Presentation,
|
|
68
65
|
When,
|
|
69
66
|
)
|
|
70
|
-
from sincpro_framework.ddd.entity.relations import
|
|
67
|
+
from sincpro_framework.ddd.entity.relations import (
|
|
68
|
+
BusResolver,
|
|
69
|
+
Relation,
|
|
70
|
+
RelationAttribute,
|
|
71
|
+
RelationKind,
|
|
72
|
+
Resolver,
|
|
73
|
+
)
|
|
71
74
|
from sincpro_framework.ddd.events import (
|
|
72
75
|
ChangeTrackingMixin,
|
|
73
76
|
DeliverableEventMixin,
|
|
@@ -105,8 +108,8 @@ from sincpro_framework.ddd.reads.reads import (
|
|
|
105
108
|
Get,
|
|
106
109
|
GetMany,
|
|
107
110
|
LiteralSearch,
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
PreviewEntity,
|
|
112
|
+
ResponsePreviewEntity,
|
|
110
113
|
Search,
|
|
111
114
|
history_of,
|
|
112
115
|
)
|
|
@@ -127,7 +130,7 @@ from sincpro_framework.ddd.repositories.hooks import Hook, Hooks
|
|
|
127
130
|
from sincpro_framework.ddd.value_object import ValueObject
|
|
128
131
|
|
|
129
132
|
__all__ = [
|
|
130
|
-
"
|
|
133
|
+
"FormWarning",
|
|
131
134
|
"AggregateNotFound",
|
|
132
135
|
"AggregateRepository",
|
|
133
136
|
"All",
|
|
@@ -149,8 +152,8 @@ __all__ = [
|
|
|
149
152
|
"CurrencyMismatch",
|
|
150
153
|
"Cursor",
|
|
151
154
|
"DeliverableEventMixin",
|
|
152
|
-
"
|
|
153
|
-
"
|
|
155
|
+
"Computations",
|
|
156
|
+
"Compute",
|
|
154
157
|
"DomainError",
|
|
155
158
|
"DomainEvent",
|
|
156
159
|
"DomainEvents",
|
|
@@ -198,15 +201,17 @@ __all__ = [
|
|
|
198
201
|
"Pivot",
|
|
199
202
|
"PivotCell",
|
|
200
203
|
"Presentation",
|
|
201
|
-
"
|
|
204
|
+
"PreviewEntity",
|
|
202
205
|
"Query",
|
|
203
206
|
"ReadsAggregates",
|
|
204
207
|
"Relation",
|
|
205
208
|
"RelationNotResolved",
|
|
209
|
+
"RelationAttribute",
|
|
210
|
+
"RelationKind",
|
|
206
211
|
"Resolver",
|
|
207
212
|
"ResponseEdit",
|
|
208
213
|
"ResponsePaginatedQuery",
|
|
209
|
-
"
|
|
214
|
+
"ResponsePreviewEntity",
|
|
210
215
|
"ResponseRecord",
|
|
211
216
|
"ResponseRecords",
|
|
212
217
|
"Search",
|
|
@@ -224,18 +229,15 @@ __all__ = [
|
|
|
224
229
|
"When",
|
|
225
230
|
"WritesAggregates",
|
|
226
231
|
"WritesInBulk",
|
|
227
|
-
"
|
|
228
|
-
"
|
|
232
|
+
"warn_form",
|
|
233
|
+
"apply_values",
|
|
229
234
|
"computed",
|
|
230
235
|
"detail_of",
|
|
231
236
|
"history_of",
|
|
232
|
-
"is_previewing",
|
|
233
237
|
"matching",
|
|
234
238
|
"new_entity_id",
|
|
235
239
|
"presentation_of",
|
|
236
|
-
"
|
|
240
|
+
"read_only",
|
|
237
241
|
"recompute",
|
|
238
|
-
"recompute_whole",
|
|
239
|
-
"refuse_stale",
|
|
240
242
|
"utc_now",
|
|
241
243
|
]
|
{sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/__init__.py
RENAMED
|
@@ -42,6 +42,7 @@ from sincpro_framework.ddd.criteria.domain.grouping import (
|
|
|
42
42
|
Grouping,
|
|
43
43
|
GroupingLevel,
|
|
44
44
|
Measure,
|
|
45
|
+
MeasureFunction,
|
|
45
46
|
Pivot,
|
|
46
47
|
PivotCell,
|
|
47
48
|
)
|
|
@@ -98,6 +99,7 @@ __all__ = [
|
|
|
98
99
|
"Grouping",
|
|
99
100
|
"GroupingLevel",
|
|
100
101
|
"Measure",
|
|
102
|
+
"MeasureFunction",
|
|
101
103
|
"Node",
|
|
102
104
|
"Not",
|
|
103
105
|
"Now",
|