orionis 0.253.0__py3-none-any.whl → 0.265.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.
Files changed (397) hide show
  1. orionis/application.py +6 -0
  2. orionis/framework.py +1 -1
  3. orionis/luminate/{application.py → _application.py} +21 -19
  4. orionis/luminate/{container → _container}/container.py +4 -4
  5. orionis/luminate/{container → _container}/container_integrity.py +2 -2
  6. orionis/luminate/{container → _container}/resolve.py +2 -2
  7. orionis/luminate/{contracts → _contracts}/application.py +2 -2
  8. orionis/luminate/{contracts → _contracts}/console/task_manager.py +1 -1
  9. orionis/luminate/{contracts → _contracts}/facades/commands/scheduler_facade.py +1 -1
  10. orionis/luminate/{contracts → _contracts}/facades/facade.py +4 -3
  11. orionis/luminate/{contracts → _contracts}/foundation/providers/service_providers_bootstrapper.py +2 -2
  12. orionis/luminate/{contracts → _contracts}/providers/service_provider.py +1 -1
  13. orionis/luminate/{facades → _facades}/app_facade.py +2 -2
  14. orionis/luminate/{facades → _facades}/commands/commands_facade.py +3 -3
  15. orionis/luminate/{facades → _facades}/commands/scheduler_facade.py +3 -3
  16. orionis/luminate/{facades → _facades}/config/config_facade.py +3 -3
  17. orionis/luminate/{facades → _facades}/environment/environment_facade.py +3 -3
  18. orionis/luminate/{facades → _facades}/files/path_facade.py +4 -4
  19. orionis/luminate/{facades → _facades}/log/log_facade.py +2 -2
  20. orionis/luminate/{foundation → _foundation}/console/command_bootstrapper.py +2 -2
  21. orionis/luminate/{foundation → _foundation}/environment/environment_bootstrapper.py +3 -3
  22. orionis/luminate/{foundation → _foundation/foundation}/config/config_bootstrapper.py +3 -3
  23. orionis/luminate/{foundation → _foundation}/providers/service_providers_bootstrapper.py +4 -4
  24. orionis/luminate/{providers → _providers}/commands/reactor_commands_service_provider.py +7 -7
  25. orionis/luminate/{providers → _providers}/commands/scheduler_provider.py +3 -3
  26. orionis/luminate/{providers → _providers}/config/config_service_provider.py +3 -3
  27. orionis/luminate/{providers → _providers}/environment/environment__service_provider.py +4 -4
  28. orionis/luminate/_providers/files/paths_provider.py +21 -0
  29. orionis/luminate/{providers → _providers}/log/log_service_provider.py +5 -5
  30. orionis/luminate/{providers → _providers}/service_provider.py +2 -2
  31. orionis/luminate/{services_ → _services}/commands/reactor_commands_service.py +3 -3
  32. orionis/luminate/{services_ → _services}/commands/scheduler_service.py +1 -1
  33. orionis/luminate/{services_ → _services}/config/config_service.py +1 -1
  34. orionis/luminate/{services_ → _services}/log/log_service.py +1 -1
  35. orionis/luminate/app.py +19 -0
  36. orionis/luminate/console/base/command.py +1 -1
  37. orionis/luminate/console/command_filter.py +1 -1
  38. orionis/luminate/console/commands/help.py +1 -1
  39. orionis/luminate/console/commands/schedule_work.py +2 -2
  40. orionis/luminate/console/dumper/dump_die.py +1 -1
  41. orionis/luminate/console/kernel.py +1 -1
  42. orionis/luminate/console/output/console.py +3 -3
  43. orionis/luminate/console/output/executor.py +1 -1
  44. orionis/luminate/console/output/progress_bar.py +1 -1
  45. orionis/luminate/console/parser.py +1 -1
  46. orionis/luminate/{config → foundation/config}/app/entities/app.py +44 -43
  47. orionis/luminate/{config → foundation/config}/auth/entities/auth.py +9 -1
  48. orionis/luminate/foundation/config/cache/entities/cache.py +74 -0
  49. orionis/luminate/foundation/config/cache/entities/file.py +46 -0
  50. orionis/luminate/foundation/config/cache/entities/stores.py +46 -0
  51. orionis/luminate/{contracts/config → foundation/config/contracts}/config.py +8 -12
  52. orionis/luminate/foundation/config/cors/entities/cors.py +129 -0
  53. orionis/luminate/foundation/config/database/entities/connections.py +89 -0
  54. orionis/luminate/foundation/config/database/entities/database.py +62 -0
  55. orionis/luminate/foundation/config/database/entities/mysql.py +270 -0
  56. orionis/luminate/foundation/config/database/entities/oracle.py +227 -0
  57. orionis/luminate/foundation/config/database/entities/pgsql.py +189 -0
  58. orionis/luminate/foundation/config/database/entities/sqlite.py +178 -0
  59. orionis/luminate/foundation/config/database/enums/mysql_charsets.py +92 -0
  60. orionis/luminate/foundation/config/database/enums/mysql_collations.py +53 -0
  61. orionis/luminate/foundation/config/database/enums/mysql_engine.py +18 -0
  62. orionis/luminate/foundation/config/database/enums/oracle_encoding.py +44 -0
  63. orionis/luminate/foundation/config/database/enums/oracle_nencoding.py +31 -0
  64. orionis/luminate/foundation/config/database/enums/pgsql_charsets.py +90 -0
  65. orionis/luminate/foundation/config/database/enums/pgsql_collations.py +26 -0
  66. orionis/luminate/foundation/config/database/enums/pgsql_mode.py +24 -0
  67. orionis/luminate/foundation/config/database/enums/sqlite_foreign_key.py +12 -0
  68. orionis/luminate/foundation/config/database/enums/sqlite_journal.py +22 -0
  69. orionis/luminate/foundation/config/database/enums/sqlite_synchronous.py +16 -0
  70. orionis/luminate/foundation/config/filesystems/entitites/aws.py +134 -0
  71. orionis/luminate/foundation/config/filesystems/entitites/disks.py +68 -0
  72. orionis/luminate/foundation/config/filesystems/entitites/filesystems.py +53 -0
  73. orionis/luminate/foundation/config/filesystems/entitites/local.py +39 -0
  74. orionis/luminate/foundation/config/filesystems/entitites/public.py +52 -0
  75. orionis/luminate/foundation/config/logging/entities/channels.py +115 -0
  76. orionis/luminate/foundation/config/logging/entities/chunked.py +128 -0
  77. orionis/luminate/foundation/config/logging/entities/daily.py +113 -0
  78. orionis/luminate/foundation/config/logging/entities/hourly.py +100 -0
  79. orionis/luminate/foundation/config/logging/entities/logging.py +51 -0
  80. orionis/luminate/foundation/config/logging/entities/monthly.py +100 -0
  81. orionis/luminate/foundation/config/logging/entities/stack.py +74 -0
  82. orionis/luminate/foundation/config/logging/entities/weekly.py +102 -0
  83. orionis/luminate/foundation/config/logging/enums/levels.py +21 -0
  84. orionis/luminate/foundation/config/mail/entities/file.py +41 -0
  85. orionis/luminate/foundation/config/mail/entities/mail.py +56 -0
  86. orionis/luminate/foundation/config/mail/entities/mailers.py +54 -0
  87. orionis/luminate/foundation/config/mail/entities/smtp.py +104 -0
  88. orionis/luminate/foundation/config/queue/entities/brokers.py +55 -0
  89. orionis/luminate/foundation/config/queue/entities/database.py +107 -0
  90. orionis/luminate/foundation/config/queue/entities/queue.py +47 -0
  91. orionis/luminate/foundation/config/queue/enums/strategy.py +15 -0
  92. orionis/luminate/foundation/config/roots/paths.py +446 -0
  93. orionis/luminate/foundation/config/session/entities/session.py +147 -0
  94. orionis/luminate/foundation/config/session/enums/same_site_policy.py +14 -0
  95. orionis/luminate/foundation/config/session/helpers/secret_key.py +16 -0
  96. orionis/luminate/foundation/config/startup.py +203 -0
  97. orionis/luminate/foundation/config/testing/entities/__init__.py +0 -0
  98. orionis/luminate/{config → foundation/config/testing}/entities/testing.py +36 -20
  99. orionis/luminate/foundation/config/testing/enums/__init__.py +0 -0
  100. orionis/luminate/foundation/config/testing/enums/test_mode.py +12 -0
  101. orionis/luminate/patterns/__init__.py +0 -4
  102. orionis/luminate/patterns/singleton/__init__.py +0 -10
  103. orionis/luminate/services/asynchrony/__init__.py +0 -0
  104. orionis/luminate/services/asynchrony/async_io.py +31 -0
  105. orionis/luminate/services/environment/__init__.py +0 -10
  106. orionis/luminate/services/environment/contracts/__init__.py +0 -5
  107. orionis/luminate/services/environment/contracts/env.py +0 -11
  108. orionis/luminate/services/environment/dot_env.py +87 -163
  109. orionis/luminate/services/environment/env.py +0 -11
  110. orionis/luminate/services/introspection/__init__.py +0 -0
  111. orionis/luminate/services/introspection/abstracts/__init__.py +0 -0
  112. orionis/luminate/services/introspection/abstracts/entities/__init__.py +0 -0
  113. orionis/luminate/services/introspection/abstracts/entities/abstract_class_attributes.py +37 -0
  114. orionis/luminate/{support → services}/introspection/abstracts/reflect_abstract.py +1 -1
  115. orionis/luminate/services/introspection/dependencies/__init__.py +0 -0
  116. orionis/luminate/services/introspection/dependencies/contracts/__init__.py +0 -0
  117. orionis/luminate/{support → services}/introspection/dependencies/contracts/reflect_dependencies.py +2 -2
  118. orionis/luminate/services/introspection/dependencies/entities/__init__.py +0 -0
  119. orionis/luminate/services/introspection/dependencies/entities/class_dependencies.py +41 -0
  120. orionis/luminate/services/introspection/dependencies/entities/method_dependencies.py +42 -0
  121. orionis/luminate/services/introspection/dependencies/entities/resolved_dependencies.py +49 -0
  122. orionis/luminate/{support → services}/introspection/dependencies/reflect_dependencies.py +4 -4
  123. orionis/luminate/services/parsers/__init__.py +0 -0
  124. orionis/luminate/services/parsers/contracts/__init__.py +0 -0
  125. orionis/luminate/{support/parsers/exception_parser.py → services/parsers/exception.py} +1 -1
  126. orionis/luminate/services/parsers/serializer.py +15 -0
  127. orionis/luminate/services/paths/__init__.py +0 -9
  128. orionis/luminate/services/paths/resolver.py +1 -1
  129. orionis/luminate/services/standard/__init__.py +0 -0
  130. orionis/luminate/services/standard/contracts/__init__.py +0 -0
  131. orionis/luminate/{support → services}/standard/std.py +1 -1
  132. orionis/luminate/services/system/__init__.py +0 -0
  133. orionis/luminate/services/system/contracts/__init__.py +0 -0
  134. orionis/luminate/services/system/contracts/imports.py +31 -0
  135. orionis/luminate/services/system/contracts/workers.py +18 -0
  136. orionis/luminate/services/system/imports.py +124 -0
  137. orionis/luminate/services/system/runtime_imports.py +70 -0
  138. orionis/luminate/services/{workers/maximum_workers.py → system/workers.py} +2 -1
  139. orionis/luminate/services/wrapper/__init__.py +0 -0
  140. orionis/luminate/services/wrapper/dicts/__init__.py +0 -0
  141. orionis/luminate/services/wrapper/dicts/dot_dict.py +115 -0
  142. orionis/luminate/support/introspection/__init__.py +0 -5
  143. orionis/luminate/support/introspection/container_integrity.py +2 -2
  144. orionis/luminate/support/introspection/instances/__init__.py +0 -5
  145. orionis/luminate/support/introspection/reflection.py +1 -1
  146. orionis/luminate/test/__init__.py +0 -23
  147. orionis/luminate/test/cases/test_async.py +41 -9
  148. orionis/luminate/test/cases/test_case.py +27 -13
  149. orionis/luminate/test/cases/test_sync.py +28 -6
  150. orionis/luminate/test/output/contracts/{test_std_out.py → dumper.py} +2 -1
  151. orionis/luminate/test/output/{test_std_out.py → dumper.py} +7 -4
  152. orionis/luminate/test/suites/__init__.py +0 -0
  153. orionis/luminate/test/suites/contracts/__init__.py +0 -0
  154. orionis/luminate/test/suites/contracts/test_suite.py +23 -0
  155. orionis/luminate/test/suites/test_suite.py +101 -0
  156. orionis/luminate/test/{core → suites}/test_unit.py +16 -8
  157. orionis/unittesting.py +43 -0
  158. {orionis-0.253.0.dist-info → orionis-0.265.0.dist-info}/METADATA +19 -3
  159. orionis-0.265.0.dist-info/RECORD +440 -0
  160. {orionis-0.253.0.dist-info → orionis-0.265.0.dist-info}/WHEEL +1 -1
  161. orionis-0.265.0.dist-info/entry_points.txt +2 -0
  162. orionis-0.265.0.dist-info/zip-safe +1 -0
  163. tests/example/test_example.py +1 -1
  164. tests/foundation/__init__.py +0 -0
  165. tests/foundation/config/__init__.py +0 -0
  166. tests/foundation/config/app/__init__.py +0 -0
  167. tests/foundation/config/app/test_app.py +140 -0
  168. tests/foundation/config/auth/__init__.py +0 -0
  169. tests/{config → foundation/config/auth}/test_auth.py +6 -3
  170. tests/foundation/config/cache/__init__.py +0 -0
  171. tests/foundation/config/cache/test_cache.py +98 -0
  172. tests/foundation/config/cache/test_cache_file.py +78 -0
  173. tests/foundation/config/cache/test_cache_stores.py +88 -0
  174. tests/foundation/config/cors/__init__.py +0 -0
  175. tests/foundation/config/cors/test_cors.py +121 -0
  176. tests/foundation/config/database/__init__.py +0 -0
  177. tests/foundation/config/database/test_database.py +108 -0
  178. tests/foundation/config/database/test_database_connections.py +129 -0
  179. tests/foundation/config/database/test_database_mysql.py +231 -0
  180. tests/foundation/config/database/test_database_oracle.py +204 -0
  181. tests/foundation/config/database/test_database_pgsql.py +187 -0
  182. tests/foundation/config/database/test_database_sqlite.py +153 -0
  183. tests/foundation/config/exceptions/__init__.py +0 -0
  184. tests/foundation/config/exceptions/test_exceptions_integrity.py +83 -0
  185. tests/foundation/config/filesystems/__init__.py +0 -0
  186. tests/foundation/config/filesystems/test_filesystems.py +110 -0
  187. tests/foundation/config/filesystems/test_filesystems_aws.py +133 -0
  188. tests/foundation/config/filesystems/test_filesystems_disks.py +114 -0
  189. tests/foundation/config/filesystems/test_filesystems_local.py +95 -0
  190. tests/foundation/config/filesystems/test_filesystems_public.py +120 -0
  191. tests/foundation/config/logging/__init__.py +0 -0
  192. tests/foundation/config/logging/test_logging.py +48 -0
  193. tests/foundation/config/logging/test_logging_channels.py +157 -0
  194. tests/foundation/config/logging/test_logging_chunked.py +166 -0
  195. tests/foundation/config/logging/test_logging_daily.py +153 -0
  196. tests/foundation/config/logging/test_logging_hourly.py +131 -0
  197. tests/foundation/config/logging/test_logging_monthly.py +133 -0
  198. tests/foundation/config/logging/test_logging_stack.py +124 -0
  199. tests/foundation/config/logging/test_logging_weekly.py +133 -0
  200. tests/foundation/config/mail/__init__.py +0 -0
  201. tests/foundation/config/mail/test_mail.py +73 -0
  202. tests/foundation/config/mail/test_mail_file.py +61 -0
  203. tests/foundation/config/mail/test_mail_mailers.py +58 -0
  204. tests/foundation/config/mail/test_mail_smtp.py +102 -0
  205. tests/foundation/config/queue/__init__.py +0 -0
  206. tests/foundation/config/queue/test_queue.py +58 -0
  207. tests/foundation/config/queue/test_queue_brokers.py +67 -0
  208. tests/foundation/config/queue/test_queue_database.py +95 -0
  209. tests/foundation/config/root/__init__.py +0 -0
  210. tests/foundation/config/root/test_root_paths.py +134 -0
  211. tests/foundation/config/session/__init__.py +0 -0
  212. tests/foundation/config/session/test_session.py +138 -0
  213. tests/foundation/config/startup/__init__.py +0 -0
  214. tests/foundation/config/startup/test_config_startup.py +134 -0
  215. tests/foundation/config/testing/__init__.py +0 -0
  216. tests/foundation/config/testing/test_testing.py +167 -0
  217. tests/patterns/singleton/test_singleton.py +2 -2
  218. tests/services/asynchrony/__init__.py +0 -0
  219. tests/{support/async_io/test_async_coroutine.py → services/asynchrony/test_async_io.py} +6 -5
  220. tests/services/environment/test_env.py +155 -33
  221. tests/services/inspection/__init__.py +0 -0
  222. tests/services/inspection/dependencies/__init__.py +0 -0
  223. tests/services/inspection/dependencies/mocks/__init__.py +0 -0
  224. tests/services/inspection/dependencies/mocks/mock_user.py +30 -0
  225. tests/services/inspection/dependencies/mocks/mock_user_controller.py +27 -0
  226. tests/services/inspection/dependencies/mocks/mock_users_permissions.py +41 -0
  227. tests/services/inspection/dependencies/test_reflect_dependencies.py +94 -0
  228. tests/services/parsers/__init__.py +0 -0
  229. tests/services/parsers/mocks/__init__.py +0 -0
  230. tests/services/parsers/mocks/mock_custom_error.py +15 -0
  231. tests/{support → services}/parsers/test_exception_parser.py +8 -8
  232. tests/services/path/__init__.py +0 -0
  233. tests/services/path/test_resolver.py +73 -0
  234. tests/services/standard/__init__.py +0 -0
  235. tests/services/standard/test_std.py +127 -0
  236. tests/services/wrapper/__init__.py +0 -0
  237. tests/services/wrapper/test_wrapper_doc_dict.py +129 -0
  238. tests/testing/__init__.py +0 -0
  239. tests/testing/test_testing_result.py +92 -0
  240. tests/testing/test_testing_unit.py +138 -0
  241. orionis/luminate/config/app/__init__.py +0 -10
  242. orionis/luminate/config/auth/__init__.py +0 -7
  243. orionis/luminate/config/cache/__init__.py +0 -9
  244. orionis/luminate/config/cache/entities/cache.py +0 -58
  245. orionis/luminate/config/cache/entities/file.py +0 -29
  246. orionis/luminate/config/cache/entities/stores.py +0 -35
  247. orionis/luminate/config/entities/cors.py +0 -58
  248. orionis/luminate/config/entities/database.py +0 -204
  249. orionis/luminate/config/entities/filesystems.py +0 -98
  250. orionis/luminate/config/entities/logging.py +0 -157
  251. orionis/luminate/config/entities/mail.py +0 -76
  252. orionis/luminate/config/entities/queue.py +0 -62
  253. orionis/luminate/config/entities/session.py +0 -58
  254. orionis/luminate/providers/files/paths_provider.py +0 -20
  255. orionis/luminate/services/workers/__init__.py +0 -10
  256. orionis/luminate/support/adapters/dot_dict.py +0 -29
  257. orionis/luminate/support/asynchrony/async_io.py +0 -40
  258. orionis/luminate/support/asynchrony/contracts/async_coroutine.py +0 -26
  259. orionis/luminate/support/introspection/abstracts/entities/abstract_class_attributes.py +0 -11
  260. orionis/luminate/support/introspection/dependencies/__init__.py +0 -5
  261. orionis/luminate/support/introspection/dependencies/entities/class_dependencies.py +0 -11
  262. orionis/luminate/support/introspection/dependencies/entities/method_dependencies.py +0 -11
  263. orionis/luminate/support/introspection/dependencies/entities/resolved_dependencies.py +0 -12
  264. orionis/luminate/support/paths/contracts/resolver.py +0 -67
  265. orionis/luminate/support/paths/resolver.py +0 -83
  266. orionis/luminate/test/core/contracts/test_suite.py +0 -30
  267. orionis/luminate/test/core/test_suite.py +0 -93
  268. orionis-0.253.0.dist-info/RECORD +0 -318
  269. orionis-0.253.0.dist-info/entry_points.txt +0 -2
  270. tests/config/test_app.py +0 -122
  271. tests/config/test_cache.py +0 -20
  272. tests/support/adapters/fakes/fake_dict.py +0 -15
  273. tests/support/adapters/test_doct_dict.py +0 -21
  274. tests/support/inspection/fakes/fake_reflect_dependencies.py +0 -25
  275. tests/support/inspection/test_reflect_dependencies.py +0 -67
  276. tests/support/parsers/fakes/fake_custom_error.py +0 -27
  277. tests/support/path/test_resolver.py +0 -33
  278. tests/support/standard/test_std.py +0 -62
  279. /orionis/{console.py → clinstall.py} +0 -0
  280. /orionis/luminate/{config → _container}/__init__.py +0 -0
  281. /orionis/luminate/{container → _container}/exception.py +0 -0
  282. /orionis/luminate/{container → _container}/lifetimes.py +0 -0
  283. /orionis/luminate/{config/app/entities → _contracts}/__init__.py +0 -0
  284. /orionis/luminate/{config/app/enums → _contracts/config}/__init__.py +0 -0
  285. /orionis/luminate/{config/contracts → _contracts/config}/config.py +0 -0
  286. /orionis/luminate/{config/auth/entities → _contracts/console}/__init__.py +0 -0
  287. /orionis/luminate/{config/cache/entities → _contracts/console/base}/__init__.py +0 -0
  288. /orionis/luminate/{contracts → _contracts}/console/base/command.py +0 -0
  289. /orionis/luminate/{contracts → _contracts}/console/command_filter.py +0 -0
  290. /orionis/luminate/{contracts → _contracts}/console/kernel.py +0 -0
  291. /orionis/luminate/{config/cache/enums → _contracts/console/output}/__init__.py +0 -0
  292. /orionis/luminate/{contracts → _contracts}/console/output/console.py +0 -0
  293. /orionis/luminate/{contracts → _contracts}/console/output/executor.py +0 -0
  294. /orionis/luminate/{contracts → _contracts}/console/output/progress_bar.py +0 -0
  295. /orionis/luminate/{contracts → _contracts}/console/parser.py +0 -0
  296. /orionis/luminate/{contracts → _contracts}/container/container.py +0 -0
  297. /orionis/luminate/{contracts → _contracts}/container/container_integrity.py +0 -0
  298. /orionis/luminate/{config/contracts → _contracts/facades}/__init__.py +0 -0
  299. /orionis/luminate/{config/exceptions → _contracts/facades/commands}/__init__.py +0 -0
  300. /orionis/luminate/{contracts → _contracts}/facades/commands/commands_facade.py +0 -0
  301. /orionis/luminate/{container → _contracts/facades/config}/__init__.py +0 -0
  302. /orionis/luminate/{contracts → _contracts}/facades/config/config_facade.py +0 -0
  303. /orionis/luminate/{contracts → _contracts/facades/environment}/__init__.py +0 -0
  304. /orionis/luminate/{contracts → _contracts}/facades/environment/environment_facade.py +0 -0
  305. /orionis/luminate/{contracts/config → _contracts/facades/files}/__init__.py +0 -0
  306. /orionis/luminate/{contracts → _contracts}/facades/files/path_facade.py +0 -0
  307. /orionis/luminate/{contracts/console → _contracts/facades/log}/__init__.py +0 -0
  308. /orionis/luminate/{contracts → _contracts}/facades/log/log_facade.py +0 -0
  309. /orionis/luminate/{contracts/console/base → _contracts/facades/tests}/__init__.py +0 -0
  310. /orionis/luminate/{contracts → _contracts}/facades/tests/tests_facade.py +0 -0
  311. /orionis/luminate/{contracts/console/output → _contracts/foundation}/__init__.py +0 -0
  312. /orionis/luminate/{contracts → _contracts}/foundation/bootstraper.py +0 -0
  313. /orionis/luminate/{contracts/facades → _contracts/foundation/config}/__init__.py +0 -0
  314. /orionis/luminate/{contracts → _contracts}/foundation/config/config_bootstrapper.py +0 -0
  315. /orionis/luminate/{contracts/facades/commands → _contracts/foundation/console}/__init__.py +0 -0
  316. /orionis/luminate/{contracts → _contracts}/foundation/console/command_bootstrapper.py +0 -0
  317. /orionis/luminate/{contracts/facades/config → _contracts/foundation/environment}/__init__.py +0 -0
  318. /orionis/luminate/{contracts → _contracts}/foundation/environment/environment_bootstrapper.py +0 -0
  319. /orionis/luminate/{contracts/facades/environment → _contracts/foundation/providers}/__init__.py +0 -0
  320. /orionis/luminate/{contracts/facades/files → _contracts/providers}/__init__.py +0 -0
  321. /orionis/luminate/{contracts/facades/log → _contracts/services}/__init__.py +0 -0
  322. /orionis/luminate/{contracts/facades/tests → _contracts/services/commands}/__init__.py +0 -0
  323. /orionis/luminate/{contracts → _contracts}/services/commands/reactor_commands_service.py +0 -0
  324. /orionis/luminate/{contracts → _contracts}/services/commands/schedule_service.py +0 -0
  325. /orionis/luminate/{contracts/foundation → _contracts/services/config}/__init__.py +0 -0
  326. /orionis/luminate/{contracts → _contracts}/services/config/config_service.py +0 -0
  327. /orionis/luminate/{contracts/foundation/config → _contracts/services/environment}/__init__.py +0 -0
  328. /orionis/luminate/{contracts → _contracts}/services/environment/environment_service.py +0 -0
  329. /orionis/luminate/{contracts/foundation/console → _contracts/services/files}/__init__.py +0 -0
  330. /orionis/luminate/{contracts → _contracts}/services/files/path_resolver_service.py +0 -0
  331. /orionis/luminate/{contracts/foundation/environment → _contracts/services/log}/__init__.py +0 -0
  332. /orionis/luminate/{contracts → _contracts}/services/log/log_service.py +0 -0
  333. /orionis/luminate/{contracts → _contracts}/support/exception_parse.py +0 -0
  334. /orionis/luminate/{contracts → _contracts}/support/reflection.py +0 -0
  335. /orionis/luminate/{contracts/foundation/providers → _facades}/__init__.py +0 -0
  336. /orionis/luminate/{contracts/providers → _facades/commands}/__init__.py +0 -0
  337. /orionis/luminate/{contracts/services → _facades/config}/__init__.py +0 -0
  338. /orionis/luminate/{contracts/services/commands → _facades/environment}/__init__.py +0 -0
  339. /orionis/luminate/{contracts/services/config → _facades/files}/__init__.py +0 -0
  340. /orionis/luminate/{contracts/services/environment → _facades/log}/__init__.py +0 -0
  341. /orionis/luminate/{contracts/services/files → _foundation}/__init__.py +0 -0
  342. /orionis/luminate/{contracts/services/log → _foundation/console}/__init__.py +0 -0
  343. /orionis/luminate/{facades → _foundation/environment}/__init__.py +0 -0
  344. /orionis/luminate/{facades/commands → _foundation/exceptions}/__init__.py +0 -0
  345. /orionis/luminate/{foundation → _foundation}/exceptions/exception_bootstrapper.py +0 -0
  346. /orionis/luminate/{foundation → _foundation}/exceptions/exception_providers.py +0 -0
  347. /orionis/luminate/{facades → _foundation/foundation}/config/__init__.py +0 -0
  348. /orionis/luminate/{facades/environment → _foundation/providers}/__init__.py +0 -0
  349. /orionis/luminate/{facades/files → _providers}/__init__.py +0 -0
  350. /orionis/luminate/{facades/log → _providers/commands}/__init__.py +0 -0
  351. /orionis/luminate/{foundation/console → _providers/config}/__init__.py +0 -0
  352. /orionis/luminate/{foundation → _providers}/environment/__init__.py +0 -0
  353. /orionis/luminate/{foundation/exceptions → _providers/files}/__init__.py +0 -0
  354. /orionis/luminate/{foundation/providers → _providers/log}/__init__.py +0 -0
  355. /orionis/luminate/{providers → _services}/__init__.py +0 -0
  356. /orionis/luminate/{providers → _services}/commands/__init__.py +0 -0
  357. /orionis/luminate/{providers → _services}/config/__init__.py +0 -0
  358. /orionis/luminate/{providers/environment → _services/log}/__init__.py +0 -0
  359. /orionis/luminate/{providers/files → foundation/config/app}/__init__.py +0 -0
  360. /orionis/luminate/{providers/log → foundation/config/app/entities}/__init__.py +0 -0
  361. /orionis/luminate/{services_ → foundation/config/app/enums}/__init__.py +0 -0
  362. /orionis/luminate/{config → foundation/config}/app/enums/ciphers.py +0 -0
  363. /orionis/luminate/{config → foundation/config}/app/enums/environments.py +0 -0
  364. /orionis/luminate/{services_/commands → foundation/config/auth}/__init__.py +0 -0
  365. /orionis/luminate/{services_/config → foundation/config/auth/entities}/__init__.py +0 -0
  366. /orionis/luminate/{services_/log → foundation/config/cache}/__init__.py +0 -0
  367. /orionis/luminate/{support/adapters → foundation/config/cache/entities}/__init__.py +0 -0
  368. /orionis/luminate/{support/asynchrony → foundation/config/cache/enums}/__init__.py +0 -0
  369. /orionis/luminate/{config → foundation/config}/cache/enums/drivers.py +0 -0
  370. /orionis/luminate/{support/asynchrony → foundation/config}/contracts/__init__.py +0 -0
  371. /orionis/luminate/{support/introspection/abstracts → foundation/config/cors}/__init__.py +0 -0
  372. /orionis/luminate/{support/introspection/abstracts → foundation/config/cors}/entities/__init__.py +0 -0
  373. /orionis/luminate/{support/introspection/dependencies/contracts → foundation/config/database}/__init__.py +0 -0
  374. /orionis/luminate/{support/introspection/dependencies → foundation/config/database}/entities/__init__.py +0 -0
  375. /orionis/luminate/{support/parsers → foundation/config/database/enums}/__init__.py +0 -0
  376. /orionis/luminate/{support/parsers/contracts → foundation/config/exceptions}/__init__.py +0 -0
  377. /orionis/luminate/{config/exceptions/integrity_exception.py → foundation/config/exceptions/integrity.py} +0 -0
  378. /orionis/luminate/{support/paths → foundation/config/filesystems}/__init__.py +0 -0
  379. /orionis/luminate/{support/paths/contracts → foundation/config/filesystems/entitites}/__init__.py +0 -0
  380. /orionis/luminate/{support/standard → foundation/config/logging}/__init__.py +0 -0
  381. /orionis/luminate/{support/standard/contracts → foundation/config/logging/entities}/__init__.py +0 -0
  382. /orionis/luminate/{test/core → foundation/config/logging/enums}/__init__.py +0 -0
  383. /orionis/luminate/{test/core/contracts → foundation/config/mail}/__init__.py +0 -0
  384. {tests/config → orionis/luminate/foundation/config/mail/entities}/__init__.py +0 -0
  385. {tests/support/adapters → orionis/luminate/foundation/config/queue}/__init__.py +0 -0
  386. {tests/support/adapters/fakes → orionis/luminate/foundation/config/queue/entities}/__init__.py +0 -0
  387. {tests/support/async_io → orionis/luminate/foundation/config/roots}/__init__.py +0 -0
  388. {tests/support/parsers → orionis/luminate/foundation/config/session}/__init__.py +0 -0
  389. {tests/support/parsers/fakes → orionis/luminate/foundation/config/session/entities}/__init__.py +0 -0
  390. {tests/support/path → orionis/luminate/foundation/config/session/enums}/__init__.py +0 -0
  391. {tests/support/standard → orionis/luminate/foundation/config/testing}/__init__.py +0 -0
  392. /orionis/luminate/{support → services}/parsers/contracts/exception_parser.py +0 -0
  393. /orionis/luminate/{support → services}/standard/contracts/std.py +0 -0
  394. /orionis/luminate/test/exceptions/{test_exception.py → test_failure_exception.py} +0 -0
  395. /orionis/luminate/test/{core → suites}/contracts/test_unit.py +0 -0
  396. {orionis-0.253.0.dist-info → orionis-0.265.0.dist-info/licenses}/LICENCE +0 -0
  397. {orionis-0.253.0.dist-info → orionis-0.265.0.dist-info}/top_level.txt +0 -0
