orionis 0.403.0__tar.gz → 0.405.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.403.0/orionis.egg-info → orionis-0.405.0}/PKG-INFO +1 -1
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/entities/chunked.py +10 -2
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/entities/daily.py +10 -2
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/entities/hourly.py +10 -2
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/entities/monthly.py +10 -2
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/entities/stack.py +11 -3
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/entities/weekly.py +10 -2
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/validators/path.py +6 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/metadata/framework.py +1 -1
- orionis-0.405.0/orionis/services/log/handlers/filename.py +64 -0
- orionis-0.405.0/orionis/services/log/handlers/size_rotating.py +21 -0
- orionis-0.405.0/orionis/services/log/handlers/timed_rotating.py +21 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/log/log_service.py +9 -52
- {orionis-0.403.0 → orionis-0.405.0/orionis.egg-info}/PKG-INFO +1 -1
- {orionis-0.403.0 → orionis-0.405.0}/orionis.egg-info/SOURCES.txt +1 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/logging/test_foundation_config_logging_chunked.py +12 -34
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/logging/test_foundation_config_logging_daily.py +11 -11
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/logging/test_foundation_config_logging_hourly.py +7 -8
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/logging/test_foundation_config_logging_monthly.py +7 -10
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/logging/test_foundation_config_logging_stack.py +6 -11
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/logging/test_foundation_config_logging_weekly.py +6 -5
- orionis-0.403.0/orionis/services/log/handlers/size_rotating.py +0 -52
- orionis-0.403.0/orionis/services/log/handlers/timed_rotating.py +0 -53
- {orionis-0.403.0 → orionis-0.405.0}/LICENCE +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/MANIFEST.in +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/README.md +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/base/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/base/command.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/command_filter.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/commands/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/commands/cache_clear.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/commands/help.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/commands/schedule_work.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/commands/version.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/dumper/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/dumper/dump_die.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/exceptions/cli-orionis-value-error.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/exceptions/cli_exception.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/exceptions/cli_runtime_error.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/exceptions/cli_schedule_exception.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/kernel.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/output/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/output/console.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/output/executor.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/output/progress_bar.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_console/parser.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/application.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/config/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/config/config.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/console/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/console/base/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/console/base/command.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/console/command_filter.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/console/kernel.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/console/output/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/console/output/console.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/console/output/executor.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/console/parser.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/console/task_manager.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/commands/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/commands/commands_facade.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/commands/scheduler_facade.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/config/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/config/config_facade.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/environment/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/environment/environment_facade.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/facade.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/files/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/files/path_facade.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/log/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/log/log_facade.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/tests/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/facades/tests/tests_facade.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/foundation/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/foundation/bootstraper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/foundation/config/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/foundation/config/config_bootstrapper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/foundation/console/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/foundation/console/command_bootstrapper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/foundation/environment/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/foundation/environment/environment_bootstrapper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/foundation/providers/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/foundation/providers/service_providers_bootstrapper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/providers/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/providers/service_provider.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/commands/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/commands/reactor_commands_service.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/commands/schedule_service.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/config/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/config/config_service.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/environment/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/environment/environment_service.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/files/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/files/path_resolver_service.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/log/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/services/log/log_service.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/support/exception_parse.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_contracts/support/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/console/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/console/command_bootstrapper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/environment/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/environment/environment_bootstrapper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/exceptions/exception_bootstrapper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/exceptions/exception_providers.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/foundation/config/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/foundation/config/config_bootstrapper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/providers/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_foundation/providers/service_providers_bootstrapper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_services/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_services/commands/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_services/commands/reactor_commands_service.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_services/commands/scheduler_service.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_services/config/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/_services/config/config_service.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/base/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/base/command.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/dumper/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/dumper/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/dumper/contracts/dump.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/dumper/dump.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/dynamic/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/dynamic/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/dynamic/contracts/progress_bar.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/dynamic/progress_bar.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/output/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/output/console.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/output/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/output/contracts/console.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/output/enums/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/console/output/enums/styles.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/container.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/context/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/context/manager.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/context/scope.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/contracts/container.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/contracts/resolver.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/contracts/service_provider.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/entities/binding.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/enums/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/enums/lifetimes.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/exceptions/attribute.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/exceptions/exception.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/exceptions/type.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/exceptions/value.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/facades/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/facades/facade.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/providers/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/providers/service_provider.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/resolver/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/resolver/resolver.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/validators/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/validators/implements.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/validators/is_abstract_class.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/validators/is_callable.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/validators/is_concrete_class.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/validators/is_instance.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/validators/is_not_subclass.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/validators/is_subclass.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/validators/is_valid_alias.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/container/validators/lifetime.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/application.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/app/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/app/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/app/entities/app.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/app/enums/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/app/enums/ciphers.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/app/enums/environments.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/auth/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/auth/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/auth/entities/auth.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/base.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/cache/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/cache/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/cache/entities/cache.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/cache/entities/file.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/cache/entities/stores.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/cache/enums/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/cache/enums/drivers.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/cors/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/cors/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/cors/entities/cors.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/entities/connections.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/entities/database.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/entities/mysql.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/entities/oracle.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/entities/pgsql.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/entities/sqlite.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/mysql_charsets.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/mysql_collations.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/mysql_engine.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/oracle_encoding.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/oracle_nencoding.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/pgsql_charsets.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/pgsql_collations.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/pgsql_mode.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/sqlite_foreign_key.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/sqlite_journal.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/database/enums/sqlite_synchronous.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/filesystems/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/filesystems/entitites/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/filesystems/entitites/aws.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/filesystems/entitites/disks.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/filesystems/entitites/filesystems.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/filesystems/entitites/local.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/filesystems/entitites/public.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/entities/channels.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/entities/logging.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/enums/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/enums/levels.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/validators/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/logging/validators/level.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/mail/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/mail/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/mail/entities/file.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/mail/entities/mail.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/mail/entities/mailers.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/mail/entities/smtp.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/queue/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/queue/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/queue/entities/brokers.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/queue/entities/database.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/queue/entities/queue.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/queue/enums/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/queue/enums/strategy.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/roots/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/roots/paths.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/session/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/session/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/session/entities/session.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/session/enums/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/session/enums/same_site_policy.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/session/helpers/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/session/helpers/secret_key.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/startup.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/testing/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/testing/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/testing/entities/testing.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/testing/enums/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/config/testing/enums/test_mode.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/contracts/application.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/contracts/config.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/exceptions/integrity.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/exceptions/runtime.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/exceptions/type.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/exceptions/value.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/providers/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/providers/console_provider.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/providers/dumper_provider.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/providers/logger_provider.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/providers/path_resolver_provider.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/providers/progress_bar_provider.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/foundation/providers/workers_provider.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/metadata/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/metadata/package.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/asynchrony/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/asynchrony/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/asynchrony/contracts/coroutines.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/asynchrony/coroutines.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/asynchrony/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/asynchrony/exceptions/exception.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/contracts/env.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/contracts/types.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/core/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/core/dot_env.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/dynamic/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/dynamic/types.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/env.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/exceptions/exception.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/exceptions/value.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/helpers/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/environment/helpers/functions.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/abstract/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/abstract/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/abstract/contracts/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/abstract/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/callables/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/callables/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/callables/contracts/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/callables/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/concretes/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/concretes/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/concretes/contracts/concrete.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/concretes/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/dependencies/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/dependencies/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/dependencies/contracts/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/dependencies/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/dependencies/entities/callable_dependencies.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/dependencies/entities/class_dependencies.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/dependencies/entities/known_dependencies.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/dependencies/entities/method_dependencies.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/dependencies/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/exceptions/attribute.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/exceptions/type.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/exceptions/value.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/instances/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/instances/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/instances/contracts/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/instances/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/modules/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/modules/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/modules/contracts/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/modules/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/objects/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/objects/types.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/introspection/reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/log/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/log/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/log/contracts/log_service.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/log/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/log/exceptions/runtime.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/log/handlers/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/paths/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/paths/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/paths/contracts/resolver.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/paths/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/paths/exceptions/exception.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/paths/exceptions/file.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/paths/resolver.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/system/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/system/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/system/contracts/imports.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/system/contracts/workers.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/system/imports.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/system/runtime/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/system/runtime/imports.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/services/system/workers.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/facades/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/facades/console.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/facades/dumper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/facades/logger.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/facades/path_resolver.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/facades/progress_bar.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/facades/workers.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/formatter/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/formatter/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/formatter/exceptions/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/formatter/exceptions/contracts/parser.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/formatter/exceptions/parser.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/formatter/serializer.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/patterns/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/patterns/singleton/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/patterns/singleton/meta.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/standard/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/standard/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/standard/contracts/std.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/standard/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/standard/exceptions/value.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/standard/std.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/wrapper/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/support/wrapper/dot_dict.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/arguments/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/arguments/parser.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/cases/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/cases/asynchronous.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/cases/synchronous.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/contracts/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/contracts/dumper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/contracts/kernel.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/contracts/logs.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/contracts/parser.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/contracts/printer.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/contracts/render.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/contracts/unit_test.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/core/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/core/unit_test.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/entities/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/entities/arguments.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/entities/result.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/enums/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/enums/execution_mode.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/enums/status.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/exceptions/config.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/exceptions/failure.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/exceptions/persistence.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/exceptions/runtime.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/exceptions/value.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/kernel.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/output/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/output/dumper.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/output/printer.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/records/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/records/logs.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/view/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis/test/view/render.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis.egg-info/dependency_links.txt +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis.egg-info/requires.txt +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis.egg-info/top_level.txt +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/orionis.egg-info/zip-safe +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/setup.cfg +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/setup.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/example/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/example/test_example.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/app/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/app/test_foundation_config_app.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/auth/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/auth/test_foundation_config_auth.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/cache/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/cache/test_foundation_config_cache.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/cache/test_foundation_config_cache_file.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/cache/test_foundation_config_cache_stores.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/cors/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/cors/test_foundation_config_cors.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/database/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/database/test_foundation_config_database.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/database/test_foundation_config_database_connections.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/database/test_foundation_config_database_mysql.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/database/test_foundation_config_database_oracle.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/database/test_foundation_config_database_pgsql.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/database/test_foundation_config_database_sqlite.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/filesystems/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_aws.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_disks.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_local.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_public.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/logging/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/logging/test_foundation_config_logging.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/logging/test_foundation_config_logging_channels.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/mail/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/mail/test_foundation_config_mail.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/mail/test_foundation_config_mail_file.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/mail/test_foundation_config_mail_mailers.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/mail/test_foundation_config_mail_smtp.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/queue/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/queue/test_foundation_config_queue.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/queue/test_foundation_config_queue_brokers.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/queue/test_foundation_config_queue_database.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/root/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/root/test_foundation_config_root_paths.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/session/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/session/test_foundation_config_session.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/startup/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/startup/test_foundation_config_startup.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/testing/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/config/testing/test_foundation_config_testing.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/exceptions/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/foundation/exceptions/test_foundation_config_exceptions.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/metadata/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/metadata/test_metadata_framework.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/metadata/test_metadata_package.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/asynchrony/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/asynchrony/test_services_asynchrony_coroutine.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/environment/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/environment/test_services_environment.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/dependencies/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/dependencies/mocks/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/dependencies/mocks/mock_user.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/dependencies/mocks/mock_user_controller.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/dependencies/mocks/mock_users_permissions.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/dependencies/test_reflect_dependencies.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/reflection/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/reflection/mock/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/reflection/mock/fake_reflect_instance.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/reflection/test_reflection_abstract.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/reflection/test_reflection_callable.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/reflection/test_reflection_concrete.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/reflection/test_reflection_instance.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/reflection/test_reflection_module.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/inspection/test_reflection.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/path/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/path/test_services_resolver.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/system/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/system/test_services_system_imports.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/services/system/test_services_system_workers.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/parsers/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/parsers/mocks/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/parsers/mocks/mock_custom_error.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/parsers/test_services_parser_exceptions.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/patterns/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/patterns/singleton/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/patterns/singleton/test_patterns_singleton.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/standard/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/standard/test_services_std.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/wrapper/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/support/wrapper/test_services_wrapper_docdict.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/testing/__init__.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/testing/test_testing_result.py +0 -0
- {orionis-0.403.0 → orionis-0.405.0}/tests/testing/test_testing_unit.py +0 -0
|
@@ -26,10 +26,10 @@ class Chunked(BaseConfigEntity):
|
|
|
26
26
|
"""
|
|
27
27
|
|
|
28
28
|
path: str = field(
|
|
29
|
-
default = 'storage/log/
|
|
29
|
+
default = 'storage/log/chunked.log',
|
|
30
30
|
metadata = {
|
|
31
31
|
"description": "The file path where the log is stored.",
|
|
32
|
-
"default": "storage/log/
|
|
32
|
+
"default": "storage/log/chunked.log",
|
|
33
33
|
},
|
|
34
34
|
)
|
|
35
35
|
|
|
@@ -78,6 +78,14 @@ class Chunked(BaseConfigEntity):
|
|
|
78
78
|
# Validate 'level' using the IsValidLevel validator
|
|
79
79
|
IsValidLevel(self.level)
|
|
80
80
|
|
|
81
|
+
# Assign the level value.
|
|
82
|
+
if isinstance(self.level, Level):
|
|
83
|
+
self.level = self.level.value
|
|
84
|
+
elif isinstance(self.level, str):
|
|
85
|
+
self.level = Level[self.level.strip().upper()].value
|
|
86
|
+
elif isinstance(self.level, int):
|
|
87
|
+
self.level = self.level
|
|
88
|
+
|
|
81
89
|
# Validate 'mb_size'
|
|
82
90
|
if not isinstance(self.mb_size, int):
|
|
83
91
|
raise OrionisIntegrityException(
|
|
@@ -18,10 +18,10 @@ class Daily(BaseConfigEntity):
|
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
20
|
path: str = field(
|
|
21
|
-
default = 'storage/log/
|
|
21
|
+
default = 'storage/log/daily.log',
|
|
22
22
|
metadata = {
|
|
23
23
|
"description": "The file path where the log is stored.",
|
|
24
|
-
"default": "storage/log/
|
|
24
|
+
"default": "storage/log/daily.log",
|
|
25
25
|
},
|
|
26
26
|
)
|
|
27
27
|
|
|
@@ -63,6 +63,14 @@ class Daily(BaseConfigEntity):
|
|
|
63
63
|
# Validate 'level' using the IsValidLevel validator
|
|
64
64
|
IsValidLevel(self.level)
|
|
65
65
|
|
|
66
|
+
# Assign the level value.
|
|
67
|
+
if isinstance(self.level, Level):
|
|
68
|
+
self.level = self.level.value
|
|
69
|
+
elif isinstance(self.level, str):
|
|
70
|
+
self.level = Level[self.level.strip().upper()].value
|
|
71
|
+
elif isinstance(self.level, int):
|
|
72
|
+
self.level = self.level
|
|
73
|
+
|
|
66
74
|
# Validate 'retention_days'
|
|
67
75
|
if not isinstance(self.retention_days, int):
|
|
68
76
|
raise OrionisIntegrityException(
|
|
@@ -16,10 +16,10 @@ class Hourly(BaseConfigEntity):
|
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
path: str = field(
|
|
19
|
-
default = 'storage/log/
|
|
19
|
+
default = 'storage/log/hourly.log',
|
|
20
20
|
metadata = {
|
|
21
21
|
"description": "The file path where the log is stored.",
|
|
22
|
-
"default": "storage/log/
|
|
22
|
+
"default": "storage/log/hourly.log",
|
|
23
23
|
},
|
|
24
24
|
)
|
|
25
25
|
|
|
@@ -56,6 +56,14 @@ class Hourly(BaseConfigEntity):
|
|
|
56
56
|
# Validate 'level' using the IsValidLevel validator
|
|
57
57
|
IsValidLevel(self.level)
|
|
58
58
|
|
|
59
|
+
# Assign the level value.
|
|
60
|
+
if isinstance(self.level, Level):
|
|
61
|
+
self.level = self.level.value
|
|
62
|
+
elif isinstance(self.level, str):
|
|
63
|
+
self.level = Level[self.level.strip().upper()].value
|
|
64
|
+
elif isinstance(self.level, int):
|
|
65
|
+
self.level = self.level
|
|
66
|
+
|
|
59
67
|
# Validate 'retention_hours'
|
|
60
68
|
if not isinstance(self.retention_hours, int) or self.retention_hours < 0:
|
|
61
69
|
raise OrionisIntegrityException(
|
|
@@ -16,10 +16,10 @@ class Monthly(BaseConfigEntity):
|
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
path: str = field(
|
|
19
|
-
default = 'storage/log/
|
|
19
|
+
default = 'storage/log/monthly.log',
|
|
20
20
|
metadata = {
|
|
21
21
|
"description": "The file path where the log is stored.",
|
|
22
|
-
"default": "storage/log/
|
|
22
|
+
"default": "storage/log/monthly.log",
|
|
23
23
|
},
|
|
24
24
|
)
|
|
25
25
|
|
|
@@ -55,6 +55,14 @@ class Monthly(BaseConfigEntity):
|
|
|
55
55
|
# Validate 'level' using the IsValidLevel validator
|
|
56
56
|
IsValidLevel(self.level)
|
|
57
57
|
|
|
58
|
+
# Assign the level value.
|
|
59
|
+
if isinstance(self.level, Level):
|
|
60
|
+
self.level = self.level.value
|
|
61
|
+
elif isinstance(self.level, str):
|
|
62
|
+
self.level = Level[self.level.strip().upper()].value
|
|
63
|
+
elif isinstance(self.level, int):
|
|
64
|
+
self.level = self.level
|
|
65
|
+
|
|
58
66
|
# Validate 'retention_months'
|
|
59
67
|
if not isinstance(self.retention_months, int):
|
|
60
68
|
raise OrionisIntegrityException(
|
|
@@ -10,10 +10,10 @@ class Stack(BaseConfigEntity):
|
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
12
|
path: str = field(
|
|
13
|
-
default = 'storage/log/
|
|
13
|
+
default = 'storage/log/stack.log',
|
|
14
14
|
metadata = {
|
|
15
15
|
"description": "The file path where the log is stored.",
|
|
16
|
-
"default": "storage/log/
|
|
16
|
+
"default": "storage/log/stack.log",
|
|
17
17
|
},
|
|
18
18
|
)
|
|
19
19
|
|
|
@@ -37,4 +37,12 @@ class Stack(BaseConfigEntity):
|
|
|
37
37
|
IsValidPath(self.path)
|
|
38
38
|
|
|
39
39
|
# Validate 'level' using the IsValidLevel validator
|
|
40
|
-
IsValidLevel(self.level)
|
|
40
|
+
IsValidLevel(self.level)
|
|
41
|
+
|
|
42
|
+
# Assign the level value.
|
|
43
|
+
if isinstance(self.level, Level):
|
|
44
|
+
self.level = self.level.value
|
|
45
|
+
elif isinstance(self.level, str):
|
|
46
|
+
self.level = Level[self.level.strip().upper()].value
|
|
47
|
+
elif isinstance(self.level, int):
|
|
48
|
+
self.level = self.level
|
|
@@ -16,10 +16,10 @@ class Weekly(BaseConfigEntity):
|
|
|
16
16
|
"""
|
|
17
17
|
|
|
18
18
|
path: str = field(
|
|
19
|
-
default = 'storage/log/
|
|
19
|
+
default = 'storage/log/weekly.log',
|
|
20
20
|
metadata = {
|
|
21
21
|
"description": "The file path where the log is stored.",
|
|
22
|
-
"default": "storage/log/
|
|
22
|
+
"default": "storage/log/weekly.log",
|
|
23
23
|
},
|
|
24
24
|
)
|
|
25
25
|
|
|
@@ -57,6 +57,14 @@ class Weekly(BaseConfigEntity):
|
|
|
57
57
|
# Validate 'level' using the IsValidLevel validator
|
|
58
58
|
IsValidLevel(self.level)
|
|
59
59
|
|
|
60
|
+
# Assign the level value.
|
|
61
|
+
if isinstance(self.level, Level):
|
|
62
|
+
self.level = self.level.value
|
|
63
|
+
elif isinstance(self.level, str):
|
|
64
|
+
self.level = Level[self.level.strip().upper()].value
|
|
65
|
+
elif isinstance(self.level, int):
|
|
66
|
+
self.level = self.level
|
|
67
|
+
|
|
60
68
|
# Validate 'retention_weeks'
|
|
61
69
|
if not isinstance(self.retention_weeks, int):
|
|
62
70
|
raise OrionisIntegrityException(
|
|
@@ -18,6 +18,8 @@ class __IsValidPath:
|
|
|
18
18
|
def __call__(self, value: Any) -> None:
|
|
19
19
|
"""
|
|
20
20
|
Validates that the provided value is a non-empty string representing a file path.
|
|
21
|
+
This method checks if the value is a string and not empty. It also ensures that the string ends with '.log',
|
|
22
|
+
indicating that it is a log file path.
|
|
21
23
|
|
|
22
24
|
Args:
|
|
23
25
|
value (Any): The value to validate as a file path.
|
|
@@ -29,6 +31,10 @@ class __IsValidPath:
|
|
|
29
31
|
raise OrionisIntegrityException(
|
|
30
32
|
f"File cache configuration error: 'path' must be a non-empty string, got {repr(value)}."
|
|
31
33
|
)
|
|
34
|
+
if not value.endswith('.log'):
|
|
35
|
+
raise OrionisIntegrityException(
|
|
36
|
+
f"File cache configuration error: 'path' must end with '.log', got {repr(value)}."
|
|
37
|
+
)
|
|
32
38
|
|
|
33
39
|
# Exported singleton instance
|
|
34
40
|
IsValidPath = __IsValidPath()
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
class FileNameLogger:
|
|
6
|
+
|
|
7
|
+
def __init__(self, path: str) -> None:
|
|
8
|
+
"""
|
|
9
|
+
Initialize the FileNameLogger.
|
|
10
|
+
|
|
11
|
+
Parameters
|
|
12
|
+
----------
|
|
13
|
+
path : str
|
|
14
|
+
The original file path for the log file.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
# If the path is not a string or is empty, raise a ValueError
|
|
18
|
+
if not isinstance(path, str) or not path:
|
|
19
|
+
raise ValueError("The 'path' parameter must be a non-empty string.")
|
|
20
|
+
|
|
21
|
+
# Set the instance variable __path to the stripped path
|
|
22
|
+
self.__path = path.strip()
|
|
23
|
+
|
|
24
|
+
def generate(self) -> str:
|
|
25
|
+
"""
|
|
26
|
+
Generate a new log file path with a timestamp prefix.
|
|
27
|
+
|
|
28
|
+
Returns
|
|
29
|
+
-------
|
|
30
|
+
str
|
|
31
|
+
The full path to the log file with a timestamped file name.
|
|
32
|
+
|
|
33
|
+
Notes
|
|
34
|
+
-----
|
|
35
|
+
The method ensures that the directory for the log file exists.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
# Split the original path to extract the base name and extension
|
|
39
|
+
if '/' in self.__path:
|
|
40
|
+
parts = self.__path.split('/')
|
|
41
|
+
elif '\\' in self.__path:
|
|
42
|
+
parts = self.__path.split('\\')
|
|
43
|
+
else:
|
|
44
|
+
parts = self.__path.split(os.sep)
|
|
45
|
+
|
|
46
|
+
# Get the base name and extension
|
|
47
|
+
filename, ext = os.path.splitext(parts[-1])
|
|
48
|
+
|
|
49
|
+
# Create the path without the last part
|
|
50
|
+
path = os.path.join(*parts[:-1]) if len(parts) > 1 else ''
|
|
51
|
+
|
|
52
|
+
# Prefix the base name with a timestamp
|
|
53
|
+
prefix = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
54
|
+
|
|
55
|
+
# Join the path, prefix, and filename to create the full path
|
|
56
|
+
full_path = os.path.join(path, f"{prefix}_{filename}{ext}")
|
|
57
|
+
|
|
58
|
+
# Ensure the log directory exists
|
|
59
|
+
log_dir = Path(full_path).parent
|
|
60
|
+
if not log_dir.exists():
|
|
61
|
+
log_dir.mkdir(parents=True, exist_ok=True)
|
|
62
|
+
|
|
63
|
+
# Return the full path as a string
|
|
64
|
+
return full_path
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from logging.handlers import RotatingFileHandler
|
|
2
|
+
from orionis.services.log.handlers.filename import FileNameLogger
|
|
3
|
+
|
|
4
|
+
class PrefixedSizeRotatingFileHandler(RotatingFileHandler):
|
|
5
|
+
|
|
6
|
+
def rotation_filename(self, default_name) -> str:
|
|
7
|
+
"""
|
|
8
|
+
Generate a rotated log filename by prefixing the original filename with a timestamp.
|
|
9
|
+
|
|
10
|
+
Parameters
|
|
11
|
+
----------
|
|
12
|
+
default_name : str
|
|
13
|
+
The original file path to be rotated.
|
|
14
|
+
|
|
15
|
+
Returns
|
|
16
|
+
-------
|
|
17
|
+
str
|
|
18
|
+
The new file path with the base name prefixed by a timestamp in the format 'YYYYMMDD_HHMMSS'.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
return FileNameLogger(default_name).generate()
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from logging.handlers import TimedRotatingFileHandler
|
|
2
|
+
from orionis.services.log.handlers.filename import FileNameLogger
|
|
3
|
+
|
|
4
|
+
class PrefixedTimedRotatingFileHandler(TimedRotatingFileHandler):
|
|
5
|
+
|
|
6
|
+
def rotation_filename(self, default_name) -> str:
|
|
7
|
+
"""
|
|
8
|
+
Generate a rotated log filename by prefixing the original filename with a timestamp.
|
|
9
|
+
|
|
10
|
+
Parameters
|
|
11
|
+
----------
|
|
12
|
+
default_name : str
|
|
13
|
+
The original file path to be rotated.
|
|
14
|
+
|
|
15
|
+
Returns
|
|
16
|
+
-------
|
|
17
|
+
str
|
|
18
|
+
The new file path with the base name prefixed by a timestamp in the format 'YYYYMMDD_HHMMSS'.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
return FileNameLogger(default_name).generate()
|
|
@@ -2,6 +2,7 @@ from orionis.foundation.config.logging.entities.logging import Logging
|
|
|
2
2
|
from orionis.foundation.config.logging.enums import Level
|
|
3
3
|
from orionis.services.log.contracts.log_service import ILoggerService
|
|
4
4
|
from orionis.services.log.exceptions import LoggerRuntimeError
|
|
5
|
+
from orionis.services.log.handlers.filename import FileNameLogger
|
|
5
6
|
from orionis.services.log.handlers.size_rotating import PrefixedSizeRotatingFileHandler
|
|
6
7
|
from orionis.services.log.handlers.timed_rotating import PrefixedTimedRotatingFileHandler
|
|
7
8
|
|
|
@@ -40,7 +41,13 @@ class LoggerService(ILoggerService):
|
|
|
40
41
|
try:
|
|
41
42
|
self.__config = Logging(**kwargs)
|
|
42
43
|
except Exception as e:
|
|
43
|
-
raise LoggerRuntimeError(
|
|
44
|
+
raise LoggerRuntimeError(
|
|
45
|
+
f"Error initializing logger configuration: {e}. "
|
|
46
|
+
"Please check the provided parameters. "
|
|
47
|
+
f"Expected a Logging dataclass or a configuration dictionary. "
|
|
48
|
+
f"Type received: {type(config).__module__}.{type(config).__name__}. "
|
|
49
|
+
f"Expected: {Logging.__module__}.{Logging.__name__} or dict."
|
|
50
|
+
)
|
|
44
51
|
|
|
45
52
|
# If config is a dictionary, convert it to Logging
|
|
46
53
|
elif isinstance(config, dict):
|
|
@@ -53,56 +60,6 @@ class LoggerService(ILoggerService):
|
|
|
53
60
|
# Initialize LoggerService
|
|
54
61
|
self.__initLogger()
|
|
55
62
|
|
|
56
|
-
def __filename(self, original_path:str) -> str:
|
|
57
|
-
"""
|
|
58
|
-
Generates a rotated log filename by prefixing the original filename with a timestamp.
|
|
59
|
-
This method takes an original file path, extracts its directory, base name, and extension,
|
|
60
|
-
and returns a new file path where the base name is prefixed with the current timestamp
|
|
61
|
-
in the format 'YYYYMMDD_HHMMSS'. If the target directory does not exist, it is created.
|
|
62
|
-
The original file path to be rotated.
|
|
63
|
-
The new file path with a timestamp prefix added to the base name.
|
|
64
|
-
Notes
|
|
65
|
-
-----
|
|
66
|
-
- The timestamp is based on the current local time.
|
|
67
|
-
- The method ensures that the parent directory for the new file exists.
|
|
68
|
-
|
|
69
|
-
Returns
|
|
70
|
-
-------
|
|
71
|
-
str
|
|
72
|
-
The new filename with a timestamp prefix in the format 'YYYYMMDD_HHMMSS'.
|
|
73
|
-
"""
|
|
74
|
-
import os
|
|
75
|
-
from datetime import datetime
|
|
76
|
-
from pathlib import Path
|
|
77
|
-
|
|
78
|
-
# Split the original path to extract the base name and extension
|
|
79
|
-
if '/' in original_path:
|
|
80
|
-
parts = original_path.split('/')
|
|
81
|
-
elif '\\' in original_path:
|
|
82
|
-
parts = original_path.split('\\')
|
|
83
|
-
else:
|
|
84
|
-
parts = original_path.split(os.sep)
|
|
85
|
-
|
|
86
|
-
# Get the base name and extension
|
|
87
|
-
filename, ext = os.path.splitext(parts[-1])
|
|
88
|
-
|
|
89
|
-
# Create the path without the last part
|
|
90
|
-
path = os.path.join(*parts[:-1]) if len(parts) > 1 else ''
|
|
91
|
-
|
|
92
|
-
# Prefix the base name with a timestamp
|
|
93
|
-
prefix = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
94
|
-
|
|
95
|
-
# Join the path, prefix, and filename to create the full path
|
|
96
|
-
full_path = os.path.join(path, f"{prefix}_{filename}{ext}")
|
|
97
|
-
|
|
98
|
-
# Ensure the log directory exists
|
|
99
|
-
log_dir = Path(full_path).parent
|
|
100
|
-
if not log_dir.exists():
|
|
101
|
-
log_dir.mkdir(parents=True, exist_ok=True)
|
|
102
|
-
|
|
103
|
-
# Return the full path as a string
|
|
104
|
-
return full_path
|
|
105
|
-
|
|
106
63
|
def __initLogger(self):
|
|
107
64
|
"""
|
|
108
65
|
Configures the logger with the specified settings.
|
|
@@ -131,7 +88,7 @@ class LoggerService(ILoggerService):
|
|
|
131
88
|
config_channels = getattr(self.__config.channels, channel)
|
|
132
89
|
|
|
133
90
|
# Get the path from the channel configuration
|
|
134
|
-
path: str =
|
|
91
|
+
path: str = FileNameLogger(getattr(config_channels, 'path')).generate()
|
|
135
92
|
|
|
136
93
|
# Get Level from the channel configuration, defaulting to 10 (DEBUG)
|
|
137
94
|
level: Level | int = getattr(config_channels, 'level', 10)
|
|
@@ -331,6 +331,7 @@ orionis/services/log/contracts/log_service.py
|
|
|
331
331
|
orionis/services/log/exceptions/__init__.py
|
|
332
332
|
orionis/services/log/exceptions/runtime.py
|
|
333
333
|
orionis/services/log/handlers/__init__.py
|
|
334
|
+
orionis/services/log/handlers/filename.py
|
|
334
335
|
orionis/services/log/handlers/size_rotating.py
|
|
335
336
|
orionis/services/log/handlers/timed_rotating.py
|
|
336
337
|
orionis/services/paths/__init__.py
|
|
@@ -25,7 +25,7 @@ class TestFoundationConfigLoggingChunked(AsyncTestCase):
|
|
|
25
25
|
None
|
|
26
26
|
"""
|
|
27
27
|
chunked = Chunked()
|
|
28
|
-
self.assertEqual(chunked.path, "storage/log/
|
|
28
|
+
self.assertEqual(chunked.path, "storage/log/chunked.log")
|
|
29
29
|
self.assertEqual(chunked.level, Level.INFO.value)
|
|
30
30
|
self.assertEqual(chunked.mb_size, 10)
|
|
31
31
|
self.assertEqual(chunked.files, 5)
|
|
@@ -85,39 +85,19 @@ class TestFoundationConfigLoggingChunked(AsyncTestCase):
|
|
|
85
85
|
"""
|
|
86
86
|
Test validation of the `mb_size` attribute.
|
|
87
87
|
|
|
88
|
-
Ensures that valid integer and string formats are accepted, and invalid
|
|
89
|
-
values raise `OrionisIntegrityException`.
|
|
90
|
-
|
|
91
88
|
Returns
|
|
92
89
|
-------
|
|
93
90
|
None
|
|
94
91
|
"""
|
|
95
|
-
|
|
96
|
-
try:
|
|
97
|
-
Chunked(mb_size=1)
|
|
98
|
-
Chunked(mb_size=100)
|
|
99
|
-
except OrionisIntegrityException:
|
|
100
|
-
self.fail("Valid mb_size should not raise exception")
|
|
101
|
-
|
|
102
|
-
# Test string formats
|
|
103
|
-
chunked = Chunked(mb_size="10MB")
|
|
92
|
+
chunked = Chunked(mb_size=10)
|
|
104
93
|
self.assertEqual(chunked.mb_size, 10)
|
|
105
94
|
|
|
106
|
-
chunked = Chunked(mb_size=
|
|
107
|
-
self.assertEqual(chunked.mb_size,
|
|
108
|
-
|
|
109
|
-
chunked = Chunked(mb_size="10485760B")
|
|
110
|
-
self.assertEqual(chunked.mb_size, 10)
|
|
95
|
+
chunked = Chunked(mb_size=1000)
|
|
96
|
+
self.assertEqual(chunked.mb_size, 1000)
|
|
111
97
|
|
|
112
|
-
# Test invalid cases
|
|
113
|
-
with self.assertRaises(OrionisIntegrityException):
|
|
114
|
-
Chunked(mb_size=0)
|
|
115
|
-
with self.assertRaises(OrionisIntegrityException):
|
|
116
|
-
Chunked(mb_size=-1)
|
|
117
|
-
with self.assertRaises(OrionisIntegrityException):
|
|
118
|
-
Chunked(mb_size="invalid")
|
|
119
98
|
with self.assertRaises(OrionisIntegrityException):
|
|
120
|
-
Chunked(mb_size=
|
|
99
|
+
chunked = Chunked(mb_size=2048)
|
|
100
|
+
self.assertEqual(chunked.mb_size, 2048)
|
|
121
101
|
|
|
122
102
|
async def testFilesValidation(self):
|
|
123
103
|
"""
|
|
@@ -149,16 +129,14 @@ class TestFoundationConfigLoggingChunked(AsyncTestCase):
|
|
|
149
129
|
"""
|
|
150
130
|
Test handling of whitespace in `path` and `level` attributes.
|
|
151
131
|
|
|
152
|
-
Ensures that leading and trailing whitespace in `path` and `level` are
|
|
153
|
-
handled as expected.
|
|
154
|
-
|
|
155
132
|
Returns
|
|
156
133
|
-------
|
|
157
134
|
None
|
|
158
135
|
"""
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
136
|
+
with self.assertRaises(OrionisIntegrityException):
|
|
137
|
+
chunked = Chunked(path=" logs/app.log ", level=" debug ")
|
|
138
|
+
self.assertEqual(chunked.path, " logs/app.log ")
|
|
139
|
+
self.assertEqual(chunked.level, Level.DEBUG.value)
|
|
162
140
|
|
|
163
141
|
async def testToDictMethod(self):
|
|
164
142
|
"""
|
|
@@ -175,7 +153,7 @@ class TestFoundationConfigLoggingChunked(AsyncTestCase):
|
|
|
175
153
|
chunked_dict = chunked.toDict()
|
|
176
154
|
|
|
177
155
|
self.assertIsInstance(chunked_dict, dict)
|
|
178
|
-
self.assertEqual(chunked_dict['path'], "storage/log/
|
|
156
|
+
self.assertEqual(chunked_dict['path'], "storage/log/chunked.log")
|
|
179
157
|
self.assertEqual(chunked_dict['level'], Level.INFO.value)
|
|
180
158
|
self.assertEqual(chunked_dict['mb_size'], 10)
|
|
181
159
|
self.assertEqual(chunked_dict['files'], 5)
|
|
@@ -199,7 +177,7 @@ class TestFoundationConfigLoggingChunked(AsyncTestCase):
|
|
|
199
177
|
)
|
|
200
178
|
chunked_dict = custom_chunked.toDict()
|
|
201
179
|
self.assertEqual(chunked_dict['path'], "custom/logs/app.log")
|
|
202
|
-
self.assertEqual(chunked_dict['level'],
|
|
180
|
+
self.assertEqual(chunked_dict['level'], 30)
|
|
203
181
|
self.assertEqual(chunked_dict['mb_size'], 20)
|
|
204
182
|
self.assertEqual(chunked_dict['files'], 10)
|
|
205
183
|
|
|
@@ -25,10 +25,10 @@ class TestFoundationConfigLoggingDaily(AsyncTestCase):
|
|
|
25
25
|
None
|
|
26
26
|
"""
|
|
27
27
|
daily = Daily()
|
|
28
|
-
self.assertEqual(daily.path, "storage/log/
|
|
28
|
+
self.assertEqual(daily.path, "storage/log/daily.log")
|
|
29
29
|
self.assertEqual(daily.level, Level.INFO.value)
|
|
30
30
|
self.assertEqual(daily.retention_days, 7)
|
|
31
|
-
self.assertEqual(daily.at, "00:00
|
|
31
|
+
self.assertEqual(daily.at, "00:00")
|
|
32
32
|
|
|
33
33
|
async def testPathValidation(self):
|
|
34
34
|
"""
|
|
@@ -122,7 +122,7 @@ class TestFoundationConfigLoggingDaily(AsyncTestCase):
|
|
|
122
122
|
"""
|
|
123
123
|
# Test time object
|
|
124
124
|
daily = Daily(at=time(12, 30))
|
|
125
|
-
self.assertEqual(daily.at, "12:30
|
|
125
|
+
self.assertEqual(daily.at, "12:30")
|
|
126
126
|
|
|
127
127
|
# Test invalid type
|
|
128
128
|
with self.assertRaises(OrionisIntegrityException):
|
|
@@ -134,15 +134,15 @@ class TestFoundationConfigLoggingDaily(AsyncTestCase):
|
|
|
134
134
|
"""
|
|
135
135
|
Test handling of whitespace in path and level attributes.
|
|
136
136
|
|
|
137
|
-
Ensures that whitespace in path and level is preserved or handled as expected.
|
|
138
|
-
|
|
139
137
|
Returns
|
|
140
138
|
-------
|
|
141
139
|
None
|
|
142
140
|
"""
|
|
143
|
-
|
|
144
|
-
self.
|
|
145
|
-
|
|
141
|
+
|
|
142
|
+
with self.assertRaises(OrionisIntegrityException):
|
|
143
|
+
daily = Daily(path=" logs/app.log ", level=" debug ")
|
|
144
|
+
self.assertEqual(daily.path, " logs/app.log ")
|
|
145
|
+
self.assertEqual(daily.level, Level.DEBUG.value)
|
|
146
146
|
|
|
147
147
|
async def testToDictMethod(self):
|
|
148
148
|
"""
|
|
@@ -159,10 +159,10 @@ class TestFoundationConfigLoggingDaily(AsyncTestCase):
|
|
|
159
159
|
daily_dict = daily.toDict()
|
|
160
160
|
|
|
161
161
|
self.assertIsInstance(daily_dict, dict)
|
|
162
|
-
self.assertEqual(daily_dict['path'], "storage/log/
|
|
162
|
+
self.assertEqual(daily_dict['path'], "storage/log/daily.log")
|
|
163
163
|
self.assertEqual(daily_dict['level'], Level.INFO.value)
|
|
164
164
|
self.assertEqual(daily_dict['retention_days'], 7)
|
|
165
|
-
self.assertEqual(daily_dict['at'], "00:00
|
|
165
|
+
self.assertEqual(daily_dict['at'], "00:00")
|
|
166
166
|
|
|
167
167
|
async def testCustomValuesToDict(self):
|
|
168
168
|
"""
|
|
@@ -184,7 +184,7 @@ class TestFoundationConfigLoggingDaily(AsyncTestCase):
|
|
|
184
184
|
self.assertEqual(daily_dict['path'], "custom/logs/app.log")
|
|
185
185
|
self.assertEqual(daily_dict['level'], Level.WARNING.value)
|
|
186
186
|
self.assertEqual(daily_dict['retention_days'], 14)
|
|
187
|
-
self.assertEqual(daily_dict['at'], "23:59
|
|
187
|
+
self.assertEqual(daily_dict['at'], "23:59")
|
|
188
188
|
|
|
189
189
|
async def testHashability(self):
|
|
190
190
|
"""
|
|
@@ -24,7 +24,7 @@ class TestFoundationConfigLoggingHourly(AsyncTestCase):
|
|
|
24
24
|
None
|
|
25
25
|
"""
|
|
26
26
|
hourly = Hourly()
|
|
27
|
-
self.assertEqual(hourly.path, "storage/log/
|
|
27
|
+
self.assertEqual(hourly.path, "storage/log/hourly.log")
|
|
28
28
|
self.assertEqual(hourly.level, Level.INFO.value)
|
|
29
29
|
self.assertEqual(hourly.retention_hours, 24)
|
|
30
30
|
|
|
@@ -113,16 +113,15 @@ class TestFoundationConfigLoggingHourly(AsyncTestCase):
|
|
|
113
113
|
"""
|
|
114
114
|
Test whitespace handling in path and level attributes.
|
|
115
115
|
|
|
116
|
-
Verifies that leading and trailing whitespace in the `path` and `level`
|
|
117
|
-
attributes are handled as expected.
|
|
118
|
-
|
|
119
116
|
Returns
|
|
120
117
|
-------
|
|
121
118
|
None
|
|
122
119
|
"""
|
|
123
|
-
|
|
124
|
-
self.
|
|
125
|
-
|
|
120
|
+
|
|
121
|
+
with self.assertRaises(OrionisIntegrityException):
|
|
122
|
+
hourly = Hourly(path=" logs/app.log ", level=" debug ")
|
|
123
|
+
self.assertEqual(hourly.path, " logs/app.log ")
|
|
124
|
+
self.assertEqual(hourly.level, Level.DEBUG.value)
|
|
126
125
|
|
|
127
126
|
async def testToDictMethod(self):
|
|
128
127
|
"""
|
|
@@ -138,7 +137,7 @@ class TestFoundationConfigLoggingHourly(AsyncTestCase):
|
|
|
138
137
|
hourly = Hourly()
|
|
139
138
|
hourly_dict = hourly.toDict()
|
|
140
139
|
self.assertIsInstance(hourly_dict, dict)
|
|
141
|
-
self.assertEqual(hourly_dict['path'], "storage/log/
|
|
140
|
+
self.assertEqual(hourly_dict['path'], "storage/log/hourly.log")
|
|
142
141
|
self.assertEqual(hourly_dict['level'], Level.INFO.value)
|
|
143
142
|
self.assertEqual(hourly_dict['retention_hours'], 24)
|
|
144
143
|
|
|
@@ -25,7 +25,7 @@ class TestFoundationConfigLoggingMonthly(AsyncTestCase):
|
|
|
25
25
|
- Default retention_months is 4.
|
|
26
26
|
"""
|
|
27
27
|
monthly = Monthly()
|
|
28
|
-
self.assertEqual(monthly.path, "storage/log/
|
|
28
|
+
self.assertEqual(monthly.path, "storage/log/monthly.log")
|
|
29
29
|
self.assertEqual(monthly.level, Level.INFO.value)
|
|
30
30
|
self.assertEqual(monthly.retention_months, 4)
|
|
31
31
|
|
|
@@ -106,15 +106,12 @@ class TestFoundationConfigLoggingMonthly(AsyncTestCase):
|
|
|
106
106
|
async def testWhitespaceHandling(self):
|
|
107
107
|
"""
|
|
108
108
|
Test whitespace handling in path and level attributes.
|
|
109
|
-
|
|
110
|
-
Verifies
|
|
111
|
-
--------
|
|
112
|
-
- Whitespace in path is preserved.
|
|
113
|
-
- Whitespace in level is handled correctly.
|
|
114
109
|
"""
|
|
115
|
-
|
|
116
|
-
self.
|
|
117
|
-
|
|
110
|
+
|
|
111
|
+
with self.assertRaises(OrionisIntegrityException):
|
|
112
|
+
monthly = Monthly(path=" logs/app.log ", level=" debug ")
|
|
113
|
+
self.assertEqual(monthly.path, " logs/app.log ")
|
|
114
|
+
self.assertEqual(monthly.level, Level.DEBUG.value)
|
|
118
115
|
|
|
119
116
|
async def testToDictMethod(self):
|
|
120
117
|
"""
|
|
@@ -127,7 +124,7 @@ class TestFoundationConfigLoggingMonthly(AsyncTestCase):
|
|
|
127
124
|
monthly = Monthly()
|
|
128
125
|
monthly_dict = monthly.toDict()
|
|
129
126
|
self.assertIsInstance(monthly_dict, dict)
|
|
130
|
-
self.assertEqual(monthly_dict['path'], "storage/log/
|
|
127
|
+
self.assertEqual(monthly_dict['path'], "storage/log/monthly.log")
|
|
131
128
|
self.assertEqual(monthly_dict['level'], Level.INFO.value)
|
|
132
129
|
self.assertEqual(monthly_dict['retention_months'], 4)
|
|
133
130
|
|