orionis 0.244.0__tar.gz → 0.246.0__tar.gz

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 (300) hide show
  1. {orionis-0.244.0/orionis.egg-info → orionis-0.246.0}/PKG-INFO +1 -1
  2. {orionis-0.244.0 → orionis-0.246.0}/orionis/framework.py +1 -1
  3. orionis-0.246.0/orionis/luminate/config/entities/testing.py +37 -0
  4. orionis-0.246.0/orionis/luminate/contracts/config/config.py +27 -0
  5. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/environment/env.py +1 -0
  6. orionis-0.246.0/orionis/luminate/support/introspection/abstracts/entities/abstract_class_attributes.py +11 -0
  7. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/abstracts/reflect_abstract.py +154 -16
  8. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/instances/reflection_instance.py +2 -2
  9. orionis-0.246.0/orionis/luminate/test/core/contracts/test_unit.py +122 -0
  10. orionis-0.246.0/orionis/luminate/test/core/test_suite.py +92 -0
  11. orionis-0.246.0/orionis/luminate/test/core/test_unit.py +905 -0
  12. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/test/entities/test_result.py +6 -2
  13. orionis-0.246.0/orionis/luminate/test/enums/test_mode.py +16 -0
  14. orionis-0.246.0/orionis/luminate/test/exceptions/test_config_exception.py +28 -0
  15. orionis-0.246.0/orionis/luminate/test/exceptions/test_exception.py +52 -0
  16. orionis-0.246.0/orionis/luminate/test/output/test_std_out.py +108 -0
  17. {orionis-0.244.0 → orionis-0.246.0/orionis.egg-info}/PKG-INFO +1 -1
  18. {orionis-0.244.0 → orionis-0.246.0}/orionis.egg-info/SOURCES.txt +18 -10
  19. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/fakes/fake_reflect_abstract.py +61 -5
  20. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/test_reflect_abstract.py +62 -1
  21. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/test_reflect_instance.py +0 -1
  22. orionis-0.246.0/tests/support/path/__init__.py +0 -0
  23. orionis-0.246.0/tests/support/patterns/__init__.py +0 -0
  24. orionis-0.246.0/tests/support/standard/__init__.py +0 -0
  25. orionis-0.244.0/orionis/luminate/test/core/contracts/test_unit.py +0 -82
  26. orionis-0.244.0/orionis/luminate/test/core/test_suite.py +0 -85
  27. orionis-0.244.0/orionis/luminate/test/core/test_unit.py +0 -328
  28. orionis-0.244.0/orionis/luminate/test/exceptions/test_exception.py +0 -45
  29. orionis-0.244.0/orionis/luminate/test/output/test_std_out.py +0 -66
  30. {orionis-0.244.0 → orionis-0.246.0}/LICENCE +0 -0
  31. {orionis-0.244.0 → orionis-0.246.0}/MANIFEST.in +0 -0
  32. {orionis-0.244.0 → orionis-0.246.0}/README.md +0 -0
  33. {orionis-0.244.0 → orionis-0.246.0}/orionis/__init__.py +0 -0
  34. {orionis-0.244.0 → orionis-0.246.0}/orionis/console.py +0 -0
  35. {orionis-0.244.0 → orionis-0.246.0}/orionis/installer/__init__.py +0 -0
  36. {orionis-0.244.0 → orionis-0.246.0}/orionis/installer/contracts/__init__.py +0 -0
  37. {orionis-0.244.0 → orionis-0.246.0}/orionis/installer/contracts/manager.py +0 -0
  38. {orionis-0.244.0 → orionis-0.246.0}/orionis/installer/contracts/output.py +0 -0
  39. {orionis-0.244.0 → orionis-0.246.0}/orionis/installer/contracts/setup.py +0 -0
  40. {orionis-0.244.0 → orionis-0.246.0}/orionis/installer/manager.py +0 -0
  41. {orionis-0.244.0 → orionis-0.246.0}/orionis/installer/output.py +0 -0
  42. {orionis-0.244.0 → orionis-0.246.0}/orionis/installer/setup.py +0 -0
  43. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/__init__.py +0 -0
  44. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/application.py +0 -0
  45. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/config/__init__.py +0 -0
  46. {orionis-0.244.0/orionis/luminate/console → orionis-0.246.0/orionis/luminate/config/contracts}/__init__.py +0 -0
  47. {orionis-0.244.0/orionis/luminate/contracts/config → orionis-0.246.0/orionis/luminate/config/contracts}/config.py +0 -0
  48. {orionis-0.244.0/orionis/luminate/console/base → orionis-0.246.0/orionis/luminate/config/entities}/__init__.py +0 -0
  49. {orionis-0.244.0/orionis/luminate/config → orionis-0.246.0/orionis/luminate/config/entities}/app.py +0 -0
  50. {orionis-0.244.0/orionis/luminate/config → orionis-0.246.0/orionis/luminate/config/entities}/auth.py +0 -0
  51. {orionis-0.244.0/orionis/luminate/config → orionis-0.246.0/orionis/luminate/config/entities}/cache.py +0 -0
  52. {orionis-0.244.0/orionis/luminate/config → orionis-0.246.0/orionis/luminate/config/entities}/cors.py +0 -0
  53. {orionis-0.244.0/orionis/luminate/config → orionis-0.246.0/orionis/luminate/config/entities}/database.py +0 -0
  54. {orionis-0.244.0/orionis/luminate/config → orionis-0.246.0/orionis/luminate/config/entities}/filesystems.py +0 -0
  55. {orionis-0.244.0/orionis/luminate/config → orionis-0.246.0/orionis/luminate/config/entities}/logging.py +0 -0
  56. {orionis-0.244.0/orionis/luminate/config → orionis-0.246.0/orionis/luminate/config/entities}/mail.py +0 -0
  57. {orionis-0.244.0/orionis/luminate/config → orionis-0.246.0/orionis/luminate/config/entities}/queue.py +0 -0
  58. {orionis-0.244.0/orionis/luminate/config → orionis-0.246.0/orionis/luminate/config/entities}/session.py +0 -0
  59. {orionis-0.244.0/orionis/luminate/console/commands → orionis-0.246.0/orionis/luminate/console}/__init__.py +0 -0
  60. {orionis-0.244.0/orionis/luminate/console/exceptions → orionis-0.246.0/orionis/luminate/console/base}/__init__.py +0 -0
  61. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/base/command.py +0 -0
  62. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/command_filter.py +0 -0
  63. {orionis-0.244.0/orionis/luminate/console/output → orionis-0.246.0/orionis/luminate/console/commands}/__init__.py +0 -0
  64. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
  65. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/commands/help.py +0 -0
  66. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
  67. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/commands/version.py +0 -0
  68. {orionis-0.244.0/orionis/luminate/container → orionis-0.246.0/orionis/luminate/console/exceptions}/__init__.py +0 -0
  69. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/exceptions/cli-orionis-value-error.py +0 -0
  70. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
  71. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/exceptions/cli_runtime_error.py +0 -0
  72. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/exceptions/cli_schedule_exception.py +0 -0
  73. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/kernel.py +0 -0
  74. {orionis-0.244.0/orionis/luminate/contracts → orionis-0.246.0/orionis/luminate/console/output}/__init__.py +0 -0
  75. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/output/console.py +0 -0
  76. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/output/executor.py +0 -0
  77. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/output/progress_bar.py +0 -0
  78. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/output/styles.py +0 -0
  79. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/console/parser.py +0 -0
  80. {orionis-0.244.0/orionis/luminate/contracts/config → orionis-0.246.0/orionis/luminate/container}/__init__.py +0 -0
  81. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/container/container.py +0 -0
  82. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/container/container_integrity.py +0 -0
  83. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/container/exception.py +0 -0
  84. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/container/lifetimes.py +0 -0
  85. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/container/resolve.py +0 -0
  86. {orionis-0.244.0/orionis/luminate/contracts/console → orionis-0.246.0/orionis/luminate/contracts}/__init__.py +0 -0
  87. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/application.py +0 -0
  88. {orionis-0.244.0/orionis/luminate/contracts/console/base → orionis-0.246.0/orionis/luminate/contracts/config}/__init__.py +0 -0
  89. {orionis-0.244.0/orionis/luminate/contracts/console/output → orionis-0.246.0/orionis/luminate/contracts/console}/__init__.py +0 -0
  90. {orionis-0.244.0/orionis/luminate/contracts/facades → orionis-0.246.0/orionis/luminate/contracts/console/base}/__init__.py +0 -0
  91. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/console/base/command.py +0 -0
  92. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/console/command_filter.py +0 -0
  93. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/console/kernel.py +0 -0
  94. {orionis-0.244.0/orionis/luminate/contracts/facades/commands → orionis-0.246.0/orionis/luminate/contracts/console/output}/__init__.py +0 -0
  95. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/console/output/console.py +0 -0
  96. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/console/output/executor.py +0 -0
  97. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/console/output/progress_bar.py +0 -0
  98. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/console/parser.py +0 -0
  99. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/console/task_manager.py +0 -0
  100. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/container/container.py +0 -0
  101. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/container/container_integrity.py +0 -0
  102. {orionis-0.244.0/orionis/luminate/contracts/facades/config → orionis-0.246.0/orionis/luminate/contracts/facades}/__init__.py +0 -0
  103. {orionis-0.244.0/orionis/luminate/contracts/facades/environment → orionis-0.246.0/orionis/luminate/contracts/facades/commands}/__init__.py +0 -0
  104. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/facades/commands/commands_facade.py +0 -0
  105. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/facades/commands/scheduler_facade.py +0 -0
  106. {orionis-0.244.0/orionis/luminate/contracts/facades/files → orionis-0.246.0/orionis/luminate/contracts/facades/config}/__init__.py +0 -0
  107. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/facades/config/config_facade.py +0 -0
  108. {orionis-0.244.0/orionis/luminate/contracts/facades/log → orionis-0.246.0/orionis/luminate/contracts/facades/environment}/__init__.py +0 -0
  109. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/facades/environment/environment_facade.py +0 -0
  110. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/facades/facade.py +0 -0
  111. {orionis-0.244.0/orionis/luminate/contracts/facades/tests → orionis-0.246.0/orionis/luminate/contracts/facades/files}/__init__.py +0 -0
  112. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/facades/files/path_facade.py +0 -0
  113. {orionis-0.244.0/orionis/luminate/contracts/foundation → orionis-0.246.0/orionis/luminate/contracts/facades/log}/__init__.py +0 -0
  114. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/facades/log/log_facade.py +0 -0
  115. {orionis-0.244.0/orionis/luminate/contracts/foundation/config → orionis-0.246.0/orionis/luminate/contracts/facades/tests}/__init__.py +0 -0
  116. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/facades/tests/tests_facade.py +0 -0
  117. {orionis-0.244.0/orionis/luminate/contracts/foundation/console → orionis-0.246.0/orionis/luminate/contracts/foundation}/__init__.py +0 -0
  118. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/foundation/bootstraper.py +0 -0
  119. {orionis-0.244.0/orionis/luminate/contracts/foundation/environment → orionis-0.246.0/orionis/luminate/contracts/foundation/config}/__init__.py +0 -0
  120. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/foundation/config/config_bootstrapper.py +0 -0
  121. {orionis-0.244.0/orionis/luminate/contracts/foundation/providers → orionis-0.246.0/orionis/luminate/contracts/foundation/console}/__init__.py +0 -0
  122. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/foundation/console/command_bootstrapper.py +0 -0
  123. {orionis-0.244.0/orionis/luminate/contracts/providers → orionis-0.246.0/orionis/luminate/contracts/foundation/environment}/__init__.py +0 -0
  124. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/foundation/environment/environment_bootstrapper.py +0 -0
  125. {orionis-0.244.0/orionis/luminate/contracts/services → orionis-0.246.0/orionis/luminate/contracts/foundation/providers}/__init__.py +0 -0
  126. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/foundation/providers/service_providers_bootstrapper.py +0 -0
  127. {orionis-0.244.0/orionis/luminate/contracts/services/commands → orionis-0.246.0/orionis/luminate/contracts/providers}/__init__.py +0 -0
  128. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/providers/service_provider.py +0 -0
  129. {orionis-0.244.0/orionis/luminate/contracts/services/config → orionis-0.246.0/orionis/luminate/contracts/services}/__init__.py +0 -0
  130. {orionis-0.244.0/orionis/luminate/contracts/services/environment → orionis-0.246.0/orionis/luminate/contracts/services/commands}/__init__.py +0 -0
  131. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/services/commands/reactor_commands_service.py +0 -0
  132. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/services/commands/schedule_service.py +0 -0
  133. {orionis-0.244.0/orionis/luminate/contracts/services/files → orionis-0.246.0/orionis/luminate/contracts/services/config}/__init__.py +0 -0
  134. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/services/config/config_service.py +0 -0
  135. {orionis-0.244.0/orionis/luminate/contracts/services/log → orionis-0.246.0/orionis/luminate/contracts/services/environment}/__init__.py +0 -0
  136. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/services/environment/environment_service.py +0 -0
  137. {orionis-0.244.0/orionis/luminate/facades → orionis-0.246.0/orionis/luminate/contracts/services/files}/__init__.py +0 -0
  138. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/services/files/path_resolver_service.py +0 -0
  139. {orionis-0.244.0/orionis/luminate/facades/commands → orionis-0.246.0/orionis/luminate/contracts/services/log}/__init__.py +0 -0
  140. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/services/log/log_service.py +0 -0
  141. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/support/exception_parse.py +0 -0
  142. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/contracts/support/reflection.py +0 -0
  143. {orionis-0.244.0/orionis/luminate/facades/config → orionis-0.246.0/orionis/luminate/facades}/__init__.py +0 -0
  144. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/facades/app_facade.py +0 -0
  145. {orionis-0.244.0/orionis/luminate/facades/environment → orionis-0.246.0/orionis/luminate/facades/commands}/__init__.py +0 -0
  146. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/facades/commands/commands_facade.py +0 -0
  147. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/facades/commands/scheduler_facade.py +0 -0
  148. {orionis-0.244.0/orionis/luminate/facades/files → orionis-0.246.0/orionis/luminate/facades/config}/__init__.py +0 -0
  149. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/facades/config/config_facade.py +0 -0
  150. {orionis-0.244.0/orionis/luminate/facades/log → orionis-0.246.0/orionis/luminate/facades/environment}/__init__.py +0 -0
  151. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/facades/environment/environment_facade.py +0 -0
  152. {orionis-0.244.0/orionis/luminate/foundation → orionis-0.246.0/orionis/luminate/facades/files}/__init__.py +0 -0
  153. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/facades/files/path_facade.py +0 -0
  154. {orionis-0.244.0/orionis/luminate/foundation/config → orionis-0.246.0/orionis/luminate/facades/log}/__init__.py +0 -0
  155. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/facades/log/log_facade.py +0 -0
  156. {orionis-0.244.0/orionis/luminate/foundation/console → orionis-0.246.0/orionis/luminate/foundation}/__init__.py +0 -0
  157. {orionis-0.244.0/orionis/luminate/foundation/environment → orionis-0.246.0/orionis/luminate/foundation/config}/__init__.py +0 -0
  158. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/foundation/config/config_bootstrapper.py +0 -0
  159. {orionis-0.244.0/orionis/luminate/foundation/exceptions → orionis-0.246.0/orionis/luminate/foundation/console}/__init__.py +0 -0
  160. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/foundation/console/command_bootstrapper.py +0 -0
  161. {orionis-0.244.0/orionis/luminate/foundation/providers → orionis-0.246.0/orionis/luminate/foundation/environment}/__init__.py +0 -0
  162. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/foundation/environment/environment_bootstrapper.py +0 -0
  163. {orionis-0.244.0/orionis/luminate/providers → orionis-0.246.0/orionis/luminate/foundation/exceptions}/__init__.py +0 -0
  164. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/foundation/exceptions/exception_bootstrapper.py +0 -0
  165. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/foundation/exceptions/exception_providers.py +0 -0
  166. {orionis-0.244.0/orionis/luminate/providers/commands → orionis-0.246.0/orionis/luminate/foundation/providers}/__init__.py +0 -0
  167. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/foundation/providers/service_providers_bootstrapper.py +0 -0
  168. {orionis-0.244.0/orionis/luminate/providers/config → orionis-0.246.0/orionis/luminate/providers}/__init__.py +0 -0
  169. {orionis-0.244.0/orionis/luminate/providers/environment → orionis-0.246.0/orionis/luminate/providers/commands}/__init__.py +0 -0
  170. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/providers/commands/reactor_commands_service_provider.py +0 -0
  171. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/providers/commands/scheduler_provider.py +0 -0
  172. {orionis-0.244.0/orionis/luminate/providers/files → orionis-0.246.0/orionis/luminate/providers/config}/__init__.py +0 -0
  173. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/providers/config/config_service_provider.py +0 -0
  174. {orionis-0.244.0/orionis/luminate/providers/log → orionis-0.246.0/orionis/luminate/providers/environment}/__init__.py +0 -0
  175. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/providers/environment/environment__service_provider.py +0 -0
  176. {orionis-0.244.0/orionis/luminate/services → orionis-0.246.0/orionis/luminate/providers/files}/__init__.py +0 -0
  177. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/providers/files/paths_provider.py +0 -0
  178. {orionis-0.244.0/orionis/luminate/services/commands → orionis-0.246.0/orionis/luminate/providers/log}/__init__.py +0 -0
  179. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/providers/log/log_service_provider.py +0 -0
  180. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/providers/service_provider.py +0 -0
  181. {orionis-0.244.0/orionis/luminate/services/config → orionis-0.246.0/orionis/luminate/services}/__init__.py +0 -0
  182. {orionis-0.244.0/orionis/luminate/services/log → orionis-0.246.0/orionis/luminate/services/commands}/__init__.py +0 -0
  183. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/services/commands/reactor_commands_service.py +0 -0
  184. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/services/commands/scheduler_service.py +0 -0
  185. {orionis-0.244.0/orionis/luminate/support → orionis-0.246.0/orionis/luminate/services/config}/__init__.py +0 -0
  186. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/services/config/config_service.py +0 -0
  187. {orionis-0.244.0/orionis/luminate/support/adapters → orionis-0.246.0/orionis/luminate/services/log}/__init__.py +0 -0
  188. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/services/log/log_service.py +0 -0
  189. {orionis-0.244.0/orionis/luminate/support/asynchrony → orionis-0.246.0/orionis/luminate/support}/__init__.py +0 -0
  190. {orionis-0.244.0/orionis/luminate/support/asynchrony/contracts → orionis-0.246.0/orionis/luminate/support/adapters}/__init__.py +0 -0
  191. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/adapters/dot_dict.py +0 -0
  192. {orionis-0.244.0/orionis/luminate/support/environment → orionis-0.246.0/orionis/luminate/support/asynchrony}/__init__.py +0 -0
  193. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/asynchrony/async_io.py +0 -0
  194. {orionis-0.244.0/orionis/luminate/support/environment → orionis-0.246.0/orionis/luminate/support/asynchrony}/contracts/__init__.py +0 -0
  195. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/asynchrony/contracts/async_coroutine.py +0 -0
  196. {orionis-0.244.0/orionis/luminate/support/introspection/abstracts → orionis-0.246.0/orionis/luminate/support/environment}/__init__.py +0 -0
  197. {orionis-0.244.0/orionis/luminate/support/introspection → orionis-0.246.0/orionis/luminate/support/environment}/contracts/__init__.py +0 -0
  198. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/environment/contracts/env.py +0 -0
  199. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/environment/functions.py +0 -0
  200. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/environment/helper.py +0 -0
  201. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/__init__.py +0 -0
  202. {orionis-0.244.0/orionis/luminate/support/introspection/dependencies/contracts → orionis-0.246.0/orionis/luminate/support/introspection/abstracts}/__init__.py +0 -0
  203. {orionis-0.244.0/orionis/luminate/support/introspection/dependencies → orionis-0.246.0/orionis/luminate/support/introspection/abstracts}/entities/__init__.py +0 -0
  204. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/container_integrity.py +0 -0
  205. {orionis-0.244.0/orionis/luminate/support/introspection/helpers → orionis-0.246.0/orionis/luminate/support/introspection/contracts}/__init__.py +0 -0
  206. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/contracts/reflection.py +0 -0
  207. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/contracts/reflexion_abstract.py +0 -0
  208. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/dependencies/__init__.py +0 -0
  209. {orionis-0.244.0/orionis/luminate/support/introspection/instances → orionis-0.246.0/orionis/luminate/support/introspection/dependencies}/contracts/__init__.py +0 -0
  210. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/dependencies/contracts/reflect_dependencies.py +0 -0
  211. {orionis-0.244.0/orionis/luminate/support/introspection/instances → orionis-0.246.0/orionis/luminate/support/introspection/dependencies}/entities/__init__.py +0 -0
  212. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/dependencies/entities/class_dependencies.py +0 -0
  213. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/dependencies/entities/method_dependencies.py +0 -0
  214. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/dependencies/entities/resolved_dependencies.py +0 -0
  215. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/dependencies/reflect_dependencies.py +0 -0
  216. {orionis-0.244.0/orionis/luminate/support/parsers → orionis-0.246.0/orionis/luminate/support/introspection/helpers}/__init__.py +0 -0
  217. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/helpers/functions.py +0 -0
  218. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/instances/__init__.py +0 -0
  219. {orionis-0.244.0/orionis/luminate/support/parsers → orionis-0.246.0/orionis/luminate/support/introspection/instances}/contracts/__init__.py +0 -0
  220. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/instances/contracts/reflection_instance.py +0 -0
  221. {orionis-0.244.0/orionis/luminate/support/paths → orionis-0.246.0/orionis/luminate/support/introspection/instances/entities}/__init__.py +0 -0
  222. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/instances/entities/class_attributes.py +0 -0
  223. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/instances/entities/class_method.py +0 -0
  224. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/instances/entities/class_parsed.py +0 -0
  225. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/instances/entities/class_property.py +0 -0
  226. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/reflect_decorators.py +0 -0
  227. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/reflection.py +0 -0
  228. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/reflexion_concrete.py +0 -0
  229. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/reflexion_concrete_with_abstract.py +0 -0
  230. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/reflexion_instance_with_abstract.py +0 -0
  231. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/reflexion_module.py +0 -0
  232. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/introspection/reflexion_module_with_classname.py +0 -0
  233. {orionis-0.244.0/orionis/luminate/support/paths/contracts → orionis-0.246.0/orionis/luminate/support/parsers}/__init__.py +0 -0
  234. {orionis-0.244.0/orionis/luminate/support/patterns → orionis-0.246.0/orionis/luminate/support/parsers/contracts}/__init__.py +0 -0
  235. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/parsers/contracts/exception_parser.py +0 -0
  236. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/parsers/exception_parser.py +0 -0
  237. {orionis-0.244.0/orionis/luminate/support/standard → orionis-0.246.0/orionis/luminate/support/paths}/__init__.py +0 -0
  238. {orionis-0.244.0/orionis/luminate/support/standard → orionis-0.246.0/orionis/luminate/support/paths}/contracts/__init__.py +0 -0
  239. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/paths/contracts/resolver.py +0 -0
  240. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/paths/resolver.py +0 -0
  241. {orionis-0.244.0/orionis/luminate/test/cases → orionis-0.246.0/orionis/luminate/support/patterns}/__init__.py +0 -0
  242. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/patterns/singleton.py +0 -0
  243. {orionis-0.244.0/orionis/luminate/test/core → orionis-0.246.0/orionis/luminate/support/standard}/__init__.py +0 -0
  244. {orionis-0.244.0/orionis/luminate/test/core → orionis-0.246.0/orionis/luminate/support/standard}/contracts/__init__.py +0 -0
  245. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/standard/contracts/std.py +0 -0
  246. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/support/standard/std.py +0 -0
  247. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/test/__init__.py +0 -0
  248. {orionis-0.244.0/orionis/luminate/test/entities → orionis-0.246.0/orionis/luminate/test/cases}/__init__.py +0 -0
  249. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/test/cases/test_async.py +0 -0
  250. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/test/cases/test_case.py +0 -0
  251. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/test/cases/test_sync.py +0 -0
  252. {orionis-0.244.0/orionis/luminate/test/enums → orionis-0.246.0/orionis/luminate/test/core}/__init__.py +0 -0
  253. {orionis-0.244.0/orionis/luminate/test/exceptions → orionis-0.246.0/orionis/luminate/test/core/contracts}/__init__.py +0 -0
  254. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/test/core/contracts/test_suite.py +0 -0
  255. {orionis-0.244.0/orionis/luminate/test/output → orionis-0.246.0/orionis/luminate/test/entities}/__init__.py +0 -0
  256. {orionis-0.244.0/orionis/luminate/test/output/contracts → orionis-0.246.0/orionis/luminate/test/enums}/__init__.py +0 -0
  257. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/test/enums/test_status.py +0 -0
  258. {orionis-0.244.0/tests → orionis-0.246.0/orionis/luminate/test/exceptions}/__init__.py +0 -0
  259. {orionis-0.244.0/tests/example → orionis-0.246.0/orionis/luminate/test/output}/__init__.py +0 -0
  260. {orionis-0.244.0/tests/support → orionis-0.246.0/orionis/luminate/test/output/contracts}/__init__.py +0 -0
  261. {orionis-0.244.0 → orionis-0.246.0}/orionis/luminate/test/output/contracts/test_std_out.py +0 -0
  262. {orionis-0.244.0 → orionis-0.246.0}/orionis/static/ascii/icon.ascii +0 -0
  263. {orionis-0.244.0 → orionis-0.246.0}/orionis/static/ascii/info.ascii +0 -0
  264. {orionis-0.244.0 → orionis-0.246.0}/orionis/static/bg/galaxy.jpg +0 -0
  265. {orionis-0.244.0 → orionis-0.246.0}/orionis.egg-info/dependency_links.txt +0 -0
  266. {orionis-0.244.0 → orionis-0.246.0}/orionis.egg-info/entry_points.txt +0 -0
  267. {orionis-0.244.0 → orionis-0.246.0}/orionis.egg-info/requires.txt +0 -0
  268. {orionis-0.244.0 → orionis-0.246.0}/orionis.egg-info/top_level.txt +0 -0
  269. {orionis-0.244.0 → orionis-0.246.0}/setup.cfg +0 -0
  270. {orionis-0.244.0 → orionis-0.246.0}/setup.py +0 -0
  271. {orionis-0.244.0/tests/support/adapters → orionis-0.246.0/tests}/__init__.py +0 -0
  272. {orionis-0.244.0/tests/support/adapters/fakes → orionis-0.246.0/tests/example}/__init__.py +0 -0
  273. {orionis-0.244.0 → orionis-0.246.0}/tests/example/test_example.py +0 -0
  274. {orionis-0.244.0/tests/support/async_io → orionis-0.246.0/tests/support}/__init__.py +0 -0
  275. {orionis-0.244.0/tests/support/environment → orionis-0.246.0/tests/support/adapters}/__init__.py +0 -0
  276. {orionis-0.244.0/tests/support/inspection → orionis-0.246.0/tests/support/adapters/fakes}/__init__.py +0 -0
  277. {orionis-0.244.0 → orionis-0.246.0}/tests/support/adapters/fakes/fake_dict.py +0 -0
  278. {orionis-0.244.0 → orionis-0.246.0}/tests/support/adapters/test_doct_dict.py +0 -0
  279. {orionis-0.244.0/tests/support/inspection/fakes → orionis-0.246.0/tests/support/async_io}/__init__.py +0 -0
  280. {orionis-0.244.0 → orionis-0.246.0}/tests/support/async_io/test_async_coroutine.py +0 -0
  281. {orionis-0.244.0/tests/support/parsers → orionis-0.246.0/tests/support/environment}/__init__.py +0 -0
  282. {orionis-0.244.0 → orionis-0.246.0}/tests/support/environment/test_env.py +0 -0
  283. {orionis-0.244.0/tests/support/parsers/fakes → orionis-0.246.0/tests/support/inspection}/__init__.py +0 -0
  284. {orionis-0.244.0/tests/support/path → orionis-0.246.0/tests/support/inspection/fakes}/__init__.py +0 -0
  285. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/fakes/fake_reflect_dependencies.py +0 -0
  286. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/fakes/fake_reflect_instance.py +0 -0
  287. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/fakes/fake_reflection_concrete.py +0 -0
  288. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/fakes/fake_reflection_concrete_with_abstract.py +0 -0
  289. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/fakes/fake_reflection_instance_with_abstract.py +0 -0
  290. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/test_reflect_dependencies.py +0 -0
  291. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/test_reflection_concrete.py +0 -0
  292. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/test_reflection_concrete_with_abstract.py +0 -0
  293. {orionis-0.244.0 → orionis-0.246.0}/tests/support/inspection/test_reflection_instance_with_abstract.py +0 -0
  294. {orionis-0.244.0/tests/support/patterns → orionis-0.246.0/tests/support/parsers}/__init__.py +0 -0
  295. {orionis-0.244.0/tests/support/standard → orionis-0.246.0/tests/support/parsers/fakes}/__init__.py +0 -0
  296. {orionis-0.244.0 → orionis-0.246.0}/tests/support/parsers/fakes/fake_custom_error.py +0 -0
  297. {orionis-0.244.0 → orionis-0.246.0}/tests/support/parsers/test_exception_parser.py +0 -0
  298. {orionis-0.244.0 → orionis-0.246.0}/tests/support/path/test_resolver.py +0 -0
  299. {orionis-0.244.0 → orionis-0.246.0}/tests/support/patterns/test_singleton.py +0 -0
  300. {orionis-0.244.0 → orionis-0.246.0}/tests/support/standard/test_std.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.244.0
