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.
Files changed (569) hide show
  1. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/PKG-INFO +1 -1
  2. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/pyproject.toml +1 -1
  3. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/drafts.py +1 -1
  4. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/numbering.py +1 -1
  5. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/domain/relations.py +6 -6
  6. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/database.py +4 -4
  7. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/aggregation.py +9 -6
  8. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/cascade.py +33 -4
  9. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/data_mapper.py +9 -7
  10. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/model_introspection.py +9 -8
  11. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/relation_resolver.py +7 -6
  12. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/workflows/writing.py +4 -4
  13. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/repositories/memory_repository.py +17 -16
  14. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/__init__.py +22 -20
  15. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/__init__.py +2 -0
  16. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/grouping.py +48 -28
  17. sincpro_framework-3.28.2/sincpro_framework/ddd/editing/__init__.py +23 -0
  18. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/editing/drafts.py +1 -1
  19. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/editing/editing.py +120 -92
  20. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/editing/edits.py +30 -25
  21. sincpro_framework-3.28.2/sincpro_framework/ddd/editing/preview.py +115 -0
  22. sincpro_framework-3.28.0/sincpro_framework/ddd/entity/derivations.py → sincpro_framework-3.28.2/sincpro_framework/ddd/entity/computations.py +9 -9
  23. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/computed.py +7 -5
  24. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/entity.py +3 -3
  25. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/entity_meta.py +122 -82
  26. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/presentation.py +3 -3
  27. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/relations.py +78 -8
  28. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/exceptions.py +25 -7
  29. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/reads/__init__.py +5 -5
  30. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/reads/reads.py +136 -90
  31. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/repository.py +3 -3
  32. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/introspection/entity_tags.py +6 -17
  33. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/computed_fields.py +2 -2
  34. sincpro_framework-3.28.0/sincpro_framework/ddd/editing/__init__.py +0 -26
  35. sincpro_framework-3.28.0/sincpro_framework/ddd/editing/preview.py +0 -74
  36. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/LICENSE.md +0 -0
  37. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/README.md +0 -0
  38. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/__init__.py +0 -0
  39. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/aio/__init__.py +0 -0
  40. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/aio/bus.py +0 -0
  41. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/aio/bus.pyi +0 -0
  42. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/__init__.py +0 -0
  43. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/adapters/__init__.py +0 -0
  44. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/adapters/api_key_provider.py +0 -0
  45. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/adapters/role_permissions.py +0 -0
  46. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/adapters/service_token_provider.py +0 -0
  47. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/adapters/static_provider.py +0 -0
  48. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/domain/__init__.py +0 -0
  49. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/domain/exceptions.py +0 -0
  50. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/domain/identity.py +0 -0
  51. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/domain/permissions.py +0 -0
  52. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/domain/provider.py +0 -0
  53. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/entrypoint/__init__.py +0 -0
  54. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/entrypoint/access_control.py +0 -0
  55. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/entrypoint/asgi.py +0 -0
  56. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/entrypoint/security.py +0 -0
  57. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/infrastructure/__init__.py +0 -0
  58. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/infrastructure/security_context.py +0 -0
  59. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/services/__init__.py +0 -0
  60. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/auth/services/guard.py +0 -0
  61. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus.py +0 -0
  62. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus.pyi +0 -0
  63. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/__init__.py +0 -0
  64. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/events.py +0 -0
  65. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/__init__.py +0 -0
  66. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/events.py +0 -0
  67. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/incomes.py +0 -0
  68. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/listeners.py +0 -0
  69. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/mixins/__init__.py +0 -0
  70. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/incomes/mixins/bus_incomes.py +0 -0
  71. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/interceptors/__init__.py +0 -0
  72. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/interceptors/interceptor.py +0 -0
  73. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/interceptors/mixins/__init__.py +0 -0
  74. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/interceptors/mixins/bus_interceptors.py +0 -0
  75. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/listeners.py +0 -0
  76. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/__init__.py +0 -0
  77. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/events.py +0 -0
  78. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/listeners.py +0 -0
  79. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/mixins/__init__.py +0 -0
  80. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/mixins/bus_outcomes.py +0 -0
  81. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/bus_pipeline/outcomes/outcomes.py +0 -0
  82. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/circuit_breaker/__init__.py +0 -0
  83. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/circuit_breaker/circuit_breaker.py +0 -0
  84. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/__init__.py +0 -0
  85. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/aws/__init__.py +0 -0
  86. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/aws/clients.py +0 -0
  87. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/failures/__init__.py +0 -0
  88. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/failures/classification.py +0 -0
  89. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/failures/problem.py +0 -0
  90. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/ids/__init__.py +0 -0
  91. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/ids/uuid7.py +0 -0
  92. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/naming/__init__.py +0 -0
  93. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/naming/case.py +0 -0
  94. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/naming/registered_name.py +0 -0
  95. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/ordering/__init__.py +0 -0
  96. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/ordering/placement.py +0 -0
  97. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/reads/__init__.py +0 -0
  98. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/reads/noting.py +0 -0
  99. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/serialization/__init__.py +0 -0
  100. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/serialization/values.py +0 -0
  101. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/transport/__init__.py +0 -0
  102. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/common/transport/grpc.py +0 -0
  103. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/conf/sincpro_framework_conf.yml +0 -0
  104. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/__init__.py +0 -0
  105. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/adapters/__init__.py +0 -0
  106. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/adapters/codecs.py +0 -0
  107. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/adapters/entries.py +0 -0
  108. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/adapters/propagation.py +0 -0
  109. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/adapters/stores.py +0 -0
  110. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/__init__.py +0 -0
  111. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/codec.py +0 -0
  112. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/exceptions.py +0 -0
  113. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/execution.py +0 -0
  114. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/keys.py +0 -0
  115. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/level.py +0 -0
  116. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/node.py +0 -0
  117. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/owner.py +0 -0
  118. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/providers.py +0 -0
  119. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/sessions.py +0 -0
  120. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/store.py +0 -0
  121. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/domain/travel.py +0 -0
  122. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/__init__.py +0 -0
  123. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/bus.py +0 -0
  124. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/bus_context.py +0 -0
  125. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/bus_store.py +0 -0
  126. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/executions.py +0 -0
  127. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/facade.py +0 -0
  128. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/propagation.py +0 -0
  129. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/providers.py +0 -0
  130. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/resolution.py +0 -0
  131. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/scopes.py +0 -0
  132. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/entrypoint/threads.py +0 -0
  133. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/__init__.py +0 -0
  134. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/closed_scopes.py +0 -0
  135. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/distributed.py +0 -0
  136. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/outage.py +0 -0
  137. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/shared.py +0 -0
  138. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/travel.py +0 -0
  139. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/infrastructure/tree.py +0 -0
  140. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/__init__.py +0 -0
  141. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/drafts.py +0 -0
  142. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/executions.py +0 -0
  143. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/nodes.py +0 -0
  144. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/propagation.py +0 -0
  145. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/providers.py +0 -0
  146. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/context/services/sessions.py +0 -0
  147. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/__init__.py +0 -0
  148. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/__init__.py +0 -0
  149. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/__init__.py +0 -0
  150. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/eviction.py +0 -0
  151. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/json_codec.py +0 -0
  152. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/key_value_records.py +0 -0
  153. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/keys.py +0 -0
  154. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/adapters/observers.py +0 -0
  155. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/__init__.py +0 -0
  156. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/codec.py +0 -0
  157. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/eviction.py +0 -0
  158. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/exceptions.py +0 -0
  159. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/failure.py +0 -0
  160. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/freshness.py +0 -0
  161. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/idempotency_records.py +0 -0
  162. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/idempotent_command.py +0 -0
  163. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/observer.py +0 -0
  164. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/policies.py +0 -0
  165. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/domain/validation.py +0 -0
  166. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/entrypoint/__init__.py +0 -0
  167. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/entrypoint/bus_caching.py +0 -0
  168. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/entrypoint/facades.py +0 -0
  169. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/infrastructure/__init__.py +0 -0
  170. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/infrastructure/clock.py +0 -0
  171. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/infrastructure/flight.py +0 -0
  172. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/services/__init__.py +0 -0
  173. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/services/cache.py +0 -0
  174. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/services/idempotency.py +0 -0
  175. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/caching/services/query_caching.py +0 -0
  176. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/data_analysis/__init__.py +0 -0
  177. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/data_analysis/arrow.py +0 -0
  178. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/data_analysis/cache.py +0 -0
  179. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/data_analysis/frame.py +0 -0
  180. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/exceptions.py +0 -0
  181. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/__init__.py +0 -0
  182. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/adapters/__init__.py +0 -0
  183. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/adapters/in_memory.py +0 -0
  184. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/adapters/manifest.py +0 -0
  185. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/__init__.py +0 -0
  186. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/context_migrations.py +0 -0
  187. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/engine.py +0 -0
  188. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/exceptions.py +0 -0
  189. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/status.py +0 -0
  190. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/domain/step.py +0 -0
  191. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/entrypoint/__init__.py +0 -0
  192. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/entrypoint/command_line.py +0 -0
  193. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/entrypoint/orchestrator.py +0 -0
  194. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/infrastructure/__init__.py +0 -0
  195. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/infrastructure/step_ids.py +0 -0
  196. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/services/__init__.py +0 -0
  197. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/services/authoring.py +0 -0
  198. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/services/moves.py +0 -0
  199. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/services/system.py +0 -0
  200. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/migrations/services/timeline.py +0 -0
  201. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/__init__.py +0 -0
  202. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/adapters/__init__.py +0 -0
  203. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/adapters/http_source.py +0 -0
  204. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/adapters/in_memory.py +0 -0
  205. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/adapters/local.py +0 -0
  206. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/adapters/s3_compatible.py +0 -0
  207. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/domain/__init__.py +0 -0
  208. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/domain/exceptions.py +0 -0
  209. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/domain/fetch.py +0 -0
  210. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/domain/object_store.py +0 -0
  211. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/domain/publication.py +0 -0
  212. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/entrypoint/__init__.py +0 -0
  213. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/entrypoint/object_storage.py +0 -0
  214. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/__init__.py +0 -0
  215. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/contents.py +0 -0
  216. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/ids.py +0 -0
  217. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/objects.py +0 -0
  218. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/publications.py +0 -0
  219. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/object_storage/services/transfers.py +0 -0
  220. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/__init__.py +0 -0
  221. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/__init__.py +0 -0
  222. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/__init__.py +0 -0
  223. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/migrations/__init__.py +0 -0
  224. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/migrations/engine.py +0 -0
  225. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/migrations/environment/env.py +0 -0
  226. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/migrations/environment/script.py.mako +0 -0
  227. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/adapters/runtime_use_cases.py +0 -0
  228. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/domain/__init__.py +0 -0
  229. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/domain/consolidation.py +0 -0
  230. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/domain/custom_fields.py +0 -0
  231. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/domain/transaction.py +0 -0
  232. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/__init__.py +0 -0
  233. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/aggregate_repository.py +0 -0
  234. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/idempotency_records.py +0 -0
  235. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/mapping.py +0 -0
  236. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/repository.py +0 -0
  237. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/__init__.py +0 -0
  238. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/archive.py +0 -0
  239. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/audit.py +0 -0
  240. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/entity.py +0 -0
  241. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/events.py +0 -0
  242. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/idempotency.py +0 -0
  243. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/numbering.py +0 -0
  244. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/entrypoint/template_table/properties.py +0 -0
  245. {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
  246. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/__init__.py +0 -0
  247. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/change_tracking.py +0 -0
  248. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/engine_errors.py +0 -0
  249. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/flushing.py +0 -0
  250. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/in_place_changes.py +0 -0
  251. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/mapping_registry.py +0 -0
  252. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/observability.py +0 -0
  253. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/read_tracking.py +0 -0
  254. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/transaction_hooks.py +0 -0
  255. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/transaction_opening.py +0 -0
  256. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/infrastructure/unit_in_play.py +0 -0
  257. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/__init__.py +0 -0
  258. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/cache_invalidation.py +0 -0
  259. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/event_mapping.py +0 -0
  260. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/extension_mapping.py +0 -0
  261. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/extension_typing.py +0 -0
  262. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/extension_writing.py +0 -0
  263. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/sql_translator.py +0 -0
  264. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/upsert.py +0 -0
  265. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/workflows/__init__.py +0 -0
  266. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/workflows/reading.py +0 -0
  267. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/workflows/repository_state.py +0 -0
  268. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/orm/sqlalchemy/services/workflows/unit_of_work.py +0 -0
  269. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/repositories/__init__.py +0 -0
  270. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/repositories/memory_numbering.py +0 -0
  271. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/repositories/memory_unit.py +0 -0
  272. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/__init__.py +0 -0
  273. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/adapters/__init__.py +0 -0
  274. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/adapters/dynamodb.py +0 -0
  275. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/adapters/in_memory.py +0 -0
  276. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/adapters/memcached.py +0 -0
  277. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/adapters/redis.py +0 -0
  278. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/domain/__init__.py +0 -0
  279. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/domain/exceptions.py +0 -0
  280. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/domain/key_value.py +0 -0
  281. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/domain/lease.py +0 -0
  282. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/infrastructure/__init__.py +0 -0
  283. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/infrastructure/client.py +0 -0
  284. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/services/__init__.py +0 -0
  285. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/services/bypass.py +0 -0
  286. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/data_layer/store/services/leases.py +0 -0
  287. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/__init__.py +0 -0
  288. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/criteria.py +0 -0
  289. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/expression.py +0 -0
  290. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/pagination.py +0 -0
  291. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/resolution.py +0 -0
  292. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/sort.py +0 -0
  293. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/strict.py +0 -0
  294. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/domain/values.py +0 -0
  295. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/entrypoint/__init__.py +0 -0
  296. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/entrypoint/aggregation.py +0 -0
  297. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/entrypoint/evaluation.py +0 -0
  298. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/entrypoint/resolution.py +0 -0
  299. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/__init__.py +0 -0
  300. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/axes.py +0 -0
  301. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/comparison.py +0 -0
  302. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/dynamic_values.py +0 -0
  303. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/evaluation.py +0 -0
  304. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/criteria/services/reading.py +0 -0
  305. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/__init__.py +0 -0
  306. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/entity_collection.py +0 -0
  307. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/extensions.py +0 -0
  308. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/mixins/__init__.py +0 -0
  309. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/mixins/archivable.py +0 -0
  310. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/mixins/audited.py +0 -0
  311. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/mixins/event_sourced.py +0 -0
  312. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/utils/__init__.py +0 -0
  313. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/entity/utils/annotations.py +0 -0
  314. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/events/__init__.py +0 -0
  315. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/events/domain_event.py +0 -0
  316. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/events/mixins/__init__.py +0 -0
  317. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/events/mixins/change_tracking.py +0 -0
  318. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/events/mixins/deliverable.py +0 -0
  319. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/exchange_rates.py +0 -0
  320. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/iso_4217.py +0 -0
  321. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/money.py +0 -0
  322. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/multi_currency.py +0 -0
  323. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/multi_language.py +0 -0
  324. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/query.py +0 -0
  325. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/reads/defaults.py +0 -0
  326. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/__init__.py +0 -0
  327. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/aggregate_repository.py +0 -0
  328. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/capabilities.py +0 -0
  329. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/fingerprint.py +0 -0
  330. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/hooks.py +0 -0
  331. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/mixins/__init__.py +0 -0
  332. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/mixins/change_tracking.py +0 -0
  333. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/numbering.py +0 -0
  334. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/repositories/publication.py +0 -0
  335. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ddd/value_object.py +0 -0
  336. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/dependencies.py +0 -0
  337. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/__init__.py +0 -0
  338. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/__init__.py +0 -0
  339. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/aws_lambda/__init__.py +0 -0
  340. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/aws_lambda/sqs.py +0 -0
  341. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/__init__.py +0 -0
  342. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/adapters/__init__.py +0 -0
  343. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/adapters/clocks.py +0 -0
  344. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/adapters/in_memory_runs.py +0 -0
  345. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/adapters/key_value_runs.py +0 -0
  346. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/domain/__init__.py +0 -0
  347. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/domain/clock.py +0 -0
  348. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/domain/cron.py +0 -0
  349. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/domain/runs.py +0 -0
  350. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/domain/schedule.py +0 -0
  351. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/gateway/__init__.py +0 -0
  352. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/gateway/gateway.py +0 -0
  353. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/gateway/process.py +0 -0
  354. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/cron/registry.py +0 -0
  355. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/fastapi/__init__.py +0 -0
  356. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/fastapi/calling.py +0 -0
  357. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/fastapi/exceptions.py +0 -0
  358. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/fastapi/problems.py +0 -0
  359. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/fastapi/wire.py +0 -0
  360. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/__init__.py +0 -0
  361. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/client.py +0 -0
  362. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/exceptions.py +0 -0
  363. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/naming.py +0 -0
  364. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/proto.py +0 -0
  365. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/grpc/wire.py +0 -0
  366. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/mcp/__init__.py +0 -0
  367. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/mcp/auth.py +0 -0
  368. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/mcp/exceptions.py +0 -0
  369. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/mcp/mcp.py +0 -0
  370. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/mcp/wire.py +0 -0
  371. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/__init__.py +0 -0
  372. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/channels.py +0 -0
  373. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/flavours.py +0 -0
  374. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/inbox.py +0 -0
  375. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/sqs.py +0 -0
  376. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/verdicts.py +0 -0
  377. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/queue/wire.py +0 -0
  378. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rest/__init__.py +0 -0
  379. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rest/exceptions.py +0 -0
  380. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rest/openapi.py +0 -0
  381. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rest/routing.py +0 -0
  382. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rest/serving.py +0 -0
  383. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/__init__.py +0 -0
  384. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/errors.py +0 -0
  385. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/exceptions.py +0 -0
  386. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/jrpc.py +0 -0
  387. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/serving.py +0 -0
  388. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/adapters/rpc/wire.py +0 -0
  389. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/__init__.py +0 -0
  390. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/bindings.py +0 -0
  391. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/exceptions.py +0 -0
  392. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/layers.py +0 -0
  393. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/packed.py +0 -0
  394. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/readiness.py +0 -0
  395. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/domain/surface.py +0 -0
  396. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/__init__.py +0 -0
  397. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/aws_lambda.py +0 -0
  398. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/decorators.py +0 -0
  399. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/fastapi.py +0 -0
  400. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/grpc.py +0 -0
  401. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/mcp.py +0 -0
  402. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/queue.py +0 -0
  403. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/rest.py +0 -0
  404. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/rpc.py +0 -0
  405. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/entrypoint/workers.py +0 -0
  406. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/infrastructure/__init__.py +0 -0
  407. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/infrastructure/http.py +0 -0
  408. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/infrastructure/json_schema.py +0 -0
  409. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/infrastructure/registry.py +0 -0
  410. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/services/__init__.py +0 -0
  411. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/services/catalog.py +0 -0
  412. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/services/gateway.py +0 -0
  413. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/services/readiness.py +0 -0
  414. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/entrypoints/services/scalar_execution.py +0 -0
  415. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/error_handler.py +0 -0
  416. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/__init__.py +0 -0
  417. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/__init__.py +0 -0
  418. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/aws/__init__.py +0 -0
  419. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/aws/attributes.py +0 -0
  420. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/aws/queues.py +0 -0
  421. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/background_queue.py +0 -0
  422. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/faststream/__init__.py +0 -0
  423. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/faststream/queue.py +0 -0
  424. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/adapters/sync_queue.py +0 -0
  425. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/__init__.py +0 -0
  426. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/broker.py +0 -0
  427. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/envelope.py +0 -0
  428. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/forwarding.py +0 -0
  429. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/queue.py +0 -0
  430. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/domain/subscribes.py +0 -0
  431. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/entrypoint/__init__.py +0 -0
  432. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/entrypoint/publisher.py +0 -0
  433. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/entrypoint/subscriber.py +0 -0
  434. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/services/__init__.py +0 -0
  435. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/services/dispatch.py +0 -0
  436. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/services/forwarding.py +0 -0
  437. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/event_driven/services/publication.py +0 -0
  438. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/exceptions.py +0 -0
  439. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/introspection/__init__.py +0 -0
  440. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/introspection/inspector.py +0 -0
  441. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/introspection/operations.py +0 -0
  442. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/ioc.py +0 -0
  443. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/__init__.py +0 -0
  444. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/api.py +0 -0
  445. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/correlation.py +0 -0
  446. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/domain.py +0 -0
  447. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/errors/__init__.py +0 -0
  448. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/errors/record_error.py +0 -0
  449. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/errors/setup.py +0 -0
  450. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/failure.py +0 -0
  451. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/field_paths.py +0 -0
  452. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/http.py +0 -0
  453. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/__init__.py +0 -0
  454. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/adapters/__init__.py +0 -0
  455. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/adapters/in_memory.py +0 -0
  456. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/adapters/otel.py +0 -0
  457. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/adapters/prometheus.py +0 -0
  458. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/__init__.py +0 -0
  459. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/bus_observability.py +0 -0
  460. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/declarations.py +0 -0
  461. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/instruments.py +0 -0
  462. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/naming.py +0 -0
  463. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/domain/recorder.py +0 -0
  464. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/entrypoint/__init__.py +0 -0
  465. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/entrypoint/facade.py +0 -0
  466. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/infrastructure/__init__.py +0 -0
  467. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/infrastructure/active.py +0 -0
  468. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/infrastructure/registry.py +0 -0
  469. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/__init__.py +0 -0
  470. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/declaring.py +0 -0
  471. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/labels.py +0 -0
  472. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/measuring.py +0 -0
  473. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/outcomes.py +0 -0
  474. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/services/recording.py +0 -0
  475. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/metrics/testing.py +0 -0
  476. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/mixins/__init__.py +0 -0
  477. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/mixins/bus_observability.py +0 -0
  478. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/otlp.py +0 -0
  479. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/registry.py +0 -0
  480. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/__init__.py +0 -0
  481. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/attributes.py +0 -0
  482. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/propagation.py +0 -0
  483. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/setup.py +0 -0
  484. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/span_context.py +0 -0
  485. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/span_error.py +0 -0
  486. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/observability/tracing/span_execution.py +0 -0
  487. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/__init__.py +0 -0
  488. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/domain/__init__.py +0 -0
  489. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/domain/exceptions.py +0 -0
  490. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/domain/reads.py +0 -0
  491. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/domain/recipe.py +0 -0
  492. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/domain/run.py +0 -0
  493. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/entrypoint/__init__.py +0 -0
  494. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/entrypoint/bus_pipelines.py +0 -0
  495. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/entrypoint/pipeline.py +0 -0
  496. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/entrypoint/reads.py +0 -0
  497. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/services/__init__.py +0 -0
  498. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/services/recorder.py +0 -0
  499. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/pipelines/services/runs.py +0 -0
  500. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/py.typed +0 -0
  501. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/registry.py +0 -0
  502. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/__init__.py +0 -0
  503. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/adapters/__init__.py +0 -0
  504. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/adapters/grpc.py +0 -0
  505. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/adapters/http.py +0 -0
  506. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/__init__.py +0 -0
  507. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/address.py +0 -0
  508. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/exceptions.py +0 -0
  509. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/failure_codec.py +0 -0
  510. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/payload.py +0 -0
  511. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/domain/transport.py +0 -0
  512. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/__init__.py +0 -0
  513. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/grpc.py +0 -0
  514. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/host_process.py +0 -0
  515. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/hosted_context.py +0 -0
  516. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/hosts.py +0 -0
  517. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/entrypoint/http.py +0 -0
  518. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/infrastructure/__init__.py +0 -0
  519. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/infrastructure/configuration.py +0 -0
  520. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/services/__init__.py +0 -0
  521. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/services/hosted_execution.py +0 -0
  522. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/remote_execution/services/transports.py +0 -0
  523. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/__init__.py +0 -0
  524. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/__init__.py +0 -0
  525. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/domain.py +0 -0
  526. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/exceptions.py +0 -0
  527. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/in_memory.py +0 -0
  528. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/loading.py +0 -0
  529. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/runtime_use_cases/registry.py +0 -0
  530. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/__init__.py +0 -0
  531. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/analysis/__init__.py +0 -0
  532. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/analysis/architecture.py +0 -0
  533. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/analysis/function_order.py +0 -0
  534. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/analysis/settings_scope.py +0 -0
  535. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/__init__.py +0 -0
  536. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/auth_provider.py +0 -0
  537. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/caching_strategies.py +0 -0
  538. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/exchange_rates.py +0 -0
  539. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/extension.py +0 -0
  540. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/idempotency_records.py +0 -0
  541. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/key_value_store.py +0 -0
  542. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/contracts/object_store.py +0 -0
  543. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/__init__.py +0 -0
  544. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/auth.py +0 -0
  545. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/clock.py +0 -0
  546. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/context.py +0 -0
  547. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/dependencies.py +0 -0
  548. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/doubles/events.py +0 -0
  549. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/runtime/testing/exceptions.py +0 -0
  550. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/__init__.py +0 -0
  551. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/adapters/__init__.py +0 -0
  552. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/adapters/aws.py +0 -0
  553. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/adapters/environment.py +0 -0
  554. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/adapters/yaml_file.py +0 -0
  555. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/domain/__init__.py +0 -0
  556. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/domain/config.py +0 -0
  557. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/domain/description.py +0 -0
  558. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/entrypoint/__init__.py +0 -0
  559. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/entrypoint/building.py +0 -0
  560. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/services/__init__.py +0 -0
  561. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/services/building.py +0 -0
  562. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/services/description.py +0 -0
  563. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/settings/services/resolution.py +0 -0
  564. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/sincpro_abstractions.py +0 -0
  565. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/sincpro_abstractions.pyi +0 -0
  566. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/sincpro_conf.py +0 -0
  567. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/sincpro_logger.py +0 -0
  568. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/use_bus.py +0 -0
  569. {sincpro_framework-3.28.0 → sincpro_framework-3.28.2}/sincpro_framework/use_bus.pyi +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sincpro-framework
3
- Version: 3.28.0
3
+ Version: 3.28.2
4
4
  Summary: Sincpro framework to use DDD, Clean architecture, Hexagonal architecture
5
5
  License: MIT
6
6
  License-File: LICENSE.md
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "sincpro-framework"
3
- version = "3.28.0"
3
+ version = "3.28.2"
4
4
  description = "Sincpro framework to use DDD, Clean architecture, Hexagonal architecture"
5
5
  authors = ["Gutierrez Andres <andru1236@gmail.com>"]
6
6
  readme = "README.md"
@@ -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 `assign(record, draft.values)`, save it and discard the draft.
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 `previewing()` and for a count below one.
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("many_to_many", Tag, "dataset_id", through=dataset_tag,
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
- "foreign_key",
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
- "many_to_many",
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("id_list", related, identified_by, scope=scope)
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 is_previewing
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 `previewing()`, is refused: `record_changes`,
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 `previewing()` that writes or locks is refused:
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 is_previewing():
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: str, column: Any, dialect: str) -> Any:
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 (func.min(column) if function == "bool_and" else func.max(column)) == 1
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 == "count_distinct":
105
+ if measure.function is MeasureFunction.COUNT_DISTINCT:
103
106
  columns.append(func.count(distinct(column)).label(name))
104
- elif measure.function in ("percentile", "median"):
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 == "median" else measure.argument
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 ("bool_and", "bool_or"):
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 = declared is not None and declared.many and relation.kind == "foreign_key"
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 == "many_to_many" and through is not None and related_key:
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 computations_of
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 != "foreign_key"
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 `assign` asks before building a line a form sent without its key: the form cannot
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 `assign`: the ids a form sends are read as the
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 == "many_to_many"
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 computations_of(entity).items():
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: str, many: bool) -> FieldType:
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
- ("many_to_many", _) -> MANY2MANY
58
- ("foreign_key", True) -> ONE2MANY
59
- ("foreign_key", False) -> MANY2ONE
58
+ (MANY_TO_MANY, _) -> MANY2MANY
59
+ (FOREIGN_KEY, True) -> ONE2MANY
60
+ (None, False) -> MANY2ONE
60
61
  """
61
- if kind == "many_to_many":
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 "", many)
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 == "resolver":
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 "foreign_key" if many:
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 "foreign_key":
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 "many_to_many":
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 "id_list":
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 "resolver":
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
- with session.no_autoflush:
204
- for statement in plan.unlinks:
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
- with session.no_autoflush:
214
- for statement in plan.links:
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 computations_of
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[str, Callable[..., Any]] = {
136
- "count": lambda values: len(values),
137
- "count_distinct": lambda values: len(set(values)),
138
- "sum": lambda values: sum(values),
139
- "min": lambda values: min(values, default=None),
140
- "max": lambda values: max(values, default=None),
141
- "avg": lambda values: (sum(values) / len(values)) if values else None,
142
- "percentile": _percentile,
143
- "median": lambda values: _percentile(values, 0.5),
144
- "bool_and": lambda values: all(values) if values else None,
145
- "bool_or": lambda values: any(values) if values else None,
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 == "percentile":
153
- return MEASURES["percentile"](values, measure.argument)
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 computations_of(type(record)).items():
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 = computations_of(aggregate).get(name)
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.drafts import (
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 Advice, advise, is_previewing, previewing
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 BusResolver, Relation, Resolver
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
- Preview,
109
- ResponsePreview,
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
- "Advice",
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
- "Derivations",
153
- "Derive",
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
- "Preview",
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
- "ResponsePreview",
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
- "advise",
228
- "assign",
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
- "previewing",
240
+ "read_only",
237
241
  "recompute",
238
- "recompute_whole",
239
- "refuse_stale",
240
242
  "utc_now",
241
243
  ]
@@ -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",