orionis 0.533.0__tar.gz → 0.535.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.533.0/orionis.egg-info → orionis-0.535.0}/PKG-INFO +1 -1
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/tasks/schedule.py +79 -93
- {orionis-0.533.0 → orionis-0.535.0}/orionis/failure/catch.py +5 -3
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/application.py +3 -2
- {orionis-0.533.0 → orionis-0.535.0}/orionis/metadata/framework.py +1 -1
- orionis-0.535.0/orionis/services/asynchrony/contracts/coroutines.py +76 -0
- orionis-0.535.0/orionis/services/asynchrony/coroutines.py +175 -0
- {orionis-0.533.0 → orionis-0.535.0/orionis.egg-info}/PKG-INFO +1 -1
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/asynchrony/test_services_asynchrony_coroutine.py +1 -1
- orionis-0.533.0/orionis/services/asynchrony/contracts/coroutines.py +0 -28
- orionis-0.533.0/orionis/services/asynchrony/coroutines.py +0 -70
- {orionis-0.533.0 → orionis-0.535.0}/LICENCE +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/MANIFEST.in +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/README.md +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/app.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/args/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/args/argument.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/args/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/args/enums/actions.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/base/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/base/command.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/base/scheduler.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/base/scheduler_event_listener.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/commands/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/commands/cache.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/commands/help.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/commands/make_listener.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/commands/publisher.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/commands/scheduler_list.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/commands/scheduler_work.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/commands/test.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/commands/version.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/commands/workflow.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/contracts/command.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/contracts/event.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/contracts/kernel.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/contracts/reactor.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/contracts/schedule.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/contracts/schedule_event_listener.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/contracts/scheduler.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/core/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/core/reactor.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/dumper/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/dumper/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/dumper/contracts/dump.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/dumper/dump.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/dynamic/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/dynamic/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/dynamic/contracts/progress_bar.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/dynamic/progress_bar.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/all_jobs_removed.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/event_job.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/executor_added.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/executor_removed.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_added.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_error.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_event_data.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_executed.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_max_instances.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_missed.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_modified.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_pause.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_removed.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_resume.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_store_added.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_store_removed.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/job_submitted.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/request.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/scheduler_error.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/scheduler_event_data.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/scheduler_paused.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/scheduler_resumed.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/scheduler_shutdown.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/entities/scheduler_started.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/enums/command.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/enums/event.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/enums/listener.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/exceptions/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/exceptions/cli_exception.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/exceptions/cli_orionis_value_error.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/exceptions/cli_runtime_error.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/exceptions/cli_schedule_exception.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/kernel.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/output/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/output/console.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/output/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/output/contracts/console.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/output/contracts/executor.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/output/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/output/enums/styles.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/output/executor.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/request/cli_request.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/tasks/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/tasks/event.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/console/tasks/listener.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/container.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/context/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/context/manager.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/context/scope.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/contracts/container.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/contracts/service_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/entities/binding.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/enums/lifetimes.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/exceptions/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/exceptions/attribute.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/exceptions/exception.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/exceptions/type.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/exceptions/value.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/facades/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/facades/facade.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/providers/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/providers/service_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/validators/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/validators/implements.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/validators/is_abstract_class.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/validators/is_callable.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/validators/is_concrete_class.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/validators/is_instance.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/validators/is_not_subclass.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/validators/is_subclass.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/validators/is_valid_alias.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/container/validators/lifetime.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/failure/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/failure/base/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/failure/base/handler.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/failure/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/failure/contracts/catch.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/failure/contracts/handler.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/failure/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/failure/entities/throwable.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/app/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/app/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/app/entities/app.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/app/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/app/enums/ciphers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/app/enums/environments.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/auth/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/auth/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/auth/entities/auth.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/cache/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/cache/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/cache/entities/cache.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/cache/entities/file.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/cache/entities/stores.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/cache/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/cache/enums/drivers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/cors/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/cors/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/cors/entities/cors.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/entities/connections.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/entities/database.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/entities/mysql.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/entities/oracle.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/entities/pgsql.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/entities/sqlite.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/mysql_charsets.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/mysql_collations.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/mysql_engine.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/oracle_encoding.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/oracle_nencoding.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/pgsql_charsets.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/pgsql_collations.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/pgsql_mode.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/sqlite_foreign_key.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/sqlite_journal.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/database/enums/sqlite_synchronous.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/filesystems/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/filesystems/entitites/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/filesystems/entitites/aws.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/filesystems/entitites/disks.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/filesystems/entitites/filesystems.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/filesystems/entitites/local.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/filesystems/entitites/public.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/entities/channels.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/entities/chunked.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/entities/daily.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/entities/hourly.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/entities/logging.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/entities/monthly.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/entities/stack.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/entities/weekly.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/enums/levels.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/validators/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/validators/level.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/logging/validators/path.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/mail/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/mail/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/mail/entities/file.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/mail/entities/mail.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/mail/entities/mailers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/mail/entities/smtp.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/queue/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/queue/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/queue/entities/brokers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/queue/entities/database.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/queue/entities/queue.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/queue/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/queue/enums/strategy.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/roots/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/roots/paths.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/session/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/session/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/session/entities/session.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/session/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/session/enums/same_site_policy.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/session/helpers/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/session/helpers/secret_key.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/startup.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/testing/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/testing/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/testing/entities/testing.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/testing/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/testing/enums/drivers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/testing/enums/mode.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/config/testing/enums/verbosity.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/contracts/application.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/contracts/config.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/exceptions/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/exceptions/integrity.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/exceptions/runtime.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/exceptions/type.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/exceptions/value.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/catch_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/console_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/directory_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/dumper_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/executor_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/inspirational_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/logger_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/performance_counter_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/progress_bar_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/reactor_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/scheduler_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/testing_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/foundation/providers/workers_provider.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/metadata/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/metadata/package.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/asynchrony/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/asynchrony/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/asynchrony/exceptions/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/asynchrony/exceptions/exception.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/contracts/caster.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/contracts/env.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/core/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/core/dot_env.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/dynamic/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/dynamic/caster.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/enums/value_type.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/env.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/exceptions/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/exceptions/exception.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/exceptions/value.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/helpers/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/helpers/functions.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/key/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/key/key_generator.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/validators/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/validators/key_name.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/environment/validators/types.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/file/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/file/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/file/contracts/directory.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/file/directory.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/inspirational/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/inspirational/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/inspirational/contracts/inspire.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/inspirational/inspire.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/inspirational/quotes.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/abstract/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/abstract/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/abstract/contracts/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/abstract/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/callables/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/callables/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/callables/contracts/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/callables/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/concretes/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/concretes/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/concretes/contracts/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/concretes/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/dataclass/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/dataclass/attributes.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/dependencies/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/dependencies/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/dependencies/contracts/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/dependencies/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/dependencies/entities/argument.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/dependencies/entities/resolve_argument.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/dependencies/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/exceptions/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/exceptions/attribute.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/exceptions/type.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/exceptions/value.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/instances/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/instances/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/instances/contracts/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/instances/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/modules/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/modules/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/modules/contracts/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/modules/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/objects/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/objects/types.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/introspection/reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/log/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/log/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/log/contracts/log_service.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/log/exceptions/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/log/exceptions/runtime.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/log/handlers/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/log/handlers/filename.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/log/handlers/size_rotating.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/log/handlers/timed_rotating.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/log/log_service.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/system/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/system/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/system/contracts/imports.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/system/contracts/workers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/system/imports.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/system/runtime/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/system/runtime/imports.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/services/system/workers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/entities/base.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/application.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/console.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/dumper.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/executor.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/inspire.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/logger.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/performance_counter.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/progress_bar.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/reactor.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/testing.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/facades/workers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/formatter/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/formatter/exceptions/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/formatter/exceptions/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/formatter/exceptions/contracts/parser.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/formatter/exceptions/parser.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/formatter/serializer.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/patterns/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/patterns/singleton/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/patterns/singleton/meta.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/performance/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/performance/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/performance/contracts/counter.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/performance/counter.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/standard/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/standard/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/standard/contracts/std.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/standard/exceptions/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/standard/exceptions/value.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/standard/std.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/wrapper/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/support/wrapper/dot_dict.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/cases/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/cases/asynchronous.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/cases/synchronous.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/contracts/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/contracts/dumper.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/contracts/kernel.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/contracts/logs.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/contracts/printer.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/contracts/render.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/contracts/test_result.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/contracts/unit_test.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/core/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/core/unit_test.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/entities/result.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/enums/status.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/exceptions/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/exceptions/config.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/exceptions/failure.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/exceptions/persistence.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/exceptions/runtime.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/exceptions/value.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/kernel.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/output/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/output/dumper.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/output/printer.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/records/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/records/logs.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/base_path.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/execution_mode.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/fail_fast.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/folder_path.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/module_name.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/name_pattern.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/pattern.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/persistent.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/persistent_driver.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/print_result.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/tags.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/throw_exception.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/verbosity.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/web_report.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/validators/workers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/view/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis/test/view/render.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis.egg-info/SOURCES.txt +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis.egg-info/dependency_links.txt +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis.egg-info/requires.txt +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis.egg-info/top_level.txt +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/orionis.egg-info/zip-safe +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/setup.cfg +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/setup.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/context/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/context/test_manager.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/context/test_scope.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/core/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/core/test_advanced_async.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/core/test_async_optimizations.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/core/test_container.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/core/test_singleton.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/core/test_thread_safety.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/entities/test_binding.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/enums/test_lifetimes.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/facades/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/facades/test_facade.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/mocks/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/mocks/mock_advanced_async.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/mocks/mock_async_optimizations.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/mocks/mock_auto_resolution.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/mocks/mock_complex_classes.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/mocks/mock_simple_classes.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/providers/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/providers/test_providers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/validators/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/validators/test_implements.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/validators/test_is_abstract_class.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/validators/test_is_callable.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/validators/test_is_concrete_class.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/validators/test_is_instance.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/validators/test_is_not_subclass.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/validators/test_is_subclass.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/validators/test_is_valid_alias.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/container/validators/test_lifetime.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/example/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/example/test_example.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/app/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/app/test_foundation_config_app.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/auth/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/auth/test_foundation_config_auth.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/cache/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/cache/test_foundation_config_cache.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/cache/test_foundation_config_cache_file.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/cache/test_foundation_config_cache_stores.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/cors/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/cors/test_foundation_config_cors.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/database/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/database/test_foundation_config_database.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/database/test_foundation_config_database_connections.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/database/test_foundation_config_database_mysql.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/database/test_foundation_config_database_oracle.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/database/test_foundation_config_database_pgsql.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/database/test_foundation_config_database_sqlite.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/filesystems/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_aws.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_disks.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_local.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_public.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/logging/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/logging/test_foundation_config_logging.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/logging/test_foundation_config_logging_channels.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/logging/test_foundation_config_logging_chunked.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/logging/test_foundation_config_logging_daily.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/logging/test_foundation_config_logging_hourly.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/logging/test_foundation_config_logging_monthly.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/logging/test_foundation_config_logging_stack.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/logging/test_foundation_config_logging_weekly.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/mail/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/mail/test_foundation_config_mail.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/mail/test_foundation_config_mail_file.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/mail/test_foundation_config_mail_mailers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/mail/test_foundation_config_mail_smtp.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/queue/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/queue/test_foundation_config_queue.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/queue/test_foundation_config_queue_brokers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/queue/test_foundation_config_queue_database.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/root/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/root/test_foundation_config_root_paths.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/session/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/session/test_foundation_config_session.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/startup/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/startup/test_foundation_config_startup.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/testing/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/foundation/config/testing/test_foundation_config_testing.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/metadata/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/metadata/test_metadata_framework.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/metadata/test_metadata_package.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/asynchrony/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/environment/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/environment/test_services_environment.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/dependencies/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/dependencies/mocks/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/dependencies/mocks/mock_user.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/dependencies/mocks/mock_user_controller.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/dependencies/mocks/mock_users_permissions.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/dependencies/test_reflect_dependencies.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/reflection/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/reflection/mock/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/reflection/mock/fake_reflect_instance.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/reflection/test_reflection_abstract.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/reflection/test_reflection_callable.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/reflection/test_reflection_concrete.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/reflection/test_reflection_instance.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/reflection/test_reflection_module.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/introspection/test_reflection.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/log/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/log/test_log.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/system/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/system/test_services_system_imports.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/services/system/test_services_system_workers.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/support/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/support/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/support/entities/mock_dataclass.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/support/entities/test_base.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/support/patterns/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/support/patterns/singleton/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/support/patterns/singleton/test_patterns_singleton.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/support/standard/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/support/standard/test_services_std.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/support/wrapper/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/support/wrapper/test_services_wrapper_docdict.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/cases/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/cases/test_testing_asynchronous.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/cases/test_testing_synchronous.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/entities/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/entities/test_testing_result.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/enums/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/enums/test_testing_status.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/output/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/output/test_testing_dumper.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/output/test_testing_printer.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/records/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/records/test_testing_records.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/test_testing_unit.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/validators/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/validators/test_testing_validators.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/view/__init__.py +0 -0
- {orionis-0.533.0 → orionis-0.535.0}/tests/testing/view/test_render.py +0 -0
|
@@ -37,6 +37,7 @@ from orionis.console.exceptions import CLIOrionisRuntimeError
|
|
|
37
37
|
from orionis.console.exceptions.cli_orionis_value_error import CLIOrionisValueError
|
|
38
38
|
from orionis.failure.contracts.catch import ICatch
|
|
39
39
|
from orionis.foundation.contracts.application import IApplication
|
|
40
|
+
from orionis.services.asynchrony.coroutines import Coroutine
|
|
40
41
|
from orionis.services.log.contracts.log_service import ILogger
|
|
41
42
|
|
|
42
43
|
class Schedule(ISchedule):
|
|
@@ -478,44 +479,13 @@ class Schedule(ISchedule):
|
|
|
478
479
|
# If is Callable
|
|
479
480
|
if callable(listener):
|
|
480
481
|
|
|
482
|
+
# Invoke the listener, handling both coroutine and regular functions
|
|
481
483
|
try:
|
|
482
484
|
|
|
483
|
-
#
|
|
484
|
-
|
|
485
|
+
# Use Coroutine to handle both sync and async listeners
|
|
486
|
+
Coroutine(listener).invoke(event_data, self)
|
|
485
487
|
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
# Try to get the current running event loop
|
|
489
|
-
loop = asyncio.get_running_loop()
|
|
490
|
-
|
|
491
|
-
# Schedule the coroutine as a task in the current loop
|
|
492
|
-
loop.create_task(listener(event_data, self))
|
|
493
|
-
|
|
494
|
-
except RuntimeError:
|
|
495
|
-
|
|
496
|
-
# No running event loop, create a new one
|
|
497
|
-
try:
|
|
498
|
-
|
|
499
|
-
# Create and run the coroutine in a new event loop
|
|
500
|
-
asyncio.run(listener(event_data, self))
|
|
501
|
-
|
|
502
|
-
except Exception as e:
|
|
503
|
-
|
|
504
|
-
# Handle exceptions during coroutine execution
|
|
505
|
-
error_msg = f"Failed to run async listener for '{scheduler_event}': {str(e)}"
|
|
506
|
-
self.__logger.error(error_msg)
|
|
507
|
-
raise CLIOrionisRuntimeError(error_msg) from e
|
|
508
|
-
|
|
509
|
-
else:
|
|
510
|
-
|
|
511
|
-
# Call the regular listener function directly
|
|
512
|
-
listener(event_data, self)
|
|
513
|
-
|
|
514
|
-
except Exception as e:
|
|
515
|
-
|
|
516
|
-
# Re-raise CLIOrionisRuntimeError exceptions
|
|
517
|
-
if isinstance(e, CLIOrionisRuntimeError):
|
|
518
|
-
raise e
|
|
488
|
+
except BaseException as e:
|
|
519
489
|
|
|
520
490
|
# Construct and log error message
|
|
521
491
|
error_msg = f"An error occurred while invoking the listener for event '{scheduler_event}': {str(e)}"
|
|
@@ -588,45 +558,14 @@ class Schedule(ISchedule):
|
|
|
588
558
|
# Retrieve the method from the listener
|
|
589
559
|
listener_method = getattr(listener, scheduler_event)
|
|
590
560
|
|
|
561
|
+
# Invoke the listener method, handling both coroutine and regular functions
|
|
591
562
|
try:
|
|
592
563
|
|
|
593
|
-
#
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
try:
|
|
597
|
-
|
|
598
|
-
# Try to get the current running event loop
|
|
599
|
-
loop = asyncio.get_running_loop()
|
|
600
|
-
|
|
601
|
-
# Schedule the coroutine as a task in the current loop
|
|
602
|
-
loop.create_task(listener_method(event_data, self))
|
|
603
|
-
|
|
604
|
-
except RuntimeError:
|
|
605
|
-
|
|
606
|
-
# No running event loop, create a new one
|
|
607
|
-
try:
|
|
608
|
-
|
|
609
|
-
# Create and run the coroutine in a new event loop
|
|
610
|
-
asyncio.run(listener_method(event_data, self))
|
|
611
|
-
|
|
612
|
-
except Exception as e:
|
|
613
|
-
|
|
614
|
-
# Handle exceptions during coroutine execution
|
|
615
|
-
error_msg = f"Failed to run async listener_method for '{scheduler_event}': {str(e)}"
|
|
616
|
-
self.__logger.error(error_msg)
|
|
617
|
-
raise CLIOrionisRuntimeError(error_msg) from e
|
|
618
|
-
|
|
619
|
-
else:
|
|
620
|
-
|
|
621
|
-
# Call the regular listener_method function directly
|
|
622
|
-
listener_method(event_data, self)
|
|
564
|
+
# Use Coroutine to handle both sync and async listener methods
|
|
565
|
+
Coroutine(listener_method).invoke(event_data, self)
|
|
623
566
|
|
|
624
567
|
except Exception as e:
|
|
625
568
|
|
|
626
|
-
# Re-raise CLIOrionisRuntimeError exceptions
|
|
627
|
-
if isinstance(e, CLIOrionisRuntimeError):
|
|
628
|
-
raise e
|
|
629
|
-
|
|
630
569
|
# Construct and log error message
|
|
631
570
|
error_msg = f"An error occurred while invoking the listener_method for event '{scheduler_event}': {str(e)}"
|
|
632
571
|
self.__logger.error(error_msg)
|
|
@@ -1081,52 +1020,99 @@ class Schedule(ISchedule):
|
|
|
1081
1020
|
func: Callable[..., Awaitable[Any]]
|
|
1082
1021
|
) -> Callable[..., Any]:
|
|
1083
1022
|
"""
|
|
1084
|
-
Wrap an asynchronous function to be
|
|
1023
|
+
Wrap an asynchronous function to be executed in a synchronous context.
|
|
1085
1024
|
|
|
1086
|
-
This method
|
|
1087
|
-
|
|
1088
|
-
|
|
1025
|
+
This method creates a synchronous wrapper around an asynchronous function (coroutine)
|
|
1026
|
+
that enables its execution within non-async contexts. The wrapper leverages the
|
|
1027
|
+
Coroutine utility class to handle the complexities of asyncio event loop management
|
|
1028
|
+
and provides proper error handling with detailed logging and custom exception
|
|
1029
|
+
propagation.
|
|
1030
|
+
|
|
1031
|
+
The wrapper is particularly useful when integrating asynchronous functions with
|
|
1032
|
+
synchronous APIs or frameworks that do not natively support async operations,
|
|
1033
|
+
such as the APScheduler job execution environment.
|
|
1089
1034
|
|
|
1090
1035
|
Parameters
|
|
1091
1036
|
----------
|
|
1092
1037
|
func : Callable[..., Awaitable[Any]]
|
|
1093
|
-
The asynchronous function (coroutine) to be wrapped. This function
|
|
1094
|
-
defined using the `async def` syntax and return an awaitable object.
|
|
1038
|
+
The asynchronous function (coroutine) to be wrapped. This function must be
|
|
1039
|
+
defined using the `async def` syntax and return an awaitable object. The
|
|
1040
|
+
function can accept any number of positional and keyword arguments.
|
|
1095
1041
|
|
|
1096
1042
|
Returns
|
|
1097
1043
|
-------
|
|
1098
1044
|
Callable[..., Any]
|
|
1099
|
-
A synchronous wrapper function that
|
|
1100
|
-
|
|
1101
|
-
|
|
1045
|
+
A synchronous wrapper function that executes the original asynchronous
|
|
1046
|
+
function and returns its result. The wrapper function accepts the same
|
|
1047
|
+
arguments as the original async function and forwards them appropriately.
|
|
1048
|
+
The return type depends on what the wrapped asynchronous function returns.
|
|
1102
1049
|
|
|
1103
1050
|
Raises
|
|
1104
1051
|
------
|
|
1105
1052
|
CLIOrionisRuntimeError
|
|
1106
|
-
If the
|
|
1053
|
+
If the asynchronous function execution fails or if the provided `func`
|
|
1054
|
+
parameter is not a valid asynchronous function. The original exception
|
|
1055
|
+
is wrapped to provide additional context for debugging.
|
|
1056
|
+
|
|
1057
|
+
Notes
|
|
1058
|
+
-----
|
|
1059
|
+
This method relies on the Coroutine utility class from the orionis.services.asynchrony
|
|
1060
|
+
module to handle the execution of the wrapped asynchronous function. The wrapper
|
|
1061
|
+
uses the instance logger for comprehensive error reporting and debugging information.
|
|
1107
1062
|
"""
|
|
1108
1063
|
|
|
1109
1064
|
def sync_wrapper(*args, **kwargs) -> Any:
|
|
1065
|
+
"""
|
|
1066
|
+
Synchronous wrapper function that executes asynchronous functions in a thread-safe manner.
|
|
1067
|
+
|
|
1068
|
+
This wrapper provides a uniform interface for executing asynchronous functions within
|
|
1069
|
+
synchronous contexts by leveraging the Coroutine utility class. It handles the complexity
|
|
1070
|
+
of managing async/await patterns and provides proper error handling with detailed logging
|
|
1071
|
+
and custom exception propagation.
|
|
1072
|
+
|
|
1073
|
+
The wrapper is particularly useful when integrating asynchronous functions with
|
|
1074
|
+
synchronous APIs or frameworks that do not natively support async operations.
|
|
1075
|
+
|
|
1076
|
+
Parameters
|
|
1077
|
+
----------
|
|
1078
|
+
*args : tuple
|
|
1079
|
+
Variable length argument list to pass to the wrapped asynchronous function.
|
|
1080
|
+
These arguments are forwarded directly to the original function.
|
|
1081
|
+
**kwargs : dict
|
|
1082
|
+
Arbitrary keyword arguments to pass to the wrapped asynchronous function.
|
|
1083
|
+
These keyword arguments are forwarded directly to the original function.
|
|
1084
|
+
|
|
1085
|
+
Returns
|
|
1086
|
+
-------
|
|
1087
|
+
Any
|
|
1088
|
+
The return value from the executed asynchronous function. The type depends
|
|
1089
|
+
on what the wrapped function returns and can be any Python object.
|
|
1090
|
+
|
|
1091
|
+
Raises
|
|
1092
|
+
------
|
|
1093
|
+
CLIOrionisRuntimeError
|
|
1094
|
+
When the asynchronous function execution fails, wrapping the original
|
|
1095
|
+
exception with additional context and error details for better debugging.
|
|
1096
|
+
|
|
1097
|
+
Notes
|
|
1098
|
+
-----
|
|
1099
|
+
This function relies on the Coroutine utility class to handle the execution
|
|
1100
|
+
of the wrapped asynchronous function and uses the instance logger for comprehensive
|
|
1101
|
+
error reporting and debugging information.
|
|
1102
|
+
"""
|
|
1110
1103
|
|
|
1111
1104
|
try:
|
|
1112
|
-
|
|
1113
|
-
#
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
# If we're already in an event loop, create a task
|
|
1117
|
-
loop = asyncio.get_running_loop()
|
|
1118
|
-
task = loop.create_task(func(*args, **kwargs))
|
|
1119
|
-
return task
|
|
1120
|
-
|
|
1121
|
-
except RuntimeError:
|
|
1122
|
-
|
|
1123
|
-
# No running loop, so we can run the coroutine directly
|
|
1124
|
-
return asyncio.run(func(*args, **kwargs))
|
|
1105
|
+
# Execute the asynchronous function using the Coroutine utility class
|
|
1106
|
+
# The Coroutine class handles the event loop management and async execution
|
|
1107
|
+
return Coroutine(func).invoke(*args, **kwargs)
|
|
1125
1108
|
|
|
1126
1109
|
except Exception as e:
|
|
1127
1110
|
|
|
1128
|
-
# Log the error
|
|
1111
|
+
# Log the error with detailed information for debugging purposes
|
|
1129
1112
|
self.__logger.error(f"Error executing async function: {str(e)}")
|
|
1113
|
+
|
|
1114
|
+
# Re-raise the exception wrapped in a custom exception type
|
|
1115
|
+
# This provides better error context and maintains the original stack trace
|
|
1130
1116
|
raise CLIOrionisRuntimeError(f"Failed to execute async function: {str(e)}") from e
|
|
1131
1117
|
|
|
1132
1118
|
# Return the synchronous wrapper function
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
from orionis.console.kernel import KernelCLI
|
|
3
3
|
from orionis.console.output.contracts.console import IConsole
|
|
4
|
+
from orionis.console.tasks.schedule import Schedule
|
|
4
5
|
from orionis.failure.contracts.catch import ICatch
|
|
5
6
|
from orionis.failure.contracts.handler import IBaseExceptionHandler
|
|
6
7
|
from orionis.foundation.contracts.application import IApplication
|
|
8
|
+
from orionis.services.asynchrony.coroutines import Coroutine
|
|
7
9
|
from orionis.services.log.contracts.log_service import ILogger
|
|
8
10
|
import asyncio
|
|
9
11
|
|
|
@@ -135,7 +137,7 @@ class Catch(ICatch):
|
|
|
135
137
|
)
|
|
136
138
|
|
|
137
139
|
# Check if the kernel is of type `KernelCLI` or `Any`
|
|
138
|
-
if isinstance(kernel, KernelCLI) or isinstance(kernel,
|
|
140
|
+
if isinstance(kernel, KernelCLI) or isinstance(kernel, Schedule):
|
|
139
141
|
|
|
140
142
|
# Check if the `renderCLI` method is a coroutine function
|
|
141
143
|
if asyncio.iscoroutinefunction(self.__exception_handler.renderCLI):
|
|
@@ -158,5 +160,5 @@ class Catch(ICatch):
|
|
|
158
160
|
console=self.__console
|
|
159
161
|
)
|
|
160
162
|
|
|
161
|
-
#
|
|
162
|
-
|
|
163
|
+
# Execute the exception handling logic using the Coroutine wrapper
|
|
164
|
+
Coroutine(handle()).run()
|
|
@@ -24,6 +24,7 @@ from orionis.foundation.config.testing.entities.testing import Testing
|
|
|
24
24
|
from orionis.foundation.contracts.application import IApplication
|
|
25
25
|
from orionis.foundation.exceptions import OrionisTypeError, OrionisRuntimeError, OrionisValueError
|
|
26
26
|
from orionis.foundation.providers.logger_provider import LoggerProvider
|
|
27
|
+
from orionis.services.asynchrony.coroutines import Coroutine
|
|
27
28
|
from orionis.services.log.contracts.log_service import ILogger
|
|
28
29
|
|
|
29
30
|
class Application(Container, IApplication):
|
|
@@ -342,7 +343,7 @@ class Application(Container, IApplication):
|
|
|
342
343
|
# Register the provider in the container
|
|
343
344
|
# Check if register is a coroutine function
|
|
344
345
|
if asyncio.iscoroutinefunction(class_provider.register):
|
|
345
|
-
|
|
346
|
+
Coroutine(class_provider.register).run()
|
|
346
347
|
else:
|
|
347
348
|
class_provider.register()
|
|
348
349
|
|
|
@@ -379,7 +380,7 @@ class Application(Container, IApplication):
|
|
|
379
380
|
if hasattr(provider, 'boot') and callable(getattr(provider, 'boot')):
|
|
380
381
|
# Check if boot is a coroutine function
|
|
381
382
|
if asyncio.iscoroutinefunction(provider.boot):
|
|
382
|
-
|
|
383
|
+
Coroutine(provider.boot).run()
|
|
383
384
|
else:
|
|
384
385
|
provider.boot()
|
|
385
386
|
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
from abc import ABC, abstractmethod
|
|
2
|
+
import asyncio
|
|
3
|
+
from typing import TypeVar, Union
|
|
4
|
+
|
|
5
|
+
T = TypeVar("T")
|
|
6
|
+
|
|
7
|
+
class ICoroutine(ABC):
|
|
8
|
+
|
|
9
|
+
@abstractmethod
|
|
10
|
+
def invoke(self, *args, **kwargs) -> Union[T, asyncio.Task, None]:
|
|
11
|
+
"""
|
|
12
|
+
Invoke the callable coroutine function with the provided arguments.
|
|
13
|
+
|
|
14
|
+
This method executes a callable coroutine function or regular function with the given
|
|
15
|
+
arguments and keyword arguments. It automatically detects the execution context and
|
|
16
|
+
handles both synchronous and asynchronous execution appropriately.
|
|
17
|
+
|
|
18
|
+
Parameters
|
|
19
|
+
----------
|
|
20
|
+
*args : tuple
|
|
21
|
+
Positional arguments to pass to the callable function.
|
|
22
|
+
**kwargs : dict
|
|
23
|
+
Keyword arguments to pass to the callable function.
|
|
24
|
+
|
|
25
|
+
Returns
|
|
26
|
+
-------
|
|
27
|
+
Union[T, asyncio.Task, None]
|
|
28
|
+
- T: The result of the coroutine if executed synchronously
|
|
29
|
+
- asyncio.Task: A task object if scheduled for asynchronous execution
|
|
30
|
+
- None: If the callable is not a coroutine function
|
|
31
|
+
|
|
32
|
+
Raises
|
|
33
|
+
------
|
|
34
|
+
OrionisCoroutineException
|
|
35
|
+
If an error occurs during coroutine execution.
|
|
36
|
+
RuntimeError
|
|
37
|
+
If an error occurs during callable execution that is not coroutine-related.
|
|
38
|
+
|
|
39
|
+
Notes
|
|
40
|
+
-----
|
|
41
|
+
- Only callable objects can be invoked with this method
|
|
42
|
+
- For coroutine functions, execution context is automatically detected
|
|
43
|
+
- Non-coroutine callables are executed directly and return None
|
|
44
|
+
- Exceptions are wrapped with appropriate context information
|
|
45
|
+
|
|
46
|
+
Examples
|
|
47
|
+
--------
|
|
48
|
+
>>> async def my_coro(x, y):
|
|
49
|
+
... return x + y
|
|
50
|
+
>>> coro = Coroutine(my_coro)
|
|
51
|
+
>>> result = coro.invoke(1, 2) # Returns Task or result depending on context
|
|
52
|
+
"""
|
|
53
|
+
pass
|
|
54
|
+
|
|
55
|
+
@abstractmethod
|
|
56
|
+
def run(self) -> Union[T, asyncio.Future]:
|
|
57
|
+
"""
|
|
58
|
+
Executes the wrapped coroutine, adapting to the current event loop context.
|
|
59
|
+
|
|
60
|
+
Returns
|
|
61
|
+
-------
|
|
62
|
+
T or asyncio.Future
|
|
63
|
+
The result of the coroutine if executed synchronously, or an asyncio.Future if scheduled asynchronously.
|
|
64
|
+
|
|
65
|
+
Raises
|
|
66
|
+
------
|
|
67
|
+
RuntimeError
|
|
68
|
+
If the coroutine cannot be executed due to event loop issues.
|
|
69
|
+
|
|
70
|
+
Notes
|
|
71
|
+
-----
|
|
72
|
+
- If called outside an active event loop, the coroutine is executed synchronously and its result is returned.
|
|
73
|
+
- If called within an active event loop, the coroutine is scheduled for asynchronous execution and a Future is returned.
|
|
74
|
+
- The method automatically detects the execution context and chooses the appropriate execution strategy.
|
|
75
|
+
"""
|
|
76
|
+
pass
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
from typing import Any, Callable, Coroutine as TypingCoroutine, TypeVar, Union
|
|
3
|
+
from orionis.services.asynchrony.contracts.coroutines import ICoroutine
|
|
4
|
+
from orionis.services.asynchrony.exceptions import OrionisCoroutineException
|
|
5
|
+
from orionis.services.introspection.objects.types import Type
|
|
6
|
+
|
|
7
|
+
T = TypeVar("T")
|
|
8
|
+
|
|
9
|
+
class Coroutine(ICoroutine):
|
|
10
|
+
|
|
11
|
+
def __init__(self, func: Union[TypingCoroutine[Any, Any, T], Callable[..., TypingCoroutine[Any, Any, T]]]) -> None:
|
|
12
|
+
"""
|
|
13
|
+
Initialize a Coroutine wrapper for managing and executing coroutine objects.
|
|
14
|
+
|
|
15
|
+
This constructor accepts either a coroutine object directly or a callable that
|
|
16
|
+
returns a coroutine when invoked. The wrapped coroutine can later be executed
|
|
17
|
+
using the run() method with automatic context detection.
|
|
18
|
+
|
|
19
|
+
Parameters
|
|
20
|
+
----------
|
|
21
|
+
func : Union[TypingCoroutine[Any, Any, T], Callable[..., TypingCoroutine[Any, Any, T]]]
|
|
22
|
+
The coroutine object to be wrapped and managed, or a callable that returns
|
|
23
|
+
a coroutine. This will be stored internally for later execution.
|
|
24
|
+
|
|
25
|
+
Returns
|
|
26
|
+
-------
|
|
27
|
+
None
|
|
28
|
+
This is a constructor method and does not return any value.
|
|
29
|
+
|
|
30
|
+
Notes
|
|
31
|
+
-----
|
|
32
|
+
- The coroutine type validation is performed during execution in the run() method,
|
|
33
|
+
not during initialization.
|
|
34
|
+
- Both coroutine objects and coroutine functions are accepted as valid input.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
# Store the coroutine object or callable for later execution
|
|
38
|
+
self.__func = func
|
|
39
|
+
|
|
40
|
+
def invoke(self, *args, **kwargs) -> Union[T, asyncio.Task, None]:
|
|
41
|
+
"""
|
|
42
|
+
Invoke the callable coroutine function with the provided arguments.
|
|
43
|
+
|
|
44
|
+
This method executes a callable coroutine function or regular function with the given
|
|
45
|
+
arguments and keyword arguments. It automatically detects the execution context and
|
|
46
|
+
handles both synchronous and asynchronous execution appropriately.
|
|
47
|
+
|
|
48
|
+
Parameters
|
|
49
|
+
----------
|
|
50
|
+
*args : tuple
|
|
51
|
+
Positional arguments to pass to the callable function.
|
|
52
|
+
**kwargs : dict
|
|
53
|
+
Keyword arguments to pass to the callable function.
|
|
54
|
+
|
|
55
|
+
Returns
|
|
56
|
+
-------
|
|
57
|
+
Union[T, asyncio.Task, None]
|
|
58
|
+
- T: The result of the coroutine if executed synchronously
|
|
59
|
+
- asyncio.Task: A task object if scheduled for asynchronous execution
|
|
60
|
+
- None: If the callable is not a coroutine function
|
|
61
|
+
|
|
62
|
+
Raises
|
|
63
|
+
------
|
|
64
|
+
OrionisCoroutineException
|
|
65
|
+
If an error occurs during coroutine execution.
|
|
66
|
+
RuntimeError
|
|
67
|
+
If an error occurs during callable execution that is not coroutine-related.
|
|
68
|
+
|
|
69
|
+
Notes
|
|
70
|
+
-----
|
|
71
|
+
- Only callable objects can be invoked with this method
|
|
72
|
+
- For coroutine functions, execution context is automatically detected
|
|
73
|
+
- Non-coroutine callables are executed directly and return None
|
|
74
|
+
- Exceptions are wrapped with appropriate context information
|
|
75
|
+
|
|
76
|
+
Examples
|
|
77
|
+
--------
|
|
78
|
+
>>> async def my_coro(x, y):
|
|
79
|
+
... return x + y
|
|
80
|
+
>>> coro = Coroutine(my_coro)
|
|
81
|
+
>>> result = coro.invoke(1, 2) # Returns Task or result depending on context
|
|
82
|
+
"""
|
|
83
|
+
if not callable(self.__func):
|
|
84
|
+
raise OrionisCoroutineException(
|
|
85
|
+
f"Cannot invoke non-callable object of type {type(self.__func).__name__}"
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
try:
|
|
89
|
+
|
|
90
|
+
# Check if the callable is a coroutine function
|
|
91
|
+
if asyncio.iscoroutinefunction(self.__func):
|
|
92
|
+
|
|
93
|
+
# Create the coroutine object
|
|
94
|
+
coroutine_obj = self.__func(*args, **kwargs)
|
|
95
|
+
|
|
96
|
+
try:
|
|
97
|
+
|
|
98
|
+
# Check if we're inside a running event loop
|
|
99
|
+
loop = asyncio.get_running_loop()
|
|
100
|
+
return loop.create_task(coroutine_obj)
|
|
101
|
+
|
|
102
|
+
except RuntimeError:
|
|
103
|
+
|
|
104
|
+
# No running event loop, execute synchronously
|
|
105
|
+
try:
|
|
106
|
+
|
|
107
|
+
# Use asyncio.run to execute the coroutine and return its result
|
|
108
|
+
return asyncio.run(coroutine_obj)
|
|
109
|
+
|
|
110
|
+
except Exception as e:
|
|
111
|
+
|
|
112
|
+
# Wrap and raise any exceptions that occur during execution
|
|
113
|
+
raise OrionisCoroutineException(
|
|
114
|
+
f"Failed to execute coroutine synchronously: {str(e)}"
|
|
115
|
+
) from e
|
|
116
|
+
|
|
117
|
+
else:
|
|
118
|
+
|
|
119
|
+
# Execute regular callable directly
|
|
120
|
+
return self.__func(*args, **kwargs)
|
|
121
|
+
|
|
122
|
+
except OrionisCoroutineException:
|
|
123
|
+
|
|
124
|
+
# Re-raise our custom exceptions as-is
|
|
125
|
+
raise
|
|
126
|
+
|
|
127
|
+
except Exception as e:
|
|
128
|
+
|
|
129
|
+
# Wrap and raise any other exceptions that occur during invocation
|
|
130
|
+
raise RuntimeError(
|
|
131
|
+
f"Unexpected error during callable invocation: {str(e)}"
|
|
132
|
+
) from e
|
|
133
|
+
|
|
134
|
+
def run(self) -> Union[T, asyncio.Future]:
|
|
135
|
+
"""
|
|
136
|
+
Executes the wrapped coroutine, adapting to the current event loop context.
|
|
137
|
+
|
|
138
|
+
Returns
|
|
139
|
+
-------
|
|
140
|
+
T or asyncio.Future
|
|
141
|
+
The result of the coroutine if executed synchronously, or an asyncio.Future if scheduled asynchronously.
|
|
142
|
+
|
|
143
|
+
Raises
|
|
144
|
+
------
|
|
145
|
+
RuntimeError
|
|
146
|
+
If the coroutine cannot be executed due to event loop issues.
|
|
147
|
+
|
|
148
|
+
Notes
|
|
149
|
+
-----
|
|
150
|
+
- If called outside an active event loop, the coroutine is executed synchronously and its result is returned.
|
|
151
|
+
- If called within an active event loop, the coroutine is scheduled for asynchronous execution and a Future is returned.
|
|
152
|
+
- The method automatically detects the execution context and chooses the appropriate execution strategy.
|
|
153
|
+
"""
|
|
154
|
+
|
|
155
|
+
# Validate that the provided object is a coroutine
|
|
156
|
+
if not Type(self.__func).isCoroutine():
|
|
157
|
+
raise OrionisCoroutineException(
|
|
158
|
+
f"Expected a coroutine object, but got {type(self.__func).__name__}."
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
# Attempt to get the currently running event loop
|
|
162
|
+
try:
|
|
163
|
+
loop = asyncio.get_running_loop()
|
|
164
|
+
|
|
165
|
+
# No running event loop; execute the coroutine synchronously and return its result
|
|
166
|
+
except RuntimeError:
|
|
167
|
+
return asyncio.run(self.__func)
|
|
168
|
+
|
|
169
|
+
# If inside an active event loop, schedule the coroutine and return a Future
|
|
170
|
+
if loop.is_running():
|
|
171
|
+
return asyncio.ensure_future(self.__func)
|
|
172
|
+
|
|
173
|
+
# If no event loop is running, execute the coroutine synchronously using the loop
|
|
174
|
+
else:
|
|
175
|
+
return loop.run_until_complete(self.__func)
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
from abc import ABC, abstractmethod
|
|
2
|
-
import asyncio
|
|
3
|
-
from typing import TypeVar, Union
|
|
4
|
-
|
|
5
|
-
T = TypeVar("T")
|
|
6
|
-
|
|
7
|
-
class ICoroutine(ABC):
|
|
8
|
-
|
|
9
|
-
@abstractmethod
|
|
10
|
-
def run(self) -> Union[T, asyncio.Future]:
|
|
11
|
-
"""
|
|
12
|
-
Execute the wrapped coroutine either synchronously or asynchronously, depending on the execution context.
|
|
13
|
-
|
|
14
|
-
Returns
|
|
15
|
-
-------
|
|
16
|
-
T or asyncio.Future
|
|
17
|
-
If called outside of an event loop, returns the result of the coroutine execution (type T).
|
|
18
|
-
If called within an event loop, returns an asyncio.Future representing the scheduled coroutine.
|
|
19
|
-
|
|
20
|
-
Notes
|
|
21
|
-
-----
|
|
22
|
-
- Executes the coroutine synchronously and returns its result when called outside an event loop.
|
|
23
|
-
- Schedules the coroutine for asynchronous execution and returns a Future when called inside an event loop.
|
|
24
|
-
- The caller is responsible for awaiting the Future if asynchronous execution is used.
|
|
25
|
-
"""
|
|
26
|
-
|
|
27
|
-
# This method should be implemented by subclasses to handle coroutine execution.
|
|
28
|
-
pass
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import asyncio
|
|
2
|
-
from typing import Any, Coroutine as TypingCoroutine, TypeVar, Union
|
|
3
|
-
from orionis.services.asynchrony.contracts.coroutines import ICoroutine
|
|
4
|
-
from orionis.services.asynchrony.exceptions import OrionisCoroutineException
|
|
5
|
-
from orionis.services.introspection.objects.types import Type
|
|
6
|
-
|
|
7
|
-
T = TypeVar("T")
|
|
8
|
-
|
|
9
|
-
class Coroutine(ICoroutine):
|
|
10
|
-
|
|
11
|
-
def __init__(self, func: TypingCoroutine[Any, Any, T]) -> None:
|
|
12
|
-
"""
|
|
13
|
-
Wraps a coroutine object and validates its type.
|
|
14
|
-
|
|
15
|
-
Parameters
|
|
16
|
-
----------
|
|
17
|
-
func : Coroutine
|
|
18
|
-
The coroutine object to be wrapped and managed.
|
|
19
|
-
|
|
20
|
-
Raises
|
|
21
|
-
------
|
|
22
|
-
OrionisCoroutineException
|
|
23
|
-
If the provided object is not a coroutine.
|
|
24
|
-
"""
|
|
25
|
-
|
|
26
|
-
# Validate that the provided object is a coroutine
|
|
27
|
-
if not Type(func).isCoroutine():
|
|
28
|
-
raise OrionisCoroutineException(
|
|
29
|
-
f"Expected a coroutine object, but got {type(func).__name__}."
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
# Store the coroutine object for later execution
|
|
33
|
-
self.__func = func
|
|
34
|
-
|
|
35
|
-
def run(self) -> Union[T, asyncio.Future]:
|
|
36
|
-
"""
|
|
37
|
-
Executes the wrapped coroutine, adapting to the current event loop context.
|
|
38
|
-
|
|
39
|
-
Returns
|
|
40
|
-
-------
|
|
41
|
-
T or asyncio.Future
|
|
42
|
-
The result of the coroutine if executed synchronously, or an asyncio.Future if scheduled asynchronously.
|
|
43
|
-
|
|
44
|
-
Raises
|
|
45
|
-
------
|
|
46
|
-
RuntimeError
|
|
47
|
-
If the coroutine cannot be executed due to event loop issues.
|
|
48
|
-
|
|
49
|
-
Notes
|
|
50
|
-
-----
|
|
51
|
-
- If called outside an active event loop, the coroutine is executed synchronously and its result is returned.
|
|
52
|
-
- If called within an active event loop, the coroutine is scheduled for asynchronous execution and a Future is returned.
|
|
53
|
-
- The method automatically detects the execution context and chooses the appropriate execution strategy.
|
|
54
|
-
"""
|
|
55
|
-
|
|
56
|
-
# Attempt to get the currently running event loop
|
|
57
|
-
try:
|
|
58
|
-
loop = asyncio.get_running_loop()
|
|
59
|
-
|
|
60
|
-
# No running event loop; execute the coroutine synchronously and return its result
|
|
61
|
-
except RuntimeError:
|
|
62
|
-
return asyncio.run(self.__func)
|
|
63
|
-
|
|
64
|
-
# If inside an active event loop, schedule the coroutine and return a Future
|
|
65
|
-
if loop.is_running():
|
|
66
|
-
return asyncio.ensure_future(self.__func)
|
|
67
|
-
|
|
68
|
-
# If no event loop is running, execute the coroutine synchronously using the loop
|
|
69
|
-
else:
|
|
70
|
-
return loop.run_until_complete(self.__func)
|
|
File without changes
|
|
File without changes
|