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,62 @@
|
|
1
|
+
from dataclasses import asdict, dataclass, field, fields
|
2
|
+
from orionis.luminate.foundation.config.database.entities.connections import Connections
|
3
|
+
from orionis.luminate.services.environment.env import Env
|
4
|
+
from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
|
5
|
+
|
6
|
+
@dataclass(unsafe_hash=True, kw_only=True)
|
7
|
+
class Database:
|
8
|
+
"""
|
9
|
+
Data class to represent the general database configuration.
|
10
|
+
|
11
|
+
Attributes
|
12
|
+
----------
|
13
|
+
default : str
|
14
|
+
The name of the default database connection to use.
|
15
|
+
connections : Connections
|
16
|
+
The different database connections available to the application.
|
17
|
+
"""
|
18
|
+
default: str = field(
|
19
|
+
default_factory=lambda: Env.get("DB_CONNECTION", "sqlite"),
|
20
|
+
metadata={
|
21
|
+
"description": "Default database connection name",
|
22
|
+
"default": "sqlite"
|
23
|
+
}
|
24
|
+
)
|
25
|
+
|
26
|
+
connections: Connections = field(
|
27
|
+
default_factory=Connections,
|
28
|
+
metadata={
|
29
|
+
"description": "Database connections",
|
30
|
+
"default": "Connections()"
|
31
|
+
}
|
32
|
+
)
|
33
|
+
|
34
|
+
def __post_init__(self):
|
35
|
+
"""
|
36
|
+
Post-initialization method for validating and normalizing the 'default' and 'connections' attributes.
|
37
|
+
Validates that the 'default' attribute is either a valid string corresponding to a member of DatabaseConnections
|
38
|
+
or an instance of DatabaseConnections. If 'default' is a valid string, it is converted to its corresponding value.
|
39
|
+
If 'default' is not valid, raises an OrionisIntegrityException.
|
40
|
+
Also ensures that the 'connections' attribute is an instance of Connections and is not empty.
|
41
|
+
Raises an OrionisIntegrityException if the validation fails.
|
42
|
+
"""
|
43
|
+
|
44
|
+
# Validate default attribute
|
45
|
+
options = [field.name for field in fields(Connections)]
|
46
|
+
if isinstance(self.default, str):
|
47
|
+
if self.default not in options:
|
48
|
+
raise OrionisIntegrityException(f"The 'default' attribute must be one of {str(options)}.")
|
49
|
+
else:
|
50
|
+
raise OrionisIntegrityException(f"The 'default' attribute cannot be empty. Options are: {str(options)}")
|
51
|
+
|
52
|
+
# Validate connections attribute
|
53
|
+
if not self.connections or not isinstance(self.connections, Connections):
|
54
|
+
raise OrionisIntegrityException("The 'connections' attribute must be of type Connections.")
|
55
|
+
|
56
|
+
def toDict(self) -> dict:
|
57
|
+
"""
|
58
|
+
Convert the object to a dictionary representation.
|
59
|
+
Returns:
|
60
|
+
dict: A dictionary representation of the Dataclass object.
|
61
|
+
"""
|
62
|
+
return asdict(self)
|
@@ -0,0 +1,270 @@
|
|
1
|
+
from dataclasses import asdict, dataclass, field
|
2
|
+
from typing import Optional
|
3
|
+
from orionis.luminate.foundation.config.database.enums.mysql_charsets import MySQLCharset
|
4
|
+
from orionis.luminate.foundation.config.database.enums.mysql_collations import MySQLCollation
|
5
|
+
from orionis.luminate.foundation.config.database.enums.mysql_engine import MySQLEngine
|
6
|
+
from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
|
7
|
+
from orionis.luminate.services.environment.env import Env
|
8
|
+
|
9
|
+
@dataclass(unsafe_hash=True, kw_only=True)
|
10
|
+
class MySQL:
|
11
|
+
"""
|
12
|
+
Data class to represent the MySQL database configuration.
|
13
|
+
|
14
|
+
Attributes
|
15
|
+
----------
|
16
|
+
driver : str
|
17
|
+
The database driver being used, e.g., 'mysql'.
|
18
|
+
host : str
|
19
|
+
The host address for the MySQL server.
|
20
|
+
port : str
|
21
|
+
The port for connecting to the MySQL server.
|
22
|
+
database : str
|
23
|
+
The name of the MySQL database.
|
24
|
+
username : str
|
25
|
+
The username for connecting to the MySQL database.
|
26
|
+
password : str
|
27
|
+
The password for the MySQL database.
|
28
|
+
unix_socket : str
|
29
|
+
The path to the Unix socket for MySQL connections (optional).
|
30
|
+
charset : str
|
31
|
+
The charset used for the connection.
|
32
|
+
collation : str
|
33
|
+
The collation for the database.
|
34
|
+
prefix : str
|
35
|
+
Prefix for table names.
|
36
|
+
prefix_indexes : bool
|
37
|
+
Whether to prefix index names.
|
38
|
+
strict : bool
|
39
|
+
Whether to enforce strict SQL mode.
|
40
|
+
engine : Optional[str]
|
41
|
+
The storage engine for the MySQL database (optional).
|
42
|
+
"""
|
43
|
+
|
44
|
+
driver: str = field(
|
45
|
+
default="mysql",
|
46
|
+
metadata={
|
47
|
+
"description": "The database driver being used.",
|
48
|
+
"default": "mysql",
|
49
|
+
}
|
50
|
+
)
|
51
|
+
|
52
|
+
host: str = field(
|
53
|
+
default_factory=lambda: Env.get("DB_HOST", "127.0.0.1"),
|
54
|
+
metadata={
|
55
|
+
"description": "The host address for the MySQL server.",
|
56
|
+
"default": "127.0.0.1",
|
57
|
+
}
|
58
|
+
)
|
59
|
+
|
60
|
+
port: int = field(
|
61
|
+
default_factory=lambda: Env.get("DB_PORT", 3306),
|
62
|
+
metadata={
|
63
|
+
"description": "The port for connecting to the MySQL server.",
|
64
|
+
"default": 3306,
|
65
|
+
}
|
66
|
+
)
|
67
|
+
|
68
|
+
database: str = field(
|
69
|
+
default_factory=lambda: Env.get("DB_DATABASE", "orionis"),
|
70
|
+
metadata={
|
71
|
+
"description": "The name of the MySQL database.",
|
72
|
+
"default": "orionis",
|
73
|
+
}
|
74
|
+
)
|
75
|
+
|
76
|
+
username: str = field(
|
77
|
+
default_factory=lambda: Env.get("DB_USERNAME", "root"),
|
78
|
+
metadata={
|
79
|
+
"description": "The username for connecting to the MySQL database.",
|
80
|
+
"default": "root",
|
81
|
+
}
|
82
|
+
)
|
83
|
+
|
84
|
+
password: str = field(
|
85
|
+
default_factory=lambda: Env.get("DB_PASSWORD", ""),
|
86
|
+
metadata={
|
87
|
+
"description": "The password for the MySQL database.",
|
88
|
+
"default": "secret",
|
89
|
+
}
|
90
|
+
)
|
91
|
+
|
92
|
+
unix_socket: str = field(
|
93
|
+
default_factory=lambda: Env.get("DB_SOCKET", ""),
|
94
|
+
metadata={
|
95
|
+
"description": "The path to the Unix socket for MySQL connections (optional).",
|
96
|
+
"default": "",
|
97
|
+
}
|
98
|
+
)
|
99
|
+
|
100
|
+
charset: str | MySQLCharset = field(
|
101
|
+
default=MySQLCharset.UTF8MB4,
|
102
|
+
metadata={
|
103
|
+
"description": "The charset used for the connection.",
|
104
|
+
"default": "utf8mb4",
|
105
|
+
}
|
106
|
+
)
|
107
|
+
|
108
|
+
collation: str | MySQLCollation = field(
|
109
|
+
default=MySQLCollation.UTF8MB4_UNICODE_CI,
|
110
|
+
metadata={
|
111
|
+
"description": "The collation for the database.",
|
112
|
+
"default": "utf8mb4_unicode_ci",
|
113
|
+
}
|
114
|
+
)
|
115
|
+
|
116
|
+
prefix: str = field(
|
117
|
+
default="",
|
118
|
+
metadata={
|
119
|
+
"description": "Prefix for table names.",
|
120
|
+
"default": "",
|
121
|
+
}
|
122
|
+
)
|
123
|
+
|
124
|
+
prefix_indexes: bool = field(
|
125
|
+
default=True,
|
126
|
+
metadata={
|
127
|
+
"description": "Whether to prefix index names.",
|
128
|
+
"default": True,
|
129
|
+
}
|
130
|
+
)
|
131
|
+
|
132
|
+
strict: bool = field(
|
133
|
+
default=True,
|
134
|
+
metadata={
|
135
|
+
"description": "Whether to enforce strict SQL mode.",
|
136
|
+
"default": True,
|
137
|
+
}
|
138
|
+
)
|
139
|
+
|
140
|
+
engine: Optional[str | MySQLEngine] = field(
|
141
|
+
default=MySQLEngine.INNODB,
|
142
|
+
metadata={
|
143
|
+
"description": "The storage engine for the MySQL database (optional).",
|
144
|
+
"default": MySQLEngine.INNODB,
|
145
|
+
"type": str,
|
146
|
+
}
|
147
|
+
)
|
148
|
+
|
149
|
+
def __post_init__(self):
|
150
|
+
"""
|
151
|
+
Post-initialization validation for MySQL database entity configuration.
|
152
|
+
This method performs comprehensive validation on the instance attributes to ensure
|
153
|
+
that all required fields are present and correctly typed. It raises an
|
154
|
+
OrionisIntegrityException with a descriptive message if any validation fails.
|
155
|
+
Validations performed:
|
156
|
+
- Host: Must be a non-empty string.
|
157
|
+
- Port: Must be an integer between 1 and 65535.
|
158
|
+
- Database name: Must be a non-empty string.
|
159
|
+
- Username: Must be a non-empty string.
|
160
|
+
- Password: Must be a string (can be empty).
|
161
|
+
- Unix socket: If provided, must be a string.
|
162
|
+
- Charset: Must be a non-empty string.
|
163
|
+
- Collation: Must be a non-empty string.
|
164
|
+
- Prefix: If provided, must be a string.
|
165
|
+
- Prefix indexes: Must be a boolean.
|
166
|
+
- Strict: Must be a boolean.
|
167
|
+
- Engine: If provided, must be a string.
|
168
|
+
Raises:
|
169
|
+
OrionisIntegrityException: If any attribute fails validation.
|
170
|
+
"""
|
171
|
+
|
172
|
+
# Validate driver
|
173
|
+
if self.driver != 'mysql':
|
174
|
+
raise OrionisIntegrityException("Invalid driver: expected 'mysql'. Please ensure the 'driver' attribute is set to 'mysql'.")
|
175
|
+
|
176
|
+
# Validate host
|
177
|
+
if not self.host or not isinstance(self.host, str):
|
178
|
+
raise OrionisIntegrityException("Database host must be a non-empty string.")
|
179
|
+
|
180
|
+
# Validate port type
|
181
|
+
if not isinstance(self.port, (int)):
|
182
|
+
raise OrionisIntegrityException("Database port must be an integer.")
|
183
|
+
|
184
|
+
# Validate port range
|
185
|
+
if self.port > 65535 or self.port < 1:
|
186
|
+
raise OrionisIntegrityException("Database port must be between 1 and 65535.")
|
187
|
+
|
188
|
+
# Validate database name
|
189
|
+
if not self.database or not isinstance(self.database, str):
|
190
|
+
raise OrionisIntegrityException("Database name must be a non-empty string.")
|
191
|
+
|
192
|
+
# Validate username
|
193
|
+
if not self.username or not isinstance(self.username, str):
|
194
|
+
raise OrionisIntegrityException("Database username must be a non-empty string.")
|
195
|
+
|
196
|
+
# Validate password
|
197
|
+
if self.password is None or not isinstance(self.password, str):
|
198
|
+
raise OrionisIntegrityException("Database password must be a string (can be empty for some setups).")
|
199
|
+
|
200
|
+
# Validate unix_socket
|
201
|
+
if self.unix_socket is not None and not isinstance(self.unix_socket, str):
|
202
|
+
raise OrionisIntegrityException("Unix socket path must be a string.")
|
203
|
+
|
204
|
+
# Validate charset
|
205
|
+
if not self.charset or not isinstance(self.charset, (str, MySQLCharset)):
|
206
|
+
raise OrionisIntegrityException("Charset must be a non-empty string or MySQLCharset enum.")
|
207
|
+
|
208
|
+
# Convert charset to MySQLCharset enum if it's a string
|
209
|
+
if isinstance(self.charset, str):
|
210
|
+
_value = str(self.charset).upper().strip()
|
211
|
+
options_charsets = MySQLCharset._member_names_
|
212
|
+
if _value not in options_charsets:
|
213
|
+
raise OrionisIntegrityException(f"Charset must be a valid MySQLCharset ({str(options_charsets)}) or string.")
|
214
|
+
else:
|
215
|
+
self.charset = MySQLCharset[_value].value
|
216
|
+
else:
|
217
|
+
self.charset = self.charset.value
|
218
|
+
|
219
|
+
# Validate collation
|
220
|
+
if not self.collation or not isinstance(self.collation, (str, MySQLCollation)):
|
221
|
+
raise OrionisIntegrityException("Collation must be a non-empty string or MySQLCollation enum.")
|
222
|
+
|
223
|
+
# Convert collation to MySQLCollation enum if it's a string
|
224
|
+
if isinstance(self.collation, str):
|
225
|
+
_value = str(self.collation).upper().strip()
|
226
|
+
options_collations = MySQLCollation._member_names_
|
227
|
+
if _value not in options_collations:
|
228
|
+
raise OrionisIntegrityException(f"Collation must be a valid MySQLCollation ({str(options_collations)}) or string.")
|
229
|
+
else:
|
230
|
+
self.collation = MySQLCollation[_value].value
|
231
|
+
else:
|
232
|
+
self.collation = self.collation.value
|
233
|
+
|
234
|
+
# Validate prefix
|
235
|
+
if self.prefix is not None and not isinstance(self.prefix, str):
|
236
|
+
raise OrionisIntegrityException("Prefix must be a string.")
|
237
|
+
|
238
|
+
# Validate prefix_indexes
|
239
|
+
if not isinstance(self.prefix_indexes, bool):
|
240
|
+
raise OrionisIntegrityException("prefix_indexes must be a boolean value.")
|
241
|
+
|
242
|
+
# Validate strict
|
243
|
+
if not isinstance(self.strict, bool):
|
244
|
+
raise OrionisIntegrityException("strict must be a boolean value.")
|
245
|
+
|
246
|
+
# Validate engine
|
247
|
+
if self.engine is not None:
|
248
|
+
|
249
|
+
# Check if engine is a string or MySQLEngine enum
|
250
|
+
if not isinstance(self.engine, (str, MySQLEngine)):
|
251
|
+
raise OrionisIntegrityException(f"Engine must be a string or MySQLEngine enum.")
|
252
|
+
|
253
|
+
# Convert engine to MySQLEngine enum if it's a string
|
254
|
+
options_engines = MySQLEngine._member_names_
|
255
|
+
if isinstance(self.engine, str):
|
256
|
+
_value = str(self.engine).upper().strip()
|
257
|
+
if _value not in options_engines:
|
258
|
+
raise OrionisIntegrityException(f"Engine must be a valid MySQLEngine ({str(options_engines)}) or string.")
|
259
|
+
else:
|
260
|
+
self.engine = MySQLEngine[_value].value
|
261
|
+
elif isinstance(self.engine, MySQLEngine):
|
262
|
+
self.engine = self.engine.value
|
263
|
+
|
264
|
+
def toDict(self) -> dict:
|
265
|
+
"""
|
266
|
+
Convert the object to a dictionary representation.
|
267
|
+
Returns:
|
268
|
+
dict: A dictionary representation of the Dataclass object.
|
269
|
+
"""
|
270
|
+
return asdict(self)
|
@@ -0,0 +1,227 @@
|
|
1
|
+
from dataclasses import asdict, dataclass, field
|
2
|
+
from typing import Optional
|
3
|
+
from orionis.luminate.foundation.config.database.enums.oracle_encoding import OracleEncoding
|
4
|
+
from orionis.luminate.foundation.config.database.enums.oracle_nencoding import OracleNencoding
|
5
|
+
from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
|
6
|
+
from orionis.luminate.services.environment.env import Env
|
7
|
+
|
8
|
+
@dataclass(unsafe_hash=True, kw_only=True)
|
9
|
+
class Oracle:
|
10
|
+
"""
|
11
|
+
Data class to represent Oracle database configuration using oracledb.
|
12
|
+
|
13
|
+
Attributes
|
14
|
+
----------
|
15
|
+
driver : str
|
16
|
+
The database driver being used, typically 'oracle'.
|
17
|
+
username : str
|
18
|
+
Username for the database connection.
|
19
|
+
password : str
|
20
|
+
Password for the database connection.
|
21
|
+
host : str
|
22
|
+
Hostname or IP address of the Oracle server.
|
23
|
+
port : int
|
24
|
+
Port number for the Oracle listener (default 1521).
|
25
|
+
service_name : Optional[str]
|
26
|
+
Service name for connection using the SERVICE_NAME method.
|
27
|
+
sid : Optional[str]
|
28
|
+
SID for connection using the SID method.
|
29
|
+
dsn : Optional[str]
|
30
|
+
Full DSN string, used if service_name/sid are not specified.
|
31
|
+
tns_name : Optional[str]
|
32
|
+
TNS alias name defined in tnsnames.ora.
|
33
|
+
encoding : str
|
34
|
+
Character encoding for the connection.
|
35
|
+
"""
|
36
|
+
|
37
|
+
driver: str = field(
|
38
|
+
default="oracle",
|
39
|
+
metadata={
|
40
|
+
"description": "The database driver being used, typically 'oracle'.",
|
41
|
+
"default": "oracle"
|
42
|
+
}
|
43
|
+
)
|
44
|
+
|
45
|
+
username: str = field(
|
46
|
+
default_factory=lambda: Env.get("DB_USERNAME", "sys"),
|
47
|
+
metadata={
|
48
|
+
"description": "Oracle DB username.",
|
49
|
+
"default": "sys"
|
50
|
+
}
|
51
|
+
)
|
52
|
+
|
53
|
+
password: str = field(
|
54
|
+
default_factory=lambda: Env.get("DB_PASSWORD", ""),
|
55
|
+
metadata={
|
56
|
+
"description": "Oracle DB password.",
|
57
|
+
"default": ""
|
58
|
+
}
|
59
|
+
)
|
60
|
+
|
61
|
+
host: str = field(
|
62
|
+
default_factory=lambda: Env.get("DB_HOST", "localhost"),
|
63
|
+
metadata={
|
64
|
+
"description": "Oracle DB host address.",
|
65
|
+
"default": "localhost"
|
66
|
+
}
|
67
|
+
)
|
68
|
+
|
69
|
+
port: int = field(
|
70
|
+
default_factory=lambda: Env.get("DB_PORT", 1521),
|
71
|
+
metadata={
|
72
|
+
"description": "Oracle DB listener port.",
|
73
|
+
"default": 1521
|
74
|
+
}
|
75
|
+
)
|
76
|
+
|
77
|
+
service_name: Optional[str] = field(
|
78
|
+
default_factory=lambda: Env.get("DB_SERVICE_NAME", "ORCL"),
|
79
|
+
metadata={
|
80
|
+
"description": "Service name for Oracle DB.",
|
81
|
+
"default": "ORCL"
|
82
|
+
}
|
83
|
+
)
|
84
|
+
|
85
|
+
sid: Optional[str] = field(
|
86
|
+
default_factory=lambda: Env.get("DB_SID", None),
|
87
|
+
metadata={
|
88
|
+
"description": "SID for Oracle DB.",
|
89
|
+
"default": None
|
90
|
+
}
|
91
|
+
)
|
92
|
+
|
93
|
+
dsn: Optional[str] = field(
|
94
|
+
default_factory=lambda: Env.get("DB_DSN", None),
|
95
|
+
metadata={
|
96
|
+
"description": "DSN string (overrides host/port/service/sid).",
|
97
|
+
"default": None
|
98
|
+
}
|
99
|
+
)
|
100
|
+
|
101
|
+
tns_name: Optional[str] = field(
|
102
|
+
default_factory=lambda: Env.get("DB_TNS", None),
|
103
|
+
metadata={
|
104
|
+
"description": "TNS alias defined in tnsnames.ora file.",
|
105
|
+
"default": None
|
106
|
+
}
|
107
|
+
)
|
108
|
+
|
109
|
+
encoding: str | OracleEncoding = field(
|
110
|
+
default_factory=lambda: Env.get("DB_ENCODING", OracleEncoding.AL32UTF8),
|
111
|
+
metadata={
|
112
|
+
"description": "Database charset (CHAR/VARCHAR2)",
|
113
|
+
"default": "AL32UTF8"
|
114
|
+
}
|
115
|
+
)
|
116
|
+
|
117
|
+
nencoding: str | OracleNencoding = field(
|
118
|
+
default_factory=lambda: Env.get("DB_NENCODING", OracleNencoding.AL32UTF8),
|
119
|
+
metadata={
|
120
|
+
"description": "Database charset (NCHAR/NVARCHAR2)",
|
121
|
+
"default": "AL32UTF8"
|
122
|
+
}
|
123
|
+
)
|
124
|
+
|
125
|
+
def __post_init__(self):
|
126
|
+
"""
|
127
|
+
Post-initialization validation for Oracle database connection entity.
|
128
|
+
This method performs strict validation on the configuration fields required to establish
|
129
|
+
an Oracle database connection. It ensures that all necessary parameters are present and
|
130
|
+
correctly formatted, raising an `OrionisIntegrityException` if any validation fails.
|
131
|
+
Validation rules:
|
132
|
+
- `driver` must be the string 'oracle'.
|
133
|
+
- `username` and `password` must be non-empty strings.
|
134
|
+
- `dsn` and `tns_name`, if provided, must be non-empty strings or None.
|
135
|
+
- If neither `dsn` nor `tns_name` is provided:
|
136
|
+
- `host` must be a non-empty string.
|
137
|
+
- `port` must be an integer between 1 and 65535.
|
138
|
+
- At least one of `service_name` or `sid` must be provided as a non-empty string.
|
139
|
+
- If provided, `service_name` and `sid` must be non-empty strings or None.
|
140
|
+
- `encoding` must be a non-empty string or an instance of `OracleEncoding`.
|
141
|
+
- `nencoding` must be a non-empty string.
|
142
|
+
Raises:
|
143
|
+
OrionisIntegrityException: If any configuration parameter is invalid.
|
144
|
+
"""
|
145
|
+
|
146
|
+
# Validate driver
|
147
|
+
if not isinstance(self.driver, str) or self.driver.strip().lower() != "oracle":
|
148
|
+
raise OrionisIntegrityException("Invalid 'driver': must be the string 'oracle'.")
|
149
|
+
|
150
|
+
# Validate username
|
151
|
+
if not isinstance(self.username, str) or not self.username.strip():
|
152
|
+
raise OrionisIntegrityException("Invalid 'username': must be a non-empty string.")
|
153
|
+
|
154
|
+
# Validate password
|
155
|
+
if not isinstance(self.password, str):
|
156
|
+
raise OrionisIntegrityException("Invalid 'password': must be a string.")
|
157
|
+
|
158
|
+
# Validate dsn
|
159
|
+
if self.dsn is not None and (not isinstance(self.dsn, str) or not self.dsn.strip()):
|
160
|
+
raise OrionisIntegrityException("Invalid 'dsn': must be a non-empty string or None.")
|
161
|
+
|
162
|
+
# Validate tns_name
|
163
|
+
if self.tns_name is not None and (not isinstance(self.tns_name, str) or not self.tns_name.strip()):
|
164
|
+
raise OrionisIntegrityException("Invalid 'tns_name': must be a non-empty string or None.")
|
165
|
+
|
166
|
+
# If not using DSN or TNS, validate host/port/service_name/sid
|
167
|
+
if not self.dsn and not self.tns_name:
|
168
|
+
|
169
|
+
# Validate host
|
170
|
+
if not isinstance(self.host, str) or not self.host.strip():
|
171
|
+
raise OrionisIntegrityException("Invalid 'host': must be a non-empty string.")
|
172
|
+
|
173
|
+
# Validate port
|
174
|
+
if not isinstance(self.port, int) or self.port <= 0 or self.port > 65535:
|
175
|
+
raise OrionisIntegrityException("Invalid 'port': must be an integer between 1 and 65535.")
|
176
|
+
|
177
|
+
# Validate service_name and sid
|
178
|
+
if (self.service_name is None or not str(self.service_name).strip()) and (self.sid is None or not str(self.sid).strip()):
|
179
|
+
raise OrionisIntegrityException(
|
180
|
+
"You must provide at least one of: 'service_name', 'sid', 'dsn', or 'tns_name'."
|
181
|
+
)
|
182
|
+
|
183
|
+
# Validate service_name and sid
|
184
|
+
if self.service_name is not None and (not isinstance(self.service_name, str) or not self.service_name.strip()):
|
185
|
+
raise OrionisIntegrityException("Invalid 'service_name': must be a non-empty string or None.")
|
186
|
+
|
187
|
+
# Validate sid
|
188
|
+
if self.sid is not None and (not isinstance(self.sid, str) or not self.sid.strip()):
|
189
|
+
raise OrionisIntegrityException("Invalid 'sid': must be a non-empty string or None.")
|
190
|
+
|
191
|
+
# Validate encoding
|
192
|
+
options_encoding = OracleEncoding._member_names_
|
193
|
+
if isinstance(self.encoding, str):
|
194
|
+
_value = self.encoding.upper().strip()
|
195
|
+
if _value not in options_encoding:
|
196
|
+
raise OrionisIntegrityException(
|
197
|
+
f"The 'encoding' attribute must be a valid option {str(OracleEncoding._member_names_)}"
|
198
|
+
)
|
199
|
+
else:
|
200
|
+
self.encoding = OracleEncoding[_value].value
|
201
|
+
elif isinstance(self.encoding, OracleEncoding):
|
202
|
+
self.encoding = self.encoding.value
|
203
|
+
else:
|
204
|
+
raise OrionisIntegrityException("Invalid 'encoding': must be a string or OracleEncoding.")
|
205
|
+
|
206
|
+
# Validate nencoding
|
207
|
+
options_nencoding = OracleNencoding._member_names_
|
208
|
+
if isinstance(self.nencoding, str):
|
209
|
+
_value = self.nencoding.upper().strip()
|
210
|
+
if _value not in options_nencoding:
|
211
|
+
raise OrionisIntegrityException(
|
212
|
+
f"The 'nencoding' attribute must be a valid option {str(OracleNencoding._member_names_)}"
|
213
|
+
)
|
214
|
+
else:
|
215
|
+
self.nencoding = OracleNencoding[_value].value
|
216
|
+
elif isinstance(self.nencoding, OracleNencoding):
|
217
|
+
self.nencoding = self.nencoding.value
|
218
|
+
else:
|
219
|
+
raise OrionisIntegrityException("Invalid 'nencoding': must be a string or OracleNencoding.")
|
220
|
+
|
221
|
+
def toDict(self) -> dict:
|
222
|
+
"""
|
223
|
+
Convert the object to a dictionary representation.
|
224
|
+
Returns:
|
225
|
+
dict: A dictionary representation of the Dataclass object.
|
226
|
+
"""
|
227
|
+
return asdict(self)
|