3
+ Version: 0.246.0
4
4
  Summary: Orionis Framework – Elegant, Fast, and Powerful.
5
5
  Home-page: https://github.com/orionis-framework/framework
6
6
  Author: Raul Mauricio Uñate Castro
@@ -5,7 +5,7 @@
5
5
  NAME = "orionis"
6
6
 
7
7
  # Current version of the framework
8
- VERSION = "0.244.0"
8
+ VERSION = "0.246.0"
9
9
 
10
10
  # Full name of the author or maintainer of the project
11
11
  AUTHOR = "Raul Mauricio Uñate Castro"
@@ -0,0 +1,37 @@
1
+ from dataclasses import dataclass
2
+ from typing import List
3
+
4
+ @dataclass(frozen=True, kw_only=True)
5
+ class Testing:
6
+ """
7
+ Testing is a dataclass that holds configuration options for running tests.
8
+
9
+ Attributes:
10
+ verbosity (int): The verbosity level of the test output. Default is 2.
11
+ - 0: Silent
12
+ - 1: Minimal output
13
+ - 2: Detailed output (default)
14
+ execution_mode (ExecutionMode): The mode of test execution. Default is ExecutionMode.SEQUENTIAL.
15
+ - ExecutionMode.SEQUENTIAL: Tests are executed one after another.
16
+ - ExecutionMode.PARALLEL: Tests are executed in parallel.
17
+ max_workers (int): The maximum number of worker threads/processes to use when running tests in parallel. Default is 4.
18
+ fail_fast (bool): Whether to stop execution after the first test failure. Default is False.
19
+ print_result (bool): Whether to print the test results to the console. Default is True.
20
+ throw_exception (bool): Whether to throw an exception if a test fails. Default is False.
21
+ base_path (str): The base directory where tests are located. Default is 'tests'.
22
+ folder_path (str): The folder path pattern to search for tests. Default is '*'.
23
+ pattern (str): The filename pattern to identify test files. Default is 'test_*.py'.
24
+ test_name_pattern (str | None): A pattern to match specific test names. Default is None.
25
+ tags (List[str] | None): A list of tags to filter tests. Default is None.
26
+ """
27
+ verbosity: int = 2
28
+ execution_mode: str = 'sequential'
29
+ max_workers: int = 4
30
+ fail_fast: bool = False
31
+ print_result: bool = True
32
+ throw_exception: bool = False
33
+ base_path: str = 'tests'
34
+ folder_path: str = '*'
35
+ pattern: str = 'test_*.py'
36
+ test_name_pattern: str | None = None,
37
+ tags: List[str] | None = None
@@ -0,0 +1,27 @@
1
+ from abc import ABC
2
+ from dataclasses import dataclass
3
+
4
+ @dataclass
5
+ class EmptyData:
6
+ """
7
+ A placeholder dataclass that can be used as a default or empty configuration.
8
+ This class doesn't have any fields or data, but serves as a default value
9
+ for the 'config' attribute in classes implementing IConfig.
10
+ """
11
+ pass
12
+
13
+ class IConfig(ABC):
14
+ """
15
+ An abstract base class that defines an interface for classes that must have
16
+ a `config` attribute.
17
+
18
+ The subclass is required to implement the `config` attribute, which should be
19
+ a dataclass instance representing the configuration data.
20
+
21
+ Attributes
22
+ ----------
23
+ config : object
24
+ A dataclass instance representing the configuration.
25
+ """
26
+
27
+ config = EmptyData()
@@ -8,6 +8,7 @@ from orionis.luminate.support.environment.functions import (
8
8
  _serialize_value,
9
9
  _delete_file
10
10
  )