@@ -1,9 +1,9 @@
1
- from dataclasses import dataclass, field
2
- from orionis.luminate.config.app.enums.ciphers import Cipher
3
- from orionis.luminate.config.app.enums.environments import Environments
4
- from orionis.luminate.config.exceptions.integrity_exception import OrionisIntegrityException
1
+ from dataclasses import asdict, dataclass, field
2
+ from orionis.luminate.foundation.config.app.enums.ciphers import Cipher
3
+ from orionis.luminate.foundation.config.app.enums.environments import Environments
4
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
5
5
  from orionis.luminate.services.environment.env import Env
6
- from orionis.luminate.services.workers.maximum_workers import MaximumWorkers
6
+ from orionis.luminate.services.system.workers import Workers
7
7
 
8
8
  @dataclass(unsafe_hash=True, kw_only=True)
9
9
  class App:
@@ -31,16 +31,14 @@ class App:
31
31
  default_factory=lambda: Env.get('APP_NAME', 'Orionis Application'),
32
32
  metadata={
33
33
  "description": "The name of the application. Defaults to 'Orionis Application'.",
34
- "required": True,
35
34
  "default": "Orionis Application"
36
35
  }
37
36
  )
38
37
 
39
- env: Environments = field(
38
+ env: str | Environments = field(
40
39
  default_factory=lambda: Env.get('APP_ENV', Environments.DEVELOPMENT),
41
40
  metadata={
42
41
  "description": "The environment in which the application is running. Defaults to 'DEVELOPMENT'.",
43
- "required": True,
44
42
  "default": "Environments.DEVELOPMENT"
45
43
  }
46
44
  )
@@ -49,7 +47,6 @@ class App:
49
47
  default_factory=lambda: Env.get('APP_DEBUG', True),
50
48
  metadata={
51
49
  "description": "Flag indicating whether debug mode is enabled. Defaults to False.",
52
- "required": True,
53
50
  "default": True
54
51
  }
55
52
  )
