hexcore 10.2.0__tar.gz → 10.3.0__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 (400) hide show
  1. {hexcore-10.2.0/hexcore.egg-info → hexcore-10.3.0}/PKG-INFO +5 -1
  2. hexcore-10.3.0/hexcore/darwin/plugins/drbac/__init__.py +293 -0
  3. hexcore-10.3.0/hexcore/darwin/plugins/drbac/cache.py +68 -0
  4. hexcore-10.3.0/hexcore/darwin/plugins/drbac/conditions.py +850 -0
  5. hexcore-10.3.0/hexcore/darwin/plugins/drbac/domain.py +307 -0
  6. hexcore-10.3.0/hexcore/darwin/plugins/drbac/orms/__init__.py +7 -0
  7. hexcore-10.3.0/hexcore/darwin/plugins/drbac/orms/beanie/__init__.py +5 -0
  8. hexcore-10.3.0/hexcore/darwin/plugins/drbac/orms/beanie/repository.py +351 -0
  9. hexcore-10.3.0/hexcore/darwin/plugins/drbac/orms/sqlalchemy/__init__.py +6 -0
  10. hexcore-10.3.0/hexcore/darwin/plugins/drbac/orms/sqlalchemy/models.py +81 -0
  11. hexcore-10.3.0/hexcore/darwin/plugins/drbac/orms/sqlalchemy/models_mixins.py +175 -0
  12. hexcore-10.3.0/hexcore/darwin/plugins/drbac/orms/sqlalchemy/repository.py +378 -0
  13. hexcore-10.3.0/hexcore/darwin/plugins/drbac/pdp.py +398 -0
  14. hexcore-10.3.0/hexcore/darwin/plugins/drbac/pip.py +109 -0
  15. hexcore-10.3.0/hexcore/darwin/plugins/drbac/predicates.py +136 -0
  16. hexcore-10.3.0/hexcore/darwin/plugins/drbac/provider.py +34 -0
  17. hexcore-10.3.0/hexcore/darwin/plugins/drbac/router.py +444 -0
  18. hexcore-10.3.0/hexcore/darwin/plugins/drbac/service.py +266 -0
  19. hexcore-10.3.0/hexcore/darwin/plugins/rbac/__init__.py +378 -0
  20. hexcore-10.3.0/hexcore/darwin/plugins/rbac/cache.py +145 -0
  21. hexcore-10.3.0/hexcore/darwin/plugins/rbac/cli.py +153 -0
  22. hexcore-10.3.0/hexcore/darwin/plugins/rbac/domain.py +346 -0
  23. hexcore-10.3.0/hexcore/darwin/plugins/rbac/matcher.py +95 -0
  24. hexcore-10.3.0/hexcore/darwin/plugins/rbac/orms/__init__.py +13 -0
  25. hexcore-10.3.0/hexcore/darwin/plugins/rbac/orms/beanie/__init__.py +6 -0
  26. hexcore-10.3.0/hexcore/darwin/plugins/rbac/orms/beanie/repository.py +413 -0
  27. hexcore-10.3.0/hexcore/darwin/plugins/rbac/orms/sqlalchemy/__init__.py +7 -0
  28. hexcore-10.3.0/hexcore/darwin/plugins/rbac/orms/sqlalchemy/models.py +114 -0
  29. hexcore-10.3.0/hexcore/darwin/plugins/rbac/orms/sqlalchemy/models_mixins.py +261 -0
  30. hexcore-10.3.0/hexcore/darwin/plugins/rbac/orms/sqlalchemy/repository.py +482 -0
  31. hexcore-10.3.0/hexcore/darwin/plugins/rbac/provider.py +146 -0
  32. hexcore-10.3.0/hexcore/darwin/plugins/rbac/resolver.py +86 -0
  33. hexcore-10.3.0/hexcore/darwin/plugins/rbac/router.py +293 -0
  34. hexcore-10.3.0/hexcore/darwin/plugins/rbac/service.py +460 -0
  35. {hexcore-10.2.0 → hexcore-10.3.0/hexcore.egg-info}/PKG-INFO +5 -1
  36. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore.egg-info/SOURCES.txt +39 -0
  37. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore.egg-info/requires.txt +6 -0
  38. {hexcore-10.2.0 → hexcore-10.3.0}/pyproject.toml +12 -1
  39. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_backend_neutrality.py +18 -4
  40. hexcore-10.3.0/tests/test_darwin_drbac_conditions.py +412 -0
  41. hexcore-10.3.0/tests/test_darwin_drbac_pdp.py +449 -0
  42. hexcore-10.3.0/tests/test_darwin_drbac_router.py +370 -0
  43. hexcore-10.3.0/tests/test_darwin_drbac_service.py +470 -0
  44. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_plugin_decoupling.py +2 -0
  45. hexcore-10.3.0/tests/test_darwin_rbac.py +438 -0
  46. hexcore-10.3.0/tests/test_darwin_rbac_service.py +518 -0
  47. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_schema_registration.py +13 -0
  48. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_optional_dependencies.py +69 -0
  49. {hexcore-10.2.0 → hexcore-10.3.0}/LICENSE +0 -0
  50. {hexcore-10.2.0 → hexcore-10.3.0}/MANIFEST.in +0 -0
  51. {hexcore-10.2.0 → hexcore-10.3.0}/README.md +0 -0
  52. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/__init__.py +0 -0
  53. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/__main__.py +0 -0
  54. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/_deprecation.py +0 -0
  55. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/__init__.py +0 -0
  56. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/cqrs/__init__.py +0 -0
  57. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/cqrs/adapters.py +0 -0
  58. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/cqrs/config.py +0 -0
  59. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/cqrs/factory.py +0 -0
  60. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/cqrs/in_memory_buses.py +0 -0
  61. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/cqrs/pipeline.py +0 -0
  62. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/cqrs/registry.py +0 -0
  63. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/cqrs/scheduler.py +0 -0
  64. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/dtos/__init__.py +0 -0
  65. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/dtos/base.py +0 -0
  66. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/dtos/cursor.py +0 -0
  67. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/dtos/errors.py +0 -0
  68. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/dtos/query.py +0 -0
  69. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/eventsourcing/__init__.py +0 -0
  70. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/eventsourcing/config.py +0 -0
  71. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/eventsourcing/factory.py +0 -0
  72. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/eventsourcing/projector.py +0 -0
  73. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/eventsourcing/relay.py +0 -0
  74. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/eventsourcing/repository.py +0 -0
  75. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/use_cases/__init__.py +0 -0
  76. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/use_cases/base.py +0 -0
  77. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/application/use_cases/query.py +0 -0
  78. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/capabilities.py +0 -0
  79. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/config.py +0 -0
  80. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/cqrs.py +0 -0
  81. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/cqrs.pyi +0 -0
  82. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/__init__.py +0 -0
  83. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/__init__.pyi +0 -0
  84. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/application/__init__.py +0 -0
  85. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/application/authorization.py +0 -0
  86. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/application/authz_middleware.py +0 -0
  87. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/application/commands.py +0 -0
  88. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/application/config.py +0 -0
  89. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/application/container.py +0 -0
  90. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/application/hooks.py +0 -0
  91. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/application/plugins.py +0 -0
  92. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/application/services.py +0 -0
  93. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/domain/__init__.py +0 -0
  94. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/domain/authorization.py +0 -0
  95. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/domain/context.py +0 -0
  96. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/domain/entities.py +0 -0
  97. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/domain/events.py +0 -0
  98. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/domain/exceptions.py +0 -0
  99. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/domain/permissions.py +0 -0
  100. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/domain/plugins.py +0 -0
  101. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/domain/ports.py +0 -0
  102. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/domain/value_objects.py +0 -0
  103. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/__init__.py +0 -0
  104. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/api/__init__.py +0 -0
  105. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/api/authorization.py +0 -0
  106. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/api/dependencies.py +0 -0
  107. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/api/middlewares.py +0 -0
  108. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/api/routers.py +0 -0
  109. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/cli.py +0 -0
  110. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/clock.py +0 -0
  111. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/envelope.py +0 -0
  112. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/hashing.py +0 -0
  113. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/keys.py +0 -0
  114. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/lifespan.py +0 -0
  115. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/__init__.py +0 -0
  116. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/beanie/__init__.py +0 -0
  117. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/beanie/documents.py +0 -0
  118. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/beanie/repositories.py +0 -0
  119. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/beanie/schema.py +0 -0
  120. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/selection.py +0 -0
  121. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/sqlalchemy/__init__.py +0 -0
  122. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/sqlalchemy/models.py +0 -0
  123. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/sqlalchemy/models_mixins.py +0 -0
  124. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/sqlalchemy/registry.py +0 -0
  125. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/sqlalchemy/repositories.py +0 -0
  126. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/orms/sqlalchemy/schema.py +0 -0
  127. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/revocation.py +0 -0
  128. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/secretbox.py +0 -0
  129. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/tokens.py +0 -0
  130. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/infrastructure/transports.py +0 -0
  131. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/__init__.py +0 -0
  132. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/impersonate/__init__.py +0 -0
  133. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/impersonate/commands.py +0 -0
  134. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/impersonate/domain.py +0 -0
  135. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/impersonate/router.py +0 -0
  136. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/impersonate/service.py +0 -0
  137. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/magic_link/__init__.py +0 -0
  138. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/magic_link/commands.py +0 -0
  139. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/magic_link/router.py +0 -0
  140. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/__init__.py +0 -0
  141. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/domain.py +0 -0
  142. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/http.py +0 -0
  143. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/orms/__init__.py +0 -0
  144. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/orms/beanie/__init__.py +0 -0
  145. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/orms/beanie/repository.py +0 -0
  146. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/orms/sqlalchemy/__init__.py +0 -0
  147. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/orms/sqlalchemy/models.py +0 -0
  148. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/orms/sqlalchemy/models_mixins.py +0 -0
  149. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/orms/sqlalchemy/repository.py +0 -0
  150. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/providers.py +0 -0
  151. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/router.py +0 -0
  152. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/oauth/service.py +0 -0
  153. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/organization/__init__.py +0 -0
  154. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/organization/domain.py +0 -0
  155. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/organization/orms/__init__.py +0 -0
  156. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/organization/orms/beanie/__init__.py +0 -0
  157. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/organization/orms/beanie/repository.py +0 -0
  158. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/organization/orms/sqlalchemy/__init__.py +0 -0
  159. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/organization/orms/sqlalchemy/models.py +0 -0
  160. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/organization/orms/sqlalchemy/models_mixins.py +0 -0
  161. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/organization/orms/sqlalchemy/repository.py +0 -0
  162. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/organization/router.py +0 -0
  163. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/organization/service.py +0 -0
  164. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/__init__.py +0 -0
  165. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/domain.py +0 -0
  166. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/orms/__init__.py +0 -0
  167. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/orms/beanie/__init__.py +0 -0
  168. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/orms/beanie/repository.py +0 -0
  169. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/orms/sqlalchemy/__init__.py +0 -0
  170. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/orms/sqlalchemy/models.py +0 -0
  171. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/orms/sqlalchemy/models_mixins.py +0 -0
  172. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/orms/sqlalchemy/repository.py +0 -0
  173. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/router.py +0 -0
  174. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/service.py +0 -0
  175. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/passkey/webauthn_adapter.py +0 -0
  176. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/storage.py +0 -0
  177. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/__init__.py +0 -0
  178. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/commands.py +0 -0
  179. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/crypto.py +0 -0
  180. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/domain.py +0 -0
  181. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/orms/__init__.py +0 -0
  182. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/orms/beanie/__init__.py +0 -0
  183. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/orms/beanie/repository.py +0 -0
  184. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/orms/sqlalchemy/__init__.py +0 -0
  185. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/orms/sqlalchemy/models.py +0 -0
  186. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/orms/sqlalchemy/models_mixins.py +0 -0
  187. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/orms/sqlalchemy/repository.py +0 -0
  188. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/router.py +0 -0
  189. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/service.py +0 -0
  190. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/plugins/two_factor/totp.py +0 -0
  191. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/testing/__init__.py +0 -0
  192. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/testing/fakes.py +0 -0
  193. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/testing/fixtures.py +0 -0
  194. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/darwin/testing/helpers.py +0 -0
  195. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/__init__.py +0 -0
  196. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/auth/__init__.py +0 -0
  197. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/auth/permissions.py +0 -0
  198. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/auth/value_objects.py +0 -0
  199. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/base.py +0 -0
  200. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/__init__.py +0 -0
  201. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/buses.py +0 -0
  202. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/commands.py +0 -0
  203. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/context.py +0 -0
  204. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/cron.py +0 -0
  205. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/decorators.py +0 -0
  206. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/dispatch.py +0 -0
  207. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/envelope.py +0 -0
  208. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/exceptions.py +0 -0
  209. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/handlers.py +0 -0
  210. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/middleware.py +0 -0
  211. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/queries.py +0 -0
  212. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/resolution.py +0 -0
  213. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/serializer.py +0 -0
  214. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/cqrs/task_queues.py +0 -0
  215. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/events.py +0 -0
  216. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/eventsourcing/__init__.py +0 -0
  217. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/eventsourcing/aggregate.py +0 -0
  218. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/eventsourcing/exceptions.py +0 -0
  219. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/eventsourcing/projections.py +0 -0
  220. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/eventsourcing/snapshots.py +0 -0
  221. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/eventsourcing/store.py +0 -0
  222. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/eventsourcing/stored.py +0 -0
  223. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/exceptions.py +0 -0
  224. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/repositories.py +0 -0
  225. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/services.py +0 -0
  226. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/domain/uow.py +0 -0
  227. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/eventsourcing.py +0 -0
  228. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/eventsourcing.pyi +0 -0
  229. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/fastapi.py +0 -0
  230. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/fastapi.pyi +0 -0
  231. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/__init__.py +0 -0
  232. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/__init__.py +0 -0
  233. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/app.py +0 -0
  234. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/cqrs.py +0 -0
  235. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/eventsourcing.py +0 -0
  236. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/exception_handlers.py +0 -0
  237. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/health.py +0 -0
  238. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/lifespan.py +0 -0
  239. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/middlewares.py +0 -0
  240. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/rate_limit.py +0 -0
  241. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/routing.py +0 -0
  242. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/streaming.py +0 -0
  243. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/api/utils.py +0 -0
  244. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cache/__init__.py +0 -0
  245. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cache/cache_backends/__init__.py +0 -0
  246. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cache/cache_backends/memory.py +0 -0
  247. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cache/cache_backends/redis.py +0 -0
  248. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cli.py +0 -0
  249. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cqrs/__init__.py +0 -0
  250. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cqrs/cron_sql.py +0 -0
  251. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cqrs/middlewares.py +0 -0
  252. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cqrs/postgres_bus.py +0 -0
  253. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cqrs/postgres_lock.py +0 -0
  254. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cqrs/procrastinate.py +0 -0
  255. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cqrs/pydantic_serializer.py +0 -0
  256. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cqrs/rabbitmq.py +0 -0
  257. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cqrs/redis_bus.py +0 -0
  258. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/cqrs/redis_lock.py +0 -0
  259. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/events/__init__.py +0 -0
  260. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/events/events_backends/__init__.py +0 -0
  261. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/events/events_backends/memory.py +0 -0
  262. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/eventsourcing/__init__.py +0 -0
  263. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/eventsourcing/beanie_documents.py +0 -0
  264. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/eventsourcing/beanie_store.py +0 -0
  265. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/eventsourcing/memory.py +0 -0
  266. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/eventsourcing/redis_store.py +0 -0
  267. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/eventsourcing/sqlalchemy_models.py +0 -0
  268. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/eventsourcing/sqlalchemy_models_mixins.py +0 -0
  269. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/eventsourcing/sqlalchemy_store.py +0 -0
  270. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/__init__.py +0 -0
  271. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/_beanie_impl.py +0 -0
  272. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/_sqlalchemy_impl.py +0 -0
  273. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/base.py +0 -0
  274. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/decorators.py +0 -0
  275. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/implementations.py +0 -0
  276. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/orms/__init__.py +0 -0
  277. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/orms/beanie/__init__.py +0 -0
  278. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/orms/beanie/utils.py +0 -0
  279. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/orms/sqlalchemy/__init__.py +0 -0
  280. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/orms/sqlalchemy/session.py +0 -0
  281. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/orms/sqlalchemy/utils.py +0 -0
  282. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/repositories/utils.py +0 -0
  283. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/task_queues/__init__.py +0 -0
  284. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/task_queues/celery_adapter.py +0 -0
  285. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/task_queues/procrastinate_adapter.py +0 -0
  286. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/uow/__init__.py +0 -0
  287. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/uow/decorators.py +0 -0
  288. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/uow/helpers.py +0 -0
  289. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/uow/scopes.py +0 -0
  290. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/workers/__init__.py +0 -0
  291. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/workers/consumer.py +0 -0
  292. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/workers/rabbitmq_worker.py +0 -0
  293. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/infrastructure/workers/runner.py +0 -0
  294. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/py.typed +0 -0
  295. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/sql.py +0 -0
  296. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/sql.pyi +0 -0
  297. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/testing/__init__.py +0 -0
  298. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/testing/fakes.py +0 -0
  299. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/testing/fixtures.py +0 -0
  300. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/testing/helpers.py +0 -0
  301. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/testing/repositories.py +0 -0
  302. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore/types.py +0 -0
  303. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore.egg-info/dependency_links.txt +0 -0
  304. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore.egg-info/entry_points.txt +0 -0
  305. {hexcore-10.2.0 → hexcore-10.3.0}/hexcore.egg-info/top_level.txt +0 -0
  306. {hexcore-10.2.0 → hexcore-10.3.0}/setup.cfg +0 -0
  307. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_alembic_metadata_completeness.py +0 -0
  308. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_anclas_del_repo.py +0 -0
  309. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_api_app_and_lifespan.py +0 -0
  310. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_api_cqrs_providers.py +0 -0
  311. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_api_exception_handlers.py +0 -0
  312. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_api_health.py +0 -0
  313. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_api_middlewares_and_routing.py +0 -0
  314. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_api_rate_limit.py +0 -0
  315. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_api_streaming.py +0 -0
  316. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_basic.py +0 -0
  317. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_beanie_query_utils.py +0 -0
  318. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_celery_event_loop.py +0 -0
  319. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_config_cors_security.py +0 -0
  320. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_config_loading.py +0 -0
  321. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_consumer_optional_event_bus.py +0 -0
  322. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_cqrs.py +0 -0
  323. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_cqrs_envelope.py +0 -0
  324. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_cqrs_factory.py +0 -0
  325. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_cqrs_middlewares.py +0 -0
  326. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_cron_sql.py +0 -0
  327. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_authorization_engine.py +0 -0
  328. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_authorization_http.py +0 -0
  329. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_beanie.py +0 -0
  330. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_cli.py +0 -0
  331. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_container.py +0 -0
  332. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_context.py +0 -0
  333. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_custom_plugin.py +0 -0
  334. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_envelope.py +0 -0
  335. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_facade_and_events.py +0 -0
  336. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_flows.py +0 -0
  337. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_hashing.py +0 -0
  338. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_http.py +0 -0
  339. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_impersonate.py +0 -0
  340. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_magic_link.py +0 -0
  341. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_models.py +0 -0
  342. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_oauth.py +0 -0
  343. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_openapi.py +0 -0
  344. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_organization.py +0 -0
  345. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_passkey.py +0 -0
  346. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_permissions.py +0 -0
  347. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_plugins.py +0 -0
  348. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_principals.py +0 -0
  349. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_production_defaults.py +0 -0
  350. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_repositories.py +0 -0
  351. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_revocation.py +0 -0
  352. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_storage_selection.py +0 -0
  353. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_tokens.py +0 -0
  354. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_two_factor.py +0 -0
  355. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_username.py +0 -0
  356. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_darwin_value_objects.py +0 -0
  357. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_deprecations.py +0 -0
  358. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_documentation_examples.py +0 -0
  359. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_domain_base_contract.py +0 -0
  360. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_domain_service_query.py +0 -0
  361. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_dotted_resolution.py +0 -0
  362. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_event_dispatch_mro.py +0 -0
  363. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_aggregate.py +0 -0
  364. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_beanie.py +0 -0
  365. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_config.py +0 -0
  366. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_ports.py +0 -0
  367. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_projections.py +0 -0
  368. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_redis.py +0 -0
  369. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_relay.py +0 -0
  370. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_repository.py +0 -0
  371. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_snapshot_checkpoint.py +0 -0
  372. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_sql_schema.py +0 -0
  373. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_store_contract.py +0 -0
  374. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_eventsourcing_uow_integration.py +0 -0
  375. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_facades.py +0 -0
  376. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_handler_registry.py +0 -0
  377. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_infrastructure_query_path.py +0 -0
  378. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_lock_error_policy.py +0 -0
  379. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_packaging.py +0 -0
  380. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_postgres_bus.py +0 -0
  381. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_postgres_lock.py +0 -0
  382. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_query_cursor_and_endpoint.py +0 -0
  383. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_query_field_validation.py +0 -0
  384. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_rabbitmq_bus.py +0 -0
  385. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_redis_bus.py +0 -0
  386. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_redis_lock.py +0 -0
  387. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_repositories_utils.py +0 -0
  388. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_scheduler.py +0 -0
  389. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_scheduler_catchup.py +0 -0
  390. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_smart_routing.py +0 -0
  391. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_sql_naming_convention.py +0 -0
  392. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_sql_session_layer.py +0 -0
  393. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_task_queues_adapters.py +0 -0
  394. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_testing_kit.py +0 -0
  395. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_testing_utilities.py +0 -0
  396. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_typing_gate.py +0 -0
  397. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_uow_session_regression.py +0 -0
  398. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_use_cases_query.py +0 -0
  399. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_worker_bus_integration.py +0 -0
  400. {hexcore-10.2.0 → hexcore-10.3.0}/tests/test_worker_runner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hexcore
