aury-boot 0.0.21__tar.gz → 0.0.23__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.
- {aury_boot-0.0.21 → aury_boot-0.0.23}/PKG-INFO +1 -1
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/_version.py +2 -2
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/app/base.py +4 -5
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/errors/handlers.py +17 -8
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/13-channel.md.tpl +42 -3
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/channel/backends/memory.py +43 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/channel/backends/redis.py +42 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/channel/base.py +15 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/channel/manager.py +23 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/events/backends/redis.py +9 -2
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/events/manager.py +9 -5
- {aury_boot-0.0.21 → aury_boot-0.0.23}/.gitignore +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/README.md +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/adapter/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/adapter/base.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/adapter/config.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/adapter/decorators.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/adapter/exceptions.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/adapter/http.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/app/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/app/components.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/app/middlewares.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/app/startup.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/config/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/config/multi_instance.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/config/settings.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/constants/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/constants/components.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/constants/scheduler.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/constants/service.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/errors/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/errors/chain.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/errors/codes.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/errors/exceptions.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/errors/response.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/interfaces/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/interfaces/egress.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/interfaces/ingress.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/middleware/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/middleware/logging.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/migrations/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/migrations/manager.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/migrations/setup.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/rpc/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/rpc/base.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/rpc/client.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/rpc/discovery.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/scheduler/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/scheduler/runner.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/application/server/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/add.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/app.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/config.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/docker.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/docs.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/generate.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/init.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/migrate/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/migrate/app.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/migrate/commands.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/pkg.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/scheduler.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/server/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/server/app.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/generate/api.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/generate/model.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/generate/repository.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/generate/schema.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/generate/service.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/AGENTS.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/README.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/admin_console_init.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/00-overview.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/01-model.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/02-repository.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/03-service.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/04-schema.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/05-api.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/06-exception.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/07-cache.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/08-scheduler.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/09-tasks.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/10-storage.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/11-logging.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/12-admin.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/15-events.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/16-adapter.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/config.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/conftest.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/_header.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/admin.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/cache.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/database.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/log.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/messaging.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/rpc.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/scheduler.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/service.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/storage.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/third_party.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/gitignore.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/main.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/modules/api.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/modules/exceptions.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/modules/schedules.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/modules/tasks.py.tpl +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/worker.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/common/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/common/exceptions/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/common/i18n/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/common/i18n/translator.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/common/logging/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/common/logging/context.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/common/logging/decorators.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/common/logging/format.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/common/logging/setup.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/contrib/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/contrib/admin_console/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/contrib/admin_console/auth.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/contrib/admin_console/discovery.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/contrib/admin_console/install.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/contrib/admin_console/utils.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/exceptions/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/models/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/models/base.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/models/mixins.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/models/models.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/pagination/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/repository/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/repository/impl.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/repository/interceptors.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/repository/interface.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/repository/query_builder.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/service/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/service/base.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/domain/transaction/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/cache/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/cache/backends.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/cache/base.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/cache/exceptions.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/cache/factory.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/cache/manager.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/channel/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/channel/backends/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/clients/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/clients/rabbitmq/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/clients/rabbitmq/config.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/clients/rabbitmq/manager.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/clients/redis/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/clients/redis/config.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/clients/redis/manager.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/database/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/database/config.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/database/exceptions.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/database/manager.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/database/query_tools/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/database/strategies/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/di/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/di/container.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/events/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/events/backends/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/events/backends/memory.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/events/backends/rabbitmq.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/events/base.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/events/middleware.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/monitoring/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/mq/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/mq/backends/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/mq/backends/rabbitmq.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/mq/backends/redis.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/mq/base.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/mq/manager.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/scheduler/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/scheduler/exceptions.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/scheduler/manager.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/storage/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/storage/base.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/storage/exceptions.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/storage/factory.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/tasks/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/tasks/config.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/tasks/constants.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/tasks/exceptions.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/tasks/manager.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/testing/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/testing/base.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/testing/client.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/testing/factory.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/toolkit/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/toolkit/http/__init__.py +0 -0
- {aury_boot-0.0.21 → aury_boot-0.0.23}/pyproject.toml +0 -0
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.0.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 0,
|
|
31
|
+
__version__ = version = '0.0.23'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 0, 23)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -11,10 +11,10 @@ from contextlib import asynccontextmanager
|
|
|
11
11
|
import sys
|
|
12
12
|
from typing import Any, ClassVar
|
|
13
13
|
|
|
14
|
-
from fastapi import FastAPI,
|
|
14
|
+
from fastapi import FastAPI, Request, status
|
|
15
15
|
from fastapi.exceptions import RequestValidationError
|
|
16
16
|
from fastapi.responses import JSONResponse
|
|
17
|
-
from starlette.exceptions import HTTPException
|
|
17
|
+
from starlette.exceptions import HTTPException
|
|
18
18
|
from starlette.middleware import Middleware as StarletteMiddleware
|
|
19
19
|
|
|
20
20
|
from aury.boot.application.config import BaseConfig
|
|
@@ -282,9 +282,8 @@ class FoundationApp(FastAPI):
|
|
|
282
282
|
)
|
|
283
283
|
|
|
284
284
|
# 异常处理:显式注册以覆盖 FastAPI/Starlette 默认处理器,确保统一响应格式
|
|
285
|
-
self.add_exception_handler(RequestValidationError, global_exception_handler) # 422
|
|
286
|
-
self.add_exception_handler(HTTPException, global_exception_handler) # 4xx/5xx
|
|
287
|
-
self.add_exception_handler(StarletteHTTPException, global_exception_handler) # Starlette 异常
|
|
285
|
+
self.add_exception_handler(RequestValidationError, global_exception_handler) # 422 参数校验
|
|
286
|
+
self.add_exception_handler(HTTPException, global_exception_handler) # 4xx/5xx HTTP 异常
|
|
288
287
|
self.add_exception_handler(Exception, global_exception_handler) # 其他未处理异常
|
|
289
288
|
|
|
290
289
|
# 设置路由
|
|
@@ -8,11 +8,12 @@ from __future__ import annotations
|
|
|
8
8
|
from abc import ABC, abstractmethod
|
|
9
9
|
from typing import TYPE_CHECKING
|
|
10
10
|
|
|
11
|
-
from fastapi import
|
|
11
|
+
from fastapi import Request, status
|
|
12
12
|
from fastapi.exceptions import RequestValidationError
|
|
13
13
|
from fastapi.responses import JSONResponse
|
|
14
14
|
from pydantic import ValidationError
|
|
15
15
|
from sqlalchemy.exc import IntegrityError, SQLAlchemyError
|
|
16
|
+
from starlette.exceptions import HTTPException
|
|
16
17
|
|
|
17
18
|
from aury.boot.common.exceptions import FoundationError
|
|
18
19
|
from aury.boot.common.logging import logger
|
|
@@ -149,23 +150,31 @@ class BaseErrorHandler(ErrorHandler):
|
|
|
149
150
|
|
|
150
151
|
|
|
151
152
|
class HTTPExceptionHandler(ErrorHandler):
|
|
152
|
-
"""
|
|
153
|
+
"""HTTP 异常处理器。
|
|
154
|
+
|
|
155
|
+
处理 FastAPI 和 Starlette 的 HTTPException(包括 404、401、403 等)。
|
|
156
|
+
"""
|
|
153
157
|
|
|
154
158
|
def can_handle(self, exception: Exception) -> bool:
|
|
155
|
-
"""判断是否为HTTP异常。"""
|
|
159
|
+
"""判断是否为 HTTP 异常。"""
|
|
160
|
+
# Starlette HTTPException 是 FastAPI HTTPException 的基类
|
|
156
161
|
return isinstance(exception, HTTPException)
|
|
157
162
|
|
|
158
163
|
async def handle(self, exception: HTTPException, request: Request) -> JSONResponse:
|
|
159
|
-
"""处理HTTP异常。"""
|
|
160
|
-
|
|
164
|
+
"""处理 HTTP 异常。"""
|
|
165
|
+
# 获取错误信息:Starlette 用 detail,FastAPI 也用 detail
|
|
166
|
+
detail = getattr(exception, "detail", str(exception))
|
|
167
|
+
status_code = exception.status_code
|
|
168
|
+
|
|
169
|
+
logger.warning(f"HTTP 异常 [{request.method} {request.url.path}]: {status_code} - {detail}")
|
|
161
170
|
|
|
162
171
|
response = ResponseBuilder.fail(
|
|
163
|
-
message=
|
|
164
|
-
code=
|
|
172
|
+
message=detail if isinstance(detail, str) else str(detail),
|
|
173
|
+
code=status_code,
|
|
165
174
|
)
|
|
166
175
|
|
|
167
176
|
return JSONResponse(
|
|
168
|
-
status_code=
|
|
177
|
+
status_code=status_code,
|
|
169
178
|
content=response.model_dump(mode="json"),
|
|
170
179
|
)
|
|
171
180
|
|
|
@@ -71,12 +71,51 @@ async def sse_stream(user_id: str):
|
|
|
71
71
|
|
|
72
72
|
@router.post("/notify/{{user_id}}")
|
|
73
73
|
async def send_notification(user_id: str, message: str):
|
|
74
|
-
\"\"\"
|
|
74
|
+
\"\"\"发送通知。\"\"\"
|
|
75
75
|
await sse_channel.publish(f"user:{{user_id}}", {{"message": message}})
|
|
76
76
|
return {{"status": "sent"}}
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
## 13.4
|
|
79
|
+
## 13.4 模式订阅(psubscribe)
|
|
80
|
+
|
|
81
|
+
使用通配符订阅多个通道,适合一个 SSE 连接接收多种事件的场景。
|
|
82
|
+
|
|
83
|
+
```python
|
|
84
|
+
@router.get("/spaces/{{space_id}}/events")
|
|
85
|
+
async def space_events(space_id: str):
|
|
86
|
+
\"\"\"订阅空间下所有事件。\"\"\"
|
|
87
|
+
async def event_generator():
|
|
88
|
+
# 使用 psubscribe 订阅 space:{id}:* 下所有事件
|
|
89
|
+
async for msg in sse_channel.psubscribe(f"space:{{space_id}}:*"):
|
|
90
|
+
yield msg.to_sse() # 自动转换为 SSE 格式
|
|
91
|
+
|
|
92
|
+
return StreamingResponse(
|
|
93
|
+
event_generator(),
|
|
94
|
+
media_type="text/event-stream"
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
# 后端发布不同类型的事件
|
|
99
|
+
await sse_channel.publish(f"space:{{space_id}}:file_analyzed", {{
|
|
100
|
+
"file_id": "abc",
|
|
101
|
+
"status": "done"
|
|
102
|
+
}}, event="file_analyzed")
|
|
103
|
+
|
|
104
|
+
await sse_channel.publish(f"space:{{space_id}}:comment_added", {{
|
|
105
|
+
"comment_id": "xyz",
|
|
106
|
+
"content": "..."
|
|
107
|
+
}}, event="comment_added")
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**通配符说明**:
|
|
111
|
+
- `*` 匹配任意字符
|
|
112
|
+
- `?` 匹配单个字符
|
|
113
|
+
- `[seq]` 匹配 seq 中的任意字符
|
|
114
|
+
- 示例:`space:123:*` 匹配 `space:123:file_analyzed`、`space:123:comment_added` 等
|
|
115
|
+
|
|
116
|
+
Redis 后端使用 Redis 原生 `PSUBSCRIBE`,内存后端使用 `fnmatch` 实现。
|
|
117
|
+
|
|
118
|
+
## 13.5 应用场景示例
|
|
80
119
|
|
|
81
120
|
```python
|
|
82
121
|
# 不同业务场景使用不同的命名实例
|
|
@@ -90,7 +129,7 @@ await chat_channel.initialize(backend="redis", redis_client=redis_client) # 需
|
|
|
90
129
|
await notify_channel.initialize(backend="redis", redis_client=redis_client)
|
|
91
130
|
```
|
|
92
131
|
|
|
93
|
-
## 13.
|
|
132
|
+
## 13.6 环境变量
|
|
94
133
|
|
|
95
134
|
```bash
|
|
96
135
|
# 默认实例
|
|
@@ -8,6 +8,7 @@ from __future__ import annotations
|
|
|
8
8
|
import asyncio
|
|
9
9
|
from collections.abc import AsyncIterator
|
|
10
10
|
import contextlib
|
|
11
|
+
import fnmatch
|
|
11
12
|
|
|
12
13
|
from aury.boot.common.logging import logger
|
|
13
14
|
|
|
@@ -31,12 +32,15 @@ class MemoryChannel(IChannel):
|
|
|
31
32
|
self._max_subscribers = max_subscribers
|
|
32
33
|
# channel -> list of queues
|
|
33
34
|
self._subscribers: dict[str, list[asyncio.Queue[ChannelMessage]]] = {}
|
|
35
|
+
# pattern -> list of queues (用于 psubscribe)
|
|
36
|
+
self._pattern_subscribers: dict[str, list[asyncio.Queue[ChannelMessage]]] = {}
|
|
34
37
|
self._lock = asyncio.Lock()
|
|
35
38
|
|
|
36
39
|
async def publish(self, channel: str, message: ChannelMessage) -> None:
|
|
37
40
|
"""发布消息到通道。"""
|
|
38
41
|
message.channel = channel
|
|
39
42
|
async with self._lock:
|
|
43
|
+
# 精确匹配订阅者
|
|
40
44
|
subscribers = self._subscribers.get(channel, [])
|
|
41
45
|
for queue in subscribers:
|
|
42
46
|
try:
|
|
@@ -44,6 +48,15 @@ class MemoryChannel(IChannel):
|
|
|
44
48
|
except asyncio.QueueFull:
|
|
45
49
|
logger.warning(f"通道 [{channel}] 订阅者队列已满,消息被丢弃")
|
|
46
50
|
|
|
51
|
+
# 模式匹配订阅者
|
|
52
|
+
for pattern, queues in self._pattern_subscribers.items():
|
|
53
|
+
if fnmatch.fnmatch(channel, pattern):
|
|
54
|
+
for queue in queues:
|
|
55
|
+
try:
|
|
56
|
+
queue.put_nowait(message)
|
|
57
|
+
except asyncio.QueueFull:
|
|
58
|
+
logger.warning(f"模式 [{pattern}] 订阅者队列已满,消息被丢弃")
|
|
59
|
+
|
|
47
60
|
async def subscribe(self, channel: str) -> AsyncIterator[ChannelMessage]:
|
|
48
61
|
"""订阅通道。"""
|
|
49
62
|
queue: asyncio.Queue[ChannelMessage] = asyncio.Queue(maxsize=100)
|
|
@@ -67,6 +80,35 @@ class MemoryChannel(IChannel):
|
|
|
67
80
|
if not self._subscribers[channel]:
|
|
68
81
|
del self._subscribers[channel]
|
|
69
82
|
|
|
83
|
+
async def psubscribe(self, pattern: str) -> AsyncIterator[ChannelMessage]:
|
|
84
|
+
"""模式订阅通道。
|
|
85
|
+
|
|
86
|
+
使用 fnmatch 风格的通配符:
|
|
87
|
+
- `*` 匹配任意字符
|
|
88
|
+
- `?` 匹配单个字符
|
|
89
|
+
- `[seq]` 匹配 seq 中的任意字符
|
|
90
|
+
"""
|
|
91
|
+
queue: asyncio.Queue[ChannelMessage] = asyncio.Queue(maxsize=100)
|
|
92
|
+
|
|
93
|
+
async with self._lock:
|
|
94
|
+
if pattern not in self._pattern_subscribers:
|
|
95
|
+
self._pattern_subscribers[pattern] = []
|
|
96
|
+
if len(self._pattern_subscribers[pattern]) >= self._max_subscribers:
|
|
97
|
+
raise RuntimeError(f"模式 [{pattern}] 订阅者数量已达上限")
|
|
98
|
+
self._pattern_subscribers[pattern].append(queue)
|
|
99
|
+
|
|
100
|
+
try:
|
|
101
|
+
while True:
|
|
102
|
+
message = await queue.get()
|
|
103
|
+
yield message
|
|
104
|
+
finally:
|
|
105
|
+
async with self._lock:
|
|
106
|
+
if pattern in self._pattern_subscribers:
|
|
107
|
+
with contextlib.suppress(ValueError):
|
|
108
|
+
self._pattern_subscribers[pattern].remove(queue)
|
|
109
|
+
if not self._pattern_subscribers[pattern]:
|
|
110
|
+
del self._pattern_subscribers[pattern]
|
|
111
|
+
|
|
70
112
|
async def unsubscribe(self, channel: str) -> None:
|
|
71
113
|
"""取消订阅通道(清除所有订阅者)。"""
|
|
72
114
|
async with self._lock:
|
|
@@ -77,6 +119,7 @@ class MemoryChannel(IChannel):
|
|
|
77
119
|
"""关闭通道,清理所有订阅。"""
|
|
78
120
|
async with self._lock:
|
|
79
121
|
self._subscribers.clear()
|
|
122
|
+
self._pattern_subscribers.clear()
|
|
80
123
|
logger.debug("内存通道已关闭")
|
|
81
124
|
|
|
82
125
|
|
|
@@ -72,6 +72,48 @@ class RedisChannel(IChannel):
|
|
|
72
72
|
await pubsub.unsubscribe(channel)
|
|
73
73
|
await pubsub.close()
|
|
74
74
|
|
|
75
|
+
async def psubscribe(self, pattern: str) -> AsyncIterator[ChannelMessage]:
|
|
76
|
+
"""模式订阅(通配符)。
|
|
77
|
+
|
|
78
|
+
Args:
|
|
79
|
+
pattern: 通道模式,支持 * 和 ? 通配符
|
|
80
|
+
- * 匹配任意字符
|
|
81
|
+
- ? 匹配单个字符
|
|
82
|
+
- 示例: "space:123:*" 订阅 space:123 下所有事件
|
|
83
|
+
|
|
84
|
+
Yields:
|
|
85
|
+
ChannelMessage: 接收到的消息
|
|
86
|
+
"""
|
|
87
|
+
pubsub = self._client.connection.pubsub()
|
|
88
|
+
await pubsub.psubscribe(pattern)
|
|
89
|
+
|
|
90
|
+
try:
|
|
91
|
+
async for raw_message in pubsub.listen():
|
|
92
|
+
# psubscribe 的消息类型是 "pmessage"
|
|
93
|
+
if raw_message["type"] == "pmessage":
|
|
94
|
+
try:
|
|
95
|
+
data = json.loads(raw_message["data"])
|
|
96
|
+
# pmessage 包含实际匹配的通道名
|
|
97
|
+
actual_channel = raw_message.get("channel")
|
|
98
|
+
if isinstance(actual_channel, bytes):
|
|
99
|
+
actual_channel = actual_channel.decode("utf-8")
|
|
100
|
+
|
|
101
|
+
message = ChannelMessage(
|
|
102
|
+
data=data.get("data"),
|
|
103
|
+
event=data.get("event"),
|
|
104
|
+
id=data.get("id"),
|
|
105
|
+
channel=actual_channel or data.get("channel"),
|
|
106
|
+
timestamp=datetime.fromisoformat(data["timestamp"])
|
|
107
|
+
if data.get("timestamp")
|
|
108
|
+
else datetime.now(),
|
|
109
|
+
)
|
|
110
|
+
yield message
|
|
111
|
+
except (json.JSONDecodeError, KeyError) as e:
|
|
112
|
+
logger.warning(f"解析通道消息失败: {e}")
|
|
113
|
+
finally:
|
|
114
|
+
await pubsub.punsubscribe(pattern)
|
|
115
|
+
await pubsub.close()
|
|
116
|
+
|
|
75
117
|
async def unsubscribe(self, channel: str) -> None:
|
|
76
118
|
"""取消订阅通道。"""
|
|
77
119
|
if self._pubsub:
|
|
@@ -70,6 +70,21 @@ class IChannel(ABC):
|
|
|
70
70
|
"""
|
|
71
71
|
...
|
|
72
72
|
|
|
73
|
+
async def psubscribe(self, pattern: str) -> AsyncIterator[ChannelMessage]:
|
|
74
|
+
"""模式订阅(通配符)。
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
pattern: 通道模式,如 "space:123:*" 订阅 space:123 下所有事件
|
|
78
|
+
|
|
79
|
+
Yields:
|
|
80
|
+
ChannelMessage: 接收到的消息
|
|
81
|
+
|
|
82
|
+
注意:内存后端默认回退到普通 subscribe,Redis 后端支持真正的模式匹配。
|
|
83
|
+
"""
|
|
84
|
+
# 默认实现:回退到普通订阅(子类可覆盖)
|
|
85
|
+
async for msg in self.subscribe(pattern):
|
|
86
|
+
yield msg
|
|
87
|
+
|
|
73
88
|
@abstractmethod
|
|
74
89
|
async def unsubscribe(self, channel: str) -> None:
|
|
75
90
|
"""取消订阅通道。
|
|
@@ -178,6 +178,29 @@ class ChannelManager:
|
|
|
178
178
|
async for message in self.backend.subscribe(channel):
|
|
179
179
|
yield message
|
|
180
180
|
|
|
181
|
+
async def psubscribe(self, pattern: str) -> AsyncIterator[ChannelMessage]:
|
|
182
|
+
"""模式订阅(通配符)。
|
|
183
|
+
|
|
184
|
+
Args:
|
|
185
|
+
pattern: 通道模式,支持 * 和 ? 通配符
|
|
186
|
+
- "space:123:*" 订阅 space:123 下所有事件
|
|
187
|
+
- "user:*:notification" 订阅所有用户的通知
|
|
188
|
+
|
|
189
|
+
Yields:
|
|
190
|
+
ChannelMessage: 接收到的消息
|
|
191
|
+
|
|
192
|
+
示例:
|
|
193
|
+
# SSE 路由中订阅某个空间的所有事件
|
|
194
|
+
async for msg in channel.psubscribe(f"space:{{space_id}}:*"):
|
|
195
|
+
yield msg.to_sse()
|
|
196
|
+
|
|
197
|
+
# 发布不同类型的事件
|
|
198
|
+
await channel.publish(f"space:{{space_id}}:file_analyzed", {{...}})
|
|
199
|
+
await channel.publish(f"space:{{space_id}}:comment_added", {{...}})
|
|
200
|
+
"""
|
|
201
|
+
async for message in self.backend.psubscribe(pattern):
|
|
202
|
+
yield message
|
|
203
|
+
|
|
181
204
|
async def unsubscribe(self, channel: str) -> None:
|
|
182
205
|
"""取消订阅通道。
|
|
183
206
|
|
|
@@ -17,10 +17,17 @@ if TYPE_CHECKING:
|
|
|
17
17
|
from aury.boot.infrastructure.clients.redis import RedisClient
|
|
18
18
|
|
|
19
19
|
|
|
20
|
+
# 框架默认前缀
|
|
21
|
+
DEFAULT_CHANNEL_PREFIX = "aury:event:"
|
|
22
|
+
|
|
23
|
+
|
|
20
24
|
class RedisEventBus(IEventBus):
|
|
21
25
|
"""Redis 事件总线实现。
|
|
22
26
|
|
|
23
27
|
使用 Redis Pub/Sub 实现跨进程的事件发布/订阅。
|
|
28
|
+
|
|
29
|
+
频道命名格式:{channel_prefix}{event_name}
|
|
30
|
+
默认:aury:event:user.created
|
|
24
31
|
"""
|
|
25
32
|
|
|
26
33
|
def __init__(
|
|
@@ -28,14 +35,14 @@ class RedisEventBus(IEventBus):
|
|
|
28
35
|
url: str | None = None,
|
|
29
36
|
*,
|
|
30
37
|
redis_client: RedisClient | None = None,
|
|
31
|
-
channel_prefix: str =
|
|
38
|
+
channel_prefix: str = DEFAULT_CHANNEL_PREFIX,
|
|
32
39
|
) -> None:
|
|
33
40
|
"""初始化 Redis 事件总线。
|
|
34
41
|
|
|
35
42
|
Args:
|
|
36
43
|
url: Redis 连接 URL(当 redis_client 为 None 时必须提供)
|
|
37
44
|
redis_client: RedisClient 实例(可选,优先使用)
|
|
38
|
-
channel_prefix:
|
|
45
|
+
channel_prefix: 频道名称前缀,默认 "aury:event:"
|
|
39
46
|
|
|
40
47
|
Raises:
|
|
41
48
|
ValueError: 当 url 和 redis_client 都为 None 时
|
|
@@ -97,8 +97,8 @@ class EventBusManager:
|
|
|
97
97
|
config: EventInstanceConfig | None = None,
|
|
98
98
|
redis_client: RedisClient | None = None,
|
|
99
99
|
url: str | None = None,
|
|
100
|
-
channel_prefix: str =
|
|
101
|
-
exchange_name: str = "events",
|
|
100
|
+
channel_prefix: str | None = None,
|
|
101
|
+
exchange_name: str = "aury.events",
|
|
102
102
|
) -> EventBusManager:
|
|
103
103
|
"""初始化事件总线(链式调用)。
|
|
104
104
|
|
|
@@ -107,8 +107,8 @@ class EventBusManager:
|
|
|
107
107
|
config: Event 实例配置(推荐,自动根据 backend 初始化)
|
|
108
108
|
redis_client: Redis 客户端(当 backend=redis 且 config=None 时需要)
|
|
109
109
|
url: 连接 URL(当 config=None 时需要)
|
|
110
|
-
channel_prefix: Redis
|
|
111
|
-
exchange_name: RabbitMQ
|
|
110
|
+
channel_prefix: Redis 频道前缀,默认 "aury:event:"
|
|
111
|
+
exchange_name: RabbitMQ 交换机名称,默认 "aury.events"
|
|
112
112
|
|
|
113
113
|
Returns:
|
|
114
114
|
self: 支持链式调用
|
|
@@ -136,7 +136,11 @@ class EventBusManager:
|
|
|
136
136
|
if backend == EventBackend.MEMORY:
|
|
137
137
|
self._backend = MemoryEventBus()
|
|
138
138
|
elif backend == EventBackend.REDIS:
|
|
139
|
-
|
|
139
|
+
# channel_prefix 为 None 时使用 RedisEventBus 的默认值
|
|
140
|
+
kwargs = {"url": url, "redis_client": redis_client}
|
|
141
|
+
if channel_prefix is not None:
|
|
142
|
+
kwargs["channel_prefix"] = channel_prefix
|
|
143
|
+
self._backend = RedisEventBus(**kwargs)
|
|
140
144
|
elif backend == EventBackend.RABBITMQ:
|
|
141
145
|
self._backend = RabbitMQEventBus(url=url, exchange_name=exchange_name)
|
|
142
146
|
else:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/generate/repository.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/admin_console_init.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/01-model.md.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/05-api.md.tpl
RENAMED
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/07-cache.md.tpl
RENAMED
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/09-tasks.md.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/12-admin.md.tpl
RENAMED
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/14-mq.md.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/aury_docs/99-cli.md.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/_header.tpl
RENAMED
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/admin.tpl
RENAMED
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/cache.tpl
RENAMED
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/log.tpl
RENAMED
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/rpc.tpl
RENAMED
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/service.tpl
RENAMED
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/env_templates/storage.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/modules/api.py.tpl
RENAMED
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/modules/exceptions.py.tpl
RENAMED
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/modules/schedules.py.tpl
RENAMED
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/commands/templates/project/modules/tasks.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/database/query_tools/__init__.py
RENAMED
|
File without changes
|
{aury_boot-0.0.21 → aury_boot-0.0.23}/aury/boot/infrastructure/database/strategies/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|