hexcore 9.7.1__tar.gz → 9.7.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.
- {hexcore-9.7.1/hexcore.egg-info → hexcore-9.7.2}/PKG-INFO +58 -36
- {hexcore-9.7.1 → hexcore-9.7.2}/README.md +51 -35
- {hexcore-9.7.1 → hexcore-9.7.2/hexcore.egg-info}/PKG-INFO +58 -36
- {hexcore-9.7.1 → hexcore-9.7.2}/pyproject.toml +17 -1
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_documentation_examples.py +149 -17
- {hexcore-9.7.1 → hexcore-9.7.2}/LICENSE +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/MANIFEST.in +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/__main__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/_deprecation.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/cqrs/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/cqrs/adapters.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/cqrs/config.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/cqrs/factory.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/cqrs/in_memory_buses.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/cqrs/pipeline.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/cqrs/registry.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/cqrs/scheduler.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/dtos/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/dtos/base.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/dtos/cursor.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/dtos/errors.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/dtos/query.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/eventsourcing/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/eventsourcing/config.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/eventsourcing/factory.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/eventsourcing/projector.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/eventsourcing/relay.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/eventsourcing/repository.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/use_cases/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/use_cases/base.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/application/use_cases/query.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/capabilities.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/config.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/cqrs.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/cqrs.pyi +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/__init__.pyi +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/application/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/application/commands.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/application/config.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/application/container.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/application/hooks.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/application/plugins.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/application/services.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/domain/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/domain/context.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/domain/entities.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/domain/events.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/domain/exceptions.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/domain/permissions.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/domain/plugins.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/domain/ports.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/domain/value_objects.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/api/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/api/dependencies.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/api/middlewares.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/api/routers.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/cli.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/clock.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/envelope.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/hashing.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/keys.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/lifespan.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/orms/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/orms/beanie/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/orms/beanie/documents.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/orms/beanie/repositories.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/orms/beanie/schema.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/orms/selection.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/orms/sqlalchemy/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/orms/sqlalchemy/models.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/orms/sqlalchemy/models_mixins.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/orms/sqlalchemy/repositories.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/orms/sqlalchemy/schema.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/revocation.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/secretbox.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/tokens.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/infrastructure/transports.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/impersonate/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/impersonate/commands.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/impersonate/domain.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/impersonate/router.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/impersonate/service.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/magic_link/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/magic_link/commands.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/magic_link/router.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/domain.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/http.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/orms/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/orms/beanie/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/orms/beanie/repository.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/orms/sqlalchemy/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/orms/sqlalchemy/models.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/orms/sqlalchemy/models_mixins.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/orms/sqlalchemy/repository.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/providers.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/router.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/oauth/service.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/organization/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/organization/domain.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/organization/orms/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/organization/orms/beanie/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/organization/orms/beanie/repository.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/organization/orms/sqlalchemy/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/organization/orms/sqlalchemy/models.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/organization/orms/sqlalchemy/models_mixins.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/organization/orms/sqlalchemy/repository.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/organization/router.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/organization/service.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/domain.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/orms/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/orms/beanie/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/orms/beanie/repository.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/orms/sqlalchemy/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/orms/sqlalchemy/models.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/orms/sqlalchemy/models_mixins.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/orms/sqlalchemy/repository.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/router.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/service.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/passkey/webauthn_adapter.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/storage.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/commands.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/crypto.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/domain.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/orms/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/orms/beanie/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/orms/beanie/repository.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/orms/sqlalchemy/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/orms/sqlalchemy/models.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/orms/sqlalchemy/models_mixins.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/orms/sqlalchemy/repository.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/router.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/service.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/plugins/two_factor/totp.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/testing/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/testing/fakes.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/testing/fixtures.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/darwin/testing/helpers.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/auth/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/auth/permissions.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/auth/value_objects.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/base.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/buses.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/commands.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/context.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/cron.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/decorators.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/dispatch.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/envelope.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/exceptions.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/handlers.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/middleware.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/queries.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/resolution.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/serializer.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/cqrs/task_queues.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/events.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/eventsourcing/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/eventsourcing/aggregate.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/eventsourcing/exceptions.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/eventsourcing/projections.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/eventsourcing/snapshots.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/eventsourcing/store.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/eventsourcing/stored.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/exceptions.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/repositories.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/services.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/domain/uow.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/eventsourcing.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/eventsourcing.pyi +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/fastapi.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/fastapi.pyi +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/app.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/cqrs.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/eventsourcing.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/exception_handlers.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/health.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/lifespan.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/middlewares.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/rate_limit.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/routing.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/streaming.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/api/utils.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cache/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cache/cache_backends/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cache/cache_backends/memory.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cache/cache_backends/redis.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cli.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cqrs/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cqrs/cron_sql.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cqrs/middlewares.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cqrs/postgres_bus.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cqrs/postgres_lock.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cqrs/procrastinate.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cqrs/pydantic_serializer.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cqrs/rabbitmq.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cqrs/redis_bus.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/cqrs/redis_lock.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/events/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/events/events_backends/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/events/events_backends/memory.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/eventsourcing/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/eventsourcing/beanie_documents.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/eventsourcing/beanie_store.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/eventsourcing/memory.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/eventsourcing/redis_store.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/eventsourcing/sqlalchemy_models.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/eventsourcing/sqlalchemy_models_mixins.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/eventsourcing/sqlalchemy_store.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/_beanie_impl.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/_sqlalchemy_impl.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/base.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/decorators.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/implementations.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/orms/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/orms/beanie/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/orms/beanie/utils.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/orms/sqlalchemy/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/orms/sqlalchemy/session.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/orms/sqlalchemy/utils.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/repositories/utils.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/task_queues/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/task_queues/celery_adapter.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/task_queues/procrastinate_adapter.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/uow/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/uow/decorators.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/uow/helpers.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/uow/scopes.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/workers/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/workers/consumer.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/workers/rabbitmq_worker.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/infrastructure/workers/runner.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/py.typed +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/sql.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/sql.pyi +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/testing/__init__.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/testing/fakes.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/testing/fixtures.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/testing/helpers.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/testing/repositories.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore/types.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore.egg-info/SOURCES.txt +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore.egg-info/dependency_links.txt +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore.egg-info/entry_points.txt +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore.egg-info/requires.txt +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/hexcore.egg-info/top_level.txt +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/setup.cfg +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_alembic_metadata_completeness.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_anclas_del_repo.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_api_app_and_lifespan.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_api_cqrs_providers.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_api_exception_handlers.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_api_health.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_api_middlewares_and_routing.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_api_rate_limit.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_api_streaming.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_basic.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_beanie_query_utils.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_celery_event_loop.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_config_cors_security.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_config_loading.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_consumer_optional_event_bus.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_cqrs.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_cqrs_envelope.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_cqrs_factory.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_cqrs_middlewares.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_cron_sql.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_backend_neutrality.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_beanie.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_cli.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_container.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_context.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_custom_plugin.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_envelope.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_facade_and_events.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_flows.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_hashing.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_http.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_impersonate.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_magic_link.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_models.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_oauth.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_openapi.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_organization.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_passkey.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_permissions.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_plugin_decoupling.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_plugins.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_repositories.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_revocation.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_schema_registration.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_storage_selection.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_tokens.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_two_factor.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_darwin_value_objects.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_deprecations.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_domain_base_contract.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_domain_service_query.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_dotted_resolution.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_event_dispatch_mro.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_aggregate.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_beanie.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_config.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_ports.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_projections.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_redis.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_relay.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_repository.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_snapshot_checkpoint.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_sql_schema.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_store_contract.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_eventsourcing_uow_integration.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_facades.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_handler_registry.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_infrastructure_query_path.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_lock_error_policy.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_optional_dependencies.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_packaging.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_postgres_bus.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_postgres_lock.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_query_cursor_and_endpoint.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_query_field_validation.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_rabbitmq_bus.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_redis_bus.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_redis_lock.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_repositories_utils.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_scheduler.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_scheduler_catchup.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_smart_routing.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_sql_naming_convention.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_sql_session_layer.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_task_queues_adapters.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_testing_kit.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_testing_utilities.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_typing_gate.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_uow_session_regression.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_use_cases_query.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_worker_bus_integration.py +0 -0
- {hexcore-9.7.1 → hexcore-9.7.2}/tests/test_worker_runner.py +0 -0
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hexcore
|
|
3
|
-
Version: 9.7.
|
|
3
|
+
Version: 9.7.2
|
|
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
|
|
7
|
+
Project-URL: Homepage, https://github.com/Indroic/HexCore
|
|
8
|
+
Project-URL: Documentation, https://github.com/Indroic/HexCore/tree/master/docs/hexcore
|
|
9
|
+
Project-URL: Repository, https://github.com/Indroic/HexCore
|
|
10
|
+
Project-URL: Changelog, https://github.com/Indroic/HexCore/blob/master/CHANGELOG.md
|
|
11
|
+
Project-URL: Issues, https://github.com/Indroic/HexCore/issues
|
|
12
|
+
Keywords: hexagonal-architecture,ddd,cqrs,event-sourcing,fastapi,sqlalchemy,background-tasks,cron,authentication,identity
|
|
7
13
|
Requires-Python: >=3.12
|
|
8
14
|
Description-Content-Type: text/markdown
|
|
9
15
|
License-File: LICENSE
|
|
@@ -73,7 +79,16 @@ Requires-Dist: httpx>=0.27.0; extra == "all"
|
|
|
73
79
|
Requires-Dist: webauthn>=2.0.0; extra == "all"
|
|
74
80
|
Dynamic: license-file
|
|
75
81
|
|
|
76
|
-
# HexCore
|
|
82
|
+
# HexCore
|
|
83
|
+
|
|
84
|
+
[](https://pypi.org/project/hexcore/)
|
|
85
|
+
[](https://pepy.tech/projects/hexcore)
|
|
86
|
+
[](https://pypi.org/project/hexcore/)
|
|
87
|
+
[](https://github.com/Indroic/HexCore/blob/master/LICENSE)
|
|
88
|
+
|
|
89
|
+
📖 **[Full documentation](https://github.com/Indroic/HexCore/tree/master/docs/hexcore/)** ·
|
|
90
|
+
🐙 **[Repository](https://github.com/Indroic/HexCore)** ·
|
|
91
|
+
🟦 **[TypeScript client for Darwin](https://github.com/Indroic/HexCore/tree/master/docs/darwin-client/)**
|
|
77
92
|
|
|
78
93
|
A reusable core for Python applications built on **hexagonal architecture**, **DDD**, **CQRS**
|
|
79
94
|
and **background tasks**. HexCore ships the abstractions (entities, repositories, unit of work,
|
|
@@ -85,7 +100,7 @@ arguments gives you a usable app, `init_engine()` with no arguments gives you a
|
|
|
85
100
|
production-correct engine.
|
|
86
101
|
|
|
87
102
|
> 🇪🇸 **¿Preferís español?** La documentación está completa en los dos idiomas:
|
|
88
|
-
> **[docs/es/](
|
|
103
|
+
> **[docs/es/](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/)**.
|
|
89
104
|
|
|
90
105
|
```python
|
|
91
106
|
# main.py — a complete HexCore app
|
|
@@ -113,26 +128,26 @@ await cqrs.run_procrastinate_worker(
|
|
|
113
128
|
|
|
114
129
|
## 📚 Documentation
|
|
115
130
|
|
|
116
|
-
**→ [`docs/`](
|
|
131
|
+
**→ [`docs/`](https://github.com/Indroic/HexCore/tree/master/docs/hexcore/) — 🇬🇧 [English](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/) · 🇪🇸 [español](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/)**
|
|
117
132
|
|
|
118
133
|
| | English | Español |
|
|
119
134
|
| :-- | :-- | :-- |
|
|
120
|
-
| Installation and extras | [installation](
|
|
121
|
-
| Quickstart | [quickstart](
|
|
122
|
-
| Configuration | [configuration](
|
|
123
|
-
| SQL layer | [sql](
|
|
124
|
-
| Repositories and entities | [repositories](
|
|
125
|
-
| FastAPI utilities | [fastapi](
|
|
126
|
-
| CQRS architecture | [cqrs](
|
|
127
|
-
| Queues and workers | [queues-and-workers](
|
|
128
|
-
| Scheduled tasks | [cron](
|
|
129
|
-
| **Event Sourcing** | [event-sourcing](
|
|
130
|
-
| Testing | [testing](
|
|
131
|
-
| CLI | [cli](
|
|
132
|
-
| **Darwin** (identity) | [darwin/](
|
|
133
|
-
| API reference | [reference](
|
|
134
|
-
| Versions and migration | [versions-and-migration](
|
|
135
|
-
| Typing | [typing](
|
|
135
|
+
| Installation and extras | [installation](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/installation.md) | [instalacion](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/instalacion.md) |
|
|
136
|
+
| Quickstart | [quickstart](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/quickstart.md) | [inicio-rapido](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/inicio-rapido.md) |
|
|
137
|
+
| Configuration | [configuration](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/configuration.md) | [configuracion](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/configuracion.md) |
|
|
138
|
+
| SQL layer | [sql](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/sql.md) | [sql](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/sql.md) |
|
|
139
|
+
| Repositories and entities | [repositories](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/repositories.md) | [repositorios](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/repositorios.md) |
|
|
140
|
+
| FastAPI utilities | [fastapi](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/fastapi.md) | [fastapi](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/fastapi.md) |
|
|
141
|
+
| CQRS architecture | [cqrs](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cqrs.md) | [cqrs](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cqrs.md) |
|
|
142
|
+
| Queues and workers | [queues-and-workers](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/queues-and-workers.md) | [colas-y-workers](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/colas-y-workers.md) |
|
|
143
|
+
| Scheduled tasks | [cron](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cron.md) | [cron](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cron.md) |
|
|
144
|
+
| **Event Sourcing** | [event-sourcing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/event-sourcing.md) | [event-sourcing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/event-sourcing.md) |
|
|
145
|
+
| Testing | [testing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/testing.md) | [testing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/testing.md) |
|
|
146
|
+
| CLI | [cli](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cli.md) | [cli](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cli.md) |
|
|
147
|
+
| **Darwin** (identity) | [darwin/](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/darwin/) | [darwin/](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/darwin/) |
|
|
148
|
+
| API reference | [reference](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/reference.md) | [referencia](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/referencia.md) |
|
|
149
|
+
| Versions and migration | [versions-and-migration](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/versions-and-migration.md) | [versiones-y-migracion](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/versiones-y-migracion.md) |
|
|
150
|
+
| Typing | [typing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/typing.md) | [tipado](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/tipado.md) |
|
|
136
151
|
|
|
137
152
|
---
|
|
138
153
|
|
|
@@ -158,7 +173,7 @@ pip install "hexcore[all]"
|
|
|
158
173
|
| Everything | `all` |
|
|
159
174
|
|
|
160
175
|
The full table, with what each one enables, is in
|
|
161
|
-
[installation](
|
|
176
|
+
[installation](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/installation.md) · [instalación](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/instalacion.md).
|
|
162
177
|
|
|
163
178
|
> `import hexcore.cqrs` works with no extras at all: name resolution is lazy, so
|
|
164
179
|
> `hexcore.cqrs.SqlAlchemyCronJobRepository` only requires `[sql]` at the moment you ask for it.
|
|
@@ -228,7 +243,7 @@ app = create_app(
|
|
|
228
243
|
```
|
|
229
244
|
|
|
230
245
|
⚠️ If you use SQL, the most important thing to read before deploying is the Alembic section:
|
|
231
|
-
[storage](
|
|
246
|
+
[storage](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/darwin/storage.md) · [almacenamiento](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/darwin/almacenamiento.md).
|
|
232
247
|
A plugin missing from your `env.py` makes `alembic revision --autogenerate` emit
|
|
233
248
|
`op.drop_table` for its tables.
|
|
234
249
|
|
|
@@ -245,7 +260,7 @@ hexcore init my_project --template vertical-slice
|
|
|
245
260
|
- `vertical-slice` → `src/features`, `src/shared/{domain,application,infrastructure}`.
|
|
246
261
|
|
|
247
262
|
Both generate a root `config.py` and leave Alembic configured. See
|
|
248
|
-
[CLI](
|
|
263
|
+
[CLI](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cli.md) · [CLI](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cli.md).
|
|
249
264
|
|
|
250
265
|
---
|
|
251
266
|
|
|
@@ -265,8 +280,8 @@ Both generate a root `config.py` and leave Alembic configured. See
|
|
|
265
280
|
|
|
266
281
|
**Everything before 9.0 is deprecated. Migrate to 9.x.** The detail of each series, the silent
|
|
267
282
|
2.x bugs and the step-by-step guides are in
|
|
268
|
-
[versions and migration](
|
|
269
|
-
[versiones y migración](
|
|
283
|
+
[versions and migration](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/versions-and-migration.md) ·
|
|
284
|
+
[versiones y migración](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/versiones-y-migracion.md).
|
|
270
285
|
|
|
271
286
|
### Removed API and its replacement
|
|
272
287
|
|
|
@@ -303,7 +318,7 @@ python -m pytest -W "default::DeprecationWarning"
|
|
|
303
318
|
|
|
304
319
|
## Contributing
|
|
305
320
|
|
|
306
|
-
1. **Code of conduct** — read the [Code of Conduct](CODE_OF_CONDUCT.md) before interacting.
|
|
321
|
+
1. **Code of conduct** — read the [Code of Conduct](https://github.com/Indroic/HexCore/blob/master/CODE_OF_CONDUCT.md) before interacting.
|
|
307
322
|
2. **Branches** — fork and create a branch (`feat/name`, `fix/name`, `docs/name`).
|
|
308
323
|
3. **Tests** — every fix lands with at least one test that fails before and passes after:
|
|
309
324
|
|
|
@@ -315,26 +330,33 @@ python -m pytest -W "default::DeprecationWarning"
|
|
|
315
330
|
CI fails if any test is **skipped**: a skip means an extra is missing, and we would be
|
|
316
331
|
reporting green without having run half the suite.
|
|
317
332
|
4. **Typecheck** — `uv run pyright hexcore`. The verdict comes from the ratchet, not the exit
|
|
318
|
-
code: see [typing](
|
|
333
|
+
code: see [typing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/typing.md) · [tipado](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/tipado.md).
|
|
319
334
|
5. **Style** — [PEP8](https://pep8.org/). Comment the *why*, not the *what*.
|
|
320
335
|
6. **Commits** — [Commitizen](https://commitizen-tools.github.io/commitizen/): `feat:`, `fix:`,
|
|
321
336
|
`docs:`, `refactor:`, and `!` for breaking changes. The version bump and the CHANGELOG are
|
|
322
337
|
automatic on merge to `master`.
|
|
323
338
|
7. **PRs** — describe the problem, the reproduction, the solution and **why that option**.
|
|
324
339
|
|
|
325
|
-
Full detail in [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
340
|
+
Full detail in [CONTRIBUTING.md](https://github.com/Indroic/HexCore/blob/master/CONTRIBUTING.md).
|
|
341
|
+
|
|
342
|
+
### The agent skill
|
|
326
343
|
|
|
327
|
-
|
|
344
|
+
[`skills/hexcore/`](https://github.com/Indroic/HexCore/tree/master/skills/hexcore) is a
|
|
345
|
+
[Claude Code](https://claude.com/claude-code) skill covering both packages — this one and the
|
|
346
|
+
TypeScript client. It reads the installed package instead of remembering it, and audits a
|
|
347
|
+
project for the framework's silent failure modes rather than just describing them. Its prose is
|
|
348
|
+
under the same CI gate as the documentation, so a rename here turns it red.
|
|
328
349
|
|
|
329
|
-
|
|
330
|
-
|
|
350
|
+
To use it in a project that consumes HexCore, copy that directory into the project's
|
|
351
|
+
`.claude/skills/`. Details in
|
|
352
|
+
[skills/README.md](https://github.com/Indroic/HexCore/blob/master/skills/README.md).
|
|
331
353
|
|
|
332
354
|
---
|
|
333
355
|
|
|
334
356
|
## References
|
|
335
357
|
|
|
336
|
-
- [docs/](
|
|
337
|
-
- [docs/ARCHITECTURE_TYPING.md](
|
|
338
|
-
- [CHANGELOG.md](
|
|
339
|
-
- [CONTRIBUTING.md](
|
|
340
|
-
- [SECURITY.md](
|
|
358
|
+
- [docs/](https://github.com/Indroic/HexCore/tree/master/docs/hexcore/) — the complete documentation, in English and Spanish.
|
|
359
|
+
- [docs/ARCHITECTURE_TYPING.md](https://github.com/Indroic/HexCore/blob/master/docs/ARCHITECTURE_TYPING.md) — type system and stubs.
|
|
360
|
+
- [CHANGELOG.md](https://github.com/Indroic/HexCore/blob/master/CHANGELOG.md) — change history.
|
|
361
|
+
- [CONTRIBUTING.md](https://github.com/Indroic/HexCore/blob/master/CONTRIBUTING.md) — collaboration guidelines.
|
|
362
|
+
- [SECURITY.md](https://github.com/Indroic/HexCore/blob/master/SECURITY.md) — security policy.
|
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
# HexCore
|
|
1
|
+
# HexCore
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/hexcore/)
|
|
4
|
+
[](https://pepy.tech/projects/hexcore)
|
|
5
|
+
[](https://pypi.org/project/hexcore/)
|
|
6
|
+
[](https://github.com/Indroic/HexCore/blob/master/LICENSE)
|
|
7
|
+
|
|
8
|
+
📖 **[Full documentation](https://github.com/Indroic/HexCore/tree/master/docs/hexcore/)** ·
|
|
9
|
+
🐙 **[Repository](https://github.com/Indroic/HexCore)** ·
|
|
10
|
+
🟦 **[TypeScript client for Darwin](https://github.com/Indroic/HexCore/tree/master/docs/darwin-client/)**
|
|
2
11
|
|
|
3
12
|
A reusable core for Python applications built on **hexagonal architecture**, **DDD**, **CQRS**
|
|
4
13
|
and **background tasks**. HexCore ships the abstractions (entities, repositories, unit of work,
|
|
@@ -10,7 +19,7 @@ arguments gives you a usable app, `init_engine()` with no arguments gives you a
|
|
|
10
19
|
production-correct engine.
|
|
11
20
|
|
|
12
21
|
> 🇪🇸 **¿Preferís español?** La documentación está completa en los dos idiomas:
|
|
13
|
-
> **[docs/es/](
|
|
22
|
+
> **[docs/es/](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/)**.
|
|
14
23
|
|
|
15
24
|
```python
|
|
16
25
|
# main.py — a complete HexCore app
|
|
@@ -38,26 +47,26 @@ await cqrs.run_procrastinate_worker(
|
|
|
38
47
|
|
|
39
48
|
## 📚 Documentation
|
|
40
49
|
|
|
41
|
-
**→ [`docs/`](
|
|
50
|
+
**→ [`docs/`](https://github.com/Indroic/HexCore/tree/master/docs/hexcore/) — 🇬🇧 [English](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/) · 🇪🇸 [español](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/)**
|
|
42
51
|
|
|
43
52
|
| | English | Español |
|
|
44
53
|
| :-- | :-- | :-- |
|
|
45
|
-
| Installation and extras | [installation](
|
|
46
|
-
| Quickstart | [quickstart](
|
|
47
|
-
| Configuration | [configuration](
|
|
48
|
-
| SQL layer | [sql](
|
|
49
|
-
| Repositories and entities | [repositories](
|
|
50
|
-
| FastAPI utilities | [fastapi](
|
|
51
|
-
| CQRS architecture | [cqrs](
|
|
52
|
-
| Queues and workers | [queues-and-workers](
|
|
53
|
-
| Scheduled tasks | [cron](
|
|
54
|
-
| **Event Sourcing** | [event-sourcing](
|
|
55
|
-
| Testing | [testing](
|
|
56
|
-
| CLI | [cli](
|
|
57
|
-
| **Darwin** (identity) | [darwin/](
|
|
58
|
-
| API reference | [reference](
|
|
59
|
-
| Versions and migration | [versions-and-migration](
|
|
60
|
-
| Typing | [typing](
|
|
54
|
+
| Installation and extras | [installation](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/installation.md) | [instalacion](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/instalacion.md) |
|
|
55
|
+
| Quickstart | [quickstart](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/quickstart.md) | [inicio-rapido](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/inicio-rapido.md) |
|
|
56
|
+
| Configuration | [configuration](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/configuration.md) | [configuracion](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/configuracion.md) |
|
|
57
|
+
| SQL layer | [sql](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/sql.md) | [sql](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/sql.md) |
|
|
58
|
+
| Repositories and entities | [repositories](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/repositories.md) | [repositorios](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/repositorios.md) |
|
|
59
|
+
| FastAPI utilities | [fastapi](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/fastapi.md) | [fastapi](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/fastapi.md) |
|
|
60
|
+
| CQRS architecture | [cqrs](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cqrs.md) | [cqrs](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cqrs.md) |
|
|
61
|
+
| Queues and workers | [queues-and-workers](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/queues-and-workers.md) | [colas-y-workers](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/colas-y-workers.md) |
|
|
62
|
+
| Scheduled tasks | [cron](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cron.md) | [cron](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cron.md) |
|
|
63
|
+
| **Event Sourcing** | [event-sourcing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/event-sourcing.md) | [event-sourcing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/event-sourcing.md) |
|
|
64
|
+
| Testing | [testing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/testing.md) | [testing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/testing.md) |
|
|
65
|
+
| CLI | [cli](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cli.md) | [cli](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cli.md) |
|
|
66
|
+
| **Darwin** (identity) | [darwin/](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/darwin/) | [darwin/](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/darwin/) |
|
|
67
|
+
| API reference | [reference](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/reference.md) | [referencia](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/referencia.md) |
|
|
68
|
+
| Versions and migration | [versions-and-migration](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/versions-and-migration.md) | [versiones-y-migracion](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/versiones-y-migracion.md) |
|
|
69
|
+
| Typing | [typing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/typing.md) | [tipado](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/tipado.md) |
|
|
61
70
|
|
|
62
71
|
---
|
|
63
72
|
|
|
@@ -83,7 +92,7 @@ pip install "hexcore[all]"
|
|
|
83
92
|
| Everything | `all` |
|
|
84
93
|
|
|
85
94
|
The full table, with what each one enables, is in
|
|
86
|
-
[installation](
|
|
95
|
+
[installation](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/installation.md) · [instalación](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/instalacion.md).
|
|
87
96
|
|
|
88
97
|
> `import hexcore.cqrs` works with no extras at all: name resolution is lazy, so
|
|
89
98
|
> `hexcore.cqrs.SqlAlchemyCronJobRepository` only requires `[sql]` at the moment you ask for it.
|
|
@@ -153,7 +162,7 @@ app = create_app(
|
|
|
153
162
|
```
|
|
154
163
|
|
|
155
164
|
⚠️ If you use SQL, the most important thing to read before deploying is the Alembic section:
|
|
156
|
-
[storage](
|
|
165
|
+
[storage](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/darwin/storage.md) · [almacenamiento](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/darwin/almacenamiento.md).
|
|
157
166
|
A plugin missing from your `env.py` makes `alembic revision --autogenerate` emit
|
|
158
167
|
`op.drop_table` for its tables.
|
|
159
168
|
|
|
@@ -170,7 +179,7 @@ hexcore init my_project --template vertical-slice
|
|
|
170
179
|
- `vertical-slice` → `src/features`, `src/shared/{domain,application,infrastructure}`.
|
|
171
180
|
|
|
172
181
|
Both generate a root `config.py` and leave Alembic configured. See
|
|
173
|
-
[CLI](
|
|
182
|
+
[CLI](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cli.md) · [CLI](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cli.md).
|
|
174
183
|
|
|
175
184
|
---
|
|
176
185
|
|
|
@@ -190,8 +199,8 @@ Both generate a root `config.py` and leave Alembic configured. See
|
|
|
190
199
|
|
|
191
200
|
**Everything before 9.0 is deprecated. Migrate to 9.x.** The detail of each series, the silent
|
|
192
201
|
2.x bugs and the step-by-step guides are in
|
|
193
|
-
[versions and migration](
|
|
194
|
-
[versiones y migración](
|
|
202
|
+
[versions and migration](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/versions-and-migration.md) ·
|
|
203
|
+
[versiones y migración](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/versiones-y-migracion.md).
|
|
195
204
|
|
|
196
205
|
### Removed API and its replacement
|
|
197
206
|
|
|
@@ -228,7 +237,7 @@ python -m pytest -W "default::DeprecationWarning"
|
|
|
228
237
|
|
|
229
238
|
## Contributing
|
|
230
239
|
|
|
231
|
-
1. **Code of conduct** — read the [Code of Conduct](CODE_OF_CONDUCT.md) before interacting.
|
|
240
|
+
1. **Code of conduct** — read the [Code of Conduct](https://github.com/Indroic/HexCore/blob/master/CODE_OF_CONDUCT.md) before interacting.
|
|
232
241
|
2. **Branches** — fork and create a branch (`feat/name`, `fix/name`, `docs/name`).
|
|
233
242
|
3. **Tests** — every fix lands with at least one test that fails before and passes after:
|
|
234
243
|
|
|
@@ -240,26 +249,33 @@ python -m pytest -W "default::DeprecationWarning"
|
|
|
240
249
|
CI fails if any test is **skipped**: a skip means an extra is missing, and we would be
|
|
241
250
|
reporting green without having run half the suite.
|
|
242
251
|
4. **Typecheck** — `uv run pyright hexcore`. The verdict comes from the ratchet, not the exit
|
|
243
|
-
code: see [typing](
|
|
252
|
+
code: see [typing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/typing.md) · [tipado](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/tipado.md).
|
|
244
253
|
5. **Style** — [PEP8](https://pep8.org/). Comment the *why*, not the *what*.
|
|
245
254
|
6. **Commits** — [Commitizen](https://commitizen-tools.github.io/commitizen/): `feat:`, `fix:`,
|
|
246
255
|
`docs:`, `refactor:`, and `!` for breaking changes. The version bump and the CHANGELOG are
|
|
247
256
|
automatic on merge to `master`.
|
|
248
257
|
7. **PRs** — describe the problem, the reproduction, the solution and **why that option**.
|
|
249
258
|
|
|
250
|
-
Full detail in [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
259
|
+
Full detail in [CONTRIBUTING.md](https://github.com/Indroic/HexCore/blob/master/CONTRIBUTING.md).
|
|
260
|
+
|
|
261
|
+
### The agent skill
|
|
251
262
|
|
|
252
|
-
|
|
263
|
+
[`skills/hexcore/`](https://github.com/Indroic/HexCore/tree/master/skills/hexcore) is a
|
|
264
|
+
[Claude Code](https://claude.com/claude-code) skill covering both packages — this one and the
|
|
265
|
+
TypeScript client. It reads the installed package instead of remembering it, and audits a
|
|
266
|
+
project for the framework's silent failure modes rather than just describing them. Its prose is
|
|
267
|
+
under the same CI gate as the documentation, so a rename here turns it red.
|
|
253
268
|
|
|
254
|
-
|
|
255
|
-
|
|
269
|
+
To use it in a project that consumes HexCore, copy that directory into the project's
|
|
270
|
+
`.claude/skills/`. Details in
|
|
271
|
+
[skills/README.md](https://github.com/Indroic/HexCore/blob/master/skills/README.md).
|
|
256
272
|
|
|
257
273
|
---
|
|
258
274
|
|
|
259
275
|
## References
|
|
260
276
|
|
|
261
|
-
- [docs/](
|
|
262
|
-
- [docs/ARCHITECTURE_TYPING.md](
|
|
263
|
-
- [CHANGELOG.md](
|
|
264
|
-
- [CONTRIBUTING.md](
|
|
265
|
-
- [SECURITY.md](
|
|
277
|
+
- [docs/](https://github.com/Indroic/HexCore/tree/master/docs/hexcore/) — the complete documentation, in English and Spanish.
|
|
278
|
+
- [docs/ARCHITECTURE_TYPING.md](https://github.com/Indroic/HexCore/blob/master/docs/ARCHITECTURE_TYPING.md) — type system and stubs.
|
|
279
|
+
- [CHANGELOG.md](https://github.com/Indroic/HexCore/blob/master/CHANGELOG.md) — change history.
|
|
280
|
+
- [CONTRIBUTING.md](https://github.com/Indroic/HexCore/blob/master/CONTRIBUTING.md) — collaboration guidelines.
|
|
281
|
+
- [SECURITY.md](https://github.com/Indroic/HexCore/blob/master/SECURITY.md) — security policy.
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hexcore
|
|
3
|
-
Version: 9.7.
|
|
3
|
+
Version: 9.7.2
|
|
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
|
|
7
|
+
Project-URL: Homepage, https://github.com/Indroic/HexCore
|
|
8
|
+
Project-URL: Documentation, https://github.com/Indroic/HexCore/tree/master/docs/hexcore
|
|
9
|
+
Project-URL: Repository, https://github.com/Indroic/HexCore
|
|
10
|
+
Project-URL: Changelog, https://github.com/Indroic/HexCore/blob/master/CHANGELOG.md
|
|
11
|
+
Project-URL: Issues, https://github.com/Indroic/HexCore/issues
|
|
12
|
+
Keywords: hexagonal-architecture,ddd,cqrs,event-sourcing,fastapi,sqlalchemy,background-tasks,cron,authentication,identity
|
|
7
13
|
Requires-Python: >=3.12
|
|
8
14
|
Description-Content-Type: text/markdown
|
|
9
15
|
License-File: LICENSE
|
|
@@ -73,7 +79,16 @@ Requires-Dist: httpx>=0.27.0; extra == "all"
|
|
|
73
79
|
Requires-Dist: webauthn>=2.0.0; extra == "all"
|
|
74
80
|
Dynamic: license-file
|
|
75
81
|
|
|
76
|
-
# HexCore
|
|
82
|
+
# HexCore
|
|
83
|
+
|
|
84
|
+
[](https://pypi.org/project/hexcore/)
|
|
85
|
+
[](https://pepy.tech/projects/hexcore)
|
|
86
|
+
[](https://pypi.org/project/hexcore/)
|
|
87
|
+
[](https://github.com/Indroic/HexCore/blob/master/LICENSE)
|
|
88
|
+
|
|
89
|
+
📖 **[Full documentation](https://github.com/Indroic/HexCore/tree/master/docs/hexcore/)** ·
|
|
90
|
+
🐙 **[Repository](https://github.com/Indroic/HexCore)** ·
|
|
91
|
+
🟦 **[TypeScript client for Darwin](https://github.com/Indroic/HexCore/tree/master/docs/darwin-client/)**
|
|
77
92
|
|
|
78
93
|
A reusable core for Python applications built on **hexagonal architecture**, **DDD**, **CQRS**
|
|
79
94
|
and **background tasks**. HexCore ships the abstractions (entities, repositories, unit of work,
|
|
@@ -85,7 +100,7 @@ arguments gives you a usable app, `init_engine()` with no arguments gives you a
|
|
|
85
100
|
production-correct engine.
|
|
86
101
|
|
|
87
102
|
> 🇪🇸 **¿Preferís español?** La documentación está completa en los dos idiomas:
|
|
88
|
-
> **[docs/es/](
|
|
103
|
+
> **[docs/es/](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/)**.
|
|
89
104
|
|
|
90
105
|
```python
|
|
91
106
|
# main.py — a complete HexCore app
|
|
@@ -113,26 +128,26 @@ await cqrs.run_procrastinate_worker(
|
|
|
113
128
|
|
|
114
129
|
## 📚 Documentation
|
|
115
130
|
|
|
116
|
-
**→ [`docs/`](
|
|
131
|
+
**→ [`docs/`](https://github.com/Indroic/HexCore/tree/master/docs/hexcore/) — 🇬🇧 [English](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/) · 🇪🇸 [español](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/)**
|
|
117
132
|
|
|
118
133
|
| | English | Español |
|
|
119
134
|
| :-- | :-- | :-- |
|
|
120
|
-
| Installation and extras | [installation](
|
|
121
|
-
| Quickstart | [quickstart](
|
|
122
|
-
| Configuration | [configuration](
|
|
123
|
-
| SQL layer | [sql](
|
|
124
|
-
| Repositories and entities | [repositories](
|
|
125
|
-
| FastAPI utilities | [fastapi](
|
|
126
|
-
| CQRS architecture | [cqrs](
|
|
127
|
-
| Queues and workers | [queues-and-workers](
|
|
128
|
-
| Scheduled tasks | [cron](
|
|
129
|
-
| **Event Sourcing** | [event-sourcing](
|
|
130
|
-
| Testing | [testing](
|
|
131
|
-
| CLI | [cli](
|
|
132
|
-
| **Darwin** (identity) | [darwin/](
|
|
133
|
-
| API reference | [reference](
|
|
134
|
-
| Versions and migration | [versions-and-migration](
|
|
135
|
-
| Typing | [typing](
|
|
135
|
+
| Installation and extras | [installation](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/installation.md) | [instalacion](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/instalacion.md) |
|
|
136
|
+
| Quickstart | [quickstart](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/quickstart.md) | [inicio-rapido](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/inicio-rapido.md) |
|
|
137
|
+
| Configuration | [configuration](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/configuration.md) | [configuracion](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/configuracion.md) |
|
|
138
|
+
| SQL layer | [sql](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/sql.md) | [sql](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/sql.md) |
|
|
139
|
+
| Repositories and entities | [repositories](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/repositories.md) | [repositorios](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/repositorios.md) |
|
|
140
|
+
| FastAPI utilities | [fastapi](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/fastapi.md) | [fastapi](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/fastapi.md) |
|
|
141
|
+
| CQRS architecture | [cqrs](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cqrs.md) | [cqrs](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cqrs.md) |
|
|
142
|
+
| Queues and workers | [queues-and-workers](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/queues-and-workers.md) | [colas-y-workers](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/colas-y-workers.md) |
|
|
143
|
+
| Scheduled tasks | [cron](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cron.md) | [cron](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cron.md) |
|
|
144
|
+
| **Event Sourcing** | [event-sourcing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/event-sourcing.md) | [event-sourcing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/event-sourcing.md) |
|
|
145
|
+
| Testing | [testing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/testing.md) | [testing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/testing.md) |
|
|
146
|
+
| CLI | [cli](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cli.md) | [cli](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cli.md) |
|
|
147
|
+
| **Darwin** (identity) | [darwin/](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/darwin/) | [darwin/](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/darwin/) |
|
|
148
|
+
| API reference | [reference](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/reference.md) | [referencia](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/referencia.md) |
|
|
149
|
+
| Versions and migration | [versions-and-migration](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/versions-and-migration.md) | [versiones-y-migracion](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/versiones-y-migracion.md) |
|
|
150
|
+
| Typing | [typing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/typing.md) | [tipado](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/tipado.md) |
|
|
136
151
|
|
|
137
152
|
---
|
|
138
153
|
|
|
@@ -158,7 +173,7 @@ pip install "hexcore[all]"
|
|
|
158
173
|
| Everything | `all` |
|
|
159
174
|
|
|
160
175
|
The full table, with what each one enables, is in
|
|
161
|
-
[installation](
|
|
176
|
+
[installation](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/installation.md) · [instalación](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/instalacion.md).
|
|
162
177
|
|
|
163
178
|
> `import hexcore.cqrs` works with no extras at all: name resolution is lazy, so
|
|
164
179
|
> `hexcore.cqrs.SqlAlchemyCronJobRepository` only requires `[sql]` at the moment you ask for it.
|
|
@@ -228,7 +243,7 @@ app = create_app(
|
|
|
228
243
|
```
|
|
229
244
|
|
|
230
245
|
⚠️ If you use SQL, the most important thing to read before deploying is the Alembic section:
|
|
231
|
-
[storage](
|
|
246
|
+
[storage](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/darwin/storage.md) · [almacenamiento](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/darwin/almacenamiento.md).
|
|
232
247
|
A plugin missing from your `env.py` makes `alembic revision --autogenerate` emit
|
|
233
248
|
`op.drop_table` for its tables.
|
|
234
249
|
|
|
@@ -245,7 +260,7 @@ hexcore init my_project --template vertical-slice
|
|
|
245
260
|
- `vertical-slice` → `src/features`, `src/shared/{domain,application,infrastructure}`.
|
|
246
261
|
|
|
247
262
|
Both generate a root `config.py` and leave Alembic configured. See
|
|
248
|
-
[CLI](
|
|
263
|
+
[CLI](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/cli.md) · [CLI](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/cli.md).
|
|
249
264
|
|
|
250
265
|
---
|
|
251
266
|
|
|
@@ -265,8 +280,8 @@ Both generate a root `config.py` and leave Alembic configured. See
|
|
|
265
280
|
|
|
266
281
|
**Everything before 9.0 is deprecated. Migrate to 9.x.** The detail of each series, the silent
|
|
267
282
|
2.x bugs and the step-by-step guides are in
|
|
268
|
-
[versions and migration](
|
|
269
|
-
[versiones y migración](
|
|
283
|
+
[versions and migration](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/versions-and-migration.md) ·
|
|
284
|
+
[versiones y migración](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/versiones-y-migracion.md).
|
|
270
285
|
|
|
271
286
|
### Removed API and its replacement
|
|
272
287
|
|
|
@@ -303,7 +318,7 @@ python -m pytest -W "default::DeprecationWarning"
|
|
|
303
318
|
|
|
304
319
|
## Contributing
|
|
305
320
|
|
|
306
|
-
1. **Code of conduct** — read the [Code of Conduct](CODE_OF_CONDUCT.md) before interacting.
|
|
321
|
+
1. **Code of conduct** — read the [Code of Conduct](https://github.com/Indroic/HexCore/blob/master/CODE_OF_CONDUCT.md) before interacting.
|
|
307
322
|
2. **Branches** — fork and create a branch (`feat/name`, `fix/name`, `docs/name`).
|
|
308
323
|
3. **Tests** — every fix lands with at least one test that fails before and passes after:
|
|
309
324
|
|
|
@@ -315,26 +330,33 @@ python -m pytest -W "default::DeprecationWarning"
|
|
|
315
330
|
CI fails if any test is **skipped**: a skip means an extra is missing, and we would be
|
|
316
331
|
reporting green without having run half the suite.
|
|
317
332
|
4. **Typecheck** — `uv run pyright hexcore`. The verdict comes from the ratchet, not the exit
|
|
318
|
-
code: see [typing](
|
|
333
|
+
code: see [typing](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/en/typing.md) · [tipado](https://github.com/Indroic/HexCore/blob/master/docs/hexcore/es/tipado.md).
|
|
319
334
|
5. **Style** — [PEP8](https://pep8.org/). Comment the *why*, not the *what*.
|
|
320
335
|
6. **Commits** — [Commitizen](https://commitizen-tools.github.io/commitizen/): `feat:`, `fix:`,
|
|
321
336
|
`docs:`, `refactor:`, and `!` for breaking changes. The version bump and the CHANGELOG are
|
|
322
337
|
automatic on merge to `master`.
|
|
323
338
|
7. **PRs** — describe the problem, the reproduction, the solution and **why that option**.
|
|
324
339
|
|
|
325
|
-
Full detail in [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
340
|
+
Full detail in [CONTRIBUTING.md](https://github.com/Indroic/HexCore/blob/master/CONTRIBUTING.md).
|
|
341
|
+
|
|
342
|
+
### The agent skill
|
|
326
343
|
|
|
327
|
-
|
|
344
|
+
[`skills/hexcore/`](https://github.com/Indroic/HexCore/tree/master/skills/hexcore) is a
|
|
345
|
+
[Claude Code](https://claude.com/claude-code) skill covering both packages — this one and the
|
|
346
|
+
TypeScript client. It reads the installed package instead of remembering it, and audits a
|
|
347
|
+
project for the framework's silent failure modes rather than just describing them. Its prose is
|
|
348
|
+
under the same CI gate as the documentation, so a rename here turns it red.
|
|
328
349
|
|
|
329
|
-
|
|
330
|
-
|
|
350
|
+
To use it in a project that consumes HexCore, copy that directory into the project's
|
|
351
|
+
`.claude/skills/`. Details in
|
|
352
|
+
[skills/README.md](https://github.com/Indroic/HexCore/blob/master/skills/README.md).
|
|
331
353
|
|
|
332
354
|
---
|
|
333
355
|
|
|
334
356
|
## References
|
|
335
357
|
|
|
336
|
-
- [docs/](
|
|
337
|
-
- [docs/ARCHITECTURE_TYPING.md](
|
|
338
|
-
- [CHANGELOG.md](
|
|
339
|
-
- [CONTRIBUTING.md](
|
|
340
|
-
- [SECURITY.md](
|
|
358
|
+
- [docs/](https://github.com/Indroic/HexCore/tree/master/docs/hexcore/) — the complete documentation, in English and Spanish.
|
|
359
|
+
- [docs/ARCHITECTURE_TYPING.md](https://github.com/Indroic/HexCore/blob/master/docs/ARCHITECTURE_TYPING.md) — type system and stubs.
|
|
360
|
+
- [CHANGELOG.md](https://github.com/Indroic/HexCore/blob/master/CHANGELOG.md) — change history.
|
|
361
|
+
- [CONTRIBUTING.md](https://github.com/Indroic/HexCore/blob/master/CONTRIBUTING.md) — collaboration guidelines.
|
|
362
|
+
- [SECURITY.md](https://github.com/Indroic/HexCore/blob/master/SECURITY.md) — security policy.
|
|
@@ -10,7 +10,7 @@ build-backend = "setuptools.build_meta"
|
|
|
10
10
|
|
|
11
11
|
[project]
|
|
12
12
|
name = "hexcore"
|
|
13
|
-
version = "9.7.
|
|
13
|
+
version = "9.7.2"
|
|
14
14
|
authors = [
|
|
15
15
|
{ name="David Latosefki (Indroic)", email="indroic@outlook.com" },
|
|
16
16
|
]
|
|
@@ -26,6 +26,22 @@ dependencies = [
|
|
|
26
26
|
license = "MIT"
|
|
27
27
|
license-files = ["LICEN[CS]E*"]
|
|
28
28
|
|
|
29
|
+
keywords = [
|
|
30
|
+
"hexagonal-architecture", "ddd", "cqrs", "event-sourcing", "fastapi",
|
|
31
|
+
"sqlalchemy", "background-tasks", "cron", "authentication", "identity",
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
# La documentación **no** se empaqueta en la wheel (`MANIFEST.in` sólo incluye `*.pyi` y
|
|
35
|
+
# `py.typed`), así que estas URLs son la única forma de llegar a ella desde PyPI. Apuntan a
|
|
36
|
+
# `docs/` de la raíz del monorepo, que es donde vive desde la consolidación — un enlace
|
|
37
|
+
# relativo del README no resolvería en la página de PyPI aunque el archivo existiera.
|
|
38
|
+
[project.urls]
|
|
39
|
+
Homepage = "https://github.com/Indroic/HexCore"
|
|
40
|
+
Documentation = "https://github.com/Indroic/HexCore/tree/master/docs/hexcore"
|
|
41
|
+
Repository = "https://github.com/Indroic/HexCore"
|
|
42
|
+
Changelog = "https://github.com/Indroic/HexCore/blob/master/CHANGELOG.md"
|
|
43
|
+
Issues = "https://github.com/Indroic/HexCore/issues"
|
|
44
|
+
|
|
29
45
|
[project.optional-dependencies]
|
|
30
46
|
api = ["fastapi>=0.116.1"]
|
|
31
47
|
redis = ["redis>=6.4.0"]
|