orionis 0.319.0__tar.gz → 0.321.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {orionis-0.319.0/orionis.egg-info → orionis-0.321.0}/PKG-INFO +1 -1
- orionis-0.321.0/orionis/container/container.py +636 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/container/contracts/container.py +61 -15
- orionis-0.321.0/orionis/container/resolver.py +404 -0
- orionis-0.321.0/orionis/container/validators/implements.py +67 -0
- orionis-0.321.0/orionis/container/validators/is_abstract_class.py +34 -0
- orionis-0.321.0/orionis/container/validators/is_callable.py +30 -0
- orionis-0.321.0/orionis/container/validators/is_concrete_class.py +34 -0
- orionis-0.321.0/orionis/container/validators/is_instance.py +32 -0
- orionis-0.321.0/orionis/container/validators/is_not_subclass.py +32 -0
- orionis-0.321.0/orionis/container/validators/is_subclass.py +32 -0
- orionis-0.321.0/orionis/container/validators/is_valid_alias.py +37 -0
- orionis-0.321.0/orionis/container/validators/lifetime.py +53 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/metadata/framework.py +1 -1
- {orionis-0.319.0 → orionis-0.321.0/orionis.egg-info}/PKG-INFO +1 -1
- {orionis-0.319.0 → orionis-0.321.0}/orionis.egg-info/SOURCES.txt +11 -0
- orionis-0.321.0/tests/testing/__init__.py +0 -0
- orionis-0.319.0/orionis/container/container.py +0 -1237
- {orionis-0.319.0 → orionis-0.321.0}/LICENCE +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/MANIFEST.in +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/README.md +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_application.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/container.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/container_integrity.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/exception.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/lifetimes.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/resolve.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/application.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/config/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/config/config.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/base/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/base/command.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/command_filter.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/kernel.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/output/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/output/console.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/output/executor.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/output/progress_bar.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/parser.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/task_manager.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/container/container.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/container/container_integrity.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/commands/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/commands/commands_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/commands/scheduler_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/config/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/config/config_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/environment/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/environment/environment_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/files/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/files/path_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/log/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/log/log_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/tests/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/tests/tests_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/bootstraper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/config/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/config/config_bootstrapper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/console/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/console/command_bootstrapper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/environment/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/environment/environment_bootstrapper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/providers/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/providers/service_providers_bootstrapper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/providers/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/providers/service_provider.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/commands/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/commands/reactor_commands_service.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/commands/schedule_service.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/config/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/config/config_service.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/environment/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/environment/environment_service.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/files/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/files/path_resolver_service.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/log/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/log/log_service.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/support/exception_parse.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/support/reflection.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/app_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/commands/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/commands/commands_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/commands/scheduler_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/config/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/config/config_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/environment/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/environment/environment_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/files/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/files/path_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/log/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/log/log_facade.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/console/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/console/command_bootstrapper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/environment/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/environment/environment_bootstrapper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/exceptions/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/exceptions/exception_bootstrapper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/exceptions/exception_providers.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/foundation/config/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/foundation/config/config_bootstrapper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/providers/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/providers/service_providers_bootstrapper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/commands/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/commands/reactor_commands_service_provider.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/commands/scheduler_provider.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/config/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/config/config_service_provider.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/environment/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/environment/environment__service_provider.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/files/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/files/paths_provider.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/log/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/log/log_service_provider.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/service_provider.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/commands/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/commands/reactor_commands_service.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/commands/scheduler_service.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/config/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/config/config_service.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/log/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/log/log_service.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/application.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/base/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/base/command.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/command_filter.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/commands/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/commands/cache_clear.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/commands/help.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/commands/schedule_work.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/commands/version.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/dumper/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/dumper/dump_die.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/exceptions/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/exceptions/cli-orionis-value-error.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/exceptions/cli_exception.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/exceptions/cli_runtime_error.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/exceptions/cli_schedule_exception.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/kernel.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/output/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/output/console.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/output/executor.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/output/progress_bar.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/output/styles.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/console/parser.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/container/entities/binding.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/container/enums/lifetimes.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/container/exceptions/container_exception.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/container/exceptions/type_error_exception.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/container/exceptions/value_exception.py +0 -0
- {orionis-0.319.0/orionis/foundation → orionis-0.321.0/orionis/container/validators}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config → orionis-0.321.0/orionis/foundation}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/app → orionis-0.321.0/orionis/foundation/config}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/app/entities → orionis-0.321.0/orionis/foundation/config/app}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/app/enums → orionis-0.321.0/orionis/foundation/config/app/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/app/entities/app.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/auth → orionis-0.321.0/orionis/foundation/config/app/enums}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/app/enums/ciphers.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/app/enums/environments.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/auth/entities → orionis-0.321.0/orionis/foundation/config/auth}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/cache → orionis-0.321.0/orionis/foundation/config/auth/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/auth/entities/auth.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/cache/entities → orionis-0.321.0/orionis/foundation/config/cache}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/cache/enums → orionis-0.321.0/orionis/foundation/config/cache/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/cache/entities/cache.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/cache/entities/file.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/cache/entities/stores.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/cors → orionis-0.321.0/orionis/foundation/config/cache/enums}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/cache/enums/drivers.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/cors/entities → orionis-0.321.0/orionis/foundation/config/cors}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/database → orionis-0.321.0/orionis/foundation/config/cors/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/cors/entities/cors.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/database/entities → orionis-0.321.0/orionis/foundation/config/database}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/database/enums → orionis-0.321.0/orionis/foundation/config/database/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/connections.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/database.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/mysql.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/oracle.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/pgsql.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/sqlite.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/filesystems → orionis-0.321.0/orionis/foundation/config/database/enums}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/mysql_charsets.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/mysql_collations.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/mysql_engine.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/oracle_encoding.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/oracle_nencoding.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/pgsql_charsets.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/pgsql_collations.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/pgsql_mode.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/sqlite_foreign_key.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/sqlite_journal.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/sqlite_synchronous.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/filesystems/entitites → orionis-0.321.0/orionis/foundation/config/filesystems}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/logging → orionis-0.321.0/orionis/foundation/config/filesystems/entitites}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/filesystems/entitites/aws.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/filesystems/entitites/disks.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/filesystems/entitites/filesystems.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/filesystems/entitites/local.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/filesystems/entitites/public.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/logging/entities → orionis-0.321.0/orionis/foundation/config/logging}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/logging/enums → orionis-0.321.0/orionis/foundation/config/logging/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/channels.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/chunked.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/daily.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/hourly.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/logging.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/monthly.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/stack.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/weekly.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/mail → orionis-0.321.0/orionis/foundation/config/logging/enums}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/enums/levels.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/mail/entities → orionis-0.321.0/orionis/foundation/config/mail}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/queue → orionis-0.321.0/orionis/foundation/config/mail/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/mail/entities/file.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/mail/entities/mail.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/mail/entities/mailers.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/mail/entities/smtp.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/queue/entities → orionis-0.321.0/orionis/foundation/config/queue}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/roots → orionis-0.321.0/orionis/foundation/config/queue/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/queue/entities/brokers.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/queue/entities/database.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/queue/entities/queue.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/queue/enums/strategy.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/session → orionis-0.321.0/orionis/foundation/config/roots}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/roots/paths.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/session/entities → orionis-0.321.0/orionis/foundation/config/session}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/session/enums → orionis-0.321.0/orionis/foundation/config/session/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/session/entities/session.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/testing → orionis-0.321.0/orionis/foundation/config/session/enums}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/session/enums/same_site_policy.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/session/helpers/secret_key.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/startup.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/testing/entities → orionis-0.321.0/orionis/foundation/config/testing}/__init__.py +0 -0
- {orionis-0.319.0/orionis/foundation/config/testing/enums → orionis-0.321.0/orionis/foundation/config/testing/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/testing/entities/testing.py +0 -0
- {orionis-0.319.0/orionis/foundation/contracts → orionis-0.321.0/orionis/foundation/config/testing/enums}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/testing/enums/test_mode.py +0 -0
- {orionis-0.319.0/orionis/foundation/exceptions → orionis-0.321.0/orionis/foundation/contracts}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/contracts/config.py +0 -0
- {orionis-0.319.0/orionis/metadata → orionis-0.321.0/orionis/foundation/exceptions}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/exceptions/integrity.py +0 -0
- {orionis-0.319.0/orionis/patterns → orionis-0.321.0/orionis/metadata}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/metadata/package.py +0 -0
- {orionis-0.319.0/orionis/patterns/singleton → orionis-0.321.0/orionis/patterns}/__init__.py +0 -0
- {orionis-0.319.0/orionis/services → orionis-0.321.0/orionis/patterns/singleton}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/patterns/singleton/meta_class.py +0 -0
- {orionis-0.319.0/orionis/services/asynchrony → orionis-0.321.0/orionis/services}/__init__.py +0 -0
- {orionis-0.319.0/orionis/services/asynchrony/contracts → orionis-0.321.0/orionis/services/asynchrony}/__init__.py +0 -0
- {orionis-0.319.0/orionis/services/asynchrony/exceptions → orionis-0.321.0/orionis/services/asynchrony/contracts}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/asynchrony/contracts/coroutines.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/asynchrony/coroutines.py +0 -0
- {orionis-0.319.0/orionis/services/environment → orionis-0.321.0/orionis/services/asynchrony/exceptions}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/asynchrony/exceptions/coroutine_exception.py +0 -0
- {orionis-0.319.0/orionis/services/environment/contracts → orionis-0.321.0/orionis/services/environment}/__init__.py +0 -0
- {orionis-0.319.0/orionis/services/environment/exceptions → orionis-0.321.0/orionis/services/environment/contracts}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/contracts/env.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/contracts/types.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/dot_env.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/env.py +0 -0
- {orionis-0.319.0/orionis/services/introspection → orionis-0.321.0/orionis/services/environment/exceptions}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/exceptions/environment_value_error.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/exceptions/environment_value_exception.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/types.py +0 -0
- {orionis-0.319.0/orionis/services/introspection/abstract → orionis-0.321.0/orionis/services/introspection}/__init__.py +0 -0
- {orionis-0.319.0/orionis/services/introspection/callables → orionis-0.321.0/orionis/services/introspection/abstract}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/abstract/reflection_abstract.py +0 -0
- {orionis-0.319.0/orionis/services/introspection/concretes → orionis-0.321.0/orionis/services/introspection/callables}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/callables/reflection_callable.py +0 -0
- {orionis-0.319.0/orionis/services/introspection/contracts → orionis-0.321.0/orionis/services/introspection/concretes}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/concretes/reflection_concrete.py +0 -0
- {orionis-0.319.0/orionis/services/introspection/dependencies → orionis-0.321.0/orionis/services/introspection/contracts}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/contracts/reflect_dependencies.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/contracts/reflection_abstract.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/contracts/reflection_concrete.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/contracts/reflection_instance.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/contracts/reflection_module.py +0 -0
- {orionis-0.319.0/orionis/services/introspection/dependencies/entities → orionis-0.321.0/orionis/services/introspection/dependencies}/__init__.py +0 -0
- {orionis-0.319.0/orionis/services/introspection/exceptions → orionis-0.321.0/orionis/services/introspection/dependencies/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/dependencies/entities/callable_dependencies.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/dependencies/entities/class_dependencies.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/dependencies/entities/method_dependencies.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/dependencies/entities/resolved_dependencies.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/dependencies/reflect_dependencies.py +0 -0
- {orionis-0.319.0/orionis/services/introspection/instances → orionis-0.321.0/orionis/services/introspection/exceptions}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/exceptions/reflection_attribute_error.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/exceptions/reflection_type_error.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/exceptions/reflection_value_error.py +0 -0
- {orionis-0.319.0/orionis/services/introspection/modules → orionis-0.321.0/orionis/services/introspection/instances}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/instances/reflection_instance.py +0 -0
- {orionis-0.319.0/orionis/services/parsers → orionis-0.321.0/orionis/services/introspection/modules}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/modules/reflection_module.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/reflection.py +0 -0
- {orionis-0.319.0/orionis/services/parsers/contracts → orionis-0.321.0/orionis/services/parsers}/__init__.py +0 -0
- {orionis-0.319.0/orionis/services/parsers/exceptions → orionis-0.321.0/orionis/services/parsers/contracts}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/parsers/contracts/exception_parser.py +0 -0
- {orionis-0.319.0/orionis/services/paths → orionis-0.321.0/orionis/services/parsers/exceptions}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/parsers/exceptions/exception_parser.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/parsers/serializer.py +0 -0
- {orionis-0.319.0/orionis/services/paths/contracts → orionis-0.321.0/orionis/services/paths}/__init__.py +0 -0
- {orionis-0.319.0/orionis/services/paths/exceptions → orionis-0.321.0/orionis/services/paths/contracts}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/paths/contracts/resolver.py +0 -0
- {orionis-0.319.0/orionis/services/system → orionis-0.321.0/orionis/services/paths/exceptions}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/paths/exceptions/not_found_exceptions.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/paths/exceptions/path_value_exceptions.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/paths/resolver.py +0 -0
- {orionis-0.319.0/orionis/services/system/contracts → orionis-0.321.0/orionis/services/system}/__init__.py +0 -0
- {orionis-0.319.0/orionis/support → orionis-0.321.0/orionis/services/system/contracts}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/system/contracts/imports.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/system/contracts/workers.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/system/imports.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/system/runtime_imports.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/services/system/workers.py +0 -0
- {orionis-0.319.0/orionis/support/standard → orionis-0.321.0/orionis/support}/__init__.py +0 -0
- {orionis-0.319.0/orionis/support/standard/contracts → orionis-0.321.0/orionis/support/standard}/__init__.py +0 -0
- {orionis-0.319.0/orionis/support/standard/exceptions → orionis-0.321.0/orionis/support/standard/contracts}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/support/standard/contracts/std.py +0 -0
- {orionis-0.319.0/orionis/support/wrapper → orionis-0.321.0/orionis/support/standard/exceptions}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/support/standard/exceptions/std_value_exception.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/support/standard/std.py +0 -0
- {orionis-0.319.0/orionis/support/wrapper/dicts → orionis-0.321.0/orionis/support/wrapper}/__init__.py +0 -0
- {orionis-0.319.0/orionis/test → orionis-0.321.0/orionis/support/wrapper/dicts}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/support/wrapper/dicts/dot_dict.py +0 -0
- {orionis-0.319.0/orionis/test/cases → orionis-0.321.0/orionis/test}/__init__.py +0 -0
- {orionis-0.319.0/orionis/test/contracts → orionis-0.321.0/orionis/test/cases}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/cases/test_async.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/cases/test_case.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/cases/test_sync.py +0 -0
- {orionis-0.319.0/orionis/test/entities → orionis-0.321.0/orionis/test/contracts}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/contracts/dumper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/contracts/history.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/contracts/printer.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/contracts/test_unit.py +0 -0
- {orionis-0.319.0/orionis/test/enums → orionis-0.321.0/orionis/test/entities}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/entities/test_result.py +0 -0
- {orionis-0.319.0/orionis/test/exceptions → orionis-0.321.0/orionis/test/enums}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/enums/test_mode.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/enums/test_status.py +0 -0
- {orionis-0.319.0/orionis/test/logs → orionis-0.321.0/orionis/test/exceptions}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/exceptions/test_config_exception.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/exceptions/test_failure_exception.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/exceptions/test_persistence_error.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/exceptions/test_runtime_error.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/exceptions/test_value_error.py +0 -0
- {orionis-0.319.0/orionis/test/output → orionis-0.321.0/orionis/test/logs}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/logs/history.py +0 -0
- {orionis-0.319.0/orionis/test/suite → orionis-0.321.0/orionis/test/output}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/output/dumper.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/output/printer.py +0 -0
- {orionis-0.319.0/orionis/test/view → orionis-0.321.0/orionis/test/suite}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/suite/test_unit.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/test_suite.py +0 -0
- {orionis-0.319.0/tests → orionis-0.321.0/orionis/test/view}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/test/view/render.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis/unittesting.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis.egg-info/dependency_links.txt +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis.egg-info/requires.txt +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis.egg-info/top_level.txt +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/orionis.egg-info/zip-safe +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/setup.cfg +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/setup.py +0 -0
- {orionis-0.319.0/tests/example → orionis-0.321.0/tests}/__init__.py +0 -0
- {orionis-0.319.0/tests/foundation → orionis-0.321.0/tests/example}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/example/test_example.py +0 -0
- {orionis-0.319.0/tests/foundation/config → orionis-0.321.0/tests/foundation}/__init__.py +0 -0
- {orionis-0.319.0/tests/foundation/config/app → orionis-0.321.0/tests/foundation/config}/__init__.py +0 -0
- {orionis-0.319.0/tests/foundation/config/auth → orionis-0.321.0/tests/foundation/config/app}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/app/test_foundation_config_app.py +0 -0
- {orionis-0.319.0/tests/foundation/config/cache → orionis-0.321.0/tests/foundation/config/auth}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/auth/test_foundation_config_auth.py +0 -0
- {orionis-0.319.0/tests/foundation/config/cors → orionis-0.321.0/tests/foundation/config/cache}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/cache/test_foundation_config_cache.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/cache/test_foundation_config_cache_file.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/cache/test_foundation_config_cache_stores.py +0 -0
- {orionis-0.319.0/tests/foundation/config/database → orionis-0.321.0/tests/foundation/config/cors}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/cors/test_foundation_config_cors.py +0 -0
- {orionis-0.319.0/tests/foundation/config/filesystems → orionis-0.321.0/tests/foundation/config/database}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database_connections.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database_mysql.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database_oracle.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database_pgsql.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database_sqlite.py +0 -0
- {orionis-0.319.0/tests/foundation/config/logging → orionis-0.321.0/tests/foundation/config/filesystems}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_aws.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_disks.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_local.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_public.py +0 -0
- {orionis-0.319.0/tests/foundation/config/mail → orionis-0.321.0/tests/foundation/config/logging}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_channels.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_chunked.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_daily.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_hourly.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_monthly.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_stack.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_weekly.py +0 -0
- {orionis-0.319.0/tests/foundation/config/queue → orionis-0.321.0/tests/foundation/config/mail}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/mail/test_foundation_config_mail.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/mail/test_foundation_config_mail_file.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/mail/test_foundation_config_mail_mailers.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/mail/test_foundation_config_mail_smtp.py +0 -0
- {orionis-0.319.0/tests/foundation/config/root → orionis-0.321.0/tests/foundation/config/queue}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/queue/test_foundation_config_queue.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/queue/test_foundation_config_queue_brokers.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/queue/test_foundation_config_queue_database.py +0 -0
- {orionis-0.319.0/tests/foundation/config/session → orionis-0.321.0/tests/foundation/config/root}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/root/test_foundation_config_root_paths.py +0 -0
- {orionis-0.319.0/tests/foundation/config/startup → orionis-0.321.0/tests/foundation/config/session}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/session/test_foundation_config_session.py +0 -0
- {orionis-0.319.0/tests/foundation/config/testing → orionis-0.321.0/tests/foundation/config/startup}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/startup/test_foundation_config_startup.py +0 -0
- {orionis-0.319.0/tests/foundation/exceptions → orionis-0.321.0/tests/foundation/config/testing}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/testing/test_foundation_config_testing.py +0 -0
- {orionis-0.319.0/tests/metadata → orionis-0.321.0/tests/foundation/exceptions}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/exceptions/test_foundation_config_exceptions.py +0 -0
- {orionis-0.319.0/tests/patterns → orionis-0.321.0/tests/metadata}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/metadata/test_metadata_framework.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/metadata/test_metadata_package.py +0 -0
- {orionis-0.319.0/tests/patterns/singleton → orionis-0.321.0/tests/patterns}/__init__.py +0 -0
- {orionis-0.319.0/tests/services → orionis-0.321.0/tests/patterns/singleton}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/patterns/singleton/test_patterns_singleton.py +0 -0
- {orionis-0.319.0/tests/services/asynchrony → orionis-0.321.0/tests/services}/__init__.py +0 -0
- {orionis-0.319.0/tests/services/environment → orionis-0.321.0/tests/services/asynchrony}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/asynchrony/test_services_asynchrony_coroutine.py +0 -0
- {orionis-0.319.0/tests/services/inspection → orionis-0.321.0/tests/services/environment}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/environment/test_services_environment.py +0 -0
- {orionis-0.319.0/tests/services/inspection/dependencies → orionis-0.321.0/tests/services/inspection}/__init__.py +0 -0
- {orionis-0.319.0/tests/services/inspection/dependencies/mocks → orionis-0.321.0/tests/services/inspection/dependencies}/__init__.py +0 -0
- {orionis-0.319.0/tests/services/inspection/reflection → orionis-0.321.0/tests/services/inspection/dependencies/mocks}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/dependencies/mocks/mock_user.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/dependencies/mocks/mock_user_controller.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/dependencies/mocks/mock_users_permissions.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/dependencies/test_reflect_dependencies.py +0 -0
- {orionis-0.319.0/tests/services/inspection/reflection/mock → orionis-0.321.0/tests/services/inspection/reflection}/__init__.py +0 -0
- {orionis-0.319.0/tests/services/parsers → orionis-0.321.0/tests/services/inspection/reflection/mock}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/mock/fake_reflect_instance.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/test_reflection_abstract.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/test_reflection_callable.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/test_reflection_concrete.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/test_reflection_instance.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/test_reflection_module.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/test_reflection.py +0 -0
- {orionis-0.319.0/tests/services/parsers/mocks → orionis-0.321.0/tests/services/parsers}/__init__.py +0 -0
- {orionis-0.319.0/tests/services/path → orionis-0.321.0/tests/services/parsers/mocks}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/parsers/mocks/mock_custom_error.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/parsers/test_services_parser_exceptions.py +0 -0
- {orionis-0.319.0/tests/services/system → orionis-0.321.0/tests/services/path}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/path/test_services_resolver.py +0 -0
- {orionis-0.319.0/tests/support → orionis-0.321.0/tests/services/system}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/system/test_services_system_imports.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/services/system/test_services_system_workers.py +0 -0
- {orionis-0.319.0/tests/support/standard → orionis-0.321.0/tests/support}/__init__.py +0 -0
- {orionis-0.319.0/tests/support/wrapper → orionis-0.321.0/tests/support/standard}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/support/standard/test_services_std.py +0 -0
- {orionis-0.319.0/tests/testing → orionis-0.321.0/tests/support/wrapper}/__init__.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/support/wrapper/test_services_wrapper_docdict.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/testing/test_testing_result.py +0 -0
- {orionis-0.319.0 → orionis-0.321.0}/tests/testing/test_testing_unit.py +0 -0
@@ -0,0 +1,636 @@
|
|
1
|
+
import threading
|
2
|
+
from typing import Any, Callable
|
3
|
+
from orionis.container.contracts.container import IContainer
|
4
|
+
from orionis.container.entities.binding import Binding
|
5
|
+
from orionis.container.enums.lifetimes import Lifetime
|
6
|
+
from orionis.container.exceptions.container_exception import OrionisContainerException
|
7
|
+
from orionis.container.resolver import Resolver
|
8
|
+
from orionis.container.validators.implements import ImplementsAbstractMethods
|
9
|
+
from orionis.container.validators.is_abstract_class import IsAbstractClass
|
10
|
+
from orionis.container.validators.is_callable import IsCallable
|
11
|
+
from orionis.container.validators.is_concrete_class import IsConcreteClass
|
12
|
+
from orionis.container.validators.is_instance import IsInstance
|
13
|
+
from orionis.container.validators.is_not_subclass import IsNotSubclass
|
14
|
+
from orionis.container.validators.is_subclass import IsSubclass
|
15
|
+
from orionis.container.validators.is_valid_alias import IsValidAlias
|
16
|
+
from orionis.container.validators.lifetime import LifetimeValidator
|
17
|
+
from orionis.services.introspection.abstract.reflection_abstract import ReflectionAbstract
|
18
|
+
from orionis.services.introspection.callables.reflection_callable import ReflectionCallable
|
19
|
+
|
20
|
+
class Container(IContainer):
|
21
|
+
|
22
|
+
# Singleton instance of the container.
|
23
|
+
# This is a class variable that holds the single instance of the Container class.
|
24
|
+
_instance = None
|
25
|
+
|
26
|
+
# Lock for thread-safe singleton instantiation.
|
27
|
+
# This lock ensures that only one thread can create the instance at a time,
|
28
|
+
# preventing
|
29
|
+
_lock = threading.Lock()
|
30
|
+
|
31
|
+
# Class variable to track if the container has been initialized.
|
32
|
+
# This is used to ensure that the initialization logic runs only once,
|
33
|
+
# regardless of how many times the class is instantiated.
|
34
|
+
_initialized = False
|
35
|
+
|
36
|
+
def __new__(
|
37
|
+
cls
|
38
|
+
) -> 'Container':
|
39
|
+
"""
|
40
|
+
Creates and returns a singleton instance of the class.
|
41
|
+
|
42
|
+
This method implements the singleton pattern, ensuring that only one instance
|
43
|
+
of the class exists. If an instance does not exist, it acquires a lock to
|
44
|
+
ensure thread safety and creates the instance. Subsequent calls return the
|
45
|
+
existing instance.
|
46
|
+
|
47
|
+
Returns
|
48
|
+
-------
|
49
|
+
Container
|
50
|
+
The singleton instance of the class.
|
51
|
+
"""
|
52
|
+
|
53
|
+
# Check if the class has an existing instance
|
54
|
+
if cls._instance is None:
|
55
|
+
|
56
|
+
# Acquire the lock to ensure thread safety during instance creation
|
57
|
+
with cls._lock:
|
58
|
+
|
59
|
+
# If the instance is still None, create a new instance
|
60
|
+
if cls._instance is None:
|
61
|
+
|
62
|
+
# Call the superclass's __new__ method to create a new instance
|
63
|
+
cls._instance = super(Container, cls).__new__(cls)
|
64
|
+
|
65
|
+
# Return the existing instance of the class
|
66
|
+
return cls._instance
|
67
|
+
|
68
|
+
def __init__(
|
69
|
+
self
|
70
|
+
) -> None:
|
71
|
+
"""
|
72
|
+
Initializes a new instance of the container.
|
73
|
+
|
74
|
+
This constructor sets up the internal dictionaries for bindings and aliases,
|
75
|
+
ensuring that these are only initialized once per class. The initialization
|
76
|
+
is guarded by the `_initialized` class attribute to prevent redundant setup.
|
77
|
+
The container also registers itself as a service to allow for injection.
|
78
|
+
|
79
|
+
Notes
|
80
|
+
-----
|
81
|
+
- The `__bindings` dictionary is used to store service bindings.
|
82
|
+
- The `__aliasses` dictionary is used to store service aliases.
|
83
|
+
- Initialization occurs only once per class, regardless of the number of instances.
|
84
|
+
- The container registers itself under the IContainer interface to allow for dependency injection.
|
85
|
+
"""
|
86
|
+
|
87
|
+
# Check if the class has been initialized
|
88
|
+
if not self.__class__._initialized:
|
89
|
+
|
90
|
+
# Initialize the container's internal state
|
91
|
+
self.__bindings = {}
|
92
|
+
self.__aliasses = {}
|
93
|
+
|
94
|
+
# Set the initialized flag to True to prevent re-initialization
|
95
|
+
self.__class__._initialized = True
|
96
|
+
|
97
|
+
# Register the container itself as a service
|
98
|
+
self.instance(IContainer, self)
|
99
|
+
|
100
|
+
def transient(
|
101
|
+
self,
|
102
|
+
abstract: Callable[..., Any],
|
103
|
+
concrete: Callable[..., Any],
|
104
|
+
*,
|
105
|
+
alias: str = None,
|
106
|
+
enforce_decoupling: bool = False
|
107
|
+
) -> bool:
|
108
|
+
"""
|
109
|
+
Registers a service with a transient lifetime.
|
110
|
+
|
111
|
+
Parameters
|
112
|
+
----------
|
113
|
+
abstract : Callable[..., Any]
|
114
|
+
The abstract base type or interface to be bound.
|
115
|
+
concrete : Callable[..., Any]
|
116
|
+
The concrete implementation to associate with the abstract type.
|
117
|
+
alias : str, optional
|
118
|
+
An alternative name to register the service under. If not provided, the abstract's class name is used.
|
119
|
+
|
120
|
+
Returns
|
121
|
+
-------
|
122
|
+
bool
|
123
|
+
True if the service was registered successfully.
|
124
|
+
|
125
|
+
Raises
|
126
|
+
------
|
127
|
+
OrionisContainerTypeError
|
128
|
+
If the abstract or concrete class checks fail.
|
129
|
+
OrionisContainerException
|
130
|
+
If the concrete class inherits from the abstract class.
|
131
|
+
|
132
|
+
Notes
|
133
|
+
-----
|
134
|
+
Registers the given concrete implementation to the abstract type with a transient lifetime,
|
135
|
+
meaning a new instance will be created each time the service is requested. Optionally, an alias
|
136
|
+
can be provided for registration.
|
137
|
+
"""
|
138
|
+
|
139
|
+
# Ensure that abstract is an abstract class
|
140
|
+
IsAbstractClass(abstract, Lifetime.TRANSIENT)
|
141
|
+
|
142
|
+
# Ensure that concrete is a concrete class
|
143
|
+
IsConcreteClass(concrete, Lifetime.TRANSIENT)
|
144
|
+
|
145
|
+
# Ensure that concrete is NOT a subclass of abstract
|
146
|
+
if enforce_decoupling:
|
147
|
+
IsNotSubclass(abstract, concrete)
|
148
|
+
|
149
|
+
# Validate that concrete is a subclass of abstract
|
150
|
+
else:
|
151
|
+
IsSubclass(abstract, concrete)
|
152
|
+
|
153
|
+
# Ensure implementation
|
154
|
+
ImplementsAbstractMethods(
|
155
|
+
abstract=abstract,
|
156
|
+
concrete=concrete
|
157
|
+
)
|
158
|
+
|
159
|
+
# Ensure that the alias is a valid string if provided
|
160
|
+
if alias:
|
161
|
+
IsValidAlias(alias)
|
162
|
+
|
163
|
+
# Extract the module and class name for the alias
|
164
|
+
else:
|
165
|
+
rf_asbtract = ReflectionAbstract(abstract)
|
166
|
+
alias = rf_asbtract.getModuleWithClassName()
|
167
|
+
|
168
|
+
# If the service is already registered, drop it
|
169
|
+
self.drop(abstract, alias)
|
170
|
+
|
171
|
+
# Register the service with transient lifetime
|
172
|
+
self.__bindings[abstract] = Binding(
|
173
|
+
contract = abstract,
|
174
|
+
concrete = concrete,
|
175
|
+
lifetime = Lifetime.TRANSIENT,
|
176
|
+
enforce_decoupling = enforce_decoupling,
|
177
|
+
alias = alias
|
178
|
+
)
|
179
|
+
|
180
|
+
# Register the alias
|
181
|
+
self.__aliasses[alias] = self.__bindings[abstract]
|
182
|
+
|
183
|
+
# Return True to indicate successful registration
|
184
|
+
return True
|
185
|
+
|
186
|
+
def singleton(
|
187
|
+
self,
|
188
|
+
abstract: Callable[..., Any],
|
189
|
+
concrete: Callable[..., Any],
|
190
|
+
*,
|
191
|
+
alias: str = None,
|
192
|
+
enforce_decoupling: bool = False
|
193
|
+
) -> bool:
|
194
|
+
"""
|
195
|
+
Registers a service with a singleton lifetime.
|
196
|
+
|
197
|
+
Parameters
|
198
|
+
----------
|
199
|
+
abstract : Callable[..., Any]
|
200
|
+
The abstract base type or interface to be bound.
|
201
|
+
concrete : Callable[..., Any]
|
202
|
+
The concrete implementation to associate with the abstract type.
|
203
|
+
alias : str, optional
|
204
|
+
An alternative name to register the service under. If not provided, the abstract's class name is used.
|
205
|
+
|
206
|
+
Returns
|
207
|
+
-------
|
208
|
+
bool
|
209
|
+
True if the service was registered successfully.
|
210
|
+
|
211
|
+
Raises
|
212
|
+
------
|
213
|
+
OrionisContainerTypeError
|
214
|
+
If the abstract or concrete class checks fail.
|
215
|
+
OrionisContainerException
|
216
|
+
If the concrete class inherits from the abstract class.
|
217
|
+
|
218
|
+
Notes
|
219
|
+
-----
|
220
|
+
Registers the given concrete implementation to the abstract type with a singleton lifetime,
|
221
|
+
meaning a single instance will be created and shared. Optionally, an alias can be provided for registration.
|
222
|
+
"""
|
223
|
+
|
224
|
+
# Ensure that abstract is an abstract class
|
225
|
+
IsAbstractClass(abstract, Lifetime.SINGLETON)
|
226
|
+
|
227
|
+
# Ensure that concrete is a concrete class
|
228
|
+
IsConcreteClass(concrete, Lifetime.SINGLETON)
|
229
|
+
|
230
|
+
# Ensure that concrete is NOT a subclass of abstract
|
231
|
+
if enforce_decoupling:
|
232
|
+
IsNotSubclass(abstract, concrete)
|
233
|
+
|
234
|
+
# Validate that concrete is a subclass of abstract
|
235
|
+
else:
|
236
|
+
IsSubclass(abstract, concrete)
|
237
|
+
|
238
|
+
# Ensure implementation
|
239
|
+
ImplementsAbstractMethods(
|
240
|
+
abstract=abstract,
|
241
|
+
concrete=concrete
|
242
|
+
)
|
243
|
+
|
244
|
+
# Ensure that the alias is a valid string if provided
|
245
|
+
if alias:
|
246
|
+
IsValidAlias(alias)
|
247
|
+
else:
|
248
|
+
rf_asbtract = ReflectionAbstract(abstract)
|
249
|
+
alias = rf_asbtract.getModuleWithClassName()
|
250
|
+
|
251
|
+
# If the service is already registered, drop it
|
252
|
+
self.drop(abstract, alias)
|
253
|
+
|
254
|
+
# Register the service with singleton lifetime
|
255
|
+
self.__bindings[abstract] = Binding(
|
256
|
+
contract = abstract,
|
257
|
+
concrete = concrete,
|
258
|
+
lifetime = Lifetime.SINGLETON,
|
259
|
+
enforce_decoupling = enforce_decoupling,
|
260
|
+
alias = alias
|
261
|
+
)
|
262
|
+
|
263
|
+
# Register the alias
|
264
|
+
self.__aliasses[alias] = self.__bindings[abstract]
|
265
|
+
|
266
|
+
# Return True to indicate successful registration
|
267
|
+
return True
|
268
|
+
|
269
|
+
def scoped(
|
270
|
+
self,
|
271
|
+
abstract: Callable[..., Any],
|
272
|
+
concrete: Callable[..., Any],
|
273
|
+
*,
|
274
|
+
alias: str = None,
|
275
|
+
enforce_decoupling: bool = False
|
276
|
+
) -> bool:
|
277
|
+
"""
|
278
|
+
Registers a service with a scoped lifetime.
|
279
|
+
|
280
|
+
Parameters
|
281
|
+
----------
|
282
|
+
abstract : Callable[..., Any]
|
283
|
+
The abstract base type or interface to be bound.
|
284
|
+
concrete : Callable[..., Any]
|
285
|
+
The concrete implementation to associate with the abstract type.
|
286
|
+
alias : str, optional
|
287
|
+
An alternative name to register the service under. If not provided, the abstract's class name is used.
|
288
|
+
|
289
|
+
Returns
|
290
|
+
-------
|
291
|
+
bool
|
292
|
+
True if the service was registered successfully.
|
293
|
+
|
294
|
+
Raises
|
295
|
+
------
|
296
|
+
OrionisContainerTypeError
|
297
|
+
If the abstract or concrete class checks fail.
|
298
|
+
OrionisContainerException
|
299
|
+
If the concrete class inherits from the abstract class.
|
300
|
+
|
301
|
+
Notes
|
302
|
+
-----
|
303
|
+
Registers the given concrete implementation to the abstract type with a scoped lifetime,
|
304
|
+
meaning a new instance will be created per scope. Optionally, an alias can be provided for registration.
|
305
|
+
"""
|
306
|
+
|
307
|
+
# Ensure that abstract is an abstract class
|
308
|
+
IsAbstractClass(abstract, Lifetime.SCOPED)
|
309
|
+
|
310
|
+
# Ensure that concrete is a concrete class
|
311
|
+
IsConcreteClass(concrete, Lifetime.SCOPED)
|
312
|
+
|
313
|
+
# Ensure that concrete is NOT a subclass of abstract
|
314
|
+
if enforce_decoupling:
|
315
|
+
IsNotSubclass(abstract, concrete)
|
316
|
+
|
317
|
+
# Validate that concrete is a subclass of abstract
|
318
|
+
else:
|
319
|
+
IsSubclass(abstract, concrete)
|
320
|
+
|
321
|
+
# Ensure implementation
|
322
|
+
ImplementsAbstractMethods(
|
323
|
+
abstract=abstract,
|
324
|
+
concrete=concrete
|
325
|
+
)
|
326
|
+
|
327
|
+
# Ensure that the alias is a valid string if provided
|
328
|
+
if alias:
|
329
|
+
IsValidAlias(alias)
|
330
|
+
else:
|
331
|
+
rf_asbtract = ReflectionAbstract(abstract)
|
332
|
+
alias = rf_asbtract.getModuleWithClassName()
|
333
|
+
|
334
|
+
# If the service is already registered, drop it
|
335
|
+
self.drop(abstract, alias)
|
336
|
+
|
337
|
+
# Register the service with scoped lifetime
|
338
|
+
self.__bindings[abstract] = Binding(
|
339
|
+
contract = abstract,
|
340
|
+
concrete = concrete,
|
341
|
+
lifetime = Lifetime.SCOPED,
|
342
|
+
enforce_decoupling = enforce_decoupling,
|
343
|
+
alias = alias
|
344
|
+
)
|
345
|
+
|
346
|
+
# Register the alias
|
347
|
+
self.__aliasses[alias] = self.__bindings[abstract]
|
348
|
+
|
349
|
+
# Return True to indicate successful registration
|
350
|
+
return True
|
351
|
+
|
352
|
+
def instance(
|
353
|
+
self,
|
354
|
+
abstract: Callable[..., Any],
|
355
|
+
instance: Any,
|
356
|
+
*,
|
357
|
+
alias: str = None,
|
358
|
+
enforce_decoupling: bool = False
|
359
|
+
) -> bool:
|
360
|
+
"""
|
361
|
+
Registers an instance of a class or interface in the container.
|
362
|
+
Parameters
|
363
|
+
----------
|
364
|
+
abstract : Callable[..., Any]
|
365
|
+
The abstract class or interface to associate with the instance.
|
366
|
+
instance : Any
|
367
|
+
The concrete instance to register.
|
368
|
+
alias : str, optional
|
369
|
+
An optional alias to register the instance under. If not provided,
|
370
|
+
the abstract's `__name__` attribute will be used as the alias if available.
|
371
|
+
Returns
|
372
|
+
-------
|
373
|
+
bool
|
374
|
+
True if the instance was successfully registered.
|
375
|
+
Raises
|
376
|
+
------
|
377
|
+
TypeError
|
378
|
+
If `abstract` is not an abstract class or if `alias` is not a valid string.
|
379
|
+
ValueError
|
380
|
+
If `instance` is not a valid instance of `abstract`.
|
381
|
+
Notes
|
382
|
+
-----
|
383
|
+
This method ensures that the abstract is a valid abstract class, the instance
|
384
|
+
is valid, and the alias (if provided) is a valid string. The instance is then
|
385
|
+
registered in the container under both the abstract and the alias.
|
386
|
+
"""
|
387
|
+
|
388
|
+
# Ensure that the abstract is an abstract class
|
389
|
+
IsAbstractClass(abstract, f"Instance {Lifetime.SINGLETON}")
|
390
|
+
|
391
|
+
# Ensure that the instance is a valid instance
|
392
|
+
IsInstance(instance)
|
393
|
+
|
394
|
+
# Ensure that instance is NOT a subclass of abstract
|
395
|
+
if enforce_decoupling:
|
396
|
+
IsNotSubclass(abstract, instance.__class__)
|
397
|
+
|
398
|
+
# Validate that instance is a subclass of abstract
|
399
|
+
else:
|
400
|
+
IsSubclass(abstract, instance.__class__)
|
401
|
+
|
402
|
+
# Ensure implementation
|
403
|
+
ImplementsAbstractMethods(
|
404
|
+
abstract=abstract,
|
405
|
+
instance=instance
|
406
|
+
)
|
407
|
+
|
408
|
+
# Ensure that the alias is a valid string if provided
|
409
|
+
if alias:
|
410
|
+
IsValidAlias(alias)
|
411
|
+
else:
|
412
|
+
rf_asbtract = ReflectionAbstract(abstract)
|
413
|
+
alias = rf_asbtract.getModuleWithClassName()
|
414
|
+
|
415
|
+
# If the service is already registered, drop it
|
416
|
+
self.drop(abstract, alias)
|
417
|
+
|
418
|
+
# Register the instance with the abstract type
|
419
|
+
self.__bindings[abstract] = Binding(
|
420
|
+
contract = abstract,
|
421
|
+
instance = instance,
|
422
|
+
lifetime = Lifetime.SINGLETON,
|
423
|
+
enforce_decoupling = enforce_decoupling,
|
424
|
+
alias = alias
|
425
|
+
)
|
426
|
+
|
427
|
+
# Register the alias
|
428
|
+
self.__aliasses[alias] = self.__bindings[abstract]
|
429
|
+
|
430
|
+
# Return True to indicate successful registration
|
431
|
+
return True
|
432
|
+
|
433
|
+
def function(
|
434
|
+
self,
|
435
|
+
alias: str,
|
436
|
+
fn: Callable[..., Any],
|
437
|
+
*,
|
438
|
+
lifetime: Lifetime = Lifetime.TRANSIENT
|
439
|
+
) -> bool:
|
440
|
+
"""
|
441
|
+
Registers a function or factory under a given alias.
|
442
|
+
|
443
|
+
Parameters
|
444
|
+
----------
|
445
|
+
alias : str
|
446
|
+
The alias to register the function under.
|
447
|
+
fn : Callable[..., Any]
|
448
|
+
The function or factory to register.
|
449
|
+
lifetime : Lifetime, optional
|
450
|
+
The lifetime of the function registration (default is TRANSIENT).
|
451
|
+
|
452
|
+
Returns
|
453
|
+
-------
|
454
|
+
bool
|
455
|
+
True if the function was registered successfully.
|
456
|
+
|
457
|
+
Raises
|
458
|
+
------
|
459
|
+
OrionisContainerTypeError
|
460
|
+
If the alias is invalid or the function is not callable.
|
461
|
+
OrionisContainerException
|
462
|
+
If the lifetime is not allowed for the function signature.
|
463
|
+
"""
|
464
|
+
|
465
|
+
# Normalize and validate the lifetime parameter
|
466
|
+
lifetime = LifetimeValidator(lifetime)
|
467
|
+
|
468
|
+
# Ensure that the alias is a valid string
|
469
|
+
IsValidAlias(alias)
|
470
|
+
|
471
|
+
# Validate that the function is callable
|
472
|
+
IsCallable(fn)
|
473
|
+
|
474
|
+
# Inspect the function signature
|
475
|
+
params = ReflectionCallable(fn).getDependencies()
|
476
|
+
|
477
|
+
# If the function requires arguments, only allow TRANSIENT
|
478
|
+
if (len(params.resolved) + len(params.unresolved)) > 0 and lifetime != Lifetime.TRANSIENT:
|
479
|
+
raise OrionisContainerException(
|
480
|
+
"Functions that require arguments can only be registered with a TRANSIENT lifetime."
|
481
|
+
)
|
482
|
+
|
483
|
+
# If the service is already registered, drop it
|
484
|
+
self.drop(None, alias)
|
485
|
+
|
486
|
+
# Register the function with the specified alias and lifetime
|
487
|
+
self.__bindings[alias] = Binding(
|
488
|
+
function=fn,
|
489
|
+
lifetime=lifetime,
|
490
|
+
alias=alias
|
491
|
+
)
|
492
|
+
|
493
|
+
# Register the function as a binding
|
494
|
+
self.__aliasses[alias] = self.__bindings[alias]
|
495
|
+
|
496
|
+
return True
|
497
|
+
|
498
|
+
def bound(
|
499
|
+
self,
|
500
|
+
abstract_or_alias: Any,
|
501
|
+
) -> bool:
|
502
|
+
"""
|
503
|
+
Checks if a service (by abstract type or alias) is registered in the container.
|
504
|
+
|
505
|
+
Parameters
|
506
|
+
----------
|
507
|
+
abstract_or_alias : Any
|
508
|
+
The abstract class, interface, or alias (str) to check for registration.
|
509
|
+
|
510
|
+
Returns
|
511
|
+
-------
|
512
|
+
bool
|
513
|
+
True if the service is registered (either as an abstract type or alias), False otherwise.
|
514
|
+
|
515
|
+
Notes
|
516
|
+
-----
|
517
|
+
This method allows you to verify whether a service has been registered in the container,
|
518
|
+
either by its abstract type or by its alias. It supports both class-based and string-based lookups.
|
519
|
+
"""
|
520
|
+
return (
|
521
|
+
abstract_or_alias in self.__bindings
|
522
|
+
or abstract_or_alias in self.__aliasses
|
523
|
+
)
|
524
|
+
|
525
|
+
def getBinding(
|
526
|
+
self,
|
527
|
+
abstract_or_alias: Any
|
528
|
+
) -> Binding:
|
529
|
+
"""
|
530
|
+
Retrieves the binding for the requested abstract type or alias.
|
531
|
+
|
532
|
+
Parameters
|
533
|
+
----------
|
534
|
+
abstract_or_alias : Any
|
535
|
+
The abstract class, interface, or alias (str) to retrieve.
|
536
|
+
|
537
|
+
Returns
|
538
|
+
-------
|
539
|
+
Binding
|
540
|
+
The binding associated with the requested abstract type or alias.
|
541
|
+
"""
|
542
|
+
return self.__bindings.get(abstract_or_alias) or self.__aliasses.get(abstract_or_alias)
|
543
|
+
|
544
|
+
def drop(
|
545
|
+
self,
|
546
|
+
abstract: Callable[..., Any] = None,
|
547
|
+
alias: str = None
|
548
|
+
) -> None:
|
549
|
+
"""
|
550
|
+
Drops a service from the container by removing its bindings and aliases.
|
551
|
+
This method allows removing registered services from the dependency injection container,
|
552
|
+
either by their abstract type or by their alias. When a service is dropped,
|
553
|
+
all its bindings and aliases are removed from the container.
|
554
|
+
|
555
|
+
Warning
|
556
|
+
-------
|
557
|
+
Using this method irresponsibly can severely damage the system's logic.
|
558
|
+
Only use it when you are certain about the consequences, as removing
|
559
|
+
critical services may lead to system failures and unexpected behavior.
|
560
|
+
abstract : Callable[..., Any], optional
|
561
|
+
The abstract type or interface to be removed from the container.
|
562
|
+
If provided, both the binding and the default alias for this type will be removed.
|
563
|
+
The alias of the service to be removed. If provided, both the alias entry
|
564
|
+
and any associated binding will be removed.
|
565
|
+
|
566
|
+
Notes
|
567
|
+
-----
|
568
|
+
At least one parameter (abstract or alias) must be provided for the method to take effect.
|
569
|
+
If both are provided, both will be processed independently.
|
570
|
+
"""
|
571
|
+
|
572
|
+
# If abstract is provided
|
573
|
+
if abstract:
|
574
|
+
|
575
|
+
# Remove the abstract service from the bindings if it exists
|
576
|
+
if abstract in self.__bindings:
|
577
|
+
del self.__bindings[abstract]
|
578
|
+
|
579
|
+
# Remove the default alias (module + class name) from aliases if it exists
|
580
|
+
abs_alias = ReflectionAbstract(abstract).getModuleWithClassName()
|
581
|
+
if abs_alias in self.__aliasses:
|
582
|
+
del self.__aliasses[abs_alias]
|
583
|
+
|
584
|
+
# If a custom alias is provided
|
585
|
+
if alias:
|
586
|
+
|
587
|
+
# Remove it from the aliases dictionary if it exists
|
588
|
+
if alias in self.__aliasses:
|
589
|
+
del self.__aliasses[alias]
|
590
|
+
|
591
|
+
# Remove the binding associated with the alias
|
592
|
+
if alias in self.__bindings:
|
593
|
+
del self.__bindings[alias]
|
594
|
+
|
595
|
+
def make(
|
596
|
+
self,
|
597
|
+
abstract_or_alias: Any,
|
598
|
+
*args: tuple,
|
599
|
+
**kwargs: dict
|
600
|
+
) -> Any:
|
601
|
+
"""
|
602
|
+
Resolves and returns an instance of the requested service.
|
603
|
+
|
604
|
+
Parameters
|
605
|
+
----------
|
606
|
+
abstract_or_alias : Any
|
607
|
+
The abstract class, interface, or alias (str) to resolve.
|
608
|
+
*args : tuple
|
609
|
+
Positional arguments to pass to the constructor of the resolved service.
|
610
|
+
**kwargs : dict
|
611
|
+
Keyword arguments to pass to the constructor of the resolved service.
|
612
|
+
|
613
|
+
Returns
|
614
|
+
-------
|
615
|
+
Any
|
616
|
+
An instance of the requested service.
|
617
|
+
|
618
|
+
Raises
|
619
|
+
------
|
620
|
+
OrionisContainerException
|
621
|
+
If the requested service is not registered in the container.
|
622
|
+
"""
|
623
|
+
if not self.bound(abstract_or_alias):
|
624
|
+
raise OrionisContainerException(
|
625
|
+
f"The requested service '{abstract_or_alias}' is not registered in the container."
|
626
|
+
)
|
627
|
+
|
628
|
+
# Get the binding for the requested abstract type or alias
|
629
|
+
binding = self.getBinding(abstract_or_alias)
|
630
|
+
|
631
|
+
# Resolve the binding using the Resolver class
|
632
|
+
return Resolver(self).resolve(
|
633
|
+
binding,
|
634
|
+
*args,
|
635
|
+
**kwargs
|
636
|
+
)
|