orionis 0.205.0__tar.gz → 0.207.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 (218) hide show
  1. {orionis-0.205.0/orionis.egg-info → orionis-0.207.0}/PKG-INFO +1 -1
  2. {orionis-0.205.0 → orionis-0.207.0}/orionis/framework.py +1 -1
  3. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/inspection/reflexion_abstract.py +69 -27
  4. {orionis-0.205.0 → orionis-0.207.0/orionis.egg-info}/PKG-INFO +1 -1
  5. {orionis-0.205.0 → orionis-0.207.0}/orionis.egg-info/SOURCES.txt +3 -1
  6. orionis-0.207.0/tests/support/inspection/fakes/fake_reflection_abstract.py +218 -0
  7. orionis-0.207.0/tests/support/inspection/test_reflection_abstract.py +229 -0
  8. {orionis-0.205.0 → orionis-0.207.0}/tests/support/inspection/test_reflection_instance.py +26 -32
  9. {orionis-0.205.0 → orionis-0.207.0}/LICENCE +0 -0
  10. {orionis-0.205.0 → orionis-0.207.0}/MANIFEST.in +0 -0
  11. {orionis-0.205.0 → orionis-0.207.0}/README.md +0 -0
  12. {orionis-0.205.0 → orionis-0.207.0}/orionis/__init__.py +0 -0
  13. {orionis-0.205.0 → orionis-0.207.0}/orionis/console.py +0 -0
  14. {orionis-0.205.0 → orionis-0.207.0}/orionis/installer/__init__.py +0 -0
  15. {orionis-0.205.0 → orionis-0.207.0}/orionis/installer/contracts/__init__.py +0 -0
  16. {orionis-0.205.0 → orionis-0.207.0}/orionis/installer/contracts/manager.py +0 -0
  17. {orionis-0.205.0 → orionis-0.207.0}/orionis/installer/contracts/output.py +0 -0
  18. {orionis-0.205.0 → orionis-0.207.0}/orionis/installer/contracts/setup.py +0 -0
  19. {orionis-0.205.0 → orionis-0.207.0}/orionis/installer/manager.py +0 -0
  20. {orionis-0.205.0 → orionis-0.207.0}/orionis/installer/output.py +0 -0
  21. {orionis-0.205.0 → orionis-0.207.0}/orionis/installer/setup.py +0 -0
  22. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/__init__.py +0 -0
  23. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/application.py +0 -0
  24. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/config/__init__.py +0 -0
  25. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/config/app.py +0 -0
  26. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/config/auth.py +0 -0
  27. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/config/cache.py +0 -0
  28. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/config/cors.py +0 -0
  29. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/config/database.py +0 -0
  30. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/config/filesystems.py +0 -0
  31. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/config/logging.py +0 -0
  32. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/config/mail.py +0 -0
  33. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/config/queue.py +0 -0
  34. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/config/session.py +0 -0
  35. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/__init__.py +0 -0
  36. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/base/__init__.py +0 -0
  37. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/base/command.py +0 -0
  38. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/command_filter.py +0 -0
  39. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/commands/__init__.py +0 -0
  40. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
  41. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/commands/help.py +0 -0
  42. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
  43. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/commands/version.py +0 -0
  44. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/exceptions/__init__.py +0 -0
  45. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/exceptions/cli-orionis-value-error.py +0 -0
  46. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
  47. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/exceptions/cli_runtime_error.py +0 -0
  48. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/exceptions/cli_schedule_exception.py +0 -0
  49. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/kernel.py +0 -0
  50. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/output/__init__.py +0 -0
  51. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/output/console.py +0 -0
  52. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/output/executor.py +0 -0
  53. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/output/progress_bar.py +0 -0
  54. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/output/styles.py +0 -0
  55. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/console/parser.py +0 -0
  56. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/container/__init__.py +0 -0
  57. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/container/container.py +0 -0
  58. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/container/container_integrity.py +0 -0
  59. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/container/exception.py +0 -0
  60. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/container/lifetimes.py +0 -0
  61. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/container/resolve.py +0 -0
  62. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/__init__.py +0 -0
  63. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/application.py +0 -0
  64. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/config/__init__.py +0 -0
  65. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/config/config.py +0 -0
  66. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/console/__init__.py +0 -0
  67. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/console/base/__init__.py +0 -0
  68. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/console/base/command.py +0 -0
  69. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/console/command_filter.py +0 -0
  70. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/console/kernel.py +0 -0
  71. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/console/output/__init__.py +0 -0
  72. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/console/output/console.py +0 -0
  73. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/console/output/executor.py +0 -0
  74. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/console/output/progress_bar.py +0 -0
  75. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/console/parser.py +0 -0
  76. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/console/task_manager.py +0 -0
  77. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/container/container.py +0 -0
  78. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/container/container_integrity.py +0 -0
  79. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/__init__.py +0 -0
  80. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/commands/__init__.py +0 -0
  81. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/commands/commands_facade.py +0 -0
  82. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/commands/scheduler_facade.py +0 -0
  83. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/config/__init__.py +0 -0
  84. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/config/config_facade.py +0 -0
  85. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/environment/__init__.py +0 -0
  86. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/environment/environment_facade.py +0 -0
  87. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/facade.py +0 -0
  88. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/files/__init__.py +0 -0
  89. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/files/path_facade.py +0 -0
  90. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/log/__init__.py +0 -0
  91. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/log/log_facade.py +0 -0
  92. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/tests/__init__.py +0 -0
  93. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/facades/tests/tests_facade.py +0 -0
  94. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/foundation/__init__.py +0 -0
  95. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/foundation/bootstraper.py +0 -0
  96. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/foundation/config/__init__.py +0 -0
  97. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/foundation/config/config_bootstrapper.py +0 -0
  98. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/foundation/console/__init__.py +0 -0
  99. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/foundation/console/command_bootstrapper.py +0 -0
  100. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/foundation/environment/__init__.py +0 -0
  101. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/foundation/environment/environment_bootstrapper.py +0 -0
  102. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/foundation/providers/__init__.py +0 -0
  103. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/foundation/providers/service_providers_bootstrapper.py +0 -0
  104. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/providers/__init__.py +0 -0
  105. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/providers/service_provider.py +0 -0
  106. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/__init__.py +0 -0
  107. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/commands/__init__.py +0 -0
  108. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/commands/reactor_commands_service.py +0 -0
  109. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/commands/schedule_service.py +0 -0
  110. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/config/__init__.py +0 -0
  111. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/config/config_service.py +0 -0
  112. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/environment/__init__.py +0 -0
  113. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/environment/environment_service.py +0 -0
  114. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/files/__init__.py +0 -0
  115. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/files/path_resolver_service.py +0 -0
  116. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/log/__init__.py +0 -0
  117. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/services/log/log_service.py +0 -0
  118. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/support/exception_parse.py +0 -0
  119. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/support/reflection.py +0 -0
  120. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/contracts/support/std.py +0 -0
  121. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/__init__.py +0 -0
  122. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/app_facade.py +0 -0
  123. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/commands/__init__.py +0 -0
  124. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/commands/commands_facade.py +0 -0
  125. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/commands/scheduler_facade.py +0 -0
  126. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/config/__init__.py +0 -0
  127. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/config/config_facade.py +0 -0
  128. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/environment/__init__.py +0 -0
  129. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/environment/environment_facade.py +0 -0
  130. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/files/__init__.py +0 -0
  131. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/files/path_facade.py +0 -0
  132. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/log/__init__.py +0 -0
  133. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/log/log_facade.py +0 -0
  134. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/tests/__init__.py +0 -0
  135. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/facades/tests/tests_facade.py +0 -0
  136. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/__init__.py +0 -0
  137. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/config/__init__.py +0 -0
  138. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/config/config_bootstrapper.py +0 -0
  139. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/console/__init__.py +0 -0
  140. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/console/command_bootstrapper.py +0 -0
  141. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/environment/__init__.py +0 -0
  142. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/environment/environment_bootstrapper.py +0 -0
  143. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/exceptions/__init__.py +0 -0
  144. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/exceptions/exception_bootstrapper.py +0 -0
  145. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/exceptions/exception_providers.py +0 -0
  146. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/providers/__init__.py +0 -0
  147. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/foundation/providers/service_providers_bootstrapper.py +0 -0
  148. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/patterns/__init__.py +0 -0
  149. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/patterns/singleton.py +0 -0
  150. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/__init__.py +0 -0
  151. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/commands/__init__.py +0 -0
  152. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/commands/reactor_commands_service_provider.py +0 -0
  153. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/commands/scheduler_provider.py +0 -0
  154. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/config/__init__.py +0 -0
  155. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/config/config_service_provider.py +0 -0
  156. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/environment/__init__.py +0 -0
  157. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/environment/environment__service_provider.py +0 -0
  158. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/files/__init__.py +0 -0
  159. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/files/paths_provider.py +0 -0
  160. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/log/__init__.py +0 -0
  161. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/log/log_service_provider.py +0 -0
  162. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/providers/service_provider.py +0 -0
  163. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/__init__.py +0 -0
  164. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/commands/__init__.py +0 -0
  165. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/commands/reactor_commands_service.py +0 -0
  166. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/commands/scheduler_service.py +0 -0
  167. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/config/__init__.py +0 -0
  168. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/config/config_service.py +0 -0
  169. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/environment/__init__.py +0 -0
  170. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/environment/environment_service.py +0 -0
  171. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/files/__init__.py +0 -0
  172. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/files/path_resolver_service.py +0 -0
  173. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/log/__init__.py +0 -0
  174. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/services/log/log_service.py +0 -0
  175. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/asyn_run.py +0 -0
  176. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/dot_dict.py +0 -0
  177. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/exception_parse.py +0 -0
  178. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/inspection/__init__.py +0 -0
  179. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/inspection/container_integrity.py +0 -0
  180. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/inspection/functions.py +0 -0
  181. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/inspection/reflection.py +0 -0
  182. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/inspection/reflexion_concrete.py +0 -0
  183. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/inspection/reflexion_concrete_with_abstract.py +0 -0
  184. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/inspection/reflexion_instance.py +0 -0
  185. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/inspection/reflexion_instance_with_abstract.py +0 -0
  186. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/inspection/reflexion_module.py +0 -0
  187. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/inspection/reflexion_module_with_classname.py +0 -0
  188. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/reflection.py +0 -0
  189. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/support/std.py +0 -0
  190. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/test/__init__.py +0 -0
  191. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/test/test_exception.py +0 -0
  192. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/test/test_output.py +0 -0
  193. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/test/test_result.py +0 -0
  194. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/test/test_status.py +0 -0
  195. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/test/tests.py +0 -0
  196. {orionis-0.205.0 → orionis-0.207.0}/orionis/luminate/test/unit_test.py +0 -0
  197. {orionis-0.205.0 → orionis-0.207.0}/orionis/static/ascii/icon.ascii +0 -0
  198. {orionis-0.205.0 → orionis-0.207.0}/orionis/static/ascii/info.ascii +0 -0
  199. {orionis-0.205.0 → orionis-0.207.0}/orionis/static/bg/galaxy.jpg +0 -0
  200. {orionis-0.205.0 → orionis-0.207.0}/orionis/static/favicon/OrionisFrameworkFavicon.png +0 -0
  201. {orionis-0.205.0 → orionis-0.207.0}/orionis/static/logos/OrionisFramework.jpg +0 -0
  202. {orionis-0.205.0 → orionis-0.207.0}/orionis/static/logos/OrionisFramework.png +0 -0
  203. {orionis-0.205.0 → orionis-0.207.0}/orionis/static/logos/OrionisFramework.psd +0 -0
  204. {orionis-0.205.0 → orionis-0.207.0}/orionis/static/logos/OrionisFramework2.png +0 -0
  205. {orionis-0.205.0 → orionis-0.207.0}/orionis/static/logos/OrionisFramework3.png +0 -0
  206. {orionis-0.205.0 → orionis-0.207.0}/orionis.egg-info/dependency_links.txt +0 -0
  207. {orionis-0.205.0 → orionis-0.207.0}/orionis.egg-info/entry_points.txt +0 -0
  208. {orionis-0.205.0 → orionis-0.207.0}/orionis.egg-info/requires.txt +0 -0
  209. {orionis-0.205.0 → orionis-0.207.0}/orionis.egg-info/top_level.txt +0 -0
  210. {orionis-0.205.0 → orionis-0.207.0}/setup.cfg +0 -0
  211. {orionis-0.205.0 → orionis-0.207.0}/setup.py +0 -0
  212. {orionis-0.205.0 → orionis-0.207.0}/tests/__init__.py +0 -0
  213. {orionis-0.205.0 → orionis-0.207.0}/tests/example/__init__.py +0 -0
  214. {orionis-0.205.0 → orionis-0.207.0}/tests/example/test_example.py +0 -0
  215. {orionis-0.205.0 → orionis-0.207.0}/tests/support/__init__.py +0 -0
  216. {orionis-0.205.0 → orionis-0.207.0}/tests/support/inspection/__init__.py +0 -0
  217. {orionis-0.205.0 → orionis-0.207.0}/tests/support/inspection/fakes/__init__.py +0 -0
  218. /orionis-0.205.0/tests/support/inspection/fakes/fake_reflection.py → /orionis-0.207.0/tests/support/inspection/fakes/fake_reflection_instance.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.205.0
