orionis 0.650.0__tar.gz → 0.652.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.650.0/orionis.egg-info → orionis-0.652.0}/PKG-INFO +1 -1
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/commands/log_clear.py +1 -2
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/commands/make_command.py +0 -3
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/container.py +340 -140
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/application.py +1 -2
- {orionis-0.650.0 → orionis-0.652.0}/orionis/metadata/framework.py +1 -1
- {orionis-0.650.0 → orionis-0.652.0/orionis.egg-info}/PKG-INFO +1 -1
- {orionis-0.650.0 → orionis-0.652.0}/LICENCE +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/MANIFEST.in +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/README.md +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/args/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/args/argument.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/base/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/base/command.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/base/scheduler.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/base/scheduler_event_listener.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/commands/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/commands/__publisher__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/commands/__workflow__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/commands/cache_clear.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/commands/help.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/commands/scheduler_list.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/commands/scheduler_work.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/commands/test.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/commands/version.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/base_command.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/base_scheduler.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/cli_request.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/command.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/console.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/dumper.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/event.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/executor.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/kernel.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/progress_bar.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/reactor.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/schedule.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/contracts/schedule_event_listener.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/core/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/core/reactor.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/debug/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/debug/dumper.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/dynamic/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/dynamic/progress_bar.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/entities/command.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/entities/event.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/entities/event_job.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/entities/scheduler_error.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/entities/scheduler_event_data.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/entities/scheduler_paused.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/entities/scheduler_resumed.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/entities/scheduler_shutdown.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/entities/scheduler_started.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/enums/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/enums/actions.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/enums/listener.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/enums/styles.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/exceptions/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/exceptions/cli_exceptions.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/fluent/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/fluent/command.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/fluent/event.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/kernel.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/output/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/output/console.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/output/executor.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/request/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/request/cli_request.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/stubs/command.stub +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/stubs/listener.stub +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/tasks/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/console/tasks/schedule.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/context/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/context/manager.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/context/scope.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/contracts/container.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/contracts/service_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/entities/binding.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/enums/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/enums/lifetimes.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/exceptions/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/exceptions/container.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/facades/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/facades/facade.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/providers/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/providers/service_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/validators/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/validators/implements.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/validators/is_abstract_class.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/validators/is_callable.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/validators/is_concrete_class.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/validators/is_instance.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/validators/is_not_subclass.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/validators/is_subclass.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/validators/is_valid_alias.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/container/validators/lifetime.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/failure/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/failure/base/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/failure/base/handler.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/failure/catch.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/failure/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/failure/contracts/catch.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/failure/contracts/handler.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/failure/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/failure/entities/throwable.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/app/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/app/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/app/entities/app.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/app/enums/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/app/enums/ciphers.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/app/enums/environments.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/auth/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/auth/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/auth/entities/auth.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/cache/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/cache/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/cache/entities/cache.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/cache/entities/file.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/cache/entities/stores.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/cache/enums/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/cache/enums/drivers.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/cors/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/cors/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/cors/entities/cors.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/entities/connections.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/entities/database.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/entities/mysql.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/entities/oracle.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/entities/pgsql.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/entities/sqlite.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/mysql_charsets.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/mysql_collations.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/mysql_engine.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/oracle_encoding.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/oracle_nencoding.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/pgsql_charsets.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/pgsql_collations.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/pgsql_mode.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/sqlite_foreign_key.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/sqlite_journal.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/database/enums/sqlite_synchronous.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/filesystems/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/filesystems/entitites/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/filesystems/entitites/aws.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/filesystems/entitites/disks.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/filesystems/entitites/filesystems.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/filesystems/entitites/local.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/filesystems/entitites/public.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/entities/channels.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/entities/chunked.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/entities/daily.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/entities/hourly.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/entities/logging.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/entities/monthly.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/entities/stack.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/entities/weekly.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/enums/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/enums/levels.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/validators/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/validators/level.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/logging/validators/path.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/mail/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/mail/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/mail/entities/file.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/mail/entities/mail.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/mail/entities/mailers.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/mail/entities/smtp.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/queue/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/queue/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/queue/entities/brokers.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/queue/entities/database.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/queue/entities/queue.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/queue/enums/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/queue/enums/strategy.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/roots/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/roots/paths.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/session/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/session/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/session/entities/session.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/session/enums/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/session/enums/same_site_policy.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/session/helpers/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/session/helpers/secret_key.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/startup.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/testing/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/testing/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/testing/entities/testing.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/testing/enums/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/testing/enums/drivers.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/testing/enums/mode.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/config/testing/enums/verbosity.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/contracts/application.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/exceptions/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/exceptions/application.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/catch_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/cli_request_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/console_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/directory_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/dumper_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/executor_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/inspirational_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/logger_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/performance_counter_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/progress_bar_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/reactor_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/scheduler_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/testing_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/foundation/providers/workers_provider.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/metadata/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/metadata/package.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/asynchrony/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/asynchrony/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/asynchrony/contracts/coroutines.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/asynchrony/coroutines.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/asynchrony/exceptions/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/asynchrony/exceptions/asynchrony.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/encrypter/encrypter.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/contracts/caster.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/contracts/env.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/core/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/core/dot_env.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/dynamic/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/dynamic/caster.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/enums/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/enums/value_type.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/env.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/exceptions/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/exceptions/environment.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/helpers/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/helpers/functions.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/key/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/key/key_generator.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/validators/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/validators/key_name.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/environment/validators/types.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/file/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/file/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/file/contracts/directory.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/file/directory.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/inspirational/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/inspirational/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/inspirational/contracts/inspire.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/inspirational/inspire.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/inspirational/quotes.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/abstract/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/abstract/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/abstract/contracts/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/abstract/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/callables/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/callables/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/callables/contracts/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/callables/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/concretes/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/concretes/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/concretes/contracts/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/concretes/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/dependencies/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/dependencies/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/dependencies/contracts/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/dependencies/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/dependencies/entities/argument.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/dependencies/entities/resolve_argument.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/dependencies/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/exceptions/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/exceptions/introspection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/instances/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/instances/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/instances/contracts/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/instances/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/modules/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/modules/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/modules/contracts/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/modules/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/objects/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/objects/types.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/introspection/reflection.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/log/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/log/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/log/contracts/log_service.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/log/exceptions/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/log/exceptions/log.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/log/handlers/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/log/handlers/filename.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/log/handlers/size_rotating.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/log/handlers/timed_rotating.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/log/log_service.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/system/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/system/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/system/contracts/imports.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/system/contracts/workers.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/system/imports.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/system/runtime/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/system/runtime/imports.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/services/system/workers.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/entities/base.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/application.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/application.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/console.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/console.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/directory.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/directory.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/dumper.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/dumper.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/executor.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/executor.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/inspire.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/inspire.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/logger.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/logger.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/performance_counter.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/performance_counter.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/progress_bar.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/progress_bar.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/reactor.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/reactor.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/testing.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/testing.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/workers.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/facades/workers.pyi +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/formatter/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/formatter/exceptions/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/formatter/exceptions/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/formatter/exceptions/contracts/parser.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/formatter/exceptions/parser.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/formatter/serializer.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/patterns/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/patterns/singleton/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/patterns/singleton/meta.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/performance/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/performance/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/performance/contracts/counter.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/performance/counter.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/standard/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/standard/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/standard/contracts/std.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/standard/exceptions/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/standard/exceptions/standard.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/standard/std.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/wrapper/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/wrapper/dataclass.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/support/wrapper/dot_dict.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/cases/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/cases/asynchronous.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/cases/synchronous.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/contracts/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/contracts/dumper.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/contracts/kernel.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/contracts/logs.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/contracts/printer.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/contracts/render.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/contracts/test_result.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/contracts/unit_test.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/core/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/core/unit_test.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/entities/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/entities/result.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/enums/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/enums/status.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/exceptions/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/exceptions/config.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/exceptions/failure.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/exceptions/persistence.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/exceptions/runtime.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/exceptions/value.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/kernel.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/output/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/output/dumper.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/output/printer.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/records/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/records/logs.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/base_path.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/execution_mode.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/fail_fast.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/folder_path.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/module_name.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/name_pattern.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/pattern.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/persistent.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/persistent_driver.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/throw_exception.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/verbosity.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/web_report.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/validators/workers.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/view/__init__.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/view/render.py +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis/test/view/report.stub +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis.egg-info/SOURCES.txt +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis.egg-info/dependency_links.txt +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis.egg-info/not-zip-safe +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis.egg-info/requires.txt +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/orionis.egg-info/top_level.txt +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/setup.cfg +0 -0
- {orionis-0.650.0 → orionis-0.652.0}/setup.py +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import subprocess
|
|
2
1
|
from orionis.console.base.command import BaseCommand
|
|
3
2
|
from orionis.console.exceptions import CLIOrionisRuntimeError
|
|
4
3
|
from orionis.foundation.contracts.application import IApplication
|
|
@@ -94,7 +93,7 @@ class LogClearCommand(BaseCommand):
|
|
|
94
93
|
# Recursively remove subdirectories and their contents
|
|
95
94
|
shutil.rmtree(entry)
|
|
96
95
|
|
|
97
|
-
except Exception
|
|
96
|
+
except Exception:
|
|
98
97
|
|
|
99
98
|
# Ignore errors for individual entries to continue processing others
|
|
100
99
|
pass
|
|
@@ -3,10 +3,7 @@ import re
|
|
|
3
3
|
from typing import List
|
|
4
4
|
from orionis.console.args.argument import CLIArgument
|
|
5
5
|
from orionis.console.base.command import BaseCommand
|
|
6
|
-
from orionis.console.contracts.reactor import IReactor
|
|
7
6
|
from orionis.console.exceptions import CLIOrionisRuntimeError
|
|
8
|
-
from rich.console import Console
|
|
9
|
-
from rich.panel import Panel
|
|
10
7
|
|
|
11
8
|
from orionis.foundation.contracts.application import IApplication
|
|
12
9
|
|
|
@@ -11,6 +11,7 @@ from orionis.container.contracts.container import IContainer
|
|
|
11
11
|
from orionis.container.entities.binding import Binding
|
|
12
12
|
from orionis.container.enums.lifetimes import Lifetime
|
|
13
13
|
from orionis.container.exceptions import OrionisContainerException
|
|
14
|
+
from orionis.container.exceptions.container import OrionisContainerTypeError
|
|
14
15
|
from orionis.container.validators import (
|
|
15
16
|
ImplementsAbstractMethods,
|
|
16
17
|
IsAbstractClass,
|
|
@@ -28,6 +29,8 @@ from orionis.services.introspection.concretes.reflection import ReflectionConcre
|
|
|
28
29
|
from orionis.services.introspection.dependencies.entities.argument import Argument
|
|
29
30
|
from orionis.services.introspection.dependencies.entities.resolve_argument import ResolveArguments
|
|
30
31
|
from orionis.services.introspection.dependencies.reflection import ReflectDependencies
|
|
32
|
+
from orionis.services.introspection.instances.reflection import ReflectionInstance
|
|
33
|
+
from orionis.services.introspection.objects.types import Type
|
|
31
34
|
|
|
32
35
|
class Container(IContainer):
|
|
33
36
|
|
|
@@ -178,6 +181,7 @@ class Container(IContainer):
|
|
|
178
181
|
return future.result()
|
|
179
182
|
|
|
180
183
|
else:
|
|
184
|
+
|
|
181
185
|
# If loop exists but not running, we can run the coroutine
|
|
182
186
|
return loop.run_until_complete(result)
|
|
183
187
|
|
|
@@ -225,12 +229,8 @@ class Container(IContainer):
|
|
|
225
229
|
total_dependencies = len(dependencies.resolved) + len(dependencies.unresolved)
|
|
226
230
|
|
|
227
231
|
# If the callable does not require any dependencies, invoke directly
|
|
228
|
-
if total_dependencies == 0:
|
|
229
|
-
result = fn(*args, **kwargs)
|
|
230
|
-
return self.__handleSyncAsyncResult(result)
|
|
231
|
-
|
|
232
232
|
# If enough arguments are provided, invoke directly
|
|
233
|
-
if total_provided_args >= total_dependencies:
|
|
233
|
+
if (total_dependencies == 0) or (total_provided_args >= total_dependencies):
|
|
234
234
|
result = fn(*args, **kwargs)
|
|
235
235
|
return self.__handleSyncAsyncResult(result)
|
|
236
236
|
|
|
@@ -298,6 +298,184 @@ class Container(IContainer):
|
|
|
298
298
|
f"Expected function signature: {function_name}{signature}"
|
|
299
299
|
) from e
|
|
300
300
|
|
|
301
|
+
def __decouplingCheck(
|
|
302
|
+
self,
|
|
303
|
+
abstract: Callable[..., Any],
|
|
304
|
+
concrete: Callable[..., Any],
|
|
305
|
+
enforce_decoupling: bool
|
|
306
|
+
) -> None:
|
|
307
|
+
"""
|
|
308
|
+
Validates the decoupling relationship between abstract and concrete classes.
|
|
309
|
+
|
|
310
|
+
Parameters
|
|
311
|
+
----------
|
|
312
|
+
abstract : Callable[..., Any]
|
|
313
|
+
The abstract base class.
|
|
314
|
+
concrete : Callable[..., Any]
|
|
315
|
+
The concrete implementation class.
|
|
316
|
+
enforce_decoupling : bool
|
|
317
|
+
Whether to enforce that concrete does NOT inherit from abstract.
|
|
318
|
+
|
|
319
|
+
Raises
|
|
320
|
+
------
|
|
321
|
+
OrionisContainerException
|
|
322
|
+
If the decoupling check fails.
|
|
323
|
+
"""
|
|
324
|
+
|
|
325
|
+
if enforce_decoupling:
|
|
326
|
+
if issubclass(concrete, abstract):
|
|
327
|
+
raise OrionisContainerException(
|
|
328
|
+
"The concrete class must NOT inherit from the provided abstract class. "
|
|
329
|
+
"Please ensure that the concrete class is not a subclass of the specified abstract class."
|
|
330
|
+
)
|
|
331
|
+
else:
|
|
332
|
+
if not issubclass(concrete, abstract):
|
|
333
|
+
raise OrionisContainerException(
|
|
334
|
+
"The concrete class must inherit from the provided abstract class. "
|
|
335
|
+
"Please ensure that the concrete class is a subclass of the specified abstract class."
|
|
336
|
+
)
|
|
337
|
+
|
|
338
|
+
def __implementsAbstractMethods(
|
|
339
|
+
self,
|
|
340
|
+
*,
|
|
341
|
+
abstract: Callable[..., Any] = None,
|
|
342
|
+
concrete: Callable[..., Any] = None,
|
|
343
|
+
instance: Any = None
|
|
344
|
+
) -> None:
|
|
345
|
+
"""
|
|
346
|
+
Validates that a concrete class or instance implements all abstract methods defined in an abstract class.
|
|
347
|
+
|
|
348
|
+
Parameters
|
|
349
|
+
----------
|
|
350
|
+
abstract : Callable[..., Any]
|
|
351
|
+
The abstract base class.
|
|
352
|
+
concrete : Callable[..., Any], optional
|
|
353
|
+
The class expected to implement the abstract methods.
|
|
354
|
+
instance : Any, optional
|
|
355
|
+
The instance expected to implement the abstract methods.
|
|
356
|
+
|
|
357
|
+
Raises
|
|
358
|
+
------
|
|
359
|
+
OrionisContainerException
|
|
360
|
+
If any abstract method is not implemented.
|
|
361
|
+
"""
|
|
362
|
+
|
|
363
|
+
# Validate that the abstract class is provided
|
|
364
|
+
if abstract is None:
|
|
365
|
+
raise OrionisContainerException("Abstract class must be provided for implementation check.")
|
|
366
|
+
|
|
367
|
+
# Instantiation of ReflectionAbstract for potential future use
|
|
368
|
+
rf_abstract = ReflectionAbstract(abstract)
|
|
369
|
+
|
|
370
|
+
# Check if the abstract class has abstract methods
|
|
371
|
+
abstract_methods = rf_abstract.getMethods()
|
|
372
|
+
if not abstract_methods:
|
|
373
|
+
raise OrionisContainerException(
|
|
374
|
+
f"The abstract class '{abstract.__name__}' does not define any abstract methods. "
|
|
375
|
+
"An abstract class must have at least one abstract method."
|
|
376
|
+
)
|
|
377
|
+
|
|
378
|
+
# Determine the target class or instance to check
|
|
379
|
+
target = concrete if concrete is not None else instance
|
|
380
|
+
if target is None:
|
|
381
|
+
raise OrionisContainerException("Either concrete class or instance must be provided for implementation check.")
|
|
382
|
+
|
|
383
|
+
# Validate that the target is a class or instance
|
|
384
|
+
target_class = target if Type(target).isClass() else target.__class__
|
|
385
|
+
|
|
386
|
+
# Instantiation of ReflectionConcrete for potential future use
|
|
387
|
+
rf_class = ReflectionConcrete(target_class)
|
|
388
|
+
|
|
389
|
+
# Extract class names for error messages
|
|
390
|
+
target_name = rf_class.getClassName()
|
|
391
|
+
abstract_name = rf_abstract.getClassName()
|
|
392
|
+
|
|
393
|
+
# Extract methods implemented by the target class
|
|
394
|
+
implemented_methods = rf_class.getMethods()
|
|
395
|
+
|
|
396
|
+
# Check if the target class implements all abstract methods
|
|
397
|
+
not_implemented = []
|
|
398
|
+
for method in abstract_methods:
|
|
399
|
+
if method not in implemented_methods:
|
|
400
|
+
not_implemented.append(method)
|
|
401
|
+
|
|
402
|
+
# If any abstract methods are not implemented, raise an exception
|
|
403
|
+
if not_implemented:
|
|
404
|
+
formatted = "\n • " + "\n • ".join(not_implemented)
|
|
405
|
+
raise OrionisContainerException(
|
|
406
|
+
f"'{target_name}' does not implement the following abstract methods defined in '{abstract_name}':{formatted}\n"
|
|
407
|
+
"Please ensure that all abstract methods are implemented."
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
def __makeAliasKey(
|
|
411
|
+
self,
|
|
412
|
+
abstract: Callable[..., Any],
|
|
413
|
+
alias: str = None
|
|
414
|
+
) -> str:
|
|
415
|
+
"""
|
|
416
|
+
Generates a unique and valid key for an alias based on the abstract class and optional alias.
|
|
417
|
+
|
|
418
|
+
This method ensures that the alias used for service registration is valid and unique.
|
|
419
|
+
If an explicit alias is provided, it validates the alias for type, emptiness, and
|
|
420
|
+
forbidden characters. If no alias is provided, it generates a default alias using
|
|
421
|
+
the abstract class's module and name.
|
|
422
|
+
|
|
423
|
+
Parameters
|
|
424
|
+
----------
|
|
425
|
+
abstract : Callable[..., Any]
|
|
426
|
+
The abstract base class or interface for which the alias is being generated.
|
|
427
|
+
alias : str, optional
|
|
428
|
+
An optional custom alias to use instead of the default generated alias.
|
|
429
|
+
|
|
430
|
+
Returns
|
|
431
|
+
-------
|
|
432
|
+
str
|
|
433
|
+
The validated or generated alias key. If a valid alias is provided, it is returned
|
|
434
|
+
directly. Otherwise, the default alias in the format 'module.ClassName' is returned.
|
|
435
|
+
|
|
436
|
+
Raises
|
|
437
|
+
------
|
|
438
|
+
OrionisContainerTypeError
|
|
439
|
+
If the provided alias is None, empty, whitespace only, not a string, or contains
|
|
440
|
+
invalid characters.
|
|
441
|
+
|
|
442
|
+
Notes
|
|
443
|
+
-----
|
|
444
|
+
- The alias must not contain whitespace or special symbols.
|
|
445
|
+
- If no alias is provided, the default alias is generated using the abstract's module
|
|
446
|
+
and class name.
|
|
447
|
+
"""
|
|
448
|
+
|
|
449
|
+
# Set of characters that are not allowed in aliases
|
|
450
|
+
invalid_chars = set(' \t\n\r\x0b\x0c!@#$%^&*()[]{};:,/<>?\\|`~"\'')
|
|
451
|
+
|
|
452
|
+
# If an alias is provided, validate and use it directly
|
|
453
|
+
if alias:
|
|
454
|
+
# Check for None, empty string, or whitespace-only alias
|
|
455
|
+
if alias is None or alias == "" or str(alias).isspace():
|
|
456
|
+
raise OrionisContainerTypeError(
|
|
457
|
+
"Alias cannot be None, empty, or whitespace only."
|
|
458
|
+
)
|
|
459
|
+
|
|
460
|
+
# Ensure the alias is a string
|
|
461
|
+
if not isinstance(alias, str):
|
|
462
|
+
raise OrionisContainerTypeError(
|
|
463
|
+
f"Expected a string type for alias, but got {type(alias).__name__} instead."
|
|
464
|
+
)
|
|
465
|
+
|
|
466
|
+
# Check for invalid characters in the alias
|
|
467
|
+
if any(char in invalid_chars for char in alias):
|
|
468
|
+
raise OrionisContainerTypeError(
|
|
469
|
+
f"Alias '{alias}' contains invalid characters. "
|
|
470
|
+
"Aliases must not contain whitespace or special symbols."
|
|
471
|
+
)
|
|
472
|
+
|
|
473
|
+
# Return the validated alias
|
|
474
|
+
return alias
|
|
475
|
+
|
|
476
|
+
# If no alias is provided, generate a default alias using module and class name
|
|
477
|
+
return f"{abstract.__module__}.{abstract.__name__}"
|
|
478
|
+
|
|
301
479
|
def transient(
|
|
302
480
|
self,
|
|
303
481
|
abstract: Callable[..., Any],
|
|
@@ -312,76 +490,187 @@ class Container(IContainer):
|
|
|
312
490
|
Parameters
|
|
313
491
|
----------
|
|
314
492
|
abstract : Callable[..., Any]
|
|
315
|
-
The abstract base type or interface to be bound.
|
|
493
|
+
The abstract base type or interface to be bound. Must be an abstract class or interface.
|
|
316
494
|
concrete : Callable[..., Any]
|
|
317
|
-
The concrete implementation to associate with the abstract type.
|
|
495
|
+
The concrete implementation to associate with the abstract type. Must be a concrete class.
|
|
318
496
|
alias : str, optional
|
|
319
|
-
An alternative name to register the service under. If not provided,
|
|
497
|
+
An alternative name to register the service under. If not provided, a default alias is generated
|
|
498
|
+
using the abstract's module and class name.
|
|
499
|
+
enforce_decoupling : bool, optional
|
|
500
|
+
If True, enforces that the concrete class does NOT inherit from the abstract class. If False,
|
|
501
|
+
requires that the concrete class is a subclass of the abstract.
|
|
320
502
|
|
|
321
503
|
Returns
|
|
322
504
|
-------
|
|
323
|
-
bool
|
|
324
|
-
True if the service was registered successfully.
|
|
505
|
+
bool or None
|
|
506
|
+
Returns True if the service was registered successfully. Returns None if registration fails.
|
|
325
507
|
|
|
326
508
|
Raises
|
|
327
509
|
------
|
|
328
510
|
OrionisContainerTypeError
|
|
329
|
-
If the abstract or concrete class
|
|
511
|
+
If the abstract or concrete class validation fails.
|
|
330
512
|
OrionisContainerException
|
|
331
|
-
If the
|
|
513
|
+
If the decoupling check fails or if an unexpected error occurs during registration.
|
|
332
514
|
|
|
333
515
|
Notes
|
|
334
516
|
-----
|
|
335
|
-
|
|
336
|
-
meaning a new instance will be created each time the service is requested.
|
|
337
|
-
|
|
517
|
+
This method registers the given concrete implementation to the abstract type with a transient lifetime,
|
|
518
|
+
meaning a new instance will be created each time the service is requested. The method validates the
|
|
519
|
+
abstract and concrete types, checks decoupling rules, ensures all abstract methods are implemented,
|
|
520
|
+
and manages service aliases. If a service is already registered under the same abstract or alias,
|
|
521
|
+
it is removed before registering the new binding.
|
|
338
522
|
"""
|
|
339
523
|
|
|
340
|
-
|
|
341
|
-
IsAbstractClass(abstract, Lifetime.TRANSIENT)
|
|
524
|
+
try:
|
|
342
525
|
|
|
343
|
-
|
|
344
|
-
|
|
526
|
+
# Ensure that abstract is an abstract class
|
|
527
|
+
ReflectionAbstract.ensureIsAbstractClass(abstract)
|
|
345
528
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
529
|
+
# Ensure that concrete is a concrete class
|
|
530
|
+
ReflectionConcrete.ensureIsConcreteClass(concrete)
|
|
531
|
+
|
|
532
|
+
# Ensure that concrete is NOT a subclass of abstract if decoupling is enforced,
|
|
533
|
+
# otherwise ensure it is a subclass
|
|
534
|
+
self.__decouplingCheck(abstract, concrete, enforce_decoupling)
|
|
535
|
+
|
|
536
|
+
# Ensure that all abstract methods are implemented by the concrete class
|
|
537
|
+
self.__implementsAbstractMethods(
|
|
538
|
+
abstract=abstract,
|
|
539
|
+
concrete=concrete
|
|
540
|
+
)
|
|
541
|
+
|
|
542
|
+
# Validate and generate the alias key (either provided or default)
|
|
543
|
+
alias = self.__makeAliasKey(abstract, alias)
|
|
544
|
+
|
|
545
|
+
# If the service is already registered, remove the existing binding
|
|
546
|
+
self.drop(abstract, alias)
|
|
547
|
+
|
|
548
|
+
# Register the service with transient lifetime
|
|
549
|
+
self.__bindings[abstract] = Binding(
|
|
550
|
+
contract = abstract,
|
|
551
|
+
concrete = concrete,
|
|
552
|
+
lifetime = Lifetime.TRANSIENT,
|
|
553
|
+
enforce_decoupling = enforce_decoupling,
|
|
554
|
+
alias = alias
|
|
555
|
+
)
|
|
556
|
+
|
|
557
|
+
# Register the alias for lookup
|
|
558
|
+
self.__aliases[alias] = self.__bindings[abstract]
|
|
559
|
+
|
|
560
|
+
# Return True to indicate successful registration
|
|
561
|
+
return True
|
|
562
|
+
|
|
563
|
+
except Exception as e:
|
|
564
|
+
|
|
565
|
+
# Raise a container exception with details if registration fails
|
|
566
|
+
raise OrionisContainerException(
|
|
567
|
+
f"Unexpected error registering {Lifetime.TRANSIENT} service: {e}"
|
|
568
|
+
) from e
|
|
569
|
+
|
|
570
|
+
def instance(
|
|
571
|
+
self,
|
|
572
|
+
abstract: Callable[..., Any],
|
|
573
|
+
instance: Any,
|
|
574
|
+
*,
|
|
575
|
+
alias: str = None,
|
|
576
|
+
enforce_decoupling: bool = False
|
|
577
|
+
) -> Optional[bool]:
|
|
578
|
+
"""
|
|
579
|
+
Registers an instance of a class or interface in the container with singleton lifetime.
|
|
580
|
+
|
|
581
|
+
This method validates the abstract type, the instance, and the alias (if provided).
|
|
582
|
+
It ensures that the instance is a valid implementation of the abstract class or interface,
|
|
583
|
+
optionally enforces decoupling, and registers the instance in the container under both
|
|
584
|
+
the abstract type and the alias.
|
|
585
|
+
|
|
586
|
+
Parameters
|
|
587
|
+
----------
|
|
588
|
+
abstract : Callable[..., Any]
|
|
589
|
+
The abstract class or interface to associate with the instance.
|
|
590
|
+
instance : Any
|
|
591
|
+
The concrete instance to register.
|
|
592
|
+
alias : str, optional
|
|
593
|
+
An optional alias to register the instance under. If not provided,
|
|
594
|
+
a default alias is generated from the abstract's module and class name.
|
|
595
|
+
enforce_decoupling : bool, optional
|
|
596
|
+
If True, enforces that the instance's class does NOT inherit from the abstract class.
|
|
597
|
+
If False, requires that the instance's class is a subclass of the abstract.
|
|
598
|
+
|
|
599
|
+
Returns
|
|
600
|
+
-------
|
|
601
|
+
bool or None
|
|
602
|
+
Returns True if the instance was successfully registered.
|
|
603
|
+
Returns None if registration fails due to an exception.
|
|
604
|
+
|
|
605
|
+
Raises
|
|
606
|
+
------
|
|
607
|
+
OrionisContainerTypeError
|
|
608
|
+
If `abstract` is not an abstract class or if `alias` is not a valid string.
|
|
609
|
+
OrionisContainerException
|
|
610
|
+
If the instance is not a valid implementation, fails decoupling check,
|
|
611
|
+
or if registration fails for any other reason.
|
|
612
|
+
|
|
613
|
+
Notes
|
|
614
|
+
-----
|
|
615
|
+
- The instance is registered with singleton lifetime, meaning it will be shared
|
|
616
|
+
across all resolutions of the abstract type or alias.
|
|
617
|
+
- The method ensures that all abstract methods are implemented by the instance.
|
|
618
|
+
- If a service is already registered under the same abstract or alias, it is removed
|
|
619
|
+
before registering the new instance.
|
|
620
|
+
"""
|
|
621
|
+
|
|
622
|
+
try:
|
|
623
|
+
|
|
624
|
+
# Ensure that the abstract is an abstract class
|
|
625
|
+
ReflectionAbstract.ensureIsAbstractClass(abstract)
|
|
626
|
+
|
|
627
|
+
# Ensure that the instance is a valid instance of the abstract
|
|
628
|
+
ReflectionInstance.ensureIsInstance(instance)
|
|
629
|
+
|
|
630
|
+
# Enforce decoupling or subclass relationship as specified
|
|
631
|
+
self.__decouplingCheck(abstract, instance.__class__, enforce_decoupling)
|
|
632
|
+
|
|
633
|
+
# Ensure all abstract methods are implemented by the instance
|
|
634
|
+
self.__implementsAbstractMethods(
|
|
635
|
+
abstract=abstract,
|
|
636
|
+
instance=instance
|
|
637
|
+
)
|
|
638
|
+
|
|
639
|
+
# Validate and generate the alias key (either provided or default)
|
|
640
|
+
alias = self.__makeAliasKey(abstract, alias)
|
|
641
|
+
|
|
642
|
+
# If the service is already registered, remove the existing binding
|
|
643
|
+
self.drop(abstract, alias)
|
|
644
|
+
|
|
645
|
+
# Register the instance with singleton lifetime
|
|
646
|
+
self.__bindings[abstract] = Binding(
|
|
647
|
+
contract = abstract,
|
|
648
|
+
instance = instance,
|
|
649
|
+
lifetime = Lifetime.SINGLETON,
|
|
650
|
+
enforce_decoupling = enforce_decoupling,
|
|
651
|
+
alias = alias
|
|
652
|
+
)
|
|
653
|
+
|
|
654
|
+
# Register the alias for lookup
|
|
655
|
+
self.__aliases[alias] = self.__bindings[abstract]
|
|
656
|
+
|
|
657
|
+
# Return True to indicate successful registration
|
|
658
|
+
return True
|
|
659
|
+
|
|
660
|
+
except Exception as e:
|
|
661
|
+
|
|
662
|
+
# Raise a container exception with details if registration fails
|
|
663
|
+
raise OrionisContainerException(
|
|
664
|
+
f"Unexpected error registering instance: {e}"
|
|
665
|
+
) from e
|
|
349
666
|
|
|
350
|
-
# Validate that concrete is a subclass of abstract
|
|
351
|
-
else:
|
|
352
|
-
IsSubclass(abstract, concrete)
|
|
353
667
|
|
|
354
|
-
# Ensure implementation
|
|
355
|
-
ImplementsAbstractMethods(
|
|
356
|
-
abstract=abstract,
|
|
357
|
-
concrete=concrete
|
|
358
|
-
)
|
|
359
668
|
|
|
360
|
-
# Ensure that the alias is a valid string if provided
|
|
361
|
-
if alias:
|
|
362
|
-
IsValidAlias(alias)
|
|
363
669
|
|
|
364
|
-
# Cretate a default alias if none provided
|
|
365
|
-
else:
|
|
366
|
-
alias = f"{abstract.__module__}.{abstract.__name__}"
|
|
367
670
|
|
|
368
|
-
# If the service is already registered, drop it
|
|
369
|
-
self.drop(abstract, alias)
|
|
370
671
|
|
|
371
|
-
# Register the service with transient lifetime
|
|
372
|
-
self.__bindings[abstract] = Binding(
|
|
373
|
-
contract = abstract,
|
|
374
|
-
concrete = concrete,
|
|
375
|
-
lifetime = Lifetime.TRANSIENT,
|
|
376
|
-
enforce_decoupling = enforce_decoupling,
|
|
377
|
-
alias = alias
|
|
378
|
-
)
|
|
379
672
|
|
|
380
|
-
# Register the alias
|
|
381
|
-
self.__aliases[alias] = self.__bindings[abstract]
|
|
382
673
|
|
|
383
|
-
# Return True to indicate successful registration
|
|
384
|
-
return True
|
|
385
674
|
|
|
386
675
|
def singleton(
|
|
387
676
|
self,
|
|
@@ -641,96 +930,7 @@ class Container(IContainer):
|
|
|
641
930
|
# Return True to indicate successful registration
|
|
642
931
|
return True
|
|
643
932
|
|
|
644
|
-
|
|
645
|
-
self,
|
|
646
|
-
abstract: Callable[..., Any],
|
|
647
|
-
instance: Any,
|
|
648
|
-
*,
|
|
649
|
-
alias: str = None,
|
|
650
|
-
enforce_decoupling: bool = False
|
|
651
|
-
) -> Optional[bool]:
|
|
652
|
-
"""
|
|
653
|
-
Registers an instance of a class or interface in the container.
|
|
654
|
-
Parameters
|
|
655
|
-
----------
|
|
656
|
-
abstract : Callable[..., Any]
|
|
657
|
-
The abstract class or interface to associate with the instance.
|
|
658
|
-
instance : Any
|
|
659
|
-
The concrete instance to register.
|
|
660
|
-
alias : str, optional
|
|
661
|
-
An optional alias to register the instance under. If not provided,
|
|
662
|
-
the abstract's `__name__` attribute will be used as the alias if available.
|
|
663
|
-
Returns
|
|
664
|
-
-------
|
|
665
|
-
bool
|
|
666
|
-
True if the instance was successfully registered.
|
|
667
|
-
Raises
|
|
668
|
-
------
|
|
669
|
-
TypeError
|
|
670
|
-
If `abstract` is not an abstract class or if `alias` is not a valid string.
|
|
671
|
-
ValueError
|
|
672
|
-
If `instance` is not a valid instance of `abstract`.
|
|
673
|
-
Notes
|
|
674
|
-
-----
|
|
675
|
-
This method ensures that the abstract is a valid abstract class, the instance
|
|
676
|
-
is valid, and the alias (if provided) is a valid string. The instance is then
|
|
677
|
-
registered in the container under both the abstract and the alias.
|
|
678
|
-
"""
|
|
679
|
-
|
|
680
|
-
# Validate the enforce_decoupling parameter
|
|
681
|
-
if isinstance(enforce_decoupling, bool):
|
|
682
|
-
|
|
683
|
-
# Ensure that the abstract is an abstract class
|
|
684
|
-
IsAbstractClass(abstract, f"Instance {Lifetime.SINGLETON}")
|
|
685
|
-
|
|
686
|
-
# Ensure that the instance is a valid instance
|
|
687
|
-
IsInstance(instance)
|
|
688
|
-
|
|
689
|
-
# Ensure that instance is NOT a subclass of abstract
|
|
690
|
-
if enforce_decoupling:
|
|
691
|
-
IsNotSubclass(abstract, instance.__class__)
|
|
692
|
-
|
|
693
|
-
# Validate that instance is a subclass of abstract
|
|
694
|
-
else:
|
|
695
|
-
IsSubclass(abstract, instance.__class__)
|
|
696
|
-
|
|
697
|
-
# Ensure implementation
|
|
698
|
-
ImplementsAbstractMethods(
|
|
699
|
-
abstract=abstract,
|
|
700
|
-
instance=instance
|
|
701
|
-
)
|
|
702
|
-
|
|
703
|
-
# Ensure that the alias is a valid string if provided
|
|
704
|
-
if alias:
|
|
705
|
-
IsValidAlias(alias)
|
|
706
|
-
else:
|
|
707
|
-
alias = f"{abstract.__module__}.{abstract.__name__}"
|
|
708
|
-
|
|
709
|
-
# If the service is already registered, drop it
|
|
710
|
-
self.drop(abstract, alias)
|
|
711
|
-
|
|
712
|
-
else:
|
|
713
|
-
|
|
714
|
-
# Drop the existing alias if it exists
|
|
715
|
-
self.drop(alias=alias)
|
|
716
|
-
|
|
717
|
-
# If enforce_decoupling is not a boolean, set it to False
|
|
718
|
-
enforce_decoupling = False
|
|
719
|
-
|
|
720
|
-
# Register the instance with the abstract type
|
|
721
|
-
self.__bindings[abstract] = Binding(
|
|
722
|
-
contract = abstract,
|
|
723
|
-
instance = instance,
|
|
724
|
-
lifetime = Lifetime.SINGLETON,
|
|
725
|
-
enforce_decoupling = enforce_decoupling,
|
|
726
|
-
alias = alias
|
|
727
|
-
)
|
|
728
|
-
|
|
729
|
-
# Register the alias
|
|
730
|
-
self.__aliases[alias] = self.__bindings[abstract]
|
|
731
|
-
|
|
732
|
-
# Return True to indicate successful registration
|
|
733
|
-
return True
|
|
933
|
+
|
|
734
934
|
|
|
735
935
|
def callable(
|
|
736
936
|
self,
|
|
@@ -2201,8 +2201,7 @@ class Application(Container, IApplication):
|
|
|
2201
2201
|
self.instance(
|
|
2202
2202
|
IApplication,
|
|
2203
2203
|
self,
|
|
2204
|
-
alias="x-orionis.foundation.contracts.application.IApplication"
|
|
2205
|
-
enforce_decoupling=None
|
|
2204
|
+
alias="x-orionis.foundation.contracts.application.IApplication"
|
|
2206
2205
|
)
|
|
2207
2206
|
|
|
2208
2207
|
# Load configuration if not already set
|
|
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
|