@@ -58,7 +55,6 @@ class App:
58
55
  default_factory=lambda: Env.get('APP_URL', 'http://127.0.0.1'),
59
56
  metadata={
60
57
  "description": "The base URL of the application. Defaults to 'http://127.0.0.1'.",
61
- "required": True,
62
58
  "default": "http://127.0.0.1"
63
59
  }
64
60
  )
@@ -67,17 +63,15 @@ class App:
67
63
  default_factory=lambda: Env.get('APP_PORT', 8000),
68
64
  metadata={
69
65
  "description": "The port on which the application will run. Defaults to 8000.",
70
- "required": True,
71
66
  "default": 8000
72
67
  }
73
68
  )
74
69
 
75
70
  workers: int = field(
76
- default_factory=lambda: Env.get('APP_WORKERS', MaximumWorkers().calculate()),
71
+ default_factory=lambda: Env.get('APP_WORKERS', Workers().calculate()),
77
72
  metadata={
78
73
  "description": "The number of worker processes to handle requests. Defaults to the maximum available workers.",
79
- "required": True,
80
- "default": "MaximumWorkers.calculate()"
74
+ "default": "Calculated by Workers()."
81
75
  }
82
76
  )
83
77
 
@@ -85,7 +79,6 @@ class App:
85
79
  default_factory=lambda: Env.get('APP_RELOAD', True),