11
+ from orionis.luminate.support.patterns.singleton import SingletonMeta
11
12
 
12
13
  class Env(IEnv):
13
14
  """
@@ -0,0 +1,11 @@
1
+ from dataclasses import dataclass
2
+ from typing import Any, Dict
3
+
4
+ @dataclass(frozen=True, kw_only=True)
5
+ class AbstractClassAttributes:
6
+ """
7
+ A class to represent the attributes of an entity.
8
+ """
9
+ public: Dict[str, Any]
10
+ private: Dict[str, Any]
11
+ protected: Dict[str, Any]
@@ -3,11 +3,11 @@ import ast
3
3
  import inspect
4
4
  import types
5
5
  from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Type, TypeVar
6
- from orionis.luminate.support.introspection.contracts.reflexion_abstract import IReflexionAbstract
6
+ from orionis.luminate.support.introspection.abstracts.entities.abstract_class_attributes import AbstractClassAttributes
7
7
 
8
8
  ABC = TypeVar('ABC', bound=abc.ABC)
9
9
 
10
- class ReflexionAbstract(IReflexionAbstract):
10
+ class ReflexionAbstract:
11
11
  """A reflection object encapsulating an abstract class.
12
12
 
13
13
  Parameters
@@ -64,7 +64,7 @@ class ReflexionAbstract(IReflexionAbstract):
64
64
  """
65
65
  return self._abstract.__module__
66
66
 
67
- def getAllAttributes(self) -> Dict[str, Any]:
67
+ def getAllAttributes(self) -> AbstractClassAttributes:
68
68
  """
