orionis 0.473.0__tar.gz → 0.474.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.473.0/orionis.egg-info → orionis-0.474.0}/PKG-INFO +1 -1
- orionis-0.474.0/orionis/console/tasks/schedule.py +492 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/metadata/framework.py +1 -1
- {orionis-0.473.0 → orionis-0.474.0/orionis.egg-info}/PKG-INFO +1 -1
- orionis-0.473.0/orionis/console/tasks/schedule.py +0 -703
- {orionis-0.473.0 → orionis-0.474.0}/LICENCE +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/MANIFEST.in +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/README.md +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/app.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/args/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/args/argument.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/args/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/args/enums/actions.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/base/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/base/command.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/base/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/base/contracts/command.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/cache.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/help.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/publisher.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/test.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/version.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/commands/workflow.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/contracts/kernel.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/contracts/reactor.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/contracts/schedule.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/core/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/core/reactor.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dumper/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dumper/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dumper/contracts/dump.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dumper/dump.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dynamic/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dynamic/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dynamic/contracts/progress_bar.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/dynamic/progress_bar.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/exceptions/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/exceptions/cli_exception.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/exceptions/cli_orionis_value_error.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/exceptions/cli_runtime_error.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/exceptions/cli_schedule_exception.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/kernel.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/console.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/contracts/console.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/contracts/executor.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/enums/styles.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/output/executor.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/console/tasks/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/container.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/context/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/context/manager.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/context/scope.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/contracts/container.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/contracts/service_provider.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/entities/binding.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/enums/lifetimes.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/exceptions/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/exceptions/attribute.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/exceptions/exception.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/exceptions/type.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/exceptions/value.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/facades/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/facades/facade.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/providers/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/providers/service_provider.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/implements.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_abstract_class.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_callable.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_concrete_class.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_instance.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_not_subclass.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_subclass.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/is_valid_alias.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/container/validators/lifetime.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/application.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/entities/app.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/enums/ciphers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/app/enums/environments.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/auth/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/auth/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/auth/entities/auth.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/entities/cache.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/entities/file.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/entities/stores.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cache/enums/drivers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cors/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cors/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/cors/entities/cors.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/connections.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/database.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/mysql.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/oracle.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/pgsql.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/entities/sqlite.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/mysql_charsets.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/mysql_collations.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/mysql_engine.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/oracle_encoding.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/oracle_nencoding.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/pgsql_charsets.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/pgsql_collations.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/pgsql_mode.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/sqlite_foreign_key.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/sqlite_journal.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/database/enums/sqlite_synchronous.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/aws.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/disks.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/filesystems.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/local.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/filesystems/entitites/public.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/channels.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/chunked.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/daily.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/hourly.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/logging.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/monthly.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/stack.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/entities/weekly.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/enums/levels.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/validators/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/validators/level.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/logging/validators/path.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/entities/file.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/entities/mail.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/entities/mailers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/mail/entities/smtp.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/entities/brokers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/entities/database.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/entities/queue.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/queue/enums/strategy.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/roots/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/roots/paths.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/entities/session.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/enums/same_site_policy.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/helpers/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/session/helpers/secret_key.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/startup.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/entities/testing.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/enums/drivers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/enums/mode.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/config/testing/enums/verbosity.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/contracts/application.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/contracts/config.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/exceptions/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/exceptions/integrity.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/exceptions/runtime.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/exceptions/type.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/exceptions/value.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/console_provider.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/dumper_provider.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/executor_provider.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/inspirational_provider.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/logger_provider.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/progress_bar_provider.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/reactor_provider.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/testing_provider.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/foundation/providers/workers_provider.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/metadata/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/metadata/package.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/contracts/coroutines.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/coroutines.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/exceptions/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/asynchrony/exceptions/exception.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/contracts/caster.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/contracts/env.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/core/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/core/dot_env.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/dynamic/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/dynamic/caster.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/enums/value_type.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/env.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/exceptions/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/exceptions/exception.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/exceptions/value.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/helpers/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/helpers/functions.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/key/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/key/key_generator.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/validators/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/validators/key_name.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/environment/validators/types.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/inspirational/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/inspirational/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/inspirational/contracts/inspire.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/inspirational/inspire.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/inspirational/quotes.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/abstract/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/abstract/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/abstract/contracts/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/abstract/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/callables/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/callables/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/callables/contracts/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/callables/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/concretes/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/concretes/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/concretes/contracts/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/concretes/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/contracts/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/entities/argument.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/entities/resolve_argument.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/dependencies/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/exceptions/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/exceptions/attribute.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/exceptions/type.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/exceptions/value.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/instances/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/instances/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/instances/contracts/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/instances/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/modules/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/modules/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/modules/contracts/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/modules/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/objects/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/objects/types.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/introspection/reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/contracts/log_service.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/exceptions/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/exceptions/runtime.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/handlers/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/handlers/filename.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/handlers/size_rotating.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/handlers/timed_rotating.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/log/log_service.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/contracts/imports.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/contracts/workers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/imports.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/runtime/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/runtime/imports.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/services/system/workers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/entities/base.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/console.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/dumper.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/executor.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/inspire.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/logger.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/progress_bar.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/reactor.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/testing.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/facades/workers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/exceptions/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/exceptions/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/exceptions/contracts/parser.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/exceptions/parser.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/formatter/serializer.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/patterns/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/patterns/singleton/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/patterns/singleton/meta.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/contracts/std.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/exceptions/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/exceptions/value.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/standard/std.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/wrapper/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/support/wrapper/dot_dict.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/cases/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/cases/asynchronous.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/cases/synchronous.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/dumper.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/kernel.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/logs.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/printer.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/render.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/test_result.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/contracts/unit_test.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/core/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/core/unit_test.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/entities/result.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/enums/status.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/config.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/failure.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/persistence.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/runtime.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/exceptions/value.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/kernel.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/output/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/output/dumper.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/output/printer.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/records/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/records/logs.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/base_path.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/execution_mode.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/fail_fast.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/folder_path.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/module_name.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/name_pattern.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/pattern.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/persistent.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/persistent_driver.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/print_result.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/tags.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/throw_exception.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/verbosity.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/web_report.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/validators/workers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/view/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis/test/view/render.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis.egg-info/SOURCES.txt +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis.egg-info/dependency_links.txt +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis.egg-info/requires.txt +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis.egg-info/top_level.txt +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/orionis.egg-info/zip-safe +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/setup.cfg +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/setup.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/context/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/context/test_manager.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/context/test_scope.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/test_advanced_async.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/test_async_optimizations.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/test_container.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/test_singleton.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/core/test_thread_safety.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/entities/test_binding.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/enums/test_lifetimes.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/facades/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/facades/test_facade.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/mock_advanced_async.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/mock_async_optimizations.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/mock_auto_resolution.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/mock_complex_classes.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/mocks/mock_simple_classes.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/providers/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/providers/test_providers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_implements.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_abstract_class.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_callable.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_concrete_class.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_instance.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_not_subclass.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_subclass.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_is_valid_alias.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/container/validators/test_lifetime.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/example/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/example/test_example.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/app/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/app/test_foundation_config_app.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/auth/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/auth/test_foundation_config_auth.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cache/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cache/test_foundation_config_cache.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cache/test_foundation_config_cache_file.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cache/test_foundation_config_cache_stores.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cors/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/cors/test_foundation_config_cors.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database_connections.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database_mysql.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database_oracle.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database_pgsql.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/database/test_foundation_config_database_sqlite.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_aws.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_disks.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_local.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_public.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_channels.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_chunked.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_daily.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_hourly.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_monthly.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_stack.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/logging/test_foundation_config_logging_weekly.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/mail/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/mail/test_foundation_config_mail.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/mail/test_foundation_config_mail_file.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/mail/test_foundation_config_mail_mailers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/mail/test_foundation_config_mail_smtp.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/queue/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/queue/test_foundation_config_queue.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/queue/test_foundation_config_queue_brokers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/queue/test_foundation_config_queue_database.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/root/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/root/test_foundation_config_root_paths.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/session/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/session/test_foundation_config_session.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/startup/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/startup/test_foundation_config_startup.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/testing/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/foundation/config/testing/test_foundation_config_testing.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/metadata/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/metadata/test_metadata_framework.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/metadata/test_metadata_package.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/asynchrony/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/asynchrony/test_services_asynchrony_coroutine.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/environment/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/environment/test_services_environment.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/mocks/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/mocks/mock_user.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/mocks/mock_user_controller.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/mocks/mock_users_permissions.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/dependencies/test_reflect_dependencies.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/mock/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/mock/fake_reflect_instance.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/test_reflection_abstract.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/test_reflection_callable.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/test_reflection_concrete.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/test_reflection_instance.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/reflection/test_reflection_module.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/introspection/test_reflection.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/log/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/log/test_log.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/system/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/system/test_services_system_imports.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/services/system/test_services_system_workers.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/support/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/support/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/support/entities/mock_dataclass.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/support/entities/test_base.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/support/patterns/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/support/patterns/singleton/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/support/patterns/singleton/test_patterns_singleton.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/support/standard/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/support/standard/test_services_std.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/support/wrapper/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/support/wrapper/test_services_wrapper_docdict.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/cases/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/cases/test_testing_asynchronous.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/cases/test_testing_synchronous.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/entities/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/entities/test_testing_result.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/enums/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/enums/test_testing_status.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/output/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/output/test_testing_dumper.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/output/test_testing_printer.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/records/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/records/test_testing_records.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/test_testing_unit.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/validators/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/validators/test_testing_validators.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/view/__init__.py +0 -0
- {orionis-0.473.0 → orionis-0.474.0}/tests/testing/view/test_render.py +0 -0
|
@@ -0,0 +1,492 @@
|
|
|
1
|
+
from typing import Any, List, Optional
|
|
2
|
+
from apscheduler.schedulers.asyncio import AsyncIOScheduler as APSAsyncIOScheduler
|
|
3
|
+
from apscheduler.triggers.cron import CronTrigger
|
|
4
|
+
from apscheduler.triggers.date import DateTrigger
|
|
5
|
+
from apscheduler.triggers.interval import IntervalTrigger
|
|
6
|
+
from orionis.console.contracts.reactor import IReactor
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
import pytz
|
|
9
|
+
import asyncio
|
|
10
|
+
from orionis.console.exceptions import CLIOrionisRuntimeError
|
|
11
|
+
from orionis.app import Orionis
|
|
12
|
+
|
|
13
|
+
class Scheduler():
|
|
14
|
+
|
|
15
|
+
def __init__(
|
|
16
|
+
self,
|
|
17
|
+
reactor: IReactor
|
|
18
|
+
) -> None:
|
|
19
|
+
"""
|
|
20
|
+
Initialize a new instance of the Scheduler class.
|
|
21
|
+
|
|
22
|
+
This constructor sets up the internal state required for scheduling commands,
|
|
23
|
+
including references to the application instance, AsyncIOScheduler, the
|
|
24
|
+
command reactor, and job tracking structures. It also initializes properties
|
|
25
|
+
for managing the current scheduling context.
|
|
26
|
+
|
|
27
|
+
Parameters
|
|
28
|
+
----------
|
|
29
|
+
reactor : IReactor
|
|
30
|
+
An instance of a class implementing the IReactor interface, used to
|
|
31
|
+
retrieve available commands and execute scheduled jobs.
|
|
32
|
+
|
|
33
|
+
Returns
|
|
34
|
+
-------
|
|
35
|
+
None
|
|
36
|
+
This method does not return any value. It initializes the Scheduler instance.
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
# Store the application instance for configuration access.
|
|
40
|
+
self.__app = Orionis()
|
|
41
|
+
|
|
42
|
+
# Initialize AsyncIOScheduler instance with timezone configuration.
|
|
43
|
+
self.__scheduler: APSAsyncIOScheduler = APSAsyncIOScheduler(
|
|
44
|
+
timezone=pytz.timezone(self.__app.config('app.timezone', 'UTC'))
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
# Store the reactor instance for command management.
|
|
48
|
+
self.__reactor = reactor
|
|
49
|
+
|
|
50
|
+
# Retrieve and store all available commands from the reactor.
|
|
51
|
+
self.__available_commands = self.__getCommands()
|
|
52
|
+
|
|
53
|
+
# Dictionary to hold all scheduled jobs and their details.
|
|
54
|
+
self.__jobs: dict = {}
|
|
55
|
+
|
|
56
|
+
# Properties to track the current scheduling context.
|
|
57
|
+
self.__command: str = None # The command signature to be scheduled.
|
|
58
|
+
self.__args: List[str] = None # Arguments for the command.
|
|
59
|
+
self.__purpose: str = None # Purpose or description of the scheduled job.
|
|
60
|
+
|
|
61
|
+
def __getCommands(
|
|
62
|
+
self
|
|
63
|
+
) -> dict:
|
|
64
|
+
"""
|
|
65
|
+
Retrieve available commands from the reactor and return them as a dictionary.
|
|
66
|
+
|
|
67
|
+
This method queries the reactor for all available jobs/commands, extracting their
|
|
68
|
+
signatures and descriptions. The result is a dictionary where each key is the command
|
|
69
|
+
signature and the value is another dictionary containing the command's signature and
|
|
70
|
+
its description.
|
|
71
|
+
|
|
72
|
+
Returns
|
|
73
|
+
-------
|
|
74
|
+
dict
|
|
75
|
+
A dictionary mapping command signatures to their details. Each value is a dictionary
|
|
76
|
+
with 'signature' and 'description' keys.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
# Initialize the commands dictionary
|
|
80
|
+
commands = {}
|
|
81
|
+
|
|
82
|
+
# Iterate over all jobs provided by the reactor's info method
|
|
83
|
+
for job in self.__reactor.info():
|
|
84
|
+
|
|
85
|
+
# Store each job's signature and description in the commands dictionary
|
|
86
|
+
commands[job['signature']] = {
|
|
87
|
+
'signature': job['signature'],
|
|
88
|
+
'description': job.get('description', '')
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
# Return the commands dictionary
|
|
92
|
+
return commands
|
|
93
|
+
|
|
94
|
+
def __isAvailable(
|
|
95
|
+
self,
|
|
96
|
+
signature: str
|
|
97
|
+
) -> bool:
|
|
98
|
+
"""
|
|
99
|
+
Check if a command with the given signature is available.
|
|
100
|
+
|
|
101
|
+
This method iterates through the available commands and determines
|
|
102
|
+
whether the provided signature matches any registered command.
|
|
103
|
+
|
|
104
|
+
Parameters
|
|
105
|
+
----------
|
|
106
|
+
signature : str
|
|
107
|
+
The signature of the command to check for availability.
|
|
108
|
+
|
|
109
|
+
Returns
|
|
110
|
+
-------
|
|
111
|
+
bool
|
|
112
|
+
True if the command with the specified signature exists and is available,
|
|
113
|
+
False otherwise.
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
# Iterate through all available command signatures
|
|
117
|
+
for command in self.__available_commands.keys():
|
|
118
|
+
|
|
119
|
+
# Return True if the signature matches an available command
|
|
120
|
+
if command == signature:
|
|
121
|
+
return True
|
|
122
|
+
|
|
123
|
+
# Return False if the signature is not found among available commands
|
|
124
|
+
return False
|
|
125
|
+
|
|
126
|
+
def __getDescription(
|
|
127
|
+
self,
|
|
128
|
+
signature: str
|
|
129
|
+
) -> Optional[str]:
|
|
130
|
+
"""
|
|
131
|
+
Retrieve the description of a command given its signature.
|
|
132
|
+
|
|
133
|
+
This method looks up the available commands dictionary and returns the description
|
|
134
|
+
associated with the provided command signature. If the signature does not exist,
|
|
135
|
+
it returns None.
|
|
136
|
+
|
|
137
|
+
Parameters
|
|
138
|
+
----------
|
|
139
|
+
signature : str
|
|
140
|
+
The unique signature identifying the command.
|
|
141
|
+
|
|
142
|
+
Returns
|
|
143
|
+
-------
|
|
144
|
+
Optional[str]
|
|
145
|
+
The description of the command if found; otherwise, None.
|
|
146
|
+
"""
|
|
147
|
+
|
|
148
|
+
# Attempt to retrieve the command entry from the available commands dictionary
|
|
149
|
+
command_entry = self.__available_commands.get(signature)
|
|
150
|
+
|
|
151
|
+
# Return the description if the command exists, otherwise return None
|
|
152
|
+
return command_entry['description'] if command_entry else None
|
|
153
|
+
|
|
154
|
+
def __reset(
|
|
155
|
+
self
|
|
156
|
+
) -> None:
|
|
157
|
+
"""
|
|
158
|
+
Reset the internal state of the Scheduler instance.
|
|
159
|
+
|
|
160
|
+
This method clears the current command, arguments, and purpose attributes,
|
|
161
|
+
effectively resetting the scheduler's configuration to its initial state.
|
|
162
|
+
This can be useful for preparing the scheduler for a new command or job
|
|
163
|
+
scheduling without retaining any previous settings.
|
|
164
|
+
|
|
165
|
+
Returns
|
|
166
|
+
-------
|
|
167
|
+
None
|
|
168
|
+
This method does not return any value. It modifies the internal state of the Scheduler.
|
|
169
|
+
"""
|
|
170
|
+
|
|
171
|
+
self.__command = None
|
|
172
|
+
self.__args = None
|
|
173
|
+
self.__purpose = None
|
|
174
|
+
|
|
175
|
+
def command(
|
|
176
|
+
self,
|
|
177
|
+
signature: str,
|
|
178
|
+
args: Optional[List[str]] = None
|
|
179
|
+
) -> 'Scheduler':
|
|
180
|
+
"""
|
|
181
|
+
Register a command to be scheduled with the specified signature and optional arguments.
|
|
182
|
+
|
|
183
|
+
This method validates the provided command signature and arguments, checks if the command
|
|
184
|
+
is available in the list of registered commands, and stores the command details internally
|
|
185
|
+
for scheduling. The command's description is also retrieved and stored for reference.
|
|
186
|
+
|
|
187
|
+
Parameters
|
|
188
|
+
----------
|
|
189
|
+
signature : str
|
|
190
|
+
The unique signature identifying the command to be scheduled. Must be a non-empty string.
|
|
191
|
+
args : Optional[List[str]], optional
|
|
192
|
+
A list of string arguments to be passed to the command. If not provided, an empty list is used.
|
|
193
|
+
|
|
194
|
+
Returns
|
|
195
|
+
-------
|
|
196
|
+
Scheduler
|
|
197
|
+
Returns the current instance of the Scheduler to allow method chaining.
|
|
198
|
+
|
|
199
|
+
Raises
|
|
200
|
+
------
|
|
201
|
+
ValueError
|
|
202
|
+
If the signature is not a non-empty string, if the arguments are not a list or None,
|
|
203
|
+
or if the command signature is not available among registered commands.
|
|
204
|
+
"""
|
|
205
|
+
|
|
206
|
+
# Validate that the command signature is a non-empty string
|
|
207
|
+
if not isinstance(signature, str) or not signature.strip():
|
|
208
|
+
raise ValueError("Command signature must be a non-empty string.")
|
|
209
|
+
|
|
210
|
+
# Ensure that arguments are either a list of strings or None
|
|
211
|
+
if args is not None and not isinstance(args, list):
|
|
212
|
+
raise ValueError("Arguments must be a list of strings or None.")
|
|
213
|
+
|
|
214
|
+
# Check if the command is available in the registered commands
|
|
215
|
+
if not self.__isAvailable(signature):
|
|
216
|
+
raise ValueError(f"The command '{signature}' is not available or does not exist.")
|
|
217
|
+
|
|
218
|
+
# Store the command signature
|
|
219
|
+
self.__command = signature
|
|
220
|
+
|
|
221
|
+
# If purpose is not already set, retrieve and set the command's description
|
|
222
|
+
if self.__purpose is None:
|
|
223
|
+
self.__purpose = self.__getDescription(signature)
|
|
224
|
+
|
|
225
|
+
# Store the provided arguments or default to an empty list
|
|
226
|
+
self.__args = args if args is not None else []
|
|
227
|
+
|
|
228
|
+
# Return self to support method chaining
|
|
229
|
+
return self
|
|
230
|
+
|
|
231
|
+
def purpose(
|
|
232
|
+
self,
|
|
233
|
+
purpose: str
|
|
234
|
+
) -> 'Scheduler':
|
|
235
|
+
"""
|
|
236
|
+
Set the purpose or description for the scheduled command.
|
|
237
|
+
|
|
238
|
+
This method assigns a human-readable purpose or description to the command
|
|
239
|
+
that is being scheduled. The purpose must be a non-empty string. This can
|
|
240
|
+
be useful for documentation, logging, or displaying information about the
|
|
241
|
+
scheduled job.
|
|
242
|
+
|
|
243
|
+
Parameters
|
|
244
|
+
----------
|
|
245
|
+
purpose : str
|
|
246
|
+
The purpose or description to associate with the scheduled command.
|
|
247
|
+
Must be a non-empty string.
|
|
248
|
+
|
|
249
|
+
Returns
|
|
250
|
+
-------
|
|
251
|
+
Scheduler
|
|
252
|
+
Returns the current instance of the Scheduler to allow method chaining.
|
|
253
|
+
|
|
254
|
+
Raises
|
|
255
|
+
------
|
|
256
|
+
ValueError
|
|
257
|
+
If the provided purpose is not a non-empty string.
|
|
258
|
+
"""
|
|
259
|
+
|
|
260
|
+
# Validate that the purpose is a non-empty string
|
|
261
|
+
if not isinstance(purpose, str) or not purpose.strip():
|
|
262
|
+
raise ValueError("The purpose must be a non-empty string.")
|
|
263
|
+
|
|
264
|
+
# Set the internal purpose attribute
|
|
265
|
+
self.__purpose = purpose
|
|
266
|
+
|
|
267
|
+
# Return self to support method chaining
|
|
268
|
+
return self
|
|
269
|
+
|
|
270
|
+
def onceAt(
|
|
271
|
+
self,
|
|
272
|
+
date: datetime
|
|
273
|
+
) -> bool:
|
|
274
|
+
"""
|
|
275
|
+
Schedule a command to run once at a specific date and time.
|
|
276
|
+
|
|
277
|
+
This method schedules the currently registered command to execute exactly once at the
|
|
278
|
+
specified datetime using the AsyncIOScheduler. The job is registered internally and
|
|
279
|
+
added to the scheduler instance.
|
|
280
|
+
|
|
281
|
+
Parameters
|
|
282
|
+
----------
|
|
283
|
+
date : datetime.datetime
|
|
284
|
+
The date and time at which the command should be executed. Must be a valid `datetime` instance.
|
|
285
|
+
|
|
286
|
+
Returns
|
|
287
|
+
-------
|
|
288
|
+
bool
|
|
289
|
+
Returns True if the job was successfully scheduled.
|
|
290
|
+
|
|
291
|
+
Raises
|
|
292
|
+
------
|
|
293
|
+
CLIOrionisRuntimeError
|
|
294
|
+
If the provided date is not a `datetime` instance or if there is an error while scheduling the job.
|
|
295
|
+
"""
|
|
296
|
+
|
|
297
|
+
try:
|
|
298
|
+
|
|
299
|
+
# Ensure the provided date is a valid datetime instance.
|
|
300
|
+
if not isinstance(date, datetime):
|
|
301
|
+
raise CLIOrionisRuntimeError(
|
|
302
|
+
"The date must be an instance of datetime."
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
# Register the job details internally.
|
|
306
|
+
self.__jobs[self.__command] = {
|
|
307
|
+
'signature': self.__command,
|
|
308
|
+
'args': self.__args,
|
|
309
|
+
'purpose': self.__purpose,
|
|
310
|
+
'trigger': 'once_at',
|
|
311
|
+
'start_at': date.strftime('%Y-%m-%d %H:%M:%S'),
|
|
312
|
+
'end_at': date.strftime('%Y-%m-%d %H:%M:%S')
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
# Add the job to the scheduler.
|
|
316
|
+
self.__scheduler.add_job(
|
|
317
|
+
func= lambda command=self.__command, args=list(self.__args): self.__reactor.call(
|
|
318
|
+
command,
|
|
319
|
+
args
|
|
320
|
+
),
|
|
321
|
+
trigger=DateTrigger(
|
|
322
|
+
run_date=date
|
|
323
|
+
),
|
|
324
|
+
id=self.__command,
|
|
325
|
+
name=self.__command,
|
|
326
|
+
replace_existing=True
|
|
327
|
+
)
|
|
328
|
+
|
|
329
|
+
# Reset the internal state for future scheduling.
|
|
330
|
+
self.__reset()
|
|
331
|
+
|
|
332
|
+
# Return True to indicate successful scheduling.
|
|
333
|
+
return True
|
|
334
|
+
|
|
335
|
+
except Exception as e:
|
|
336
|
+
|
|
337
|
+
# Reraise known CLIOrionisRuntimeError exceptions.
|
|
338
|
+
if isinstance(e, CLIOrionisRuntimeError):
|
|
339
|
+
raise e
|
|
340
|
+
|
|
341
|
+
# Wrap and raise any other exceptions as CLIOrionisRuntimeError.
|
|
342
|
+
raise CLIOrionisRuntimeError(f"Error scheduling the job: {str(e)}")
|
|
343
|
+
|
|
344
|
+
async def start(self) -> None:
|
|
345
|
+
"""
|
|
346
|
+
Start the AsyncIO scheduler instance and keep it running.
|
|
347
|
+
|
|
348
|
+
This method initiates the AsyncIOScheduler which integrates with asyncio event loops
|
|
349
|
+
for asynchronous job execution. It ensures the scheduler starts properly within
|
|
350
|
+
an asyncio context and maintains the event loop active to process scheduled jobs.
|
|
351
|
+
|
|
352
|
+
Returns
|
|
353
|
+
-------
|
|
354
|
+
None
|
|
355
|
+
This method does not return any value. It starts the AsyncIO scheduler and keeps it running.
|
|
356
|
+
"""
|
|
357
|
+
|
|
358
|
+
# Start the AsyncIOScheduler to handle asynchronous jobs.
|
|
359
|
+
try:
|
|
360
|
+
|
|
361
|
+
# Ensure we're in an asyncio context
|
|
362
|
+
asyncio.get_running_loop()
|
|
363
|
+
|
|
364
|
+
# Start the scheduler
|
|
365
|
+
if not self.__scheduler.running:
|
|
366
|
+
self.__scheduler.start()
|
|
367
|
+
|
|
368
|
+
# Keep the event loop alive to process scheduled jobs
|
|
369
|
+
try:
|
|
370
|
+
|
|
371
|
+
# Wait for the scheduler to start and keep it running
|
|
372
|
+
while True:
|
|
373
|
+
await asyncio.sleep(1)
|
|
374
|
+
|
|
375
|
+
except KeyboardInterrupt:
|
|
376
|
+
|
|
377
|
+
# Handle graceful shutdown on keyboard interrupt
|
|
378
|
+
await self.shutdown()
|
|
379
|
+
|
|
380
|
+
except Exception as e:
|
|
381
|
+
|
|
382
|
+
# Handle exceptions that may occur during scheduler startup
|
|
383
|
+
raise CLIOrionisRuntimeError(f"Failed to start the scheduler: {str(e)}")
|
|
384
|
+
|
|
385
|
+
async def shutdown(self, wait=True) -> None:
|
|
386
|
+
"""
|
|
387
|
+
Shut down the AsyncIO scheduler instance asynchronously.
|
|
388
|
+
|
|
389
|
+
This method gracefully stops the AsyncIOScheduler that handles asynchronous job execution.
|
|
390
|
+
Using async ensures proper cleanup in asyncio environments.
|
|
391
|
+
|
|
392
|
+
Parameters
|
|
393
|
+
----------
|
|
394
|
+
wait : bool, optional
|
|
395
|
+
If True, the method will wait until all currently executing jobs are completed before shutting down the scheduler.
|
|
396
|
+
If False, the scheduler will be shut down immediately without waiting for running jobs to finish. Default is True.
|
|
397
|
+
|
|
398
|
+
Returns
|
|
399
|
+
-------
|
|
400
|
+
None
|
|
401
|
+
This method does not return any value. It shuts down the AsyncIO scheduler.
|
|
402
|
+
"""
|
|
403
|
+
|
|
404
|
+
# Validate that the wait parameter is a boolean.
|
|
405
|
+
if not isinstance(wait, bool):
|
|
406
|
+
raise ValueError("The 'wait' parameter must be a boolean value.")
|
|
407
|
+
|
|
408
|
+
try:
|
|
409
|
+
|
|
410
|
+
# Shut down the AsyncIOScheduler, waiting for jobs if specified.
|
|
411
|
+
if self.__scheduler.running:
|
|
412
|
+
|
|
413
|
+
# For AsyncIOScheduler, shutdown can be called normally
|
|
414
|
+
# but we await any pending operations
|
|
415
|
+
self.__scheduler.shutdown(wait=wait)
|
|
416
|
+
|
|
417
|
+
# Give a small delay to ensure proper cleanup
|
|
418
|
+
if wait:
|
|
419
|
+
await asyncio.sleep(0.1)
|
|
420
|
+
|
|
421
|
+
except Exception:
|
|
422
|
+
|
|
423
|
+
# AsyncIOScheduler may not be running or may have issues in shutdown
|
|
424
|
+
pass
|
|
425
|
+
|
|
426
|
+
async def remove(self, signature: str) -> bool:
|
|
427
|
+
"""
|
|
428
|
+
Remove a scheduled job from the AsyncIO scheduler asynchronously.
|
|
429
|
+
|
|
430
|
+
This method removes a job with the specified signature from both the internal
|
|
431
|
+
jobs dictionary and the AsyncIOScheduler instance. Using async ensures proper
|
|
432
|
+
cleanup in asyncio environments.
|
|
433
|
+
|
|
434
|
+
Parameters
|
|
435
|
+
----------
|
|
436
|
+
signature : str
|
|
437
|
+
The signature of the command/job to remove from the scheduler.
|
|
438
|
+
|
|
439
|
+
Returns
|
|
440
|
+
-------
|
|
441
|
+
bool
|
|
442
|
+
Returns True if the job was successfully removed, False if the job was not found.
|
|
443
|
+
|
|
444
|
+
Raises
|
|
445
|
+
------
|
|
446
|
+
ValueError
|
|
447
|
+
If the signature is not a non-empty string.
|
|
448
|
+
"""
|
|
449
|
+
|
|
450
|
+
# Validate that the signature is a non-empty string
|
|
451
|
+
if not isinstance(signature, str) or not signature.strip():
|
|
452
|
+
raise ValueError("Signature must be a non-empty string.")
|
|
453
|
+
|
|
454
|
+
try:
|
|
455
|
+
|
|
456
|
+
# Remove from the scheduler
|
|
457
|
+
self.__scheduler.remove_job(signature)
|
|
458
|
+
|
|
459
|
+
# Remove from internal jobs dictionary
|
|
460
|
+
if signature in self.__jobs:
|
|
461
|
+
del self.__jobs[signature]
|
|
462
|
+
|
|
463
|
+
# Give a small delay to ensure proper cleanup
|
|
464
|
+
await asyncio.sleep(0.01)
|
|
465
|
+
|
|
466
|
+
# Return True to indicate successful removal
|
|
467
|
+
return True
|
|
468
|
+
|
|
469
|
+
except Exception:
|
|
470
|
+
|
|
471
|
+
# Job not found or other error
|
|
472
|
+
return False
|
|
473
|
+
|
|
474
|
+
def jobs(self) -> dict:
|
|
475
|
+
"""
|
|
476
|
+
Retrieve all scheduled jobs currently managed by the Scheduler.
|
|
477
|
+
|
|
478
|
+
This method returns a dictionary containing information about all jobs that have been
|
|
479
|
+
registered and scheduled through this Scheduler instance. Each entry in the dictionary
|
|
480
|
+
represents a scheduled job, where the key is the command signature and the value is a
|
|
481
|
+
dictionary with details such as the signature, arguments, purpose, type, trigger, start time,
|
|
482
|
+
and end time.
|
|
483
|
+
|
|
484
|
+
Returns
|
|
485
|
+
-------
|
|
486
|
+
dict
|
|
487
|
+
A dictionary mapping command signatures to their corresponding job details. Each value
|
|
488
|
+
is a dictionary containing information about the scheduled job.
|
|
489
|
+
"""
|
|
490
|
+
|
|
491
|
+
# Return the internal dictionary holding all scheduled jobs and their details.
|
|
492
|
+
return self.__jobs
|