86
80
  metadata={
87
81
  "description": "Flag indicating whether the application should reload on code changes. Defaults to True.",
88
- "required": True,
89
82
  "default": True
90
83
  }
91
84
  )
@@ -94,7 +87,6 @@ class App:
94
87
  default_factory=lambda: Env.get('APP_TIMEZONE', 'UTC'),
95
88
  metadata={
96
89
  "description": "The timezone of the application. Defaults to 'UTC'.",
97
- "required": True,
98
90
  "default": "UTC"
99
91
  }
100
92
  )
@@ -103,7 +95,6 @@ class App:
103
95
  default_factory=lambda: Env.get('APP_LOCALE', 'en'),
104
96
  metadata={
105
97
  "description": "The locale for the application. Defaults to 'en'.",
106
- "required": True,
107
98
  "default": "en"
108
99
  }
109
100
  )
@@ -112,16 +103,14 @@ class App:
112
103
  default_factory=lambda: Env.get('APP_FALLBACK_LOCALE', 'en'),
113
104
  metadata={
114
105
  "description": "The fallback locale for the application. Defaults to 'en'.",
115
- "required": True,
116
106
  "default": "en"
117
107
  }
118
108
  )
119
109
 
120
- cipher: str = field(
110
+ cipher: str | Cipher = field(
121
111
  default_factory=lambda: Env.get('APP_CIPHER', Cipher.AES_256_CBC),
122
112
  metadata={
123
113
  "description": "The cipher used for encryption. Defaults to 'AES_256_CBC'.",
124
- "required": True,
125
114
  "default": "Cipher.AES_256_CBC"
126
115
  }
127
116
  )
@@ -130,7 +119,6 @@ class App:
130
119
  default_factory=lambda: Env.get('APP_KEY'),
131
120
  metadata={
132
121
  "description": "The encryption key for the application. Defaults to None.",
133
- "required": False,
134
122
  "default": None
135
123
  }
136
124
  )