69
69
  Get all attributes of the abstract class.
70
70
 
@@ -93,11 +93,161 @@ class ReflexionAbstract(IReflexionAbstract):
93
93
  else:
94
94
  public[attr] = value
95
95
 
96
- return {"public": public, "protected": protected, "private": private}
96
+ return AbstractClassAttributes(
97
+ public=public,
98
+ private=private,
99
+ protected=protected
100
+ )
97
101
 
102
+ def getAttributes(self) -> Dict[str, Any]:
103
+ """
104
+ Get all attributes of the instance.
98
105
 
106
+ Returns
107
+ -------
108
+ Dict[str, Any]
109
+ Dictionary of attribute names and their values
110
+ """
111
+ attr = self.getAllAttributes()
112
+ return {**attr.public, **attr.private, **attr.protected}
99
113
 
114
+ def getPublicAttributes(self) -> Dict[str, Any]:
115
+ """
116
+ Get all public attributes of the instance.
100
117
 
118
+ Returns
119
+ -------
120
+ Dict[str, Any]
121
+ Dictionary of public attribute names and their values
122
+ """
123
+ attr = self.getAllAttributes()
124
+ return attr.public
125
+
126
+ def getPrivateAttributes(self) -> Dict[str, Any]:
127
+ """
128
+ Get all private attributes of the instance.
129
+
130
+ Returns
131
+ -------
132
+ Dict[str, Any]
133
+ Dictionary of private attribute names and their values
134
+ """
135
+ attr = self.getAllAttributes()
136
+ return attr.private
137
+
138
+ def getProtectedAttributes(self) -> Dict[str, Any]:
139
+ """
140
+ Get all Protected attributes of the instance.
141
+
142
+ Returns
143
+ -------
144
+ Dict[str, Any]
145
+ Dictionary of Protected attribute names and their values
146
+ """
147
+ attr = self.getAllAttributes()
148
+ return attr.protected
149
+
150
+ def getAllMethods(self) -> Dict[str, List[str]]:
151
+ """
152
+ Categorize all methods and relevant members of the abstract class into public, private, protected,
153
+ static, asynchronous, synchronous, class methods, magic methods, abstract methods, and properties.
154
+
155
+ Returns
156
+ -------
157
+ Dict[str, List[str]]
158
+ A dictionary categorizing methods and attributes into various types.
159
+ """
160
+ class_name = self.getClassName()
161
+ private_prefix = f"_{class_name}"
162
+ attributes = set(self.getAttributes().keys()) | {attr for attr in dir(self._abstract) if attr.startswith('_abc_')}
163
+
164
+ result = {
165
+ "public": [],
166
+ "private": [],
167
+ "protected": [],
168
+ "static": [],
169
+ "asynchronous": [],
170
+ "synchronous": [],
171
+ "class_methods": [],
172
+ "asynchronous_static": [],
173
+ "synchronous_static": [],
174
+ "magic": [],
175
+ "abstract": [],
176
+ "abstract_class_methods": [],
177
+ "abstract_static_methods": []
178
+ }
179
+
180
+ # Precompute all members once
181
+ members = inspect.getmembers(self._abstract)
182
+ static_attrs = {}
183
+
184
+ # First pass to collect all relevant information
185
+ for name, attr in members:
186
+ if name in attributes:
187
+ continue
188
+
189
+ # Get static attribute once
190
+ static_attr = inspect.getattr_static(self._abstract, name)
191
+ static_attrs[name] = static_attr
192
+
193
+ # Magic methods
194
+ if name.startswith("__") and name.endswith("__"):
195
+ result["magic"].append(name)
196
+ continue
197
+
198
+ # Static and class methods
199
+ if isinstance(static_attr, staticmethod):
200
+ result["static"].append(name)
201
+ elif isinstance(static_attr, classmethod):
202
+ result["class_methods"].append(name)
203
+
204
+ # Private, protected, public
205
+ if name.startswith(private_prefix):
206
+ clean_name = name.replace(private_prefix, "")
207
+ result["private"].append(clean_name)
208
+ elif name.startswith("_"):
209
+ result["protected"].append(name)
210
+ else:
211
+ result["public"].append(name)
212
+
213
+ # Async methods
214
+ if inspect.iscoroutinefunction(attr):
215
+ clean_name = name.replace(private_prefix, "")
216
+ if name in result["static"]:
217
+ result["asynchronous_static"].append(clean_name)
218
+ else:
219
+ result["asynchronous"].append(clean_name)
220
+
221
+ # Second pass for synchronous methods (needs info from first pass)
222
+ for name, attr in members:
223
+ if name in attributes or name in result["magic"] or name in result["class_methods"] or name in result["static"]:
224
+ continue
225
+
226
+ if inspect.isfunction(attr):
227
+ clean_name = name.replace(private_prefix, "")
228
+ if clean_name not in result["asynchronous"]:
229
+ result["synchronous"].append(clean_name)
230
+
231
+ # Synchronous static methods
232
+ for name in result["static"]:
233
+ if name not in attributes and name not in result["asynchronous_static"] and name not in result["class_methods"]:
234
+ result["synchronous_static"].append(name)
235
+
236
+ # Abstract methods
237
+ abstract_methods = getattr(self._abstract, "__abstractmethods__", set())
238
+ for name in abstract_methods:
239
+ if name in attributes:
240
+ continue
241
+
242
+ static_attr = static_attrs.get(name, inspect.getattr_static(self._abstract, name))
243
+ if isinstance(static_attr, staticmethod):
244
+ result["abstract_static_methods"].append(name)
245
+ elif isinstance(static_attr, classmethod):
246
+ result["abstract_class_methods"].append(name)
247
+ elif not isinstance(static_attr, property):
248
+ result["abstract"].append(name)
249
+
250
+ return result
101
251
 
