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.
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.266.0.dist-info}/METADATA +19 -3
  159. orionis-0.266.0.dist-info/RECORD +440 -0
  160. {orionis-0.253.0.dist-info → orionis-0.266.0.dist-info}/WHEEL +1 -1
  161. orionis-0.266.0.dist-info/entry_points.txt +2 -0
  162. orionis-0.266.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.266.0.dist-info/licenses}/LICENCE +0 -0
  397. {orionis-0.253.0.dist-info → orionis-0.266.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,114 @@
1
+ from orionis.luminate.foundation.config.filesystems.entitites.aws import S3
2
+ from orionis.luminate.foundation.config.filesystems.entitites.disks import Disks
3
+ from orionis.luminate.foundation.config.filesystems.entitites.local import Local
4
+ from orionis.luminate.foundation.config.filesystems.entitites.public import Public
5
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
6
+ from orionis.unittesting import TestCase
7
+
8
+ class TestConfigDisks(TestCase):
9
+ """
10
+ Test cases for the Disks filesystem configuration class.
11
+ """
12
+
13
+ async def testDefaultValues(self):
14
+ """
15
+ Test that Disks instance is created with correct default values.
16
+ Verifies all default disk configurations are properly initialized.
17
+ """
18
+ disks = Disks()
19
+ self.assertIsInstance(disks.local, Local)
20
+ self.assertIsInstance(disks.public, Public)
21
+ self.assertIsInstance(disks.aws, S3)
22
+
23
+ async def testLocalTypeValidation(self):
24
+ """
25
+ Test local attribute type validation.
26
+ Verifies that only Local instances are accepted for local attribute.
27
+ """
28
+ with self.assertRaises(OrionisIntegrityException):
29
+ Disks(local="not_a_local_instance")
30
+ with self.assertRaises(OrionisIntegrityException):
31
+ Disks(local=123)
32
+ with self.assertRaises(OrionisIntegrityException):
33
+ Disks(local=None)
34
+
35
+ async def testPublicTypeValidation(self):
36
+ """
37
+ Test public attribute type validation.
38
+ Verifies that only Public instances are accepted for public attribute.
39
+ """
40
+ with self.assertRaises(OrionisIntegrityException):
41
+ Disks(public="not_a_public_instance")
42
+ with self.assertRaises(OrionisIntegrityException):
43
+ Disks(public=123)
44
+ with self.assertRaises(OrionisIntegrityException):
45
+ Disks(public=None)
46
+
47
+ async def testAwsTypeValidation(self):
48
+ """
49
+ Test aws attribute type validation.
50
+ Verifies that only S3 instances are accepted for aws attribute.
51
+ """
52
+ with self.assertRaises(OrionisIntegrityException):
53
+ Disks(aws="not_an_s3_instance")
54
+ with self.assertRaises(OrionisIntegrityException):
55
+ Disks(aws=123)
56
+ with self.assertRaises(OrionisIntegrityException):
57
+ Disks(aws=None)
58
+
59
+ async def testCustomDiskConfigurations(self):
60
+ """
61
+ Test that custom disk configurations are properly stored and validated.
62
+ Verifies custom disk configurations are correctly handled.
63
+ """
64
+ custom_local = Local(path="custom/local/path")
65
+ custom_public = Public(path="custom/public/path", url="assets")
66
+ custom_aws = S3(bucket="custom-bucket", region="eu-west-1")
67
+
68
+ disks = Disks(
69
+ local=custom_local,
70
+ public=custom_public,
71
+ aws=custom_aws
72
+ )
73
+
74
+ self.assertEqual(disks.local.path, "custom/local/path")
75
+ self.assertEqual(disks.public.path, "custom/public/path")
76
+ self.assertEqual(disks.public.url, "assets")
77
+ self.assertEqual(disks.aws.bucket, "custom-bucket")
78
+ self.assertEqual(disks.aws.region, "eu-west-1")
79
+
80
+ async def testToDictMethod(self):
81
+ """
82
+ Test that toDict returns proper dictionary representation.
83
+ Verifies all disk configurations are correctly included in dictionary.
84
+ """
85
+ disks = Disks()
86
+ disks_dict = disks.toDict()
87
+
88
+ self.assertIsInstance(disks_dict, dict)
89
+ self.assertIsInstance(disks_dict['local'], dict)
90
+ self.assertIsInstance(disks_dict['public'], dict)
91
+ self.assertIsInstance(disks_dict['aws'], dict)
92
+
93
+ async def testHashability(self):
94
+ """
95
+ Test that Disks maintains hashability due to unsafe_hash=True.
96
+ Verifies that Disks instances can be used in sets and as dictionary keys.
97
+ """
98
+ disks1 = Disks()
99
+ disks2 = Disks()
100
+ disks_set = {disks1, disks2}
101
+
102
+ self.assertEqual(len(disks_set), 1)
103
+
104
+ custom_disks = Disks(local=Local(path="custom/path"))
105
+ disks_set.add(custom_disks)
106
+ self.assertEqual(len(disks_set), 2)
107
+
108
+ async def testKwOnlyInitialization(self):
109
+ """
110
+ Test that Disks enforces keyword-only initialization.
111
+ Verifies that positional arguments are not allowed for initialization.
112
+ """
113
+ with self.assertRaises(TypeError):
114
+ Disks(Local(), Public(), S3())
@@ -0,0 +1,95 @@
1
+ from orionis.luminate.foundation.config.filesystems.entitites.local import Local
2
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
3
+ from orionis.unittesting import TestCase
4
+
5
+ class TestConfigLocal(TestCase):
6
+ """
7
+ Test cases for the Local storage configuration class.
8
+ """
9
+
10
+ async def testDefaultPath(self):
11
+ """
12
+ Test that Local instance is created with correct default path.
13
+ Verifies the default path matches the expected value from class definition.
14
+ """
15
+ local = Local()
16
+ self.assertEqual(local.path, "storage/app/private")
17
+
18
+ async def testCustomPath(self):
19
+ """
20
+ Test that custom path can be set during initialization.
21
+ Verifies the path attribute accepts and stores valid custom paths.
22
+ """
23
+ custom_path = "custom/storage/path"
24
+ local = Local(path=custom_path)
25
+ self.assertEqual(local.path, custom_path)
26
+
27
+ async def testEmptyPathValidation(self):
28
+ """
29
+ Test that empty paths are rejected.
30
+ Verifies that an empty path raises OrionisIntegrityException.
31
+ """
32
+ with self.assertRaises(OrionisIntegrityException):
33
+ Local(path="")
34
+
35
+ async def testPathTypeValidation(self):
36
+ """
37
+ Test that non-string paths are rejected.
38
+ Verifies that non-string path values raise OrionisIntegrityException.
39
+ """
40
+ with self.assertRaises(OrionisIntegrityException):
41
+ Local(path=123)
42
+ with self.assertRaises(OrionisIntegrityException):
43
+ Local(path=None)
44
+ with self.assertRaises(OrionisIntegrityException):
45
+ Local(path=[])
46
+
47
+ async def testToDictMethod(self):
48
+ """
49
+ Test that toDict returns proper dictionary representation.
50
+ Verifies the returned dictionary contains the expected path value.
51
+ """
52
+ local = Local()
53
+ config_dict = local.toDict()
54
+ self.assertIsInstance(config_dict, dict)
55
+ self.assertEqual(config_dict['path'], "storage/app/private")
56
+
57
+ async def testCustomPathToDict(self):
58
+ """
59
+ Test that custom paths are properly included in dictionary representation.
60
+ Verifies toDict() includes custom path values when specified.
61
+ """
62
+ custom_path = "another/storage/location"
63
+ local = Local(path=custom_path)
64
+ config_dict = local.toDict()
65
+ self.assertEqual(config_dict['path'], custom_path)
66
+
67
+ async def testWhitespacePathHandling(self):
68
+ """
69
+ Test that paths with whitespace are accepted but not automatically trimmed.
70
+ Verifies the validation allows paths containing whitespace characters.
71
+ """
72
+ spaced_path = " storage/with/space "
73
+ local = Local(path=spaced_path)
74
+ self.assertEqual(local.path, spaced_path)
75
+
76
+ async def testHashability(self):
77
+ """
78
+ Test that Local maintains hashability due to unsafe_hash=True.
79
+ Verifies that Local instances can be used in sets and as dictionary keys.
80
+ """
81
+ local1 = Local()
82
+ local2 = Local()
83
+ local_set = {local1, local2}
84
+ self.assertEqual(len(local_set), 1)
85
+ custom_local = Local(path="custom/path")
86
+ local_set.add(custom_local)
87
+ self.assertEqual(len(local_set), 2)
88
+
89
+ async def testKwOnlyInitialization(self):
90
+ """
91
+ Test that Local enforces keyword-only initialization.
92
+ Verifies that positional arguments are not allowed for initialization.
93
+ """
94
+ with self.assertRaises(TypeError):
95
+ Local("storage/path")
@@ -0,0 +1,120 @@
1
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
2
+ from orionis.luminate.foundation.config.filesystems.entitites.public import Public
3
+ from orionis.unittesting import TestCase
4
+
5
+ class TestConfigPublic(TestCase):
6
+ """
7
+ Test cases for the Public storage configuration class.
8
+ """
9
+
10
+ async def testDefaultValues(self):
11
+ """
12
+ Test that Public instance is created with correct default values.
13
+ Verifies both default path and url match expected values from class definition.
14
+ """
15
+ public = Public()
16
+ self.assertEqual(public.path, "storage/app/public")
17
+ self.assertEqual(public.url, "static")
18
+
19
+ async def testCustomValues(self):
20
+ """
21
+ Test that custom path and url can be set during initialization.
22
+ Verifies both attributes accept and store valid custom values.
23
+ """
24
+ custom_path = "custom/public/path"
25
+ custom_url = "assets"
26
+ public = Public(path=custom_path, url=custom_url)
27
+ self.assertEqual(public.path, custom_path)
28
+ self.assertEqual(public.url, custom_url)
29
+
30
+ async def testEmptyPathValidation(self):
31
+ """
32
+ Test that empty paths are rejected.
33
+ Verifies that an empty path raises OrionisIntegrityException.
34
+ """
35
+ with self.assertRaises(OrionisIntegrityException):
36
+ Public(path="")
37
+
38
+ async def testEmptyUrlValidation(self):
39
+ """
40
+ Test that empty URLs are rejected.
41
+ Verifies that an empty url raises OrionisIntegrityException.
42
+ """
43
+ with self.assertRaises(OrionisIntegrityException):
44
+ Public(url="")
45
+
46
+ async def testTypeValidation(self):
47
+ """
48
+ Test that non-string values are rejected for both attributes.
49
+ Verifies that non-string values raise OrionisIntegrityException.
50
+ """
51
+ # Test path validation
52
+ with self.assertRaises(OrionisIntegrityException):
53
+ Public(path=123)
54
+ with self.assertRaises(OrionisIntegrityException):
55
+ Public(path=None)
56
+
57
+ # Test url validation
58
+ with self.assertRaises(OrionisIntegrityException):
59
+ Public(url=123)
60
+ with self.assertRaises(OrionisIntegrityException):
61
+ Public(url=None)
62
+
63
+ async def testToDictMethod(self):
64
+ """
65
+ Test that toDict returns proper dictionary representation.
66
+ Verifies the returned dictionary contains both default values.
67
+ """
68
+ public = Public()
69
+ config_dict = public.toDict()
70
+
71
+ self.assertIsInstance(config_dict, dict)
72
+ self.assertEqual(config_dict['path'], "storage/app/public")
73
+ self.assertEqual(config_dict['url'], "static")
74
+
75
+ async def testCustomValuesToDict(self):
76
+ """
77
+ Test that custom values are properly included in dictionary representation.
78
+ Verifies toDict() includes custom values when specified.
79
+ """
80
+ custom_path = "public/assets"
81
+ custom_url = "cdn"
82
+ public = Public(path=custom_path, url=custom_url)
83
+ config_dict = public.toDict()
84
+
85
+ self.assertEqual(config_dict['path'], custom_path)
86
+ self.assertEqual(config_dict['url'], custom_url)
87
+
88
+ async def testWhitespaceHandling(self):
89
+ """
90
+ Test that values with whitespace are accepted but not automatically trimmed.
91
+ Verifies the validation allows values containing whitespace characters.
92
+ """
93
+ spaced_path = " public/storage "
94
+ spaced_url = " static/files "
95
+ public = Public(path=spaced_path, url=spaced_url)
96
+ self.assertEqual(public.path, spaced_path)
97
+ self.assertEqual(public.url, spaced_url)
98
+
99
+ async def testHashability(self):
100
+ """
101
+ Test that Public maintains hashability due to unsafe_hash=True.
102
+ Verifies that Public instances can be used in sets and as dictionary keys.
103
+ """
104
+ public1 = Public()
105
+ public2 = Public()
106
+ public_set = {public1, public2}
107
+
108
+ self.assertEqual(len(public_set), 1)
109
+
110
+ custom_public = Public(path="custom/public", url="custom-url")
111
+ public_set.add(custom_public)
112
+ self.assertEqual(len(public_set), 2)
113
+
114
+ async def testKwOnlyInitialization(self):
115
+ """
116
+ Test that Public enforces keyword-only initialization.
117
+ Verifies that positional arguments are not allowed for initialization.
118
+ """
119
+ with self.assertRaises(TypeError):
120
+ Public("storage/path", "static")
File without changes
@@ -0,0 +1,48 @@
1
+ from orionis.luminate.foundation.config.logging.entities.logging import Logging
2
+ from orionis.luminate.foundation.config.logging.entities.channels import Channels
3
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
4
+ from orionis.unittesting import TestCase
5
+
6
+ class TestLogging(TestCase):
7
+
8
+ async def testDefaultValues(self):
9
+ """
10
+ Test that the Logging instance is initialized with correct default values.
11
+ Verifies that a new Logging object has 'stack' as default channel
12
+ and an instance of Channels as channels attribute.
13
+ """
14
+ logging = Logging()
15
+ self.assertEqual(logging.default, "stack")
16
+ self.assertIsInstance(logging.channels, Channels)
17
+
18
+ async def testToDictMethod(self):
19
+ """
20
+ Test the toDict method returns a proper dictionary representation.
21
+ Checks that the toDict method converts the Logging instance
22
+ into a dictionary with all expected fields.
23
+ """
24
+ logging = Logging()
25
+ result = logging.toDict()
26
+ self.assertIsInstance(result, dict)
27
+ self.assertIn("default", result)
28
+ self.assertIn("channels", result)
29
+
30
+ async def testPostInitValidation(self):
31
+ """
32
+ Test the __post_init__ validation works correctly.
33
+ Verifies that invalid default channel or channels type
34
+ raises OrionisIntegrityException.
35
+ """
36
+ with self.assertRaises(OrionisIntegrityException):
37
+ Logging(default="invalid_channel")
38
+
39
+ with self.assertRaises(OrionisIntegrityException):
40
+ Logging(channels="invalid_channels")
41
+
42
+ async def testKwOnlyInitialization(self):
43
+ """
44
+ Test that Logging requires keyword arguments for initialization.
45
+ Verifies that the class enforces kw_only=True in its dataclass decorator.
46
+ """
47
+ with self.assertRaises(TypeError):
48
+ Logging("stack", Channels())
@@ -0,0 +1,157 @@
1
+ from orionis.luminate.foundation.config.logging.entities.channels import Channels
2
+ from orionis.luminate.foundation.config.logging.entities.stack import Stack
3
+ from orionis.luminate.foundation.config.logging.entities.hourly import Hourly
4
+ from orionis.luminate.foundation.config.logging.entities.daily import Daily
5
+ from orionis.luminate.foundation.config.logging.entities.weekly import Weekly
6
+ from orionis.luminate.foundation.config.logging.entities.monthly import Monthly
7
+ from orionis.luminate.foundation.config.logging.entities.chunked import Chunked
8
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
9
+ from orionis.unittesting import TestCase
10
+
11
+ class TestConfigChannels(TestCase):
12
+ """
13
+ Test cases for the Channels logging configuration class.
14
+ """
15
+
16
+ async def testDefaultValues(self):
17
+ """
18
+ Test that Channels instance is created with correct default values.
19
+ Verifies all channel configurations are properly initialized with their default values.
20
+ """
21
+ channels = Channels()
22
+ self.assertIsInstance(channels.stack, Stack)
23
+ self.assertIsInstance(channels.hourly, Hourly)
24
+ self.assertIsInstance(channels.daily, Daily)
25
+ self.assertIsInstance(channels.weekly, Weekly)
26
+ self.assertIsInstance(channels.monthly, Monthly)
27
+ self.assertIsInstance(channels.chunked, Chunked)
28
+
29
+ async def testStackValidation(self):
30
+ """
31
+ Test stack attribute type validation.
32
+ Verifies that only Stack instances are accepted for stack attribute.
33
+ """
34
+ with self.assertRaises(OrionisIntegrityException):
35
+ Channels(stack="not_a_stack_instance")
36
+ with self.assertRaises(OrionisIntegrityException):
37
+ Channels(stack=123)
38
+ try:
39
+ Channels(stack=Stack())
40
+ except OrionisIntegrityException:
41
+ self.fail("Valid Stack instance should not raise exception")
42
+
43
+ async def testHourlyValidation(self):
44
+ """
45
+ Test hourly attribute type validation.
46
+ """
47
+ with self.assertRaises(OrionisIntegrityException):
48
+ Channels(hourly="not_an_hourly_instance")
49
+ try:
50
+ Channels(hourly=Hourly())
51
+ except OrionisIntegrityException:
52
+ self.fail("Valid Hourly instance should not raise exception")
53
+
54
+ async def testDailyValidation(self):
55
+ """
56
+ Test daily attribute type validation.
57
+ """
58
+ with self.assertRaises(OrionisIntegrityException):
59
+ Channels(daily="not_a_daily_instance")
60
+ try:
61
+ Channels(daily=Daily())
62
+ except OrionisIntegrityException:
63
+ self.fail("Valid Daily instance should not raise exception")
64
+
65
+ async def testWeeklyValidation(self):
66
+ """
67
+ Test weekly attribute type validation.
68
+ """
69
+ with self.assertRaises(OrionisIntegrityException):
70
+ Channels(weekly="not_a_weekly_instance")
71
+ try:
72
+ Channels(weekly=Weekly())
73
+ except OrionisIntegrityException:
74
+ self.fail("Valid Weekly instance should not raise exception")
75
+
76
+ async def testMonthlyValidation(self):
77
+ """
78
+ Test monthly attribute type validation.
79
+ """
80
+ with self.assertRaises(OrionisIntegrityException):
81
+ Channels(monthly="not_a_monthly_instance")
82
+ try:
83
+ Channels(monthly=Monthly())
84
+ except OrionisIntegrityException:
85
+ self.fail("Valid Monthly instance should not raise exception")
86
+
87
+ async def testChunkedValidation(self):
88
+ """
89
+ Test chunked attribute type validation.
90
+ """
91
+ with self.assertRaises(OrionisIntegrityException):
92
+ Channels(chunked="not_a_chunked_instance")
93
+ try:
94
+ Channels(chunked=Chunked())
95
+ except OrionisIntegrityException:
96
+ self.fail("Valid Chunked instance should not raise exception")
97
+
98
+ async def testCustomConfigurations(self):
99
+ """
100
+ Test that custom channel configurations are properly stored and validated.
101
+ """
102
+ custom_stack = Stack(path="custom/stack.log")
103
+ custom_hourly = Hourly(path="custom/hourly.log")
104
+ custom_daily = Daily(path="custom/daily.log")
105
+ custom_weekly = Weekly(path="custom/weekly.log")
106
+ custom_monthly = Monthly(path="custom/monthly.log")
107
+ custom_chunked = Chunked(path="custom/chunked.log")
108
+
109
+ channels = Channels(
110
+ stack=custom_stack,
111
+ hourly=custom_hourly,
112
+ daily=custom_daily,
113
+ weekly=custom_weekly,
114
+ monthly=custom_monthly,
115
+ chunked=custom_chunked
116
+ )
117
+ self.assertEqual(channels.stack.path, "custom/stack.log")
118
+ self.assertEqual(channels.hourly.path, "custom/hourly.log")
119
+ self.assertEqual(channels.daily.path, "custom/daily.log")
120
+ self.assertEqual(channels.weekly.path, "custom/weekly.log")
121
+ self.assertEqual(channels.monthly.path, "custom/monthly.log")
122
+ self.assertEqual(channels.chunked.path, "custom/chunked.log")
123
+
124
+ async def testToDictMethod(self):
125
+ """
126
+ Test that toDict returns proper dictionary representation.
127
+ """
128
+ channels = Channels()
129
+ channels_dict = channels.toDict()
130
+ self.assertIsInstance(channels_dict, dict)
131
+ self.assertIsInstance(channels_dict['stack'], dict)
132
+ self.assertIsInstance(channels_dict['hourly'], dict)
133
+ self.assertIsInstance(channels_dict['daily'], dict)
134
+ self.assertIsInstance(channels_dict['weekly'], dict)
135
+ self.assertIsInstance(channels_dict['monthly'], dict)
136
+ self.assertIsInstance(channels_dict['chunked'], dict)
137
+
138
+ async def testHashability(self):
139
+ """
140
+ Test that Channels maintains hashability due to unsafe_hash=True.
141
+ """
142
+ channels1 = Channels()
143
+ channels2 = Channels()
144
+ channels_set = {channels1, channels2}
145
+
146
+ self.assertEqual(len(channels_set), 1)
147
+
148
+ custom_channels = Channels(stack=Stack(path="custom.log"))
149
+ channels_set.add(custom_channels)
150
+ self.assertEqual(len(channels_set), 2)
151
+
152
+ async def testKwOnlyInitialization(self):
153
+ """
154
+ Test that Channels enforces keyword-only initialization.
155
+ """
156
+ with self.assertRaises(TypeError):
157
+ Channels(Stack(), Hourly(), Daily(), Weekly(), Monthly(), Chunked())