3
+ Version: 0.207.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.205.0"
8
+ VERSION = "0.207.0"
9
9
 
10
10
  # Full name of the author or maintainer of the project
11
11
  AUTHOR = "Raul Mauricio Uñate Castro"
@@ -1,7 +1,8 @@
1
- from typing import Any, Type, Dict, List, Tuple, Callable, Optional, TypeVar, Set
2
- import inspect
3
1
  import abc
4
- from functools import wraps
2
+ import ast
3
+ import inspect
4
+ import types
5
+ from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Type, TypeVar
5
6
 
6
7
  ABC = TypeVar('ABC', bound=abc.ABC)
7
8
 
@@ -51,7 +52,10 @@ class ReflexionAbstract:
51
52
  Set[str]
52
53
  Set of abstract method names
53
54
  """
54
- return {name for name, _ in self._abstract.__abstractmethods__}
55
+ methods = []
56
+ for method in self._abstract.__abstractmethods__:
57
+ methods.append(method)
58
+ return set(methods)
55
59
 
56
60
  def getConcreteMethods(self) -> Dict[str, Callable]:
57
61
  """Get all concrete methods implemented in the abstract class.
@@ -88,13 +92,32 @@ class ReflexionAbstract:
88
92
  Returns
89
93
  -------
90
94
  List[str]