102
252
 
103
253
 
@@ -109,19 +259,7 @@ class ReflexionAbstract(IReflexionAbstract):
109
259
 
110
260
 
111
261
 
112
- def getAbstractMethods(self) -> Set[str]:
113
- """Get all abstract method names required by the class.
114
262
 
115
- Returns
116
- -------
117
- Set[str]
118
- Set of abstract method names
119
- """
120
- methods = []
121
- for method in self._abstract.__abstractmethods__:
122
- if not isinstance(getattr(self._abstract, method), property):
123
- methods.append(method)
124
- return set(methods)
125
263
 
126
264
  def getAbstractProperties(self) -> Set[str]:
127
265
  """Get all abstract property names required by the class.
@@ -171,8 +171,8 @@ class ReflectionInstance(IReflectionInstance):
171
171
  def getAllMethods(self):
172
172
  """
173
173
  Retrieves and categorizes all methods of the instance's class into various classifications.
174
- This method inspects the instance's class and its methods, categorizing them into public, private,
175
- protected, static, asynchronous, synchronous, class methods, asynchronous static, synchronous static,
174
+ This method inspects the instance's class and its methods, categorizing them into public, private,
175
+ protected, static, asynchronous, synchronous, class methods, asynchronous static, synchronous static,
176
176
  and magic methods.
