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,166 @@
1
+ from orionis.luminate.foundation.config.logging.entities.chunked import Chunked
2
+ from orionis.luminate.foundation.config.logging.enums.levels import Level
3
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
4
+ from orionis.unittesting import TestCase
5
+
6
+ class TestConfigChunked(TestCase):
7
+ """
8
+ Test cases for the Chunked logging configuration class.
9
+ """
10
+
11
+ async def testDefaultValues(self):
12
+ """
13
+ Test that Chunked instance is created with correct default values.
14
+ Verifies default path, level, mb_size and files match expected values.
15
+ """
16
+ chunked = Chunked()
17
+ self.assertEqual(chunked.path, "storage/log/application.log")
18
+ self.assertEqual(chunked.level, Level.INFO.value)
19
+ self.assertEqual(chunked.mb_size, 10)
20
+ self.assertEqual(chunked.files, 5)
21
+
22
+ async def testPathValidation(self):
23
+ """
24
+ Test path attribute validation.
25
+ Verifies that empty or non-string paths raise exceptions.
26
+ """
27
+ with self.assertRaises(OrionisIntegrityException):
28
+ Chunked(path="")
29
+ with self.assertRaises(OrionisIntegrityException):
30
+ Chunked(path=123)
31
+ try:
32
+ Chunked(path="custom/log/path.log")
33
+ except OrionisIntegrityException:
34
+ self.fail("Valid path should not raise exception")
35
+
36
+ async def testLevelValidation(self):
37
+ """
38
+ Test level attribute validation with different input types.
39
+ """
40
+ # Test string level
41
+ chunked = Chunked(level="debug")
42
+ self.assertEqual(chunked.level, Level.DEBUG.value)
43
+
44
+ # Test int level
45
+ chunked = Chunked(level=Level.WARNING.value)
46
+ self.assertEqual(chunked.level, Level.WARNING.value)
47
+
48
+ # Test enum level
49
+ chunked = Chunked(level=Level.ERROR)
50
+ self.assertEqual(chunked.level, Level.ERROR.value)
51
+
52
+ # Test invalid cases
53
+ with self.assertRaises(OrionisIntegrityException):
54
+ Chunked(level="invalid")
55
+ with self.assertRaises(OrionisIntegrityException):
56
+ Chunked(level=999)
57
+ with self.assertRaises(OrionisIntegrityException):
58
+ Chunked(level=[])
59
+
60
+ async def testMbSizeValidation(self):
61
+ """
62
+ Test mb_size attribute validation with different input formats.
63
+ """
64
+ # Test valid integer values
65
+ try:
66
+ Chunked(mb_size=1)
67
+ Chunked(mb_size=100)
68
+ except OrionisIntegrityException:
69
+ self.fail("Valid mb_size should not raise exception")
70
+
71
+ # Test string formats
72
+ chunked = Chunked(mb_size="10MB")
73
+ self.assertEqual(chunked.mb_size, 10)
74
+
75
+ chunked = Chunked(mb_size="10240KB")
76
+ self.assertEqual(chunked.mb_size, 10)
77
+
78
+ chunked = Chunked(mb_size="10485760B")
79
+ self.assertEqual(chunked.mb_size, 10)
80
+
81
+ # Test invalid cases
82
+ with self.assertRaises(OrionisIntegrityException):
83
+ Chunked(mb_size=0)
84
+ with self.assertRaises(OrionisIntegrityException):
85
+ Chunked(mb_size=-1)
86
+ with self.assertRaises(OrionisIntegrityException):
87
+ Chunked(mb_size="invalid")
88
+ with self.assertRaises(OrionisIntegrityException):
89
+ Chunked(mb_size="10GB")
90
+
91
+ async def testFilesValidation(self):
92
+ """
93
+ Test files attribute validation.
94
+ """
95
+ # Test valid values
96
+ try:
97
+ Chunked(files=1)
98
+ Chunked(files=10)
99
+ except OrionisIntegrityException:
100
+ self.fail("Valid files count should not raise exception")
101
+
102
+ # Test invalid values
103
+ with self.assertRaises(OrionisIntegrityException):
104
+ Chunked(files=0)
105
+ with self.assertRaises(OrionisIntegrityException):
106
+ Chunked(files=-1)
107
+ with self.assertRaises(OrionisIntegrityException):
108
+ Chunked(files="5")
109
+
110
+ async def testWhitespaceHandling(self):
111
+ """
112
+ Test whitespace handling in path and level attributes.
113
+ """
114
+ chunked = Chunked(path=" logs/app.log ", level=" debug ")
115
+ self.assertEqual(chunked.path, " logs/app.log ")
116
+ self.assertEqual(chunked.level, Level.DEBUG.value)
117
+
118
+ async def testToDictMethod(self):
119
+ """
120
+ Test that toDict returns proper dictionary representation.
121
+ """
122
+ chunked = Chunked()
123
+ chunked_dict = chunked.toDict()
124
+
125
+ self.assertIsInstance(chunked_dict, dict)
126
+ self.assertEqual(chunked_dict['path'], "storage/log/application.log")
127
+ self.assertEqual(chunked_dict['level'], Level.INFO.value)
128
+ self.assertEqual(chunked_dict['mb_size'], 10)
129
+ self.assertEqual(chunked_dict['files'], 5)
130
+
131
+ async def testCustomValuesToDict(self):
132
+ """
133
+ Test that custom values are properly included in dictionary.
134
+ """
135
+ custom_chunked = Chunked(
136
+ path="custom/logs/app.log",
137
+ level="warning",
138
+ mb_size=20,
139
+ files=10
140
+ )
141
+ chunked_dict = custom_chunked.toDict()
142
+ self.assertEqual(chunked_dict['path'], "custom/logs/app.log")
143
+ self.assertEqual(chunked_dict['level'], Level.WARNING.value)
144
+ self.assertEqual(chunked_dict['mb_size'], 20)
145
+ self.assertEqual(chunked_dict['files'], 10)
146
+
147
+ async def testHashability(self):
148
+ """
149
+ Test that Chunked maintains hashability due to unsafe_hash=True.
150
+ """
151
+ chunked1 = Chunked()
152
+ chunked2 = Chunked()
153
+ chunked_set = {chunked1, chunked2}
154
+
155
+ self.assertEqual(len(chunked_set), 1)
156
+
157
+ custom_chunked = Chunked(path="custom.log")
158
+ chunked_set.add(custom_chunked)
159
+ self.assertEqual(len(chunked_set), 2)
160
+
161
+ async def testKwOnlyInitialization(self):
162
+ """
163
+ Test that Chunked enforces keyword-only initialization.
164
+ """
165
+ with self.assertRaises(TypeError):
166
+ Chunked("path.log", "info", 10, 5)
@@ -0,0 +1,153 @@
1
+ from datetime import time
2
+ from orionis.luminate.foundation.config.logging.entities.daily import Daily
3
+ from orionis.luminate.foundation.config.logging.enums.levels import Level
4
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
5
+ from orionis.unittesting import TestCase
6
+
7
+ class TestConfigDaily(TestCase):
8
+ """
9
+ Test cases for the Daily logging configuration class.
10
+ """
11
+
12
+ async def testDefaultValues(self):
13
+ """
14
+ Test that Daily instance is created with correct default values.
15
+ Verifies default path, level, retention_days and at time match expected values.
16
+ """
17
+ daily = Daily()
18
+ self.assertEqual(daily.path, "storage/log/application.log")
19
+ self.assertEqual(daily.level, Level.INFO.value)
20
+ self.assertEqual(daily.retention_days, 7)
21
+ self.assertEqual(daily.at, "00:00:00")
22
+
23
+ async def testPathValidation(self):
24
+ """
25
+ Test path attribute validation.
26
+ Verifies that empty or non-string paths raise exceptions.
27
+ """
28
+ with self.assertRaises(OrionisIntegrityException):
29
+ Daily(path="")
30
+ with self.assertRaises(OrionisIntegrityException):
31
+ Daily(path=123)
32
+ try:
33
+ Daily(path="custom/log/path.log")
34
+ except OrionisIntegrityException:
35
+ self.fail("Valid path should not raise exception")
36
+
37
+ async def testLevelValidation(self):
38
+ """
39
+ Test level attribute validation with different input types.
40
+ """
41
+ # Test string level
42
+ daily = Daily(level="debug")
43
+ self.assertEqual(daily.level, Level.DEBUG.value)
44
+
45
+ # Test int level
46
+ daily = Daily(level=Level.WARNING.value)
47
+ self.assertEqual(daily.level, Level.WARNING.value)
48
+
49
+ # Test enum level
50
+ daily = Daily(level=Level.ERROR)
51
+ self.assertEqual(daily.level, Level.ERROR.value)
52
+
53
+ # Test invalid cases
54
+ with self.assertRaises(OrionisIntegrityException):
55
+ Daily(level="invalid")
56
+ with self.assertRaises(OrionisIntegrityException):
57
+ Daily(level=999)
58
+ with self.assertRaises(OrionisIntegrityException):
59
+ Daily(level=[])
60
+
61
+ async def testRetentionDaysValidation(self):
62
+ """
63
+ Test retention_days attribute validation.
64
+ """
65
+ # Test valid values
66
+ try:
67
+ Daily(retention_days=1)
68
+ Daily(retention_days=90)
69
+ Daily(retention_days=30)
70
+ except OrionisIntegrityException:
71
+ self.fail("Valid retention_days should not raise exception")
72
+
73
+ # Test invalid values
74
+ with self.assertRaises(OrionisIntegrityException):
75
+ Daily(retention_days=0)
76
+ with self.assertRaises(OrionisIntegrityException):
77
+ Daily(retention_days=91)
78
+ with self.assertRaises(OrionisIntegrityException):
79
+ Daily(retention_days=-1)
80
+ with self.assertRaises(OrionisIntegrityException):
81
+ Daily(retention_days="7")
82
+
83
+ async def testAtTimeValidation(self):
84
+ """
85
+ Test at time attribute validation and conversion.
86
+ """
87
+ # Test time object
88
+ daily = Daily(at=time(12, 30))
89
+ self.assertEqual(daily.at, "12:30:00")
90
+
91
+ # Test invalid type
92
+ with self.assertRaises(OrionisIntegrityException):
93
+ Daily(at="12:00:00")
94
+ with self.assertRaises(OrionisIntegrityException):
95
+ Daily(at=1200)
96
+
97
+ async def testWhitespaceHandling(self):
98
+ """
99
+ Test whitespace handling in path and level attributes.
100
+ """
101
+ daily = Daily(path=" logs/app.log ", level=" debug ")
102
+ self.assertEqual(daily.path, " logs/app.log ")
103
+ self.assertEqual(daily.level, Level.DEBUG.value)
104
+
105
+ async def testToDictMethod(self):
106
+ """
107
+ Test that toDict returns proper dictionary representation.
108
+ """
109
+ daily = Daily()
110
+ daily_dict = daily.toDict()
111
+
112
+ self.assertIsInstance(daily_dict, dict)
113
+ self.assertEqual(daily_dict['path'], "storage/log/application.log")
114
+ self.assertEqual(daily_dict['level'], Level.INFO.value)
115
+ self.assertEqual(daily_dict['retention_days'], 7)
116
+ self.assertEqual(daily_dict['at'], "00:00:00")
117
+
118
+ async def testCustomValuesToDict(self):
119
+ """
120
+ Test that custom values are properly included in dictionary.
121
+ """
122
+ custom_daily = Daily(
123
+ path="custom/logs/app.log",
124
+ level="warning",
125
+ retention_days=14,
126
+ at=time(23, 59)
127
+ )
128
+ daily_dict = custom_daily.toDict()
129
+ self.assertEqual(daily_dict['path'], "custom/logs/app.log")
130
+ self.assertEqual(daily_dict['level'], Level.WARNING.value)
131
+ self.assertEqual(daily_dict['retention_days'], 14)
132
+ self.assertEqual(daily_dict['at'], "23:59:00")
133
+
134
+ async def testHashability(self):
135
+ """
136
+ Test that Daily maintains hashability due to unsafe_hash=True.
137
+ """
138
+ daily1 = Daily()
139
+ daily2 = Daily()
140
+ daily_set = {daily1, daily2}
141
+
142
+ self.assertEqual(len(daily_set), 1)
143
+
144
+ custom_daily = Daily(path="custom.log")
145
+ daily_set.add(custom_daily)
146
+ self.assertEqual(len(daily_set), 2)
147
+
148
+ async def testKwOnlyInitialization(self):
149
+ """
150
+ Test that Daily enforces keyword-only initialization.
151
+ """
152
+ with self.assertRaises(TypeError):
153
+ Daily("path.log", "info", 7, time(0, 0))
@@ -0,0 +1,131 @@
1
+ from orionis.luminate.foundation.config.logging.entities.hourly import Hourly
2
+ from orionis.luminate.foundation.config.logging.enums.levels import Level
3
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
4
+ from orionis.unittesting import TestCase
5
+
6
+ class TestConfigHourly(TestCase):
7
+ """
8
+ Test cases for the Hourly logging configuration class.
9
+ """
10
+
11
+ async def testDefaultValues(self):
12
+ """
13
+ Test that Hourly instance is created with correct default values.
14
+ Verifies default path, level and retention_hours match expected values.
15
+ """
16
+ hourly = Hourly()
17
+ self.assertEqual(hourly.path, "storage/log/application.log")
18
+ self.assertEqual(hourly.level, Level.INFO.value)
19
+ self.assertEqual(hourly.retention_hours, 24)
20
+
21
+ async def testPathValidation(self):
22
+ """
23
+ Test path attribute validation.
24
+ Verifies that empty or non-string paths raise exceptions.
25
+ """
26
+ with self.assertRaises(OrionisIntegrityException):
27
+ Hourly(path="")
28
+ with self.assertRaises(OrionisIntegrityException):
29
+ Hourly(path=123)
30
+ try:
31
+ Hourly(path="custom/log/path.log")
32
+ except OrionisIntegrityException:
33
+ self.fail("Valid path should not raise exception")
34
+
35
+ async def testLevelValidation(self):
36
+ """
37
+ Test level attribute validation with different input types.
38
+ """
39
+ # Test string level
40
+ hourly = Hourly(level="debug")
41
+ self.assertEqual(hourly.level, Level.DEBUG.value)
42
+
43
+ # Test int level
44
+ hourly = Hourly(level=Level.WARNING.value)
45
+ self.assertEqual(hourly.level, Level.WARNING.value)
46
+
47
+ # Test enum level
48
+ hourly = Hourly(level=Level.ERROR)
49
+ self.assertEqual(hourly.level, Level.ERROR.value)
50
+
51
+ # Test invalid cases
52
+ with self.assertRaises(OrionisIntegrityException):
53
+ Hourly(level="invalid")
54
+ with self.assertRaises(OrionisIntegrityException):
55
+ Hourly(level=999)
56
+ with self.assertRaises(OrionisIntegrityException):
57
+ Hourly(level=[])
58
+
59
+ async def testRetentionHoursValidation(self):
60
+ """
61
+ Test retention_hours attribute validation.
62
+ """
63
+ # Test valid values
64
+ try:
65
+ Hourly(retention_hours=1)
66
+ Hourly(retention_hours=168)
67
+ Hourly(retention_hours=72)
68
+ except OrionisIntegrityException:
69
+ self.fail("Valid retention_hours should not raise exception")
70
+
71
+ # Test invalid values
72
+ with self.assertRaises(OrionisIntegrityException):
73
+ Hourly(retention_hours=0)
74
+ with self.assertRaises(OrionisIntegrityException):
75
+ Hourly(retention_hours=169)
76
+ with self.assertRaises(OrionisIntegrityException):
77
+ Hourly(retention_hours=-1)
78
+ with self.assertRaises(OrionisIntegrityException):
79
+ Hourly(retention_hours="24")
80
+
81
+ async def testWhitespaceHandling(self):
82
+ """
83
+ Test whitespace handling in path and level attributes.
84
+ """
85
+ hourly = Hourly(path=" logs/app.log ", level=" debug ")
86
+ self.assertEqual(hourly.path, " logs/app.log ")
87
+ self.assertEqual(hourly.level, Level.DEBUG.value)
88
+
89
+ async def testToDictMethod(self):
90
+ """
91
+ Test that toDict returns proper dictionary representation.
92
+ """
93
+ hourly = Hourly()
94
+ hourly_dict = hourly.toDict()
95
+ self.assertIsInstance(hourly_dict, dict)
96
+ self.assertEqual(hourly_dict['path'], "storage/log/application.log")
97
+ self.assertEqual(hourly_dict['level'], Level.INFO.value)
98
+ self.assertEqual(hourly_dict['retention_hours'], 24)
99
+
100
+ async def testCustomValuesToDict(self):
101
+ """
102
+ Test that custom values are properly included in dictionary.
103
+ """
104
+ custom_hourly = Hourly(
105
+ path="custom/logs/app.log",
106
+ level="warning",
107
+ retention_hours=48
108
+ )
109
+ hourly_dict = custom_hourly.toDict()
110
+ self.assertEqual(hourly_dict['path'], "custom/logs/app.log")
111
+ self.assertEqual(hourly_dict['level'], Level.WARNING.value)
112
+ self.assertEqual(hourly_dict['retention_hours'], 48)
113
+
114
+ async def testHashability(self):
115
+ """
116
+ Test that Hourly maintains hashability due to unsafe_hash=True.
117
+ """
118
+ hourly1 = Hourly()
119
+ hourly2 = Hourly()
120
+ hourly_set = {hourly1, hourly2}
121
+ self.assertEqual(len(hourly_set), 1)
122
+ custom_hourly = Hourly(path="custom.log")
123
+ hourly_set.add(custom_hourly)
124
+ self.assertEqual(len(hourly_set), 2)
125
+
126
+ async def testKwOnlyInitialization(self):
127
+ """
128
+ Test that Hourly enforces keyword-only initialization.
129
+ """
130
+ with self.assertRaises(TypeError):
131
+ Hourly("path.log", "info", 24)
@@ -0,0 +1,133 @@
1
+ from orionis.luminate.foundation.config.logging.entities.monthly import Monthly
2
+ from orionis.luminate.foundation.config.logging.enums.levels import Level
3
+ from orionis.luminate.foundation.config.exceptions.integrity import OrionisIntegrityException
4
+ from orionis.unittesting import TestCase
5
+
6
+ class TestConfigMonthly(TestCase):
7
+ """
8
+ Test cases for the Monthly logging configuration class.
9
+ """
10
+
11
+ async def testDefaultValues(self):
12
+ """
13
+ Test that Monthly instance is created with correct default values.
14
+ Verifies default path, level and retention_months match expected values.
15
+ """
16
+ monthly = Monthly()
17
+ self.assertEqual(monthly.path, "storage/log/application.log")
18
+ self.assertEqual(monthly.level, Level.INFO.value)
19
+ self.assertEqual(monthly.retention_months, 4)
20
+
21
+ async def testPathValidation(self):
22
+ """
23
+ Test path attribute validation.
24
+ Verifies that empty or non-string paths raise exceptions.
25
+ """
26
+ with self.assertRaises(OrionisIntegrityException):
27
+ Monthly(path="")
28
+ with self.assertRaises(OrionisIntegrityException):
29
+ Monthly(path=123)
30
+ try:
31
+ Monthly(path="custom/log/path.log")
32
+ except OrionisIntegrityException:
33
+ self.fail("Valid path should not raise exception")
34
+
35
+ async def testLevelValidation(self):
36
+ """
37
+ Test level attribute validation with different input types.
38
+ """
39
+ # Test string level
40
+ monthly = Monthly(level="debug")
41
+ self.assertEqual(monthly.level, Level.DEBUG.value)
42
+
43
+ # Test int level
44
+ monthly = Monthly(level=Level.WARNING.value)
45
+ self.assertEqual(monthly.level, Level.WARNING.value)
46
+
47
+ # Test enum level
48
+ monthly = Monthly(level=Level.ERROR)
49
+ self.assertEqual(monthly.level, Level.ERROR.value)
50
+
51
+ # Test invalid cases
52
+ with self.assertRaises(OrionisIntegrityException):
53
+ Monthly(level="invalid")
54
+ with self.assertRaises(OrionisIntegrityException):
55
+ Monthly(level=999)
56
+ with self.assertRaises(OrionisIntegrityException):
57
+ Monthly(level=[])
58
+
59
+ async def testRetentionMonthsValidation(self):
60
+ """
61
+ Test retention_months attribute validation.
62
+ """
63
+ # Test valid values
64
+ try:
65
+ Monthly(retention_months=1)
66
+ Monthly(retention_months=12)
67
+ Monthly(retention_months=6)
68
+ except OrionisIntegrityException:
69
+ self.fail("Valid retention_months should not raise exception")
70
+
71
+ # Test invalid values
72
+ with self.assertRaises(OrionisIntegrityException):
73
+ Monthly(retention_months=0)
74
+ with self.assertRaises(OrionisIntegrityException):
75
+ Monthly(retention_months=13)
76
+ with self.assertRaises(OrionisIntegrityException):
77
+ Monthly(retention_months=-1)
78
+ with self.assertRaises(OrionisIntegrityException):
79
+ Monthly(retention_months="4")
80
+
81
+ async def testWhitespaceHandling(self):
82
+ """
83
+ Test whitespace handling in path and level attributes.
84
+ """
85
+ monthly = Monthly(path=" logs/app.log ", level=" debug ")
86
+ self.assertEqual(monthly.path, " logs/app.log ")
87
+ self.assertEqual(monthly.level, Level.DEBUG.value)
88
+
89
+ async def testToDictMethod(self):
90
+ """
91
+ Test that toDict returns proper dictionary representation.
92
+ """
93
+ monthly = Monthly()
94
+ monthly_dict = monthly.toDict()
95
+ self.assertIsInstance(monthly_dict, dict)
96
+ self.assertEqual(monthly_dict['path'], "storage/log/application.log")
97
+ self.assertEqual(monthly_dict['level'], Level.INFO.value)
98
+ self.assertEqual(monthly_dict['retention_months'], 4)
99
+
100
+ async def testCustomValuesToDict(self):
101
+ """
102
+ Test that custom values are properly included in dictionary.
103
+ """
104
+ custom_monthly = Monthly(
105
+ path="custom/logs/app.log",
106
+ level="warning",
107
+ retention_months=6
108
+ )
109
+ monthly_dict = custom_monthly.toDict()
110
+ self.assertEqual(monthly_dict['path'], "custom/logs/app.log")
111
+ self.assertEqual(monthly_dict['level'], Level.WARNING.value)
112
+ self.assertEqual(monthly_dict['retention_months'], 6)
113
+
114
+ async def testHashability(self):
115
+ """
116
+ Test that Monthly maintains hashability due to unsafe_hash=True.
117
+ """
118
+ monthly1 = Monthly()
119
+ monthly2 = Monthly()
120
+ monthly_set = {monthly1, monthly2}
121
+
122
+ self.assertEqual(len(monthly_set), 1)
123
+
124
+ custom_monthly = Monthly(path="custom.log")
125
+ monthly_set.add(custom_monthly)
126
+ self.assertEqual(len(monthly_set), 2)
127
+
128
+ async def testKwOnlyInitialization(self):
129
+ """
130
+ Test that Monthly enforces keyword-only initialization.
131
+ """
132
+ with self.assertRaises(TypeError):
133
+ Monthly("path.log", "info", 4)