orionis 0.253.0__py3-none-any.whl → 0.266.0__py3-none-any.whl
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/application.py +6 -0
- orionis/framework.py +1 -1
- orionis/luminate/{application.py → _application.py} +21 -19
- orionis/luminate/{container → _container}/container.py +4 -4
- orionis/luminate/{container → _container}/container_integrity.py +2 -2
- orionis/luminate/{container → _container}/resolve.py +2 -2
- orionis/luminate/{contracts → _contracts}/application.py +2 -2
- orionis/luminate/{contracts → _contracts}/console/task_manager.py +1 -1
- orionis/luminate/{contracts → _contracts}/facades/commands/scheduler_facade.py +1 -1
- orionis/luminate/{contracts → _contracts}/facades/facade.py +4 -3
- orionis/luminate/{contracts → _contracts}/foundation/providers/service_providers_bootstrapper.py +2 -2
- orionis/luminate/{contracts → _contracts}/providers/service_provider.py +1 -1
- orionis/luminate/{facades → _facades}/app_facade.py +2 -2
- orionis/luminate/{facades → _facades}/commands/commands_facade.py +3 -3
- orionis/luminate/{facades → _facades}/commands/scheduler_facade.py +3 -3
- orionis/luminate/{facades → _facades}/config/config_facade.py +3 -3
- orionis/luminate/{facades → _facades}/environment/environment_facade.py +3 -3
- orionis/luminate/{facades → _facades}/files/path_facade.py +4 -4
- orionis/luminate/{facades → _facades}/log/log_facade.py +2 -2
- orionis/luminate/{foundation → _foundation}/console/command_bootstrapper.py +2 -2
- orionis/luminate/{foundation → _foundation}/environment/environment_bootstrapper.py +3 -3
- orionis/luminate/{foundation → _foundation/foundation}/config/config_bootstrapper.py +3 -3
- orionis/luminate/{foundation → _foundation}/providers/service_providers_bootstrapper.py +4 -4
- orionis/luminate/{providers → _providers}/commands/reactor_commands_service_provider.py +7 -7
- orionis/luminate/{providers → _providers}/commands/scheduler_provider.py +3 -3
- orionis/luminate/{providers → _providers}/config/config_service_provider.py +3 -3
- orionis/luminate/{providers → _providers}/environment/environment__service_provider.py +4 -4
- orionis/luminate/_providers/files/paths_provider.py +21 -0
- orionis/luminate/{providers → _providers}/log/log_service_provider.py +5 -5
- orionis/luminate/{providers → _providers}/service_provider.py +2 -2
- orionis/luminate/{services_ → _services}/commands/reactor_commands_service.py +3 -3
- orionis/luminate/{services_ → _services}/commands/scheduler_service.py +1 -1
- orionis/luminate/{services_ → _services}/config/config_service.py +1 -1
- orionis/luminate/{services_ → _services}/log/log_service.py +1 -1
- orionis/luminate/app.py +19 -0
- orionis/luminate/console/base/command.py +1 -1
- orionis/luminate/console/command_filter.py +1 -1
- orionis/luminate/console/commands/help.py +1 -1
- orionis/luminate/console/commands/schedule_work.py +2 -2
- orionis/luminate/console/dumper/dump_die.py +1 -1
- orionis/luminate/console/kernel.py +1 -1
- orionis/luminate/console/output/console.py +3 -3
- orionis/luminate/console/output/executor.py +1 -1
- orionis/luminate/console/output/progress_bar.py +1 -1
- orionis/luminate/console/parser.py +1 -1
- orionis/luminate/{config → foundation/config}/app/entities/app.py +44 -43
- orionis/luminate/{config → foundation/config}/auth/entities/auth.py +9 -1
- orionis/luminate/foundation/config/cache/entities/cache.py +74 -0
- orionis/luminate/foundation/config/cache/entities/file.py +46 -0
- orionis/luminate/foundation/config/cache/entities/stores.py +46 -0
- orionis/luminate/{contracts/config → foundation/config/contracts}/config.py +8 -12
- orionis/luminate/foundation/config/cors/entities/cors.py +129 -0
- orionis/luminate/foundation/config/database/entities/connections.py +89 -0
- orionis/luminate/foundation/config/database/entities/database.py +62 -0
- orionis/luminate/foundation/config/database/entities/mysql.py +270 -0
- orionis/luminate/foundation/config/database/entities/oracle.py +227 -0
- orionis/luminate/foundation/config/database/entities/pgsql.py +189 -0
- orionis/luminate/foundation/config/database/entities/sqlite.py +178 -0
- orionis/luminate/foundation/config/database/enums/mysql_charsets.py +92 -0
- orionis/luminate/foundation/config/database/enums/mysql_collations.py +53 -0
- orionis/luminate/foundation/config/database/enums/mysql_engine.py +18 -0
- orionis/luminate/foundation/config/database/enums/oracle_encoding.py +44 -0
- orionis/luminate/foundation/config/database/enums/oracle_nencoding.py +31 -0
- orionis/luminate/foundation/config/database/enums/pgsql_charsets.py +90 -0
- orionis/luminate/foundation/config/database/enums/pgsql_collations.py +26 -0
- orionis/luminate/foundation/config/database/enums/pgsql_mode.py +24 -0
- orionis/luminate/foundation/config/database/enums/sqlite_foreign_key.py +12 -0
- orionis/luminate/foundation/config/database/enums/sqlite_journal.py +22 -0
- orionis/luminate/foundation/config/database/enums/sqlite_synchronous.py +16 -0
- orionis/luminate/foundation/config/filesystems/entitites/aws.py +134 -0
- orionis/luminate/foundation/config/filesystems/entitites/disks.py +68 -0
- orionis/luminate/foundation/config/filesystems/entitites/filesystems.py +53 -0
- orionis/luminate/foundation/config/filesystems/entitites/local.py +39 -0
- orionis/luminate/foundation/config/filesystems/entitites/public.py +52 -0
- orionis/luminate/foundation/config/logging/entities/channels.py +115 -0
- orionis/luminate/foundation/config/logging/entities/chunked.py +128 -0
- orionis/luminate/foundation/config/logging/entities/daily.py +113 -0
- orionis/luminate/foundation/config/logging/entities/hourly.py +100 -0
- orionis/luminate/foundation/config/logging/entities/logging.py +51 -0
- orionis/luminate/foundation/config/logging/entities/monthly.py +100 -0
- orionis/luminate/foundation/config/logging/entities/stack.py +74 -0
- orionis/luminate/foundation/config/logging/entities/weekly.py +102 -0
- orionis/luminate/foundation/config/logging/enums/levels.py +21 -0
- orionis/luminate/foundation/config/mail/entities/file.py +41 -0
- orionis/luminate/foundation/config/mail/entities/mail.py +56 -0
- orionis/luminate/foundation/config/mail/entities/mailers.py +54 -0
- orionis/luminate/foundation/config/mail/entities/smtp.py +104 -0
- orionis/luminate/foundation/config/queue/entities/brokers.py +55 -0
- orionis/luminate/foundation/config/queue/entities/database.py +107 -0
- orionis/luminate/foundation/config/queue/entities/queue.py +47 -0
- orionis/luminate/foundation/config/queue/enums/strategy.py +15 -0
- orionis/luminate/foundation/config/roots/paths.py +446 -0
- orionis/luminate/foundation/config/session/entities/session.py +147 -0
- orionis/luminate/foundation/config/session/enums/same_site_policy.py +14 -0
- orionis/luminate/foundation/config/session/helpers/secret_key.py +16 -0
- orionis/luminate/foundation/config/startup.py +203 -0
- orionis/luminate/foundation/config/testing/entities/__init__.py +0 -0
- orionis/luminate/{config → foundation/config/testing}/entities/testing.py +36 -20
- orionis/luminate/foundation/config/testing/enums/__init__.py +0 -0
- orionis/luminate/foundation/config/testing/enums/test_mode.py +12 -0
- orionis/luminate/patterns/__init__.py +0 -4
- orionis/luminate/patterns/singleton/__init__.py +0 -10
- orionis/luminate/services/asynchrony/__init__.py +0 -0
- orionis/luminate/services/asynchrony/async_io.py +31 -0
- orionis/luminate/services/environment/__init__.py +0 -10
- orionis/luminate/services/environment/contracts/__init__.py +0 -5
- orionis/luminate/services/environment/contracts/env.py +0 -11
- orionis/luminate/services/environment/dot_env.py +87 -163
- orionis/luminate/services/environment/env.py +0 -11
- orionis/luminate/services/introspection/__init__.py +0 -0
- orionis/luminate/services/introspection/abstracts/__init__.py +0 -0
- orionis/luminate/services/introspection/abstracts/entities/__init__.py +0 -0
- orionis/luminate/services/introspection/abstracts/entities/abstract_class_attributes.py +37 -0
- orionis/luminate/{support → services}/introspection/abstracts/reflect_abstract.py +1 -1
- orionis/luminate/services/introspection/dependencies/__init__.py +0 -0
- orionis/luminate/services/introspection/dependencies/contracts/__init__.py +0 -0
- orionis/luminate/{support → services}/introspection/dependencies/contracts/reflect_dependencies.py +2 -2
- orionis/luminate/services/introspection/dependencies/entities/__init__.py +0 -0
- orionis/luminate/services/introspection/dependencies/entities/class_dependencies.py +41 -0
- orionis/luminate/services/introspection/dependencies/entities/method_dependencies.py +42 -0
- orionis/luminate/services/introspection/dependencies/entities/resolved_dependencies.py +49 -0
- orionis/luminate/{support → services}/introspection/dependencies/reflect_dependencies.py +4 -4
- orionis/luminate/services/parsers/__init__.py +0 -0
- orionis/luminate/services/parsers/contracts/__init__.py +0 -0
- orionis/luminate/{support/parsers/exception_parser.py → services/parsers/exception.py} +1 -1
- orionis/luminate/services/parsers/serializer.py +15 -0
- orionis/luminate/services/paths/__init__.py +0 -9
- orionis/luminate/services/paths/resolver.py +1 -1
- orionis/luminate/services/standard/__init__.py +0 -0
- orionis/luminate/services/standard/contracts/__init__.py +0 -0
- orionis/luminate/{support → services}/standard/std.py +1 -1
- orionis/luminate/services/system/__init__.py +0 -0
- orionis/luminate/services/system/contracts/__init__.py +0 -0
- orionis/luminate/services/system/contracts/imports.py +31 -0
- orionis/luminate/services/system/contracts/workers.py +18 -0
- orionis/luminate/services/system/imports.py +124 -0
- orionis/luminate/services/system/runtime_imports.py +70 -0
- orionis/luminate/services/{workers/maximum_workers.py → system/workers.py} +2 -1
- orionis/luminate/services/wrapper/__init__.py +0 -0
- orionis/luminate/services/wrapper/dicts/__init__.py +0 -0
- orionis/luminate/services/wrapper/dicts/dot_dict.py +115 -0
- orionis/luminate/support/introspection/__init__.py +0 -5
- orionis/luminate/support/introspection/container_integrity.py +2 -2
- orionis/luminate/support/introspection/instances/__init__.py +0 -5
- orionis/luminate/support/introspection/reflection.py +1 -1
- orionis/luminate/test/__init__.py +0 -23
- orionis/luminate/test/cases/test_async.py +41 -9
- orionis/luminate/test/cases/test_case.py +27 -13
- orionis/luminate/test/cases/test_sync.py +28 -6
- orionis/luminate/test/output/contracts/{test_std_out.py → dumper.py} +2 -1
- orionis/luminate/test/output/{test_std_out.py → dumper.py} +7 -4
- orionis/luminate/test/suites/__init__.py +0 -0
- orionis/luminate/test/suites/contracts/__init__.py +0 -0
- orionis/luminate/test/suites/contracts/test_suite.py +23 -0
- orionis/luminate/test/suites/test_suite.py +101 -0
- orionis/luminate/test/{core → suites}/test_unit.py +16 -8
- orionis/unittesting.py +43 -0
- {orionis-0.253.0.dist-info → orionis-0.266.0.dist-info}/METADATA +19 -3
- orionis-0.266.0.dist-info/RECORD +440 -0
- {orionis-0.253.0.dist-info → orionis-0.266.0.dist-info}/WHEEL +1 -1
- orionis-0.266.0.dist-info/entry_points.txt +2 -0
- orionis-0.266.0.dist-info/zip-safe +1 -0
- tests/example/test_example.py +1 -1
- tests/foundation/__init__.py +0 -0
- tests/foundation/config/__init__.py +0 -0
- tests/foundation/config/app/__init__.py +0 -0
- tests/foundation/config/app/test_app.py +140 -0
- tests/foundation/config/auth/__init__.py +0 -0
- tests/{config → foundation/config/auth}/test_auth.py +6 -3
- tests/foundation/config/cache/__init__.py +0 -0
- tests/foundation/config/cache/test_cache.py +98 -0
- tests/foundation/config/cache/test_cache_file.py +78 -0
- tests/foundation/config/cache/test_cache_stores.py +88 -0
- tests/foundation/config/cors/__init__.py +0 -0
- tests/foundation/config/cors/test_cors.py +121 -0
- tests/foundation/config/database/__init__.py +0 -0
- tests/foundation/config/database/test_database.py +108 -0
- tests/foundation/config/database/test_database_connections.py +129 -0
- tests/foundation/config/database/test_database_mysql.py +231 -0
- tests/foundation/config/database/test_database_oracle.py +204 -0
- tests/foundation/config/database/test_database_pgsql.py +187 -0
- tests/foundation/config/database/test_database_sqlite.py +153 -0
- tests/foundation/config/exceptions/__init__.py +0 -0
- tests/foundation/config/exceptions/test_exceptions_integrity.py +83 -0
- tests/foundation/config/filesystems/__init__.py +0 -0
- tests/foundation/config/filesystems/test_filesystems.py +110 -0
- tests/foundation/config/filesystems/test_filesystems_aws.py +133 -0
- tests/foundation/config/filesystems/test_filesystems_disks.py +114 -0
- tests/foundation/config/filesystems/test_filesystems_local.py +95 -0
- tests/foundation/config/filesystems/test_filesystems_public.py +120 -0
- tests/foundation/config/logging/__init__.py +0 -0
- tests/foundation/config/logging/test_logging.py +48 -0
- tests/foundation/config/logging/test_logging_channels.py +157 -0
- tests/foundation/config/logging/test_logging_chunked.py +166 -0
- tests/foundation/config/logging/test_logging_daily.py +153 -0
- tests/foundation/config/logging/test_logging_hourly.py +131 -0
- tests/foundation/config/logging/test_logging_monthly.py +133 -0
- tests/foundation/config/logging/test_logging_stack.py +124 -0
- tests/foundation/config/logging/test_logging_weekly.py +133 -0
- tests/foundation/config/mail/__init__.py +0 -0
- tests/foundation/config/mail/test_mail.py +73 -0
- tests/foundation/config/mail/test_mail_file.py +61 -0
- tests/foundation/config/mail/test_mail_mailers.py +58 -0
- tests/foundation/config/mail/test_mail_smtp.py +102 -0
- tests/foundation/config/queue/__init__.py +0 -0
- tests/foundation/config/queue/test_queue.py +58 -0
- tests/foundation/config/queue/test_queue_brokers.py +67 -0
- tests/foundation/config/queue/test_queue_database.py +95 -0
- tests/foundation/config/root/__init__.py +0 -0
- tests/foundation/config/root/test_root_paths.py +134 -0
- tests/foundation/config/session/__init__.py +0 -0
- tests/foundation/config/session/test_session.py +138 -0
- tests/foundation/config/startup/__init__.py +0 -0
- tests/foundation/config/startup/test_config_startup.py +134 -0
- tests/foundation/config/testing/__init__.py +0 -0
- tests/foundation/config/testing/test_testing.py +167 -0
- tests/patterns/singleton/test_singleton.py +2 -2
- tests/services/asynchrony/__init__.py +0 -0
- tests/{support/async_io/test_async_coroutine.py → services/asynchrony/test_async_io.py} +6 -5
- tests/services/environment/test_env.py +155 -33
- tests/services/inspection/__init__.py +0 -0
- tests/services/inspection/dependencies/__init__.py +0 -0
- tests/services/inspection/dependencies/mocks/__init__.py +0 -0
- tests/services/inspection/dependencies/mocks/mock_user.py +30 -0
- tests/services/inspection/dependencies/mocks/mock_user_controller.py +27 -0
- tests/services/inspection/dependencies/mocks/mock_users_permissions.py +41 -0
- tests/services/inspection/dependencies/test_reflect_dependencies.py +94 -0
- tests/services/parsers/__init__.py +0 -0
- tests/services/parsers/mocks/__init__.py +0 -0
- tests/services/parsers/mocks/mock_custom_error.py +15 -0
- tests/{support → services}/parsers/test_exception_parser.py +8 -8
- tests/services/path/__init__.py +0 -0
- tests/services/path/test_resolver.py +73 -0
- tests/services/standard/__init__.py +0 -0
- tests/services/standard/test_std.py +127 -0
- tests/services/wrapper/__init__.py +0 -0
- tests/services/wrapper/test_wrapper_doc_dict.py +129 -0
- tests/testing/__init__.py +0 -0
- tests/testing/test_testing_result.py +92 -0
- tests/testing/test_testing_unit.py +138 -0
- orionis/luminate/config/app/__init__.py +0 -10
- orionis/luminate/config/auth/__init__.py +0 -7
- orionis/luminate/config/cache/__init__.py +0 -9
- orionis/luminate/config/cache/entities/cache.py +0 -58
- orionis/luminate/config/cache/entities/file.py +0 -29
- orionis/luminate/config/cache/entities/stores.py +0 -35
- orionis/luminate/config/entities/cors.py +0 -58
- orionis/luminate/config/entities/database.py +0 -204
- orionis/luminate/config/entities/filesystems.py +0 -98
- orionis/luminate/config/entities/logging.py +0 -157
- orionis/luminate/config/entities/mail.py +0 -76
- orionis/luminate/config/entities/queue.py +0 -62
- orionis/luminate/config/entities/session.py +0 -58
- orionis/luminate/providers/files/paths_provider.py +0 -20
- orionis/luminate/services/workers/__init__.py +0 -10
- orionis/luminate/support/adapters/dot_dict.py +0 -29
- orionis/luminate/support/asynchrony/async_io.py +0 -40
- orionis/luminate/support/asynchrony/contracts/async_coroutine.py +0 -26
- orionis/luminate/support/introspection/abstracts/entities/abstract_class_attributes.py +0 -11
- orionis/luminate/support/introspection/dependencies/__init__.py +0 -5
- orionis/luminate/support/introspection/dependencies/entities/class_dependencies.py +0 -11
- orionis/luminate/support/introspection/dependencies/entities/method_dependencies.py +0 -11
- orionis/luminate/support/introspection/dependencies/entities/resolved_dependencies.py +0 -12
- orionis/luminate/support/paths/contracts/resolver.py +0 -67
- orionis/luminate/support/paths/resolver.py +0 -83
- orionis/luminate/test/core/contracts/test_suite.py +0 -30
- orionis/luminate/test/core/test_suite.py +0 -93
- orionis-0.253.0.dist-info/RECORD +0 -318
- orionis-0.253.0.dist-info/entry_points.txt +0 -2
- tests/config/test_app.py +0 -122
- tests/config/test_cache.py +0 -20
- tests/support/adapters/fakes/fake_dict.py +0 -15
- tests/support/adapters/test_doct_dict.py +0 -21
- tests/support/inspection/fakes/fake_reflect_dependencies.py +0 -25
- tests/support/inspection/test_reflect_dependencies.py +0 -67
- tests/support/parsers/fakes/fake_custom_error.py +0 -27
- tests/support/path/test_resolver.py +0 -33
- tests/support/standard/test_std.py +0 -62
- /orionis/{console.py → clinstall.py} +0 -0
- /orionis/luminate/{config → _container}/__init__.py +0 -0
- /orionis/luminate/{container → _container}/exception.py +0 -0
- /orionis/luminate/{container → _container}/lifetimes.py +0 -0
- /orionis/luminate/{config/app/entities → _contracts}/__init__.py +0 -0
- /orionis/luminate/{config/app/enums → _contracts/config}/__init__.py +0 -0
- /orionis/luminate/{config/contracts → _contracts/config}/config.py +0 -0
- /orionis/luminate/{config/auth/entities → _contracts/console}/__init__.py +0 -0
- /orionis/luminate/{config/cache/entities → _contracts/console/base}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/console/base/command.py +0 -0
- /orionis/luminate/{contracts → _contracts}/console/command_filter.py +0 -0
- /orionis/luminate/{contracts → _contracts}/console/kernel.py +0 -0
- /orionis/luminate/{config/cache/enums → _contracts/console/output}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/console/output/console.py +0 -0
- /orionis/luminate/{contracts → _contracts}/console/output/executor.py +0 -0
- /orionis/luminate/{contracts → _contracts}/console/output/progress_bar.py +0 -0
- /orionis/luminate/{contracts → _contracts}/console/parser.py +0 -0
- /orionis/luminate/{contracts → _contracts}/container/container.py +0 -0
- /orionis/luminate/{contracts → _contracts}/container/container_integrity.py +0 -0
- /orionis/luminate/{config/contracts → _contracts/facades}/__init__.py +0 -0
- /orionis/luminate/{config/exceptions → _contracts/facades/commands}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/facades/commands/commands_facade.py +0 -0
- /orionis/luminate/{container → _contracts/facades/config}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/facades/config/config_facade.py +0 -0
- /orionis/luminate/{contracts → _contracts/facades/environment}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/facades/environment/environment_facade.py +0 -0
- /orionis/luminate/{contracts/config → _contracts/facades/files}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/facades/files/path_facade.py +0 -0
- /orionis/luminate/{contracts/console → _contracts/facades/log}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/facades/log/log_facade.py +0 -0
- /orionis/luminate/{contracts/console/base → _contracts/facades/tests}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/facades/tests/tests_facade.py +0 -0
- /orionis/luminate/{contracts/console/output → _contracts/foundation}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/foundation/bootstraper.py +0 -0
- /orionis/luminate/{contracts/facades → _contracts/foundation/config}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/foundation/config/config_bootstrapper.py +0 -0
- /orionis/luminate/{contracts/facades/commands → _contracts/foundation/console}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/foundation/console/command_bootstrapper.py +0 -0
- /orionis/luminate/{contracts/facades/config → _contracts/foundation/environment}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/foundation/environment/environment_bootstrapper.py +0 -0
- /orionis/luminate/{contracts/facades/environment → _contracts/foundation/providers}/__init__.py +0 -0
- /orionis/luminate/{contracts/facades/files → _contracts/providers}/__init__.py +0 -0
- /orionis/luminate/{contracts/facades/log → _contracts/services}/__init__.py +0 -0
- /orionis/luminate/{contracts/facades/tests → _contracts/services/commands}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/services/commands/reactor_commands_service.py +0 -0
- /orionis/luminate/{contracts → _contracts}/services/commands/schedule_service.py +0 -0
- /orionis/luminate/{contracts/foundation → _contracts/services/config}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/services/config/config_service.py +0 -0
- /orionis/luminate/{contracts/foundation/config → _contracts/services/environment}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/services/environment/environment_service.py +0 -0
- /orionis/luminate/{contracts/foundation/console → _contracts/services/files}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/services/files/path_resolver_service.py +0 -0
- /orionis/luminate/{contracts/foundation/environment → _contracts/services/log}/__init__.py +0 -0
- /orionis/luminate/{contracts → _contracts}/services/log/log_service.py +0 -0
- /orionis/luminate/{contracts → _contracts}/support/exception_parse.py +0 -0
- /orionis/luminate/{contracts → _contracts}/support/reflection.py +0 -0
- /orionis/luminate/{contracts/foundation/providers → _facades}/__init__.py +0 -0
- /orionis/luminate/{contracts/providers → _facades/commands}/__init__.py +0 -0
- /orionis/luminate/{contracts/services → _facades/config}/__init__.py +0 -0
- /orionis/luminate/{contracts/services/commands → _facades/environment}/__init__.py +0 -0
- /orionis/luminate/{contracts/services/config → _facades/files}/__init__.py +0 -0
- /orionis/luminate/{contracts/services/environment → _facades/log}/__init__.py +0 -0
- /orionis/luminate/{contracts/services/files → _foundation}/__init__.py +0 -0
- /orionis/luminate/{contracts/services/log → _foundation/console}/__init__.py +0 -0
- /orionis/luminate/{facades → _foundation/environment}/__init__.py +0 -0
- /orionis/luminate/{facades/commands → _foundation/exceptions}/__init__.py +0 -0
- /orionis/luminate/{foundation → _foundation}/exceptions/exception_bootstrapper.py +0 -0
- /orionis/luminate/{foundation → _foundation}/exceptions/exception_providers.py +0 -0
- /orionis/luminate/{facades → _foundation/foundation}/config/__init__.py +0 -0
- /orionis/luminate/{facades/environment → _foundation/providers}/__init__.py +0 -0
- /orionis/luminate/{facades/files → _providers}/__init__.py +0 -0
- /orionis/luminate/{facades/log → _providers/commands}/__init__.py +0 -0
- /orionis/luminate/{foundation/console → _providers/config}/__init__.py +0 -0
- /orionis/luminate/{foundation → _providers}/environment/__init__.py +0 -0
- /orionis/luminate/{foundation/exceptions → _providers/files}/__init__.py +0 -0
- /orionis/luminate/{foundation/providers → _providers/log}/__init__.py +0 -0
- /orionis/luminate/{providers → _services}/__init__.py +0 -0
- /orionis/luminate/{providers → _services}/commands/__init__.py +0 -0
- /orionis/luminate/{providers → _services}/config/__init__.py +0 -0
- /orionis/luminate/{providers/environment → _services/log}/__init__.py +0 -0
- /orionis/luminate/{providers/files → foundation/config/app}/__init__.py +0 -0
- /orionis/luminate/{providers/log → foundation/config/app/entities}/__init__.py +0 -0
- /orionis/luminate/{services_ → foundation/config/app/enums}/__init__.py +0 -0
- /orionis/luminate/{config → foundation/config}/app/enums/ciphers.py +0 -0
- /orionis/luminate/{config → foundation/config}/app/enums/environments.py +0 -0
- /orionis/luminate/{services_/commands → foundation/config/auth}/__init__.py +0 -0
- /orionis/luminate/{services_/config → foundation/config/auth/entities}/__init__.py +0 -0
- /orionis/luminate/{services_/log → foundation/config/cache}/__init__.py +0 -0
- /orionis/luminate/{support/adapters → foundation/config/cache/entities}/__init__.py +0 -0
- /orionis/luminate/{support/asynchrony → foundation/config/cache/enums}/__init__.py +0 -0
- /orionis/luminate/{config → foundation/config}/cache/enums/drivers.py +0 -0
- /orionis/luminate/{support/asynchrony → foundation/config}/contracts/__init__.py +0 -0
- /orionis/luminate/{support/introspection/abstracts → foundation/config/cors}/__init__.py +0 -0
- /orionis/luminate/{support/introspection/abstracts → foundation/config/cors}/entities/__init__.py +0 -0
- /orionis/luminate/{support/introspection/dependencies/contracts → foundation/config/database}/__init__.py +0 -0
- /orionis/luminate/{support/introspection/dependencies → foundation/config/database}/entities/__init__.py +0 -0
- /orionis/luminate/{support/parsers → foundation/config/database/enums}/__init__.py +0 -0
- /orionis/luminate/{support/parsers/contracts → foundation/config/exceptions}/__init__.py +0 -0
- /orionis/luminate/{config/exceptions/integrity_exception.py → foundation/config/exceptions/integrity.py} +0 -0
- /orionis/luminate/{support/paths → foundation/config/filesystems}/__init__.py +0 -0
- /orionis/luminate/{support/paths/contracts → foundation/config/filesystems/entitites}/__init__.py +0 -0
- /orionis/luminate/{support/standard → foundation/config/logging}/__init__.py +0 -0
- /orionis/luminate/{support/standard/contracts → foundation/config/logging/entities}/__init__.py +0 -0
- /orionis/luminate/{test/core → foundation/config/logging/enums}/__init__.py +0 -0
- /orionis/luminate/{test/core/contracts → foundation/config/mail}/__init__.py +0 -0
- {tests/config → orionis/luminate/foundation/config/mail/entities}/__init__.py +0 -0
- {tests/support/adapters → orionis/luminate/foundation/config/queue}/__init__.py +0 -0
- {tests/support/adapters/fakes → orionis/luminate/foundation/config/queue/entities}/__init__.py +0 -0
- {tests/support/async_io → orionis/luminate/foundation/config/roots}/__init__.py +0 -0
- {tests/support/parsers → orionis/luminate/foundation/config/session}/__init__.py +0 -0
- {tests/support/parsers/fakes → orionis/luminate/foundation/config/session/entities}/__init__.py +0 -0
- {tests/support/path → orionis/luminate/foundation/config/session/enums}/__init__.py +0 -0
- {tests/support/standard → orionis/luminate/foundation/config/testing}/__init__.py +0 -0
- /orionis/luminate/{support → services}/parsers/contracts/exception_parser.py +0 -0
- /orionis/luminate/{support → services}/standard/contracts/std.py +0 -0
- /orionis/luminate/test/exceptions/{test_exception.py → test_failure_exception.py} +0 -0
- /orionis/luminate/test/{core → suites}/contracts/test_unit.py +0 -0
- {orionis-0.253.0.dist-info → orionis-0.266.0.dist-info/licenses}/LICENCE +0 -0
- {orionis-0.253.0.dist-info → orionis-0.266.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,166 @@
|
|
1
|
+
from orionis.luminate.foundation.config.logging.entities.chunked import Chunked
|
2
|
+
from orionis.luminate.foundation.config.logging.enums.levels import Level
|
3
|
+
from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
|
4
|
+
from orionis.unittesting import TestCase
|
5
|
+
|
6
|
+
class TestConfigChunked(TestCase):
|
7
|
+
"""
|
8
|
+
Test cases for the Chunked logging configuration class.
|
9
|
+
"""
|
10
|
+
|
11
|
+
async def testDefaultValues(self):
|
12
|
+
"""
|
13
|
+
Test that Chunked instance is created with correct default values.
|
14
|
+
Verifies default path, level, mb_size and files match expected values.
|
15
|
+
"""
|
16
|
+
chunked = Chunked()
|
17
|
+
self.assertEqual(chunked.path, "storage/log/application.log")
|
18
|
+
self.assertEqual(chunked.level, Level.INFO.value)
|
19
|
+
self.assertEqual(chunked.mb_size, 10)
|
20
|
+
self.assertEqual(chunked.files, 5)
|
21
|
+
|
22
|
+
async def testPathValidation(self):
|
23
|
+
"""
|
24
|
+
Test path attribute validation.
|
25
|
+
Verifies that empty or non-string paths raise exceptions.
|
26
|
+
"""
|
27
|
+
with self.assertRaises(OrionisIntegrityException):
|
28
|
+
Chunked(path="")
|
29
|
+
with self.assertRaises(OrionisIntegrityException):
|
30
|
+
Chunked(path=123)
|
31
|
+
try:
|
32
|
+
Chunked(path="custom/log/path.log")
|
33
|
+
except OrionisIntegrityException:
|
34
|
+
self.fail("Valid path should not raise exception")
|
35
|
+
|
36
|
+
async def testLevelValidation(self):
|
37
|
+
"""
|
38
|
+
Test level attribute validation with different input types.
|
39
|
+
"""
|
40
|
+
# Test string level
|
41
|
+
chunked = Chunked(level="debug")
|
42
|
+
self.assertEqual(chunked.level, Level.DEBUG.value)
|
43
|
+
|
44
|
+
# Test int level
|
45
|
+
chunked = Chunked(level=Level.WARNING.value)
|
46
|
+
self.assertEqual(chunked.level, Level.WARNING.value)
|
47
|
+
|
48
|
+
# Test enum level
|
49
|
+
chunked = Chunked(level=Level.ERROR)
|
50
|
+
self.assertEqual(chunked.level, Level.ERROR.value)
|
51
|
+
|
52
|
+
# Test invalid cases
|
53
|
+
with self.assertRaises(OrionisIntegrityException):
|
54
|
+
Chunked(level="invalid")
|
55
|
+
with self.assertRaises(OrionisIntegrityException):
|
56
|
+
Chunked(level=999)
|
57
|
+
with self.assertRaises(OrionisIntegrityException):
|
58
|
+
Chunked(level=[])
|
59
|
+
|
60
|
+
async def testMbSizeValidation(self):
|
61
|
+
"""
|
62
|
+
Test mb_size attribute validation with different input formats.
|
63
|
+
"""
|
64
|
+
# Test valid integer values
|
65
|
+
try:
|
66
|
+
Chunked(mb_size=1)
|
67
|
+
Chunked(mb_size=100)
|
68
|
+
except OrionisIntegrityException:
|
69
|
+
self.fail("Valid mb_size should not raise exception")
|
70
|
+
|
71
|
+
# Test string formats
|
72
|
+
chunked = Chunked(mb_size="10MB")
|
73
|
+
self.assertEqual(chunked.mb_size, 10)
|
74
|
+
|
75
|
+
chunked = Chunked(mb_size="10240KB")
|
76
|
+
self.assertEqual(chunked.mb_size, 10)
|
77
|
+
|
78
|
+
chunked = Chunked(mb_size="10485760B")
|
79
|
+
self.assertEqual(chunked.mb_size, 10)
|
80
|
+
|
81
|
+
# Test invalid cases
|
82
|
+
with self.assertRaises(OrionisIntegrityException):
|
83
|
+
Chunked(mb_size=0)
|
84
|
+
with self.assertRaises(OrionisIntegrityException):
|
85
|
+
Chunked(mb_size=-1)
|
86
|
+
with self.assertRaises(OrionisIntegrityException):
|
87
|
+
Chunked(mb_size="invalid")
|
88
|
+
with self.assertRaises(OrionisIntegrityException):
|
89
|
+
Chunked(mb_size="10GB")
|
90
|
+
|
91
|
+
async def testFilesValidation(self):
|
92
|
+
"""
|
93
|
+
Test files attribute validation.
|
94
|
+
"""
|
95
|
+
# Test valid values
|
96
|
+
try:
|
97
|
+
Chunked(files=1)
|
98
|
+
Chunked(files=10)
|
99
|
+
except OrionisIntegrityException:
|
100
|
+
self.fail("Valid files count should not raise exception")
|
101
|
+
|
102
|
+
# Test invalid values
|
103
|
+
with self.assertRaises(OrionisIntegrityException):
|
104
|
+
Chunked(files=0)
|
105
|
+
with self.assertRaises(OrionisIntegrityException):
|
106
|
+
Chunked(files=-1)
|
107
|
+
with self.assertRaises(OrionisIntegrityException):
|
108
|
+
Chunked(files="5")
|
109
|
+
|
110
|
+
async def testWhitespaceHandling(self):
|
111
|
+
"""
|
112
|
+
Test whitespace handling in path and level attributes.
|
113
|
+
"""
|
114
|
+
chunked = Chunked(path=" logs/app.log ", level=" debug ")
|
115
|
+
self.assertEqual(chunked.path, " logs/app.log ")
|
116
|
+
self.assertEqual(chunked.level, Level.DEBUG.value)
|
117
|
+
|
118
|
+
async def testToDictMethod(self):
|
119
|
+
"""
|
120
|
+
Test that toDict returns proper dictionary representation.
|
121
|
+
"""
|
122
|
+
chunked = Chunked()
|
123
|
+
chunked_dict = chunked.toDict()
|
124
|
+
|
125
|
+
self.assertIsInstance(chunked_dict, dict)
|
126
|
+
self.assertEqual(chunked_dict['path'], "storage/log/application.log")
|
127
|
+
self.assertEqual(chunked_dict['level'], Level.INFO.value)
|
128
|
+
self.assertEqual(chunked_dict['mb_size'], 10)
|
129
|
+
self.assertEqual(chunked_dict['files'], 5)
|
130
|
+
|
131
|
+
async def testCustomValuesToDict(self):
|
132
|
+
"""
|
133
|
+
Test that custom values are properly included in dictionary.
|
134
|
+
"""
|
135
|
+
custom_chunked = Chunked(
|
136
|
+
path="custom/logs/app.log",
|
137
|
+
level="warning",
|
138
|
+
mb_size=20,
|
139
|
+
files=10
|
140
|
+
)
|
141
|
+
chunked_dict = custom_chunked.toDict()
|
142
|
+
self.assertEqual(chunked_dict['path'], "custom/logs/app.log")
|
143
|
+
self.assertEqual(chunked_dict['level'], Level.WARNING.value)
|
144
|
+
self.assertEqual(chunked_dict['mb_size'], 20)
|
145
|
+
self.assertEqual(chunked_dict['files'], 10)
|
146
|
+
|
147
|
+
async def testHashability(self):
|
148
|
+
"""
|
149
|
+
Test that Chunked maintains hashability due to unsafe_hash=True.
|
150
|
+
"""
|
151
|
+
chunked1 = Chunked()
|
152
|
+
chunked2 = Chunked()
|
153
|
+
chunked_set = {chunked1, chunked2}
|
154
|
+
|
155
|
+
self.assertEqual(len(chunked_set), 1)
|
156
|
+
|
157
|
+
custom_chunked = Chunked(path="custom.log")
|
158
|
+
chunked_set.add(custom_chunked)
|
159
|
+
self.assertEqual(len(chunked_set), 2)
|
160
|
+
|
161
|
+
async def testKwOnlyInitialization(self):
|
162
|
+
"""
|
163
|
+
Test that Chunked enforces keyword-only initialization.
|
164
|
+
"""
|
165
|
+
with self.assertRaises(TypeError):
|
166
|
+
Chunked("path.log", "info", 10, 5)
|
@@ -0,0 +1,153 @@
|
|
1
|
+
from datetime import time
|
2
|
+
from orionis.luminate.foundation.config.logging.entities.daily import Daily
|
3
|
+
from orionis.luminate.foundation.config.logging.enums.levels import Level
|
4
|
+
from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
|
5
|
+
from orionis.unittesting import TestCase
|
6
|
+
|
7
|
+
class TestConfigDaily(TestCase):
|
8
|
+
"""
|
9
|
+
Test cases for the Daily logging configuration class.
|
10
|
+
"""
|
11
|
+
|
12
|
+
async def testDefaultValues(self):
|
13
|
+
"""
|
14
|
+
Test that Daily instance is created with correct default values.
|
15
|
+
Verifies default path, level, retention_days and at time match expected values.
|
16
|
+
"""
|
17
|
+
daily = Daily()
|
18
|
+
self.assertEqual(daily.path, "storage/log/application.log")
|
19
|
+
self.assertEqual(daily.level, Level.INFO.value)
|
20
|
+
self.assertEqual(daily.retention_days, 7)
|
21
|
+
self.assertEqual(daily.at, "00:00:00")
|
22
|
+
|
23
|
+
async def testPathValidation(self):
|
24
|
+
"""
|
25
|
+
Test path attribute validation.
|
26
|
+
Verifies that empty or non-string paths raise exceptions.
|
27
|
+
"""
|
28
|
+
with self.assertRaises(OrionisIntegrityException):
|
29
|
+
Daily(path="")
|
30
|
+
with self.assertRaises(OrionisIntegrityException):
|
31
|
+
Daily(path=123)
|
32
|
+
try:
|
33
|
+
Daily(path="custom/log/path.log")
|
34
|
+
except OrionisIntegrityException:
|
35
|
+
self.fail("Valid path should not raise exception")
|
36
|
+
|
37
|
+
async def testLevelValidation(self):
|
38
|
+
"""
|
39
|
+
Test level attribute validation with different input types.
|
40
|
+
"""
|
41
|
+
# Test string level
|
42
|
+
daily = Daily(level="debug")
|
43
|
+
self.assertEqual(daily.level, Level.DEBUG.value)
|
44
|
+
|
45
|
+
# Test int level
|
46
|
+
daily = Daily(level=Level.WARNING.value)
|
47
|
+
self.assertEqual(daily.level, Level.WARNING.value)
|
48
|
+
|
49
|
+
# Test enum level
|
50
|
+
daily = Daily(level=Level.ERROR)
|
51
|
+
self.assertEqual(daily.level, Level.ERROR.value)
|
52
|
+
|
53
|
+
# Test invalid cases
|
54
|
+
with self.assertRaises(OrionisIntegrityException):
|
55
|
+
Daily(level="invalid")
|
56
|
+
with self.assertRaises(OrionisIntegrityException):
|
57
|
+
Daily(level=999)
|
58
|
+
with self.assertRaises(OrionisIntegrityException):
|
59
|
+
Daily(level=[])
|
60
|
+
|
61
|
+
async def testRetentionDaysValidation(self):
|
62
|
+
"""
|
63
|
+
Test retention_days attribute validation.
|
64
|
+
"""
|
65
|
+
# Test valid values
|
66
|
+
try:
|
67
|
+
Daily(retention_days=1)
|
68
|
+
Daily(retention_days=90)
|
69
|
+
Daily(retention_days=30)
|
70
|
+
except OrionisIntegrityException:
|
71
|
+
self.fail("Valid retention_days should not raise exception")
|
72
|
+
|
73
|
+
# Test invalid values
|
74
|
+
with self.assertRaises(OrionisIntegrityException):
|
75
|
+
Daily(retention_days=0)
|
76
|
+
with self.assertRaises(OrionisIntegrityException):
|
77
|
+
Daily(retention_days=91)
|
78
|
+
with self.assertRaises(OrionisIntegrityException):
|
79
|
+
Daily(retention_days=-1)
|
80
|
+
with self.assertRaises(OrionisIntegrityException):
|
81
|
+
Daily(retention_days="7")
|
82
|
+
|
83
|
+
async def testAtTimeValidation(self):
|
84
|
+
"""
|
85
|
+
Test at time attribute validation and conversion.
|
86
|
+
"""
|
87
|
+
# Test time object
|
88
|
+
daily = Daily(at=time(12, 30))
|
89
|
+
self.assertEqual(daily.at, "12:30:00")
|
90
|
+
|
91
|
+
# Test invalid type
|
92
|
+
with self.assertRaises(OrionisIntegrityException):
|
93
|
+
Daily(at="12:00:00")
|
94
|
+
with self.assertRaises(OrionisIntegrityException):
|
95
|
+
Daily(at=1200)
|
96
|
+
|
97
|
+
async def testWhitespaceHandling(self):
|
98
|
+
"""
|
99
|
+
Test whitespace handling in path and level attributes.
|
100
|
+
"""
|
101
|
+
daily = Daily(path=" logs/app.log ", level=" debug ")
|
102
|
+
self.assertEqual(daily.path, " logs/app.log ")
|
103
|
+
self.assertEqual(daily.level, Level.DEBUG.value)
|
104
|
+
|
105
|
+
async def testToDictMethod(self):
|
106
|
+
"""
|
107
|
+
Test that toDict returns proper dictionary representation.
|
108
|
+
"""
|
109
|
+
daily = Daily()
|
110
|
+
daily_dict = daily.toDict()
|
111
|
+
|
112
|
+
self.assertIsInstance(daily_dict, dict)
|
113
|
+
self.assertEqual(daily_dict['path'], "storage/log/application.log")
|
114
|
+
self.assertEqual(daily_dict['level'], Level.INFO.value)
|
115
|
+
self.assertEqual(daily_dict['retention_days'], 7)
|
116
|
+
self.assertEqual(daily_dict['at'], "00:00:00")
|
117
|
+
|
118
|
+
async def testCustomValuesToDict(self):
|
119
|
+
"""
|
120
|
+
Test that custom values are properly included in dictionary.
|
121
|
+
"""
|
122
|
+
custom_daily = Daily(
|
123
|
+
path="custom/logs/app.log",
|
124
|
+
level="warning",
|
125
|
+
retention_days=14,
|
126
|
+
at=time(23, 59)
|
127
|
+
)
|
128
|
+
daily_dict = custom_daily.toDict()
|
129
|
+
self.assertEqual(daily_dict['path'], "custom/logs/app.log")
|
130
|
+
self.assertEqual(daily_dict['level'], Level.WARNING.value)
|
131
|
+
self.assertEqual(daily_dict['retention_days'], 14)
|
132
|
+
self.assertEqual(daily_dict['at'], "23:59:00")
|
133
|
+
|
134
|
+
async def testHashability(self):
|
135
|
+
"""
|
136
|
+
Test that Daily maintains hashability due to unsafe_hash=True.
|
137
|
+
"""
|
138
|
+
daily1 = Daily()
|
139
|
+
daily2 = Daily()
|
140
|
+
daily_set = {daily1, daily2}
|
141
|
+
|
142
|
+
self.assertEqual(len(daily_set), 1)
|
143
|
+
|
144
|
+
custom_daily = Daily(path="custom.log")
|
145
|
+
daily_set.add(custom_daily)
|
146
|
+
self.assertEqual(len(daily_set), 2)
|
147
|
+
|
148
|
+
async def testKwOnlyInitialization(self):
|
149
|
+
"""
|
150
|
+
Test that Daily enforces keyword-only initialization.
|
151
|
+
"""
|
152
|
+
with self.assertRaises(TypeError):
|
153
|
+
Daily("path.log", "info", 7, time(0, 0))
|
@@ -0,0 +1,131 @@
|
|
1
|
+
from orionis.luminate.foundation.config.logging.entities.hourly import Hourly
|
2
|
+
from orionis.luminate.foundation.config.logging.enums.levels import Level
|
3
|
+
from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
|
4
|
+
from orionis.unittesting import TestCase
|
5
|
+
|
6
|
+
class TestConfigHourly(TestCase):
|
7
|
+
"""
|
8
|
+
Test cases for the Hourly logging configuration class.
|
9
|
+
"""
|
10
|
+
|
11
|
+
async def testDefaultValues(self):
|
12
|
+
"""
|
13
|
+
Test that Hourly instance is created with correct default values.
|
14
|
+
Verifies default path, level and retention_hours match expected values.
|
15
|
+
"""
|
16
|
+
hourly = Hourly()
|
17
|
+
self.assertEqual(hourly.path, "storage/log/application.log")
|
18
|
+
self.assertEqual(hourly.level, Level.INFO.value)
|
19
|
+
self.assertEqual(hourly.retention_hours, 24)
|
20
|
+
|
21
|
+
async def testPathValidation(self):
|
22
|
+
"""
|
23
|
+
Test path attribute validation.
|
24
|
+
Verifies that empty or non-string paths raise exceptions.
|
25
|
+
"""
|
26
|
+
with self.assertRaises(OrionisIntegrityException):
|
27
|
+
Hourly(path="")
|
28
|
+
with self.assertRaises(OrionisIntegrityException):
|
29
|
+
Hourly(path=123)
|
30
|
+
try:
|
31
|
+
Hourly(path="custom/log/path.log")
|
32
|
+
except OrionisIntegrityException:
|
33
|
+
self.fail("Valid path should not raise exception")
|
34
|
+
|
35
|
+
async def testLevelValidation(self):
|
36
|
+
"""
|
37
|
+
Test level attribute validation with different input types.
|
38
|
+
"""
|
39
|
+
# Test string level
|
40
|
+
hourly = Hourly(level="debug")
|
41
|
+
self.assertEqual(hourly.level, Level.DEBUG.value)
|
42
|
+
|
43
|
+
# Test int level
|
44
|
+
hourly = Hourly(level=Level.WARNING.value)
|
45
|
+
self.assertEqual(hourly.level, Level.WARNING.value)
|
46
|
+
|
47
|
+
# Test enum level
|
48
|
+
hourly = Hourly(level=Level.ERROR)
|
49
|
+
self.assertEqual(hourly.level, Level.ERROR.value)
|
50
|
+
|
51
|
+
# Test invalid cases
|
52
|
+
with self.assertRaises(OrionisIntegrityException):
|
53
|
+
Hourly(level="invalid")
|
54
|
+
with self.assertRaises(OrionisIntegrityException):
|
55
|
+
Hourly(level=999)
|
56
|
+
with self.assertRaises(OrionisIntegrityException):
|
57
|
+
Hourly(level=[])
|
58
|
+
|
59
|
+
async def testRetentionHoursValidation(self):
|
60
|
+
"""
|
61
|
+
Test retention_hours attribute validation.
|
62
|
+
"""
|
63
|
+
# Test valid values
|
64
|
+
try:
|
65
|
+
Hourly(retention_hours=1)
|
66
|
+
Hourly(retention_hours=168)
|
67
|
+
Hourly(retention_hours=72)
|
68
|
+
except OrionisIntegrityException:
|
69
|
+
self.fail("Valid retention_hours should not raise exception")
|
70
|
+
|
71
|
+
# Test invalid values
|
72
|
+
with self.assertRaises(OrionisIntegrityException):
|
73
|
+
Hourly(retention_hours=0)
|
74
|
+
with self.assertRaises(OrionisIntegrityException):
|
75
|
+
Hourly(retention_hours=169)
|
76
|
+
with self.assertRaises(OrionisIntegrityException):
|
77
|
+
Hourly(retention_hours=-1)
|
78
|
+
with self.assertRaises(OrionisIntegrityException):
|
79
|
+
Hourly(retention_hours="24")
|
80
|
+
|
81
|
+
async def testWhitespaceHandling(self):
|
82
|
+
"""
|
83
|
+
Test whitespace handling in path and level attributes.
|
84
|
+
"""
|
85
|
+
hourly = Hourly(path=" logs/app.log ", level=" debug ")
|
86
|
+
self.assertEqual(hourly.path, " logs/app.log ")
|
87
|
+
self.assertEqual(hourly.level, Level.DEBUG.value)
|
88
|
+
|
89
|
+
async def testToDictMethod(self):
|
90
|
+
"""
|
91
|
+
Test that toDict returns proper dictionary representation.
|
92
|
+
"""
|
93
|
+
hourly = Hourly()
|
94
|
+
hourly_dict = hourly.toDict()
|
95
|
+
self.assertIsInstance(hourly_dict, dict)
|
96
|
+
self.assertEqual(hourly_dict['path'], "storage/log/application.log")
|
97
|
+
self.assertEqual(hourly_dict['level'], Level.INFO.value)
|
98
|
+
self.assertEqual(hourly_dict['retention_hours'], 24)
|
99
|
+
|
100
|
+
async def testCustomValuesToDict(self):
|
101
|
+
"""
|
102
|
+
Test that custom values are properly included in dictionary.
|
103
|
+
"""
|
104
|
+
custom_hourly = Hourly(
|
105
|
+
path="custom/logs/app.log",
|
106
|
+
level="warning",
|
107
|
+
retention_hours=48
|
108
|
+
)
|
109
|
+
hourly_dict = custom_hourly.toDict()
|
110
|
+
self.assertEqual(hourly_dict['path'], "custom/logs/app.log")
|
111
|
+
self.assertEqual(hourly_dict['level'], Level.WARNING.value)
|
112
|
+
self.assertEqual(hourly_dict['retention_hours'], 48)
|
113
|
+
|
114
|
+
async def testHashability(self):
|
115
|
+
"""
|
116
|
+
Test that Hourly maintains hashability due to unsafe_hash=True.
|
117
|
+
"""
|
118
|
+
hourly1 = Hourly()
|
119
|
+
hourly2 = Hourly()
|
120
|
+
hourly_set = {hourly1, hourly2}
|
121
|
+
self.assertEqual(len(hourly_set), 1)
|
122
|
+
custom_hourly = Hourly(path="custom.log")
|
123
|
+
hourly_set.add(custom_hourly)
|
124
|
+
self.assertEqual(len(hourly_set), 2)
|
125
|
+
|
126
|
+
async def testKwOnlyInitialization(self):
|
127
|
+
"""
|
128
|
+
Test that Hourly enforces keyword-only initialization.
|
129
|
+
"""
|
130
|
+
with self.assertRaises(TypeError):
|
131
|
+
Hourly("path.log", "info", 24)
|
@@ -0,0 +1,133 @@
|
|
1
|
+
from orionis.luminate.foundation.config.logging.entities.monthly import Monthly
|
2
|
+
from orionis.luminate.foundation.config.logging.enums.levels import Level
|
3
|
+
from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
|
4
|
+
from orionis.unittesting import TestCase
|
5
|
+
|
6
|
+
class TestConfigMonthly(TestCase):
|
7
|
+
"""
|
8
|
+
Test cases for the Monthly logging configuration class.
|
9
|
+
"""
|
10
|
+
|
11
|
+
async def testDefaultValues(self):
|
12
|
+
"""
|
13
|
+
Test that Monthly instance is created with correct default values.
|
14
|
+
Verifies default path, level and retention_months match expected values.
|
15
|
+
"""
|
16
|
+
monthly = Monthly()
|
17
|
+
self.assertEqual(monthly.path, "storage/log/application.log")
|
18
|
+
self.assertEqual(monthly.level, Level.INFO.value)
|
19
|
+
self.assertEqual(monthly.retention_months, 4)
|
20
|
+
|
21
|
+
async def testPathValidation(self):
|
22
|
+
"""
|
23
|
+
Test path attribute validation.
|
24
|
+
Verifies that empty or non-string paths raise exceptions.
|
25
|
+
"""
|
26
|
+
with self.assertRaises(OrionisIntegrityException):
|
27
|
+
Monthly(path="")
|
28
|
+
with self.assertRaises(OrionisIntegrityException):
|
29
|
+
Monthly(path=123)
|
30
|
+
try:
|
31
|
+
Monthly(path="custom/log/path.log")
|
32
|
+
except OrionisIntegrityException:
|
33
|
+
self.fail("Valid path should not raise exception")
|
34
|
+
|
35
|
+
async def testLevelValidation(self):
|
36
|
+
"""
|
37
|
+
Test level attribute validation with different input types.
|
38
|
+
"""
|
39
|
+
# Test string level
|
40
|
+
monthly = Monthly(level="debug")
|
41
|
+
self.assertEqual(monthly.level, Level.DEBUG.value)
|
42
|
+
|
43
|
+
# Test int level
|
44
|
+
monthly = Monthly(level=Level.WARNING.value)
|
45
|
+
self.assertEqual(monthly.level, Level.WARNING.value)
|
46
|
+
|
47
|
+
# Test enum level
|
48
|
+
monthly = Monthly(level=Level.ERROR)
|
49
|
+
self.assertEqual(monthly.level, Level.ERROR.value)
|
50
|
+
|
51
|
+
# Test invalid cases
|
52
|
+
with self.assertRaises(OrionisIntegrityException):
|
53
|
+
Monthly(level="invalid")
|
54
|
+
with self.assertRaises(OrionisIntegrityException):
|
55
|
+
Monthly(level=999)
|
56
|
+
with self.assertRaises(OrionisIntegrityException):
|
57
|
+
Monthly(level=[])
|
58
|
+
|
59
|
+
async def testRetentionMonthsValidation(self):
|
60
|
+
"""
|
61
|
+
Test retention_months attribute validation.
|
62
|
+
"""
|
63
|
+
# Test valid values
|
64
|
+
try:
|
65
|
+
Monthly(retention_months=1)
|
66
|
+
Monthly(retention_months=12)
|
67
|
+
Monthly(retention_months=6)
|
68
|
+
except OrionisIntegrityException:
|
69
|
+
self.fail("Valid retention_months should not raise exception")
|
70
|
+
|
71
|
+
# Test invalid values
|
72
|
+
with self.assertRaises(OrionisIntegrityException):
|
73
|
+
Monthly(retention_months=0)
|
74
|
+
with self.assertRaises(OrionisIntegrityException):
|
75
|
+
Monthly(retention_months=13)
|
76
|
+
with self.assertRaises(OrionisIntegrityException):
|
77
|
+
Monthly(retention_months=-1)
|
78
|
+
with self.assertRaises(OrionisIntegrityException):
|
79
|
+
Monthly(retention_months="4")
|
80
|
+
|
81
|
+
async def testWhitespaceHandling(self):
|
82
|
+
"""
|
83
|
+
Test whitespace handling in path and level attributes.
|
84
|
+
"""
|
85
|
+
monthly = Monthly(path=" logs/app.log ", level=" debug ")
|
86
|
+
self.assertEqual(monthly.path, " logs/app.log ")
|
87
|
+
self.assertEqual(monthly.level, Level.DEBUG.value)
|
88
|
+
|
89
|
+
async def testToDictMethod(self):
|
90
|
+
"""
|
91
|
+
Test that toDict returns proper dictionary representation.
|
92
|
+
"""
|
93
|
+
monthly = Monthly()
|
94
|
+
monthly_dict = monthly.toDict()
|
95
|
+
self.assertIsInstance(monthly_dict, dict)
|
96
|
+
self.assertEqual(monthly_dict['path'], "storage/log/application.log")
|
97
|
+
self.assertEqual(monthly_dict['level'], Level.INFO.value)
|
98
|
+
self.assertEqual(monthly_dict['retention_months'], 4)
|
99
|
+
|
100
|
+
async def testCustomValuesToDict(self):
|
101
|
+
"""
|
102
|
+
Test that custom values are properly included in dictionary.
|
103
|
+
"""
|
104
|
+
custom_monthly = Monthly(
|
105
|
+
path="custom/logs/app.log",
|
106
|
+
level="warning",
|
107
|
+
retention_months=6
|
108
|
+
)
|
109
|
+
monthly_dict = custom_monthly.toDict()
|
110
|
+
self.assertEqual(monthly_dict['path'], "custom/logs/app.log")
|
111
|
+
self.assertEqual(monthly_dict['level'], Level.WARNING.value)
|
112
|
+
self.assertEqual(monthly_dict['retention_months'], 6)
|
113
|
+
|
114
|
+
async def testHashability(self):
|
115
|
+
"""
|
116
|
+
Test that Monthly maintains hashability due to unsafe_hash=True.
|
117
|
+
"""
|
118
|
+
monthly1 = Monthly()
|
119
|
+
monthly2 = Monthly()
|
120
|
+
monthly_set = {monthly1, monthly2}
|
121
|
+
|
122
|
+
self.assertEqual(len(monthly_set), 1)
|
123
|
+
|
124
|
+
custom_monthly = Monthly(path="custom.log")
|
125
|
+
monthly_set.add(custom_monthly)
|
126
|
+
self.assertEqual(len(monthly_set), 2)
|
127
|
+
|
128
|
+
async def testKwOnlyInitialization(self):
|
129
|
+
"""
|
130
|
+
Test that Monthly enforces keyword-only initialization.
|
131
|
+
"""
|
132
|
+
with self.assertRaises(TypeError):
|
133
|
+
Monthly("path.log", "info", 4)
|