@@ -139,7 +127,6 @@ class App:
139
127
  default_factory=lambda: Env.get('APP_MAINTENANCE', '/maintenance'),
140
128
  metadata={
141
129
  "description": "The maintenance configuration for the application. Defaults to '/maintenance'.",
142
- "required": True,
143
130
  "default": "/maintenance"
144
131
  }
145
132
  )
@@ -151,18 +138,21 @@ class App:
151
138
  Ensures that all fields have the correct types and values, raising TypeError
152
139
  if any field is invalid. This helps catch configuration errors early.
153
140
  """
154
- if not isinstance(self.name, str) or not self.name.strip():
155
- raise OrionisIntegrityException("The 'name' attribute must be a non-empty string of type str.")
156
-
157
- if not isinstance(self.env, Environments):
158
- if isinstance(self.env, str):
159
- value = str(self.env).strip().upper()
160
- if value in Environments._member_names_:
161
- self.env = getattr(Environments, value)
162
- else:
163
- raise OrionisIntegrityException(f"Invalid environment value: {self.env}. Must be one of {Environments._member_names_}.")
141
+
142
+ # Validate `name` attribute
143
+ if not isinstance(self.name, (str, Environments)) or not self.name.strip():
144
+ raise OrionisIntegrityException("The 'name' attribute must be a non-empty string or an Environments instance.")
145
+
146
+ # Validate `env` attribute
147
+ options_env = Environments._member_names_
148
+ if isinstance(self.env, str):
149
+ _value = str(self.env).strip().upper()
150
+ if _value in options_env:
151
+ self.env = Environments[_value].value
164
152
  else:
165
- raise OrionisIntegrityException("The 'env' attribute must be of type Environments.")
153
+ raise OrionisIntegrityException(f"Invalid name value: {self.env}. Must be one of {str(options_env)}.")
154
+ elif isinstance(self.env, Environments):
155
+ self.env = self.env.value
166
156
 
167
157
  if not isinstance(self.debug, bool):
168
158
  raise OrionisIntegrityException("The 'debug' attribute must be a boolean.")
@@ -188,18 +178,29 @@ class App:
188
178
  if not isinstance(self.fallback_locale, str) or not self.fallback_locale.strip():
189
179
  raise OrionisIntegrityException("The 'fallback_locale' attribute must be a non-empty string.")
190
180
 
191
- if not isinstance(self.cipher, Cipher):
192
- if isinstance(self.cipher, str):
193
- value = str(self.cipher).strip().upper()
194
- if value in Cipher._member_names_:
195
- self.cipher = getattr(Cipher, value)
196
- else:
197
- raise OrionisIntegrityException(f"Invalid cipher value: {self.cipher}. Must be one of {Cipher._member_names_}.")
181
+ options_cipher = Cipher._member_names_
182
+ if not isinstance(self.cipher, (Cipher, str)):
183
+ raise OrionisIntegrityException("The 'cipher' attribute must be a Cipher or a string.")
184
+
185
+ if isinstance(self.cipher, str):
186
+ _value = str(self.cipher).strip().upper().replace("-", "_")
187
+ if _value in options_cipher:
188
+ self.cipher = Cipher[_value].value
198
189
  else:
199
- raise OrionisIntegrityException("The 'cipher' attribute must be of type Cipher.")
190
+ raise OrionisIntegrityException(f"Invalid cipher value: {self.cipher}. Must be one of {options_cipher}.")
191
+ elif isinstance(self.cipher, Cipher):
192
+ self.cipher = self.cipher.value
200
193
 
201
194
  if self.key is not None and not isinstance(self.key, str):
202
195
  raise OrionisIntegrityException("The 'key' attribute must be a string or None.")
203
196
 
204
- if not isinstance(self.maintenance, str):
205
- raise OrionisIntegrityException("The 'maintenance' attribute must be a string (A Route).")
197
+ if not isinstance(self.maintenance, str) or not self.name.strip() or not self.maintenance.startswith('/'):
198
+ raise OrionisIntegrityException("The 'maintenance' attribute must be a non-empty string representing a valid route (e.g., '/maintenance').")
199
+
200
+ def toDict(self) -> dict:
201
+ """
202
+ Convert the object to a dictionary representation.
203
+ Returns:
204
+ dict: A dictionary representation of the Dataclass object.
205
+ """
206
+ return asdict(self)
@@ -1,4 +1,4 @@
1
- from dataclasses import dataclass
1
+ from dataclasses import asdict, dataclass
2
2
 
3
3
  @dataclass(unsafe_hash=True, kw_only=True)
4
4
  class Auth:
@@ -9,3 +9,11 @@ class Auth:
9
9
  Extend this class to implement authentication logic such as user credentials, token management, or session handling.
10
10
  """