3
- Version: 10.2.0
3
+ Version: 10.3.0
4
4
  Summary: Reusable core for Python projects with hexagonal architecture, DDD, CQRS and background tasks. Ships the abstractions and the infrastructure: SQL session layer, FastAPI factories, worker runner, dynamic cron and identity.
5
5
  Author-email: "David Latosefki (Indroic)" <indroic@outlook.com>
6
6
  License-Expression: MIT
@@ -71,6 +71,10 @@ Requires-Dist: hexcore[darwin]; extra == "darwin-passkey"
71
71
  Requires-Dist: webauthn>=2.0.0; extra == "darwin-passkey"
72
72
  Provides-Extra: darwin-organization
73
73
  Requires-Dist: hexcore[darwin]; extra == "darwin-organization"
74
+ Provides-Extra: darwin-rbac
75
+ Requires-Dist: hexcore[darwin]; extra == "darwin-rbac"
76
+ Provides-Extra: darwin-drbac
77
+ Requires-Dist: hexcore[darwin]; extra == "darwin-drbac"
74
78
  Provides-Extra: all
75
79
  Requires-Dist: fastapi>=0.116.1; extra == "all"
76
80
  Requires-Dist: redis>=6.4.0; extra == "all"
@@ -0,0 +1,293 @@
1
+ """
2
+ `drbac`: autorización contextual sobre `rbac`.
3
+
4
+ Fase F5 del plan de rbac/drbac: acá aparece `DrbacPlugin`, que junta el lenguaje de condiciones
5
+ y el registro de predicados de la Fase F4 con persistencia, el PDP (`pdp.py`), el PIP
6
+ (`pip.py`) y un `AuthorizationProvider` que se enchufa al mismo `AuthorizationEngine` que
7
+ `rbac`.
8
+
9
+ **`requires = ("rbac",)`**: DRBAC extiende RBAC, no lo reemplaza — los roles siguen siendo la
10
+ base, y DRBAC agrega condiciones, scope jerárquico y bindings de rol contextuales con
11
+ vencimiento. Eso sí, **ningún módulo de este plugin importa nada de `rbac`** (ver el docstring
12
+ de `domain.RoleBinding`): `requires` sólo ordena el registro, la integración real —expandir un
13
+ `role_name` contextual a sus permisos— la cablea el consumidor con `role_permissions`.
14
+
15
+ Requiere `[darwin]`, `[api]` y, según el backend, `[darwin-sqlalchemy]` o `[darwin-beanie]`.
16
+
17
+ Uso::
18
+
19
+ from hexcore.darwin import PluginRegistry, configure_identity
20
+ from hexcore.darwin.plugins.rbac import RbacPlugin
21
+ from hexcore.darwin.plugins.drbac import DrbacPlugin
22
+
23
+ rbac = RbacPlugin()
24
+ drbac = DrbacPlugin(role_permissions=rbac.service().permission_keys_for_role_name)
25
+ configure_identity(
26
+ IdentityConfig(),
27
+ plugins=PluginRegistry([rbac, drbac]),
28
+ principals=rbac.principal_resolver(),
29
+ )
30
+ """
31
+ from __future__ import annotations
32
+
33
+ import threading
34
+ import typing as t
35
+ from dataclasses import dataclass
36
+
37
+ from hexcore.darwin.domain.plugins import DarwinPlugin
38
+ from hexcore.darwin.plugins.drbac.domain import (
39
+ DRBAC_EXCEPTION_STATUS_MAP,
40
+ GLOBAL_SCOPE,
41
+ AbstractDrbacAuthzVersionRepository,
42
+ AbstractDrbacPolicyRepository,
43
+ AbstractDrbacRoleBindingRepository,
44
+ DrbacAuthorizationChangedEvent,
45
+ DrbacError,
46
+ Policy,
47
+ PolicyAlreadyExistsError,
48
+ PolicyNotFoundError,
49
+ RoleBinding,
50
+ RoleBindingNotFoundError,
51
+ Rule,
52
+ scope_chain,
53
+ )
54
+ from hexcore.darwin.plugins.drbac.pdp import EvaluationLimits, RolePermissionsResolver
55
+ from hexcore.darwin.plugins.drbac.pip import PolicyInformationPoint, ResourceAttributeResolver
56
+ from hexcore.darwin.plugins.drbac.predicates import PredicateRegistry
57
+
58
+ if t.TYPE_CHECKING:
59
+ # Sólo para el checker: en runtime los resuelve el `__getattr__` de abajo. Mismo patrón que
60
+ # `rbac` y que `organization`.
61
+ from hexcore.darwin.plugins.drbac.orms.sqlalchemy.models_mixins import (
62
+ DrbacAuthzVersionMixin as DrbacAuthzVersionMixin,
63
+ DrbacPolicyMixin as DrbacPolicyMixin,
64
+ DrbacRoleBindingMixin as DrbacRoleBindingMixin,
65
+ DrbacRuleMixin as DrbacRuleMixin,
66
+ )
67
+ from hexcore.darwin.domain.authorization import AuthorizationProvider
68
+ from hexcore.darwin.plugins.drbac.pdp import PolicyDecisionPoint
69
+ from hexcore.darwin.plugins.drbac.provider import DrbacAuthorizationProvider
70
+ from hexcore.darwin.plugins.drbac.service import DrbacService
71
+
72
+ __all__ = [
73
+ "GLOBAL_SCOPE",
74
+ "scope_chain",
75
+ "Rule",
76
+ "Policy",
77
+ "RoleBinding",
78
+ "AbstractDrbacPolicyRepository",
79
+ "AbstractDrbacRoleBindingRepository",
80
+ "AbstractDrbacAuthzVersionRepository",
81
+ "DrbacAuthorizationChangedEvent",
82
+ "DrbacError",
83
+ "PolicyNotFoundError",
84
+ "PolicyAlreadyExistsError",
85
+ "RoleBindingNotFoundError",
86
+ "DRBAC_EXCEPTION_STATUS_MAP",
87
+ "EvaluationLimits",
88
+ "RolePermissionsResolver",
89
+ "ResourceAttributeResolver",
90
+ "PolicyInformationPoint",
91
+ "PredicateRegistry",
92
+ "DrbacPolicyMixin",
93
+ "DrbacRuleMixin",
94
+ "DrbacRoleBindingMixin",
95
+ "DrbacAuthzVersionMixin",
96
+ "DrbacPlugin",
97
+ "get_drbac_service",
98
+ ]
99
+
100
+ _MIXINS = (
101
+ "DrbacPolicyMixin",
102
+ "DrbacRuleMixin",
103
+ "DrbacRoleBindingMixin",
104
+ "DrbacAuthzVersionMixin",
105
+ )
106
+
107
+
108
+ @dataclass
109
+ class _Repos:
110
+ """Los tres repositorios ya resueltos, compartidos entre `service()` y `pdp()`."""
111
+
112
+ policies: AbstractDrbacPolicyRepository
113
+ bindings: AbstractDrbacRoleBindingRepository
114
+ versions: AbstractDrbacAuthzVersionRepository
115
+
116
+
117
+ class DrbacPlugin(DarwinPlugin):
118
+ """
119
+ El plugin de autorización contextual.
120
+
121
+ Args:
122
+ resolvers: Los `ResourceAttributeResolver` del PIP, por `resource.type`.
123
+ predicates: El `PredicateRegistry` a usar. Por default, `default_predicate_registry()`
124
+ — el compartido del proceso.
125
+ role_permissions: Cómo expandir un `RoleBinding.role_name` contextual a sus permisos.
126
+ `None` (default): los bindings siguen visibles en `subject.roles` para que una
127
+ condición los use, pero no conceden nada por sí solos. Ver el docstring de
128
+ `pdp.RolePermissionsResolver`.
129
+ limits: Los presupuestos de tamaño y tiempo de una decisión.
130
+ include_router: Si aporta su router.
131
+ """
132
+
133
+ name = "drbac"
134
+ #: Los roles son la base; DRBAC restringe o amplía condicionalmente lo que RBAC ya concede.
135
+ requires = ("rbac",)
136
+ #: Después de `rbac` (70), antes de `organization` (80).
137
+ priority = 75
138
+
139
+ contributed_tables = (
140
+ "DrbacPolicyMixin",
141
+ "DrbacRuleMixin",
142
+ "DrbacRoleBindingMixin",
143
+ "DrbacAuthzVersionMixin",
144
+ )
145
+
146
+ def __init__(
147
+ self,
148
+ *,
149
+ resolvers: t.Mapping[str, ResourceAttributeResolver] | None = None,
150
+ predicates: PredicateRegistry | None = None,
151
+ role_permissions: RolePermissionsResolver | None = None,
152
+ limits: EvaluationLimits = EvaluationLimits(),
153
+ policy_repository: AbstractDrbacPolicyRepository | None = None,
154
+ role_binding_repository: AbstractDrbacRoleBindingRepository | None = None,
155
+ version_repository: AbstractDrbacAuthzVersionRepository | None = None,
156
+ include_router: bool = True,
157
+ ) -> None:
158
+ self._resolvers = resolvers
159
+ self._predicates = predicates
160
+ self._role_permissions = role_permissions
161
+ self._limits = limits
162
+ self._policies = policy_repository
163
+ self._bindings = role_binding_repository
164
+ self._versions = version_repository
165
+ self._include_router = include_router
166
+
167
+ self._lock = threading.RLock()
168
+ self._repos: _Repos | None = None
169
+ self._service: "DrbacService | None" = None
170
+ self._pdp: "PolicyDecisionPoint | None" = None
171
+ self._provider: "DrbacAuthorizationProvider | None" = None
172
+
173
+ # ── Componentes, perezosos y cacheados ────────────────────────────────────
174
+ def _resolved_repos(self) -> _Repos:
175
+ with self._lock:
176
+ if self._repos is None:
177
+ from hexcore.darwin.plugins.storage import plugin_repositories
178
+
179
+ modulo = plugin_repositories("drbac")
180
+ self._repos = _Repos(
181
+ policies=self._policies or modulo.PolicyRepository(),
182
+ bindings=self._bindings or modulo.RoleBindingRepository(),
183
+ versions=self._versions or modulo.AuthzVersionRepository(),
184
+ )
185
+ return self._repos
186
+
187
+ def service(self) -> "DrbacService":
188
+ """El servicio, construido perezosamente desde el contenedor de identidad. Mismo
189
+ criterio que `RbacPlugin.service`."""
190
+ with self._lock:
191
+ if self._service is None:
192
+ from hexcore.darwin.application.container import get_identity_container
193
+ from hexcore.darwin.plugins.drbac.service import DrbacService
194
+
195
+ contenedor = get_identity_container()
196
+ repos = self._resolved_repos()
197
+ self._service = DrbacService(
198
+ policies=repos.policies,
199
+ bindings=repos.bindings,
200
+ versions=repos.versions,
201
+ clock=contenedor.clock(),
202
+ events=contenedor.events(),
203
+ )
204
+ return self._service
205
+
206
+ def pdp(self) -> "PolicyDecisionPoint":
207
+ with self._lock:
208
+ if self._pdp is None:
209
+ from hexcore.darwin.plugins.drbac.pdp import PolicyDecisionPoint
210
+
211
+ repos = self._resolved_repos()
212
+ self._pdp = PolicyDecisionPoint(
213
+ policies=repos.policies,
214
+ bindings=repos.bindings,
215
+ versions=repos.versions,
216
+ pip=PolicyInformationPoint(resolvers=self._resolvers),
217
+ predicates=self._predicates,
218
+ role_permissions=self._role_permissions,
219
+ limits=self._limits,
220
+ )
221
+ return self._pdp
222
+
223
+ def reset(self) -> None:
224
+ """Descarta lo cacheado. Para los tests."""
225
+ with self._lock:
226
+ self._repos = None
227
+ self._service = None
228
+ self._pdp = None
229
+ self._provider = None
230
+
231
+ # ── Lo que aporta ─────────────────────────────────────────────────────────
232
+ def authorization_providers(self) -> t.Sequence["AuthorizationProvider"]:
233
+ with self._lock:
234
+ if self._provider is None:
235
+ from hexcore.darwin.plugins.drbac.provider import DrbacAuthorizationProvider
236
+
237
+ self._provider = DrbacAuthorizationProvider(pdp=self.pdp())
238
+ return [self._provider]
239
+
240
+ def tables(self) -> t.Mapping[str, type]:
241
+ from hexcore.darwin.plugins.drbac.orms.sqlalchemy.models_mixins import (
242
+ DrbacAuthzVersionMixin,
243
+ DrbacPolicyMixin,
244
+ DrbacRoleBindingMixin,
245
+ DrbacRuleMixin,
246
+ )
247
+
248
+ return {
249
+ "DrbacPolicyMixin": DrbacPolicyMixin,
250
+ "DrbacRuleMixin": DrbacRuleMixin,
251
+ "DrbacRoleBindingMixin": DrbacRoleBindingMixin,
252
+ "DrbacAuthzVersionMixin": DrbacAuthzVersionMixin,
253
+ }
254
+
255
+ def exception_status_map(self) -> t.Mapping[type[Exception], int]:
256
+ return DRBAC_EXCEPTION_STATUS_MAP
257
+
258
+ def routers(self) -> t.Sequence[t.Any]:
259
+ if not self._include_router:
260
+ return ()
261
+
262
+ from hexcore.darwin.plugins.drbac.router import build_drbac_router
263
+
264
+ return [build_drbac_router()]
265
+
266
+
267
+ def get_drbac_service() -> "DrbacService":
268
+ """
269
+ El servicio del plugin registrado en este despliegue.
270
+
271
+ Raises:
272
+ RuntimeError: el plugin no está registrado, con la remediación copiable.
273
+ """
274
+ from hexcore.darwin.application.container import get_identity_container
275
+
276
+ plugin = get_identity_container().plugins.get(DrbacPlugin.name)
277
+ if not isinstance(plugin, DrbacPlugin):
278
+ raise RuntimeError(
279
+ "El plugin 'drbac' no está registrado en este despliegue.\n\n"
280
+ " from hexcore.darwin import PluginRegistry, configure_identity\n"
281
+ " from hexcore.darwin.plugins.drbac import DrbacPlugin\n\n"
282
+ " configure_identity(config, plugins=PluginRegistry([RbacPlugin(), DrbacPlugin()]))"
283
+ )
284
+ return plugin.service()
285
+
286
+
287
+ def __getattr__(name: str) -> t.Any:
288
+ """Los cuatro mixins, perezosos: importarlos arrastra sqlalchemy. Ver `rbac`."""
289
+ if name in _MIXINS:
290
+ from hexcore.darwin.plugins.drbac.orms.sqlalchemy import models_mixins
291
+
292
+ return getattr(models_mixins, name)
293
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -0,0 +1,68 @@
1
+ """
2
+ `PolicySetCache`: las reglas ya compiladas de un scope, versionadas.
3
+
4
+ **Sólo LRU de proceso, a diferencia de `rbac.cache.PermissionMatrixCache`.** Lo que se cachea
5
+ acá no es un dato serializable como un `CompiledPermissionSet` (exactos + prefijos, JSON-safe):
6
+ es una tupla de reglas **ya compiladas a closures Python** (`conditions.compile_condition`), y
7
+ una closure no cruza a Redis. Compartir esta cache entre workers obligaría a volver a compilar
8
+ del lado del que la recibe de todos modos, así que no hay nada que ganar agregando una capa de
9
+ red — cada worker compila una vez y listo.
10
+
11
+ **La clave lleva la versión adentro**, igual que `PermissionMatrixCache`: subir
12
+ `AbstractDrbacAuthzVersionRepository` para un scope deja la clave vieja huérfana, y el LRU la
13
+ desaloja sola con el tiempo. No hace falta invalidar nada a mano.
14
+ """
15
+ from __future__ import annotations
16
+
17
+ import typing as t
18
+ from collections import OrderedDict
19
+
20
+ if t.TYPE_CHECKING:
21
+ from hexcore.darwin.plugins.drbac.pdp import CompiledRule
22
+
23
+ __all__ = ["PolicySetCache"]
24
+
25
+
26
+ class PolicySetCache:
27
+ """
28
+ Uso::
29
+
30
+ cache = PolicySetCache(max_local=2048)
31
+
32
+ reglas = await cache.get_or_compute(
33
+ scope_key, version, compute=lambda: pdp._compilar_capa(scope_key),
34
+ )
35
+ """
36
+
37
+ def __init__(self, *, max_local: int = 4096) -> None:
38
+ self._max_local = max_local
39
+ self._local: OrderedDict[str, tuple["CompiledRule", ...]] = OrderedDict()
40
+
41
+ @staticmethod
42
+ def _clave(scope_key: str, version: int) -> str:
43
+ return f"darwin:drbac:{scope_key}:v{version}"
44
+
45
+ async def get_or_compute(
46
+ self,
47
+ scope_key: str,
48
+ version: int,
49
+ *,
50
+ compute: t.Callable[[], t.Awaitable[tuple["CompiledRule", ...]]],
51
+ ) -> tuple["CompiledRule", ...]:
52
+ clave = self._clave(scope_key, version)
53
+
54
+ en_lru = self._local.get(clave)
55
+ if en_lru is not None:
56
+ self._local.move_to_end(clave)
57
+ return en_lru
58
+
59
+ compiladas = await compute()
60
+ self._local[clave] = compiladas
61
+ self._local.move_to_end(clave)
62
+ while len(self._local) > self._max_local:
63
+ self._local.popitem(last=False)
64
+ return compiladas
65
+
66
+ def clear_local(self) -> None:
67
+ """Vacía el LRU. Para tests."""
68
+ self._local.clear()