177
177
  Returns
178
178
  -------
@@ -0,0 +1,122 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any, Dict, List, Optional
3
+ from orionis.luminate.test.enums.test_mode import ExecutionMode
4
+
5
+ class IUnitTest(ABC):
6
+
7
+ @abstractmethod
8
+ def configure(
9
+ self,
10
+ verbosity: int = None,
11
+ execution_mode: ExecutionMode = None,
12
+ max_workers: int = None,
13
+ fail_fast: bool = None,
14
+ print_result: bool = None
15
+ ):
16
+ """
17
+ Configures the UnitTest instance with the specified parameters.
18
+
19
+ Parameters:
20
+ verbosity (int, optional): The verbosity level for test output. Defaults to None.
21
+ execution_mode (ExecutionMode, optional): The mode in which the tests will be executed. Defaults to None.
22
+ max_workers (int, optional): The maximum number of workers to use for parallel execution. Defaults to None.
23
+ fail_fast (bool, optional): Whether to stop execution upon the first failure. Defaults to None.
24
+ print_result (bool, optional): Whether to print the test results after execution. Defaults to None.
25
+
26
+ Returns:
27
+ UnitTest: The configured UnitTest instance.
28
+ """
29
+ pass
30
+
31
+ @abstractmethod
32
+ def discoverTestsInFolder(
33
+ self,
34
+ folder_path: str,
35
+ base_path: str = "tests",
36
+ pattern: str = "test_*.py",
37
+ test_name_pattern: Optional[str] = None,
38
+ tags: Optional[List[str]] = None
39
+ ):
40
+ """
41
+ Discovers and loads unit tests from a specified folder.
42
+ Args:
43
+ folder_path (str): The relative path to the folder containing the tests.
44
+ base_path (str, optional): The base directory where the test folder is located. Defaults to "tests".
45
+ pattern (str, optional): The filename pattern to match test files. Defaults to "test_*.py".
46
+ test_name_pattern (Optional[str], optional): A pattern to filter test names. Defaults to None.
47
+ tags (Optional[List[str]], optional): A list of tags to filter tests. Defaults to None.
48
+ Returns:
49
+ UnitTest: The current instance of the UnitTest class with the discovered tests added.
50
+ Raises:
51
+ ValueError: If the test folder does not exist, no tests are found, or an error occurs during test discovery.
52
+ """
53
+ pass
54
+
55
+ @abstractmethod
56
+ def discoverTestsInModule(self, module_name: str, test_name_pattern: Optional[str] = None):
57
+ """
58
+ Discovers and loads tests from a specified module, optionally filtering them
59
+ by a test name pattern, and adds them to the test suite.
60
+ Args:
61
+ module_name (str): The name of the module to discover tests from.
62
+ test_name_pattern (Optional[str]): A pattern to filter test names. Only
63
+ tests matching this pattern will be included. Defaults to None.
64
+ Returns:
65
+ UnitTest: The current instance of the UnitTest class, allowing method chaining.
66
+ Raises:
67
+ ValueError: If the specified module cannot be imported.
68
+ """
69
+ pass
70
+
71
+ @abstractmethod
72
+ def run(self, print_result: bool = None, throw_exception: bool = False) -> Dict[str, Any]:
73
+ """
74
+ Executes the test suite and processes the results.
75
+ Args:
76
+ print_result (bool, optional): If provided, overrides the instance's
77
+ `print_result` attribute to determine whether to print the test results.
78
+ throw_exception (bool, optional): If True, raises an exception if any
79
+ test failures or errors are detected.
80
+ Returns:
81
+ Dict[str, Any]: A summary of the test execution, including details such as
82
+ execution time, test results, and a timestamp.
83
+ Raises:
84
+ OrionisTestFailureException: If `throw_exception` is True and there are
85
+ test failures or errors.
86
+ """
87
+ pass
88
+
89
+ @abstractmethod
90
+ def getTestNames(self) -> List[str]:
91
+ """
92
+ Retrieves a list of test names from the test suite.
93
+
94
+ This method flattens the test suite and extracts the unique identifier
95
+ (`id`) of each test case.
96
+
97
+ Returns:
98
+ List[str]: A list of test names (unique identifiers) from the test suite.
99
+ """
100
+ pass
101
+
102
+ @abstractmethod
103
+ def getTestCount(self) -> int:
104
+ """
105
+ Calculate the total number of tests in the test suite.
106
+
107
+ This method flattens the test suite structure and counts the total
108
+ number of individual test cases.
109
+
110
+ Returns:
111
+ int: The total number of test cases in the test suite.
112
+ """
113
+ pass
114
+
115
+ @abstractmethod
116
+ def clearTests(self) -> None:
117
+ """
118
+ Clears the current test suite by reinitializing it to an empty `unittest.TestSuite`.
119
+
120
+ This method is used to reset the test suite, removing any previously added tests.
121
+ """
122
+ pass
@@ -0,0 +1,92 @@
1
+ import re
2
+ from os import walk
3
+ from orionis.luminate.config.entities.testing import Testing
4
+ from orionis.luminate.test.core.test_unit import UnitTest
5
+ from orionis.luminate.test.exceptions.test_config_exception import OrionisTestConfigException
6
+
7
+ class TestSuite:
8
+
9
+ @staticmethod
10
+ def config(config:Testing) -> UnitTest:
11
+ """
12
+ Configures and initializes a test suite based on the provided configuration.
13
+ Args:
14
+ config (Testing): An instance of the `Testing` class containing configuration
15
+ parameters for the test suite.
16
+ Returns:
17
+ UnitTest: An initialized test suite configured with the provided settings.
18
+ Raises:
19
+ OrionisTestConfigException: If the `config` parameter is not an instance of
20
+ the `Testing` class.
21
+ The function performs the following steps:
22
+ 1. Validates that the `config` parameter is an instance of the `Testing` class.
23
+ 2. Initializes a `UnitTest` object and assigns configuration values to it.
24
+ 3. Extracts configuration values such as `base_path`, `folder_path`, and `pattern`.
25
+ 4. Discovers folders matching the specified `folder_path` and `pattern`:
26
+ - If `folder_path` is '*', all matching folders in the `base_path` are discovered.
27
+ - If `folder_path` is a list, matching folders in each path are discovered.
28
+ - Otherwise, matching folders in the specified `folder_path` are discovered.
29
+ 5. Adds discovered folders to the test suite by calling `discoverTestsInFolder`.
30
+ Notes:
31
+ - The `list_matching_folders` helper function is used to find folders matching
32
+ the specified pattern.
33
+ - The `pattern` supports wildcard characters (`*` and `?`) for flexible matching.
34
+ - The `test_name_pattern` and `tags` from the `config` are used when adding
35
+ folders to the test suite.
36
+ """
37
+
38
+ # Check if the config is an instance of Testing
39
+ if not isinstance(config, Testing):
40
+ raise OrionisTestConfigException("The config parameter must be an instance of the Testing class.")
41
+
42
+ # Initialize the test suite
43
+ tests = UnitTest()
44
+
45
+ # Assign config values to the test suite
46
+ tests.configure(
47
+ verbosity=config.verbosity,
48
+ execution_mode=config.execution_mode,
49
+ max_workers=config.max_workers,
50
+ fail_fast=config.fail_fast,
51
+ print_result=config.print_result,
52
+ throw_exception=config.throw_exception
53
+ )
54
+
55
+ # Extract configuration values
56
+ base_path = config.base_path
57
+ folder_path = config.folder_path
58
+ pattern = config.pattern
59
+
60
+ # Helper function to list folders matching the pattern
61
+ def list_matching_folders(custom_path: str, pattern: str):
62
+ matched_folders = []
63
+ for root, _, files in walk(custom_path):
64
+ for file in files:
65
+ if re.fullmatch(pattern.replace('*', '.*').replace('?', '.'), file):
66
+ relative_path = root.replace(base_path, '').replace('\\', '/').lstrip('/')
67
+ if relative_path not in matched_folders:
68
+ matched_folders.append(relative_path)
69
+ return matched_folders
70
+
71
+ # Discover folders
72
+ discovered_folders = []
73
+ if folder_path == '*':
74
+ discovered_folders.extend(list_matching_folders(base_path, pattern))
75
+ elif isinstance(folder_path, list):
76
+ for custom_path in folder_path:
77
+ discovered_folders.extend(list_matching_folders(custom_path, pattern))
78
+ else:
79
+ discovered_folders.extend(list_matching_folders(folder_path, pattern))
80
+
81
+ # Add discovered folders to the test suite
82
+ for folder in discovered_folders:
83
+ tests.discoverTestsInFolder(
84
+ folder_path=folder,
85
+ base_path=base_path,
86
+ pattern=pattern,
87
+ test_name_pattern=config.test_name_pattern if config.test_name_pattern else None,
88
+ tags=config.tags if config.tags else None
89
+ )
90
+
91
+ # Return the initialized test suite
92
+ return tests