11
11
  pass
12
+
13
+ def toDict(self) -> dict:
14
+ """
15
+ Convert the object to a dictionary representation.
16
+ Returns:
17
+ dict: A dictionary representation of the Dataclass object.
18
+ """
19
+ return asdict(self)
@@ -0,0 +1,74 @@
1
+ from dataclasses import asdict, dataclass, field
2
+ from orionis.luminate.foundation.config.cache.entities.stores import Stores
3
+ from orionis.luminate.foundation.config.cache.enums.drivers import Drivers
4
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
5
+ from orionis.luminate.services.environment.env import Env
6
+
7
+ @dataclass(unsafe_hash=True, kw_only=True)
8
+ class Cache:
9
+ """
10
+ Represents the cache configuration for the application.
11
+ Attributes:
12
+ default (Drivers | str): The default cache storage type. Can be a member of the Drivers enum or a string
13
+ (e.g., 'memory', 'file'). Defaults to the value of the 'CACHE_STORE' environment variable or Drivers.MEMORY.
14
+ stores (Stores): The configuration for available cache stores. Defaults to a Stores instance with a file store
15
+ at the path specified by the 'CACHE_PATH' environment variable or "storage/framework/cache/data".
16
+ Methods:
17
+ __post_init__():
18
+ - Validates that 'default' is either a Drivers enum member or a string.
19
+ - Converts 'default' from string to Drivers enum if necessary.
20
+ - Validates that 'stores' is an instance of Stores.
21
+ """
22
+
23
+ default: Drivers | str = field(
24
+ default_factory=lambda:Env.get("CACHE_STORE", Drivers.MEMORY),
25
+ metadata={
26
+ "description": "The default cache storage type. Can be a member of the Drivers enum or a string (e.g., 'memory', 'file').",
27
+ "default": "Drivers.MEMORY",
28
+ },
29
+ )
30
+
31
+ stores: Stores = field(
32
+ default_factory=Stores,
33
+ metadata={
34
+ "description": "The configuration for available cache stores. Defaults to a file store at the specified path.",
35
+ "default": "file=File(path='storage/framework/cache/data')",
36
+ }
37
+ )
38
+
39
+ def __post_init__(self):
40
+ """
41
+ Post-initialization method for validating and normalizing cache configuration.
42
+ Ensures that:
43
+ - The `default` attribute is either an instance of `Drivers` or a string representing a valid driver name.
44
+ - If `default` is a string, it is converted to the corresponding `Drivers` enum member after validation.
45
+ - The `stores` attribute is an instance of `Stores`.
46
+ Raises:
47
+ OrionisIntegrityException: If `default` is not a valid driver or if `stores` is not an instance of `Stores`.
48
+ """
49
+
50
+ # Validate the 'default' attribute to ensure it is either a Drivers enum member or a string
51
+ if not isinstance(self.default, (Drivers, str)):
52
+ raise OrionisIntegrityException("The default cache store must be an instance of Drivers or a string.")
53
+
54
+ options_drivers = Drivers._member_names_
55
+ if isinstance(self.default, str):
56
+ _value = self.default.upper().strip()
57
+ if _value not in options_drivers:
58
+ raise OrionisIntegrityException(f"Invalid cache driver: {self.default}. Must be one of {str(options_drivers)}.")
59
+ else:
60
+ self.default = Drivers[_value].value
61
+ else:
62
+ self.default = self.default.value
63
+
64
+ # Validate the 'stores' attribute to ensure it is an instance of Stores
65
+ if not isinstance(self.stores, Stores):
66
+ raise OrionisIntegrityException("The stores must be an instance of Stores.")
67
+
68
+ def toDict(self) -> dict:
69
+ """
70
+ Convert the object to a dictionary representation.
71
+ Returns:
72
+ dict: A dictionary representation of the Dataclass object.
73
+ """
74
+ return asdict(self)
@@ -0,0 +1,46 @@
1
+ from dataclasses import asdict, dataclass, field
2
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
3
+
4
+ @dataclass(unsafe_hash=True, kw_only=True)
5
+ class File:
6
+ """
7
+ Represents the configuration entity for a file-based cache store.
8
+ Attributes:
9
+ path (str): The file system path where cache data will be stored. By default, this is set to
10
+ 'storage/framework/cache/data' using a relative path resolver.
11
+ Methods:
12
+ __post_init__():
13
+ Validates the 'path' attribute after dataclass initialization. Raises an
14
+ OrionisIntegrityException if 'path' is empty or not a string, ensuring correct cache setup.
15
+ """
16
+
17
+ path: str = field(
18
+ default='storage/framework/cache/data',
19
+ metadata={
20
+ "description": "The configuration for available cache stores. Defaults to a file store at the specified path.",
21
+ "default": "storage/framework/cache/data"
22
+ },
23
+ )
24
+
25
+ def __post_init__(self):
26
+ """
27
+ Validates the 'path' attribute after dataclass initialization.
28
+
29
+ Raises:
30
+ OrionisIntegrityException: If 'path' is empty or not a string, indicating a misconfiguration
31
+ in the file cache setup.
32
+ """
33
+
34
+ # Validate the 'path' attribute to ensure it is not empty and is a string
35
+ if not self.path:
36
+ raise OrionisIntegrityException("File cache configuration error: 'path' cannot be empty. Please provide a valid file path.")
37
+ if not isinstance(self.path, str):
38
+ raise OrionisIntegrityException(f"File cache configuration error: 'path' must be a string, got {type(self.path).__name__}.")
39
+
40
+ def toDict(self) -> dict:
41
+ """
42
+ Convert the object to a dictionary representation.
43
+ Returns:
44
+ dict: A dictionary representation of the Dataclass object.
45
+ """
46
+ return asdict(self)
@@ -0,0 +1,46 @@
1
+ from dataclasses import asdict, dataclass, field
2
+ from orionis.luminate.foundation.config.cache.entities.file import File
3
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
4
+
5
+ @dataclass(unsafe_hash=True, kw_only=True)
6
+ class Stores:
7
+ """
8
+ Represents a collection of cache storage backends for the application.
9
+ Attributes:
10
+ file (File): An instance of `File` representing file-based cache storage.
11
+ The default path is set to 'storage/framework/cache/data', resolved
12
+ relative to the application's root directory.
13
+ Methods:
14
+ __post_init__():
15
+ Ensures that the 'file' attribute is properly initialized as an instance of `File`.
16
+ Raises a TypeError if the type check fails.
17
+ """
18
+
19
+ file: File = field(
20
+ default_factory=File,
21
+ metadata={
22
+ "description": "An instance of `File` representing file-based cache storage.",
23
+ "default": "File(path='storage/framework/cache/data')",
24
+ },
25
+ )
26
+
27
+ def __post_init__(self):
28
+ """
29
+ Post-initialization method to validate the 'file' attribute.
30
+
31
+ Ensures that the 'file' attribute is an instance of the File class.
32
+ Raises:
33
+ OrionisIntegrityException: If 'file' is not an instance of File, with a descriptive error message.
34
+ """
35
+ if not isinstance(self.file, File):
36
+ raise OrionisIntegrityException(
37
+ f"The 'file' attribute must be an instance of File, but got {type(self.file).__name__}."
38
+ )
39
+
40
+ def toDict(self) -> dict:
41
+ """
42
+ Convert the object to a dictionary representation.
43
+ Returns:
44
+ dict: A dictionary representation of the Dataclass object.
45
+ """
46
+ return asdict(self)
@@ -1,14 +1,4 @@
1
- from abc import ABC
2
- from dataclasses import dataclass
3
-
4
- @dataclass
5
- class EmptyData:
6
- """
7
- A placeholder dataclass that can be used as a default or empty configuration.
8
- This class doesn't have any fields or data, but serves as a default value
9
- for the 'config' attribute in classes implementing IConfig.
10
- """
11
- pass
1
+ from abc import ABC, abstractmethod
12
2
 