91
- List of class method names
95
+ List of class method names, excluding private/protected methods (starting with '_')
96
+
97
+ Notes
98
+ -----
99
+ - Uses inspect.getattr_static to avoid method binding
100
+ - Properly handles both @classmethod decorator and classmethod instances
101
+ - Filters out private/protected methods (starting with '_')
102
+
103
+ Examples
104
+ --------
105
+ >>> class MyAbstract(ABC):
106
+ ... @classmethod
107
+ ... def factory(cls): pass
108
+ ... @classmethod
109
+ ... def _protected_factory(cls): pass
110
+ >>> reflex = ReflexionAbstract(MyAbstract)
111
+ >>> reflex.getClassMethods()
112
+ ['factory']
92
113
  """
93
114
  return [
94
- name for name, member in inspect.getmembers(
95
- self._abstract,
96
- predicate=lambda x: isinstance(x, classmethod))
97
- if not name.startswith('_')
115
+ name for name in dir(self._abstract)
116
+ if not name.startswith('_') and
117
+ isinstance(
118
+ inspect.getattr_static(self._abstract, name),
119
+ (classmethod, types.MethodType)
120
+ )
98
121
  ]
99
122
 
100
123
  def getProperties(self) -> List[str]:
@@ -153,7 +176,7 @@ class ReflexionAbstract:
153
176
  """
154
177
  return tuple(
155
178
  base for base in self._abstract.__bases__
156
- if inspect.isabstract(base)
179
+ if inspect.isabstract(base) or issubclass(base, abc.ABC) or isinstance(base, abc.ABCMeta)
157
180
  )
158
181
 
159
182
  def getInterfaceMethods(self) -> Dict[str, inspect.Signature]:
@@ -220,29 +243,48 @@ class ReflexionAbstract:
220
243
  """
221
244
  return self._abstract.__annotations__
222
245
 
223
- def getDecorators(self, method_name: str) -> List[Callable]:
224
- """Get decorators applied to a method.
246
+ def getDecorators(self, method_name: str) -> List[str]:
247
+ """
248
+ Get decorators applied to a method.
225
249
 
226
250
  Parameters
227
251
  ----------
228
252
  method_name : str
229
- Name of the method
230
-
231
- Returns
232
- -------
233
- List[Callable]
234
- List of decorator functions
253
+ Name of the method to inspect
235
254
  """
236
- method = getattr(self._abstract, method_name)
237
- decorators = []
238
-
239
- if hasattr(method, '__wrapped__'):
240
- # Unwrap decorated functions
241
- while hasattr(method, '__wrapped__'):
242
- decorators.append(method)
243
- method = method.__wrapped__
255
+ method = getattr(self._abstract, method_name, None)
256
+ if method is None:
257
+ return []
244
258
 