13
3
  class IConfig(ABC):
14
4
  """
@@ -24,4 +14,10 @@ class IConfig(ABC):
24
14
  A dataclass instance representing the configuration.
25
15
  """
26
16
 
27
- config = EmptyData()
17
+ @property
18
+ @abstractmethod
19
+ def config(self):
20
+ """
21
+ Should return a dataclass instance representing the configuration.
22
+ """
23
+ pass
@@ -0,0 +1,129 @@
1
+ from dataclasses import dataclass, field, asdict
2
+ from typing import List, Optional
3
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
4
+
5
+ @dataclass(unsafe_hash=True, kw_only=True)
6
+ class Cors:
7
+ """
8
+ CORS configuration compatible with Starlette CORSMiddleware.
9
+ Attributes:
10
+ allow_origins (List[str]): List of allowed origins. Use ["*"] to allow all origins.
11
+ allow_origin_regex (Optional[str]): Regular expression to match allowed origins.
12
+ allow_methods (List[str]): List of allowed HTTP methods. Use ["*"] to allow all methods.
13
+ allow_headers (List[str]): List of allowed HTTP headers. Use ["*"] to allow all headers.
14
+ expose_headers (List[str]): List of headers exposed to the browser.
15
+ allow_credentials (bool): Whether to allow credentials (cookies, authorization headers, etc.).
16
+ max_age (Optional[int]): Maximum time (in seconds) for the preflight request to be cached.
17
+ Methods:
18
+ __post_init__():
19
+ Validates the types of the configuration attributes after initialization.
20
+ Raises:
21
+ OrionisIntegrityException: If any attribute does not match the expected type.
22
+ """
23
+
24
+ allow_origins: List[str] = field(
25
+ default_factory=lambda: ["*"],
26
+ metadata={
27
+ "description": "List of allowed origins. Use [\"*\"] to allow all origins.",
28
+ "deafault": ["*"],
29
+ },
30
+ )
31
+
32
+ allow_origin_regex: Optional[str] = field(
33
+ default=None,
34
+ metadata={
35
+ "description": "Regular expression pattern to match allowed origins.",
36
+ "default": None,
37
+ },
38
+ )
39
+
40
+ allow_methods: List[str] = field(
41
+ default_factory=lambda: ["*"],
42
+ metadata={
43
+ "description": "List of allowed HTTP methods. Use [\"*\"] to allow all methods.",
44
+ "default": ["*"],
45
+ },
46
+ )
47
+
48
+ allow_headers: List[str] = field(
49
+ default_factory=lambda: ["*"],
50
+ metadata={
51
+ "description": "List of allowed HTTP headers. Use [\"*\"] to allow all headers.",
52
+ "default": ["*"],
53
+ },
54
+ )
55
+
56
+ expose_headers: List[str] = field(
57
+ default_factory=lambda:[],
58
+ metadata={
59
+ "description": "List of headers exposed to the browser.",
60
+ "default": [],
61
+ },
62
+ )
63
+
64
+ allow_credentials: bool = field(
65
+ default=False,
66
+ metadata={
67
+ "description": "Whether to allow credentials (cookies, authorization headers, etc.).",
68
+ "default": False,
69
+ },
70
+ )
71
+
72
+ max_age: Optional[int] = field(
73
+ default=600,
74
+ metadata={
75
+ "description": "Maximum time (in seconds) for preflight request caching.",
76
+ "default": 600,
77
+ },
78
+ )
79
+
80
+ def __post_init__(self):
81
+ """
82
+ Validates the types of CORS configuration attributes after initialization.
83
+
84
+ Raises:
85
+ OrionisIntegrityException: If any of the following conditions are not met:
86
+ - allow_origins is not a list of strings.
87
+ - allow_origin_regex is not a string or None.
88
+ - allow_methods is not a list of strings.
89
+ - allow_headers is not a list of strings.
90
+ - expose_headers is not a list of strings.
91
+ - allow_credentials is not a boolean.
92
+ - max_age is not an integer or None.
93
+ """
94
+ if not isinstance(self.allow_origins, list):
95
+ raise OrionisIntegrityException(
96
+ "Invalid type for 'allow_origins': expected a list of strings."
97
+ )
98
+ if self.allow_origin_regex is not None and not isinstance(self.allow_origin_regex, str):
99
+ raise OrionisIntegrityException(
100
+ "Invalid type for 'allow_origin_regex': expected a string or None."
101
+ )
102
+ if not isinstance(self.allow_methods, list):
103
+ raise OrionisIntegrityException(
104
+ "Invalid type for 'allow_methods': expected a list of strings."
105
+ )
106
+ if not isinstance(self.allow_headers, list):
107
+ raise OrionisIntegrityException(
108
+ "Invalid type for 'allow_headers': expected a list of strings."
109
+ )
110
+ if not isinstance(self.expose_headers, list):
111
+ raise OrionisIntegrityException(
112
+ "Invalid type for 'expose_headers': expected a list of strings."
113
+ )
114
+ if not isinstance(self.allow_credentials, bool):
115
+ raise OrionisIntegrityException(
116
+ "Invalid type for 'allow_credentials': expected a boolean."
117
+ )
118
+ if self.max_age is not None and not isinstance(self.max_age, int):
119
+ raise OrionisIntegrityException(
120
+ "Invalid type for 'max_age': expected an integer or None."
121
+ )
122
+
123
+ def toDict(self) -> dict:
124
+ """
125
+ Convert the object to a dictionary representation.
126
+ Returns:
127
+ dict: A dictionary representation of the Dataclass object.
128
+ """
129
+ return asdict(self)
@@ -0,0 +1,89 @@
1
+ from dataclasses import asdict, dataclass, field
2
+ from orionis.luminate.foundation.config.database.entities.mysql import MySQL
3
+ from orionis.luminate.foundation.config.database.entities.oracle import Oracle
4
+ from orionis.luminate.foundation.config.database.entities.pgsql import PGSQL
5
+ from orionis.luminate.foundation.config.database.entities.sqlite import SQLite
6
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
7
+
8
+ @dataclass(unsafe_hash=True, kw_only=True)
9
+ class Connections:
10
+ """
11
+ Data class to represent all database connections used by the application.
12
+
13
+ Attributes
14
+ ----------
15
+ sqlite : Sqlite
16
+ Configuration for the SQLite database connection.
17
+ mysql : MySQL
18
+ Configuration for the MySQL database connection.
19
+ pgsql : Pgsql
20
+ Configuration for the PostgreSQL database connection.
21
+ oracle : Oracle
22
+ Configuration for the Oracle database connection.
23
+ """
24
+ sqlite: SQLite = field(
25
+ default_factory=SQLite,
26
+ metadata={
27
+ "description": "SQLite database connection configuration",
28
+ "default": "SQLite()"
29
+ }
30
+ )
31
+
32
+ mysql: MySQL = field(
33
+ default_factory=MySQL,
34
+ metadata={
35
+ "description": "MySQL database connection configuration",
36
+ "default": "MySQL()"
37
+ }
38
+ )
39
+
40
+ pgsql: PGSQL = field(
41
+ default_factory=PGSQL,
42
+ metadata={
43
+ "description": "PostgreSQL database connection configuration",
44
+ "default": "PGSQL()"
45
+ }
46
+ )
47
+
48
+ oracle: Oracle = field(
49
+ default_factory=Oracle,
50
+ metadata={
51
+ "description": "Oracle database connection configuration",
52
+ "default": "Oracle()"
53
+ }
54
+ )
55
+
56
+ def __post_init__(self):
57
+ """
58
+ Post-initialization method to validate the types of database connection attributes.
59
+ Ensures that the attributes `sqlite`, `mysql`, `pgsql`, and `oracle` are instances of their respective classes.
60
+ Raises:
61
+ OrionisIntegrityException: If any attribute is not an instance of its expected class.
62
+ """
63
+ if not isinstance(self.sqlite, SQLite):
64
+ raise OrionisIntegrityException(
65
+ f"Invalid type for 'sqlite': expected 'Sqlite', got '{type(self.sqlite).__name__}'."
66
+ )
67
+
68
+ if not isinstance(self.mysql, MySQL):
69
+ raise OrionisIntegrityException(
70
+ f"Invalid type for 'mysql': expected 'Mysql', got '{type(self.mysql).__name__}'."
71
+ )
72
+
73
+ if not isinstance(self.pgsql, PGSQL):
74
+ raise OrionisIntegrityException(
75
+ f"Invalid type for 'pgsql': expected 'Pgsql', got '{type(self.pgsql).__name__}'."
76
+ )
77
+
78
+ if not isinstance(self.oracle, Oracle):
79
+ raise OrionisIntegrityException(
80
+ f"Invalid type for 'oracle': expected 'Oracle', got '{type(self.oracle).__name__}'."
81
+ )
82
+
83
+ def toDict(self) -> dict:
84
+ """
85
+ Convert the object to a dictionary representation.
86
+ Returns:
87
+ dict: A dictionary representation of the Dataclass object.
88
+ """
89
+ return asdict(self)