245
- return decorators
259
+ try:
260
+ source = inspect.getsource(self._abstract)
261
+ except (OSError, TypeError):
262
+ return []
263
+
264
+ tree = ast.parse(source)
265
+
266
+ class DecoratorVisitor(ast.NodeVisitor):
267
+ def __init__(self):
268
+ self.decorators = []
269
+
270
+ def visit_FunctionDef(self, node):
271
+ if node.name == method_name:
272
+ for deco in node.decorator_list:
273
+ if isinstance(deco, ast.Name):
274
+ self.decorators.append(deco.id)
275
+ elif isinstance(deco, ast.Call):
276
+ # handles decorators with arguments like @deco(arg)
277
+ if isinstance(deco.func, ast.Name):
278
+ self.decorators.append(deco.func.id)
279
+ elif isinstance(deco, ast.Attribute):
280
+ self.decorators.append(deco.attr)
281
+ # No need to visit deeper
282
+ return
283
+
284
+ visitor = DecoratorVisitor()
285
+ visitor.visit(tree)
286
+
287
+ return visitor.decorators
246
288
 
247
289
  def isProtocol(self) -> bool:
248
290
  """Check if the abstract class is a Protocol.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.205.0
3
+ Version: 0.207.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
@@ -209,6 +209,8 @@ tests/example/__init__.py
209
209
  tests/example/test_example.py
210
210
  tests/support/__init__.py
211
211
  tests/support/inspection/__init__.py
212
+ tests/support/inspection/test_reflection_abstract.py
212
213
  tests/support/inspection/test_reflection_instance.py
213
214
  tests/support/inspection/fakes/__init__.py
214
- tests/support/inspection/fakes/fake_reflection.py
215
+ tests/support/inspection/fakes/fake_reflection_abstract.py
216
+ tests/support/inspection/fakes/fake_reflection_instance.py
@@ -0,0 +1,218 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Callable
3
+ from functools import wraps
4
+
5
+ def decorator_example(func: Callable) -> Callable:
6
+ """Example decorator for testing purposes.
7
+
8
+ Parameters
9
+ ----------
10
+ func : Callable
11
+ The function to be decorated
12
+
13
+ Returns
14
+ -------
15
+ Callable
16
+ The wrapped function
17
+
18
+ Notes
19
+ -----
20
+ This is a simple identity decorator used for testing decorator detection.
21
+ """
22
+ @wraps(func)
23
+ def wrapper(*args, **kwargs):
24
+ return func(*args, **kwargs)
25
+ return wrapper
26
+
27
+
28
+ def another_decorator(func: Callable) -> Callable:
29
+ """Another example decorator for testing multiple decorators.
30
+
31
+ Parameters
32
+ ----------
33
+ func : Callable
34
+ The function to be decorated
35
+
36
+ Returns
37
+ -------
38
+ Callable
39
+ The wrapped function with added prefix
40
+
41
+ Examples
42
+ --------
43
+ >>> @another_decorator
44
+ ... def test(): return "hello"
45
+ >>> test()
46
+ 'Decorated: hello'
47
+ """
48
+ @wraps(func)
49
+ def wrapper(*args, **kwargs):
50
+ return f"Decorated: {func(*args, **kwargs)}"
51
+ return wrapper
52
+
53
+
54
+ class FakeAbstractClass(ABC):
55
+ """A fake abstract class for testing reflection capabilities.
56
+
57
+ This class contains all elements needed to test ReflexionAbstract functionality:
58
+ - Abstract methods
59
+ - Concrete methods
60
+ - Static methods
61
+ - Class methods
62
+ - Properties
63
+ - Decorated methods
64
+ - Type annotations
65
+ - Protected/private methods
66
+
67
+ Attributes
68
+ ----------
69
+ class_attr : str
70
+ A class-level attribute with type annotation
71
+ _value : float
72
+ Protected attribute used by computed_property setter
73
+ """
74
+
75
+ class_attr: str = "class_value"
76
+
77
+ @abstractmethod
78
+ def abstract_method(self, x: int, y: int) -> int:
79
+ """Required abstract method.
80
+
81
+ Parameters
82
+ ----------
83
+ x : int
84
+ First integer parameter
85
+ y : int
86
+ Second integer parameter
87
+
88
+ Returns
89
+ -------
90
+ int
91
+ The result of some operation
92
+
93
+ Notes
94
+ -----
95
+ This method must be implemented by concrete subclasses.
96
+ """
97
+ pass
98
+
99
+ @abstractmethod
100
+ def another_abstract(self, text: str) -> str:
101
+ """Another required abstract method.
102
+
103
+ Parameters
104
+ ----------
105
+ text : str
106
+ Input string to process
107
+
108
+ Returns
109
+ -------
110
+ str
111
+ Processed string result
112
+ """
113
+ pass
114
+
115
+ def concrete_method(self, value: float) -> str:
116
+ """Concrete implemented method.
117
+
118
+ Parameters
119
+ ----------
120
+ value : float
121
+ Numeric value to format
122
+
123
+ Returns
124
+ -------
125
+ str
126
+ Formatted string representation
127
+ """
128
+ return f"Value: {value}"
129
+
130
+ @staticmethod
131
+ def static_helper(flag: bool) -> str:
132
+ """Static helper method.
133
+
134
+ Parameters
135
+ ----------
136
+ flag : bool
137
+ Boolean flag to determine output
138
+
139
+ Returns
140
+ -------
141
+ str
142
+ "Enabled" if flag is True, "Disabled" otherwise
143
+ """
144
+ return "Enabled" if flag else "Disabled"
145
+
146
+ @classmethod
147
+ def create_instance(cls) -> 'FakeAbstractClass':
148
+ """Class method factory.
149
+
150
+ Returns
151
+ -------
152
+ FakeAbstractClass
153
+ New instance of the class
154
+
155
+ Notes
156
+ -----
157
+ This cannot actually instantiate the abstract class, but serves
158
+ as an example of a class method.
159
+ """
160
+ return cls()
161
+
162
+ @property
163
+ def computed_property(self) -> float:
164
+ """Computed property example.
165
+
166
+ Returns
167
+ -------
168
+ float
169
+ The value of pi approximation
170
+ """
171
+ return 3.1416
172
+
173
+ @computed_property.setter
174
+ def computed_property(self, value: float):
175
+ """Setter for computed property.
176
+
177
+ Parameters
178
+ ----------
179
+ value : float
180
+ New value to set
181
+ """
182
+ self._value = value
183
+
184
+ @decorator_example
185
+ @another_decorator
186
+ def decorated_method(self) -> str:
187
+ """Method with multiple decorators.
188
+
189
+ Returns
190
+ -------
191
+ str
192
+ Always returns "decorated" with decorator transformations
193
+
194
+ Notes
195
+ -----
196
+ Used to test decorator inspection functionality.
197
+ """
198
+ return "decorated"
199
+
200
+ def _protected_method(self) -> str:
201
+ """Protected method (should be filtered in results).
202
+
203
+ Returns
204
+ -------
205
+ str
206
+ Constant string "protected"
207
+ """
208
+ return "protected"
209
+
210
+ def __private_method(self) -> str:
211
+ """Private method (should be filtered in results).
212
+
213
+ Returns
214
+ -------
215
+ str
216
+ Constant string "private"
217
+ """
218
+ return "private"
@@ -0,0 +1,229 @@
1
+ from abc import ABC
2
+ import unittest
3
+ from orionis.luminate.support.inspection.reflection import Reflection
4
+ from orionis.luminate.test.test_output import PrinterInTest
5
+ from tests.support.inspection.fakes.fake_reflection_abstract import FakeAbstractClass
6
+
7
+ class TestReflexionAbstract(unittest.TestCase, PrinterInTest):
8
+ """Test cases for ReflexionAbstract using FakeAbstractClass.
9
+
10
+ This test suite verifies all functionality of the ReflexionAbstract class
11
+ using FakeAbstractClass as the test subject.
12
+ """
13
+
14
+ def testReflectionAbstractExceptionValueError(self):
15
+ """Class setup method.
16
+
17
+ Initializes the ReflexionAbstract instance with FakeAbstractClass
18
+ before any tests run.
19
+ """
20
+ with self.assertRaises(ValueError):
21
+ Reflection.abstract(str)
22
+
23
+ def testReflectionAbstractGetClassName(self):
24
+ """Test getClassName() method.
25
+
26
+ Verifies that:
27
+ - The returned class name matches exactly
28
+ - The return type is str
29
+ """
30
+ class_name = Reflection.abstract(FakeAbstractClass).getClassName()
31
+ self.assertEqual(class_name, "FakeAbstractClass")
32
+ self.assertIsInstance(class_name, str)
33
+
34
+ def testReflectionAbstractGetModuleName(self):
35
+ """Test getModuleName() method.
36
+
37
+ Verifies that:
38
+ - The module name is returned
39
+ - The name is a string
40
+ """
41
+ module_name = Reflection.abstract(FakeAbstractClass).getModuleName()
42
+ self.assertTrue(module_name == 'tests.support.inspection.fakes.fake_reflection_abstract')
43
+ self.assertIsInstance(module_name, str)
44
+
45
+ def testReflectionAbstractGetAbstractMethods(self):
46
+ """Test getAbstractMethods() method.
47
+
48
+ Verifies that:
49
+ - All abstract methods are detected
50
+ - No concrete methods are included
51
+ - Return type is correct
52
+ """
53
+ methods = Reflection.abstract(FakeAbstractClass).getAbstractMethods()
54
+ expected = {'abstract_method', 'another_abstract'}
55
+ self.assertEqual(methods, expected)
56
+ self.assertIsInstance(methods, set)
57
+
58
+ def testReflectionAbstractGetConcreteMethods(self):
59
+ """Test getConcreteMethods() method.
60
+
61
+ Verifies that:
62
+ - Concrete methods are detected
63
+ - Abstract methods are excluded
64
+ - Protected/private methods are excluded
65
+ """
66
+ methods = Reflection.abstract(FakeAbstractClass).getConcreteMethods()
67
+ self.assertIn('static_helper', methods)
68
+ self.assertIn('concrete_method', methods)
69
+ self.assertIn('decorated_method', methods)
70
+ self.assertNotIn('abstract_method', methods)
71
+ self.assertNotIn('_protected_method', methods)
72
+ self.assertNotIn('__private_method', methods)
73
+
74
+ def testReflectionAbstractGetStaticMethods(self):
75
+ """Test getStaticMethods() method.
76
+
77
+ Verifies that:
78
+ - Static methods are detected
79
+ - Only static methods are included
80
+ - Protected/private methods are excluded
81
+ """
82
+ static_methods = Reflection.abstract(FakeAbstractClass).getStaticMethods()
83
+ self.assertIn('static_helper', static_methods)
84
+ self.assertEqual(len(static_methods), 1)
85
+ self.assertNotIn('create_instance', static_methods)
86
+
87
+ def testReflectionAbstractGetClassMethods(self):
88
+ """Test getClassMethods() method.
89
+
90
+ Verifies that:
91
+ - Class methods are detected
92
+ - Only class methods are included
93
+ - Protected/private methods are excluded
94
+ """
95
+ class_methods = Reflection.abstract(FakeAbstractClass).getClassMethods()
96
+ self.assertIn('create_instance', class_methods)
97
+ self.assertEqual(len(class_methods), 1)
98
+ self.assertNotIn('static_helper', class_methods)
99
+
100
+ def testReflectionAbstractGetProperties(self):
101
+ """Test getProperties() method.
102
+
103
+ Verifies that:
104
+ - Properties are detected
105
+ - Only properties are included
106
+ - Protected/private properties are excluded
107
+ """
108
+ props = Reflection.abstract(FakeAbstractClass).getProperties()
109
+ self.assertIn('computed_property', props)
110
+ self.assertEqual(len(props), 1)
111
+
112
+ def testReflectionAbstractGetMethodSignature(self):
113
+ """Test getMethodSignature() method.
114
+
115
+ Verifies that:
116
+ - Correct signature is returned
117
+ - Parameters are properly detected
118
+ - Return type is properly detected
119
+ """
120
+ sig = Reflection.abstract(FakeAbstractClass).getMethodSignature('abstract_method')
121
+ params = list(sig.parameters.keys())
122
+ self.assertEqual(params, ['self', 'x', 'y'])
123
+ self.assertEqual(sig.return_annotation, int)
124
+
125
+ def testReflectionAbstractGetDocstring(self):
126
+ """Test getDocstring() method.
127
+
128
+ Verifies that:
129
+ - Docstring is returned
130
+ - Docstring contains expected content
131
+ """
132
+ doc = Reflection.abstract(FakeAbstractClass).getDocstring()
133
+ self.assertTrue(doc.startswith("A fake abstract class"))
134
+ self.assertIsInstance(doc, str)
135
+
136
+ def testReflectionAbstractGetBaseAbstractClasses(self):
137
+ """Test getBaseAbstractClasses() method.
138
+
139
+ Verifies that:
140
+ - Base abstract classes are detected
141
+ - Only abstract bases are included
142
+ """
143
+ bases = Reflection.abstract(FakeAbstractClass).getBaseAbstractClasses()
144
+ self.assertEqual(bases, (ABC,))
145
+
146
+ def testReflectionAbstractGetInterfaceMethods(self):
147
+ """Test getInterfaceMethods() method.
148
+
149
+ Verifies that:
150
+ - Interface methods are detected
151
+ - Signatures are correct
152
+ - Only abstract methods are included
153
+ """
154
+ interface = Reflection.abstract(FakeAbstractClass).getInterfaceMethods()
155
+ self.assertEqual(len(interface), 2)
156
+ self.assertIn('abstract_method', interface)
157
+ sig = interface['abstract_method']
158
+ self.assertEqual(list(sig.parameters.keys()), ['self', 'x', 'y'])
159
+
160
+ def testReflectionAbstractIsSubclassOf(self):
161
+ """Test isSubclassOf() method.
162
+
163
+ Verifies that:
164
+ - Correctly identifies abstract base classes
165
+ - Returns False for non-parent classes
166
+ """
167
+ self.assertTrue(Reflection.abstract(FakeAbstractClass).isSubclassOf(ABC))
168
+ self.assertTrue(Reflection.abstract(FakeAbstractClass).isSubclassOf(object))
169
+
170
+ def testReflectionAbstractGetSourceCode(self):
171
+ """Test getSourceCode() method.
172
+
173
+ Verifies that:
174
+ - Source code is returned
175
+ - Contains class definition
176
+ """
177
+ source = Reflection.abstract(FakeAbstractClass).getSourceCode()
178
+ self.assertIsNotNone(source)
179
+ self.assertIn("class FakeAbstractClass(ABC):", source)
180
+
181
+ def testReflectionAbstractGetFileLocation(self):
182
+ """Test getFileLocation() method.
183
+
184
+ Verifies that:
185
+ - File location is returned
186
+ - Path ends with .py extension
187
+ """
188
+ location = Reflection.abstract(FakeAbstractClass).getFileLocation()
189
+ self.assertIsNotNone(location)
190
+ self.assertTrue('fake_reflection_abstract.py' in location)
191
+
192
+ def testReflectionAbstractGetAnnotations(self):
193
+ """Test getAnnotations() method.
194
+
195
+ Verifies that:
196
+ - Annotations are detected
197
+ - Class attributes are included
198
+ """
199
+ annotations = Reflection.abstract(FakeAbstractClass).getAnnotations()
200
+ self.assertIn('class_attr', annotations)
201
+ self.assertEqual(annotations['class_attr'], str)
202
+
203
+ def testReflectionAbstractGetDecorators(self):
204
+ """Test getDecorators() method.
205
+
206
+ Verifies that:
207
+ - Decorators are detected
208
+ - Correct number of decorators is returned
209
+ - Decorator order is preserved
210
+ """
211
+ decorators = Reflection.abstract(FakeAbstractClass).getDecorators('decorated_method')
212
+ for decorator in decorators:
213
+ self.assertTrue(decorator in ['decorator_example', 'another_decorator'])
214
+
215
+ def testReflectionAbstractIsProtocol(self):
216
+ """Test isProtocol() method.
217
+
218
+ Verifies that:
219
+ - Correctly identifies non-Protocol classes
220
+ """
221
+ self.assertFalse(Reflection.abstract(FakeAbstractClass).isProtocol())
222
+
223
+ def testReflectionAbstractGetRequiredAttributes(self):
224
+ """Test getRequiredAttributes() method.
225
+
226
+ Verifies that:
227
+ - Returns empty set for non-Protocol classes
228
+ """
229
+ self.assertEqual(Reflection.abstract(FakeAbstractClass).getRequiredAttributes(), set())