orionis 0.207.0__tar.gz → 0.208.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 (221) hide show
  1. {orionis-0.207.0/orionis.egg-info → orionis-0.208.0}/PKG-INFO +1 -1
  2. {orionis-0.207.0 → orionis-0.208.0}/orionis/framework.py +1 -1
  3. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/inspection/reflexion_abstract.py +42 -2
  4. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/inspection/reflexion_instance.py +31 -1
  5. orionis-0.208.0/orionis/luminate/support/inspection/reflexion_instance_with_abstract.py +230 -0
  6. {orionis-0.207.0 → orionis-0.208.0/orionis.egg-info}/PKG-INFO +1 -1
  7. {orionis-0.207.0 → orionis-0.208.0}/orionis.egg-info/SOURCES.txt +3 -1
  8. orionis-0.208.0/tests/support/inspection/fakes/fake_reflection_instance_with_abstract.py +45 -0
  9. {orionis-0.207.0 → orionis-0.208.0}/tests/support/inspection/test_reflection_abstract.py +10 -1
  10. {orionis-0.207.0 → orionis-0.208.0}/tests/support/inspection/test_reflection_instance.py +5 -0
  11. orionis-0.208.0/tests/support/inspection/test_reflection_instance_with_abstract.py +80 -0
  12. orionis-0.207.0/orionis/luminate/support/inspection/reflexion_instance_with_abstract.py +0 -309
  13. {orionis-0.207.0 → orionis-0.208.0}/LICENCE +0 -0
  14. {orionis-0.207.0 → orionis-0.208.0}/MANIFEST.in +0 -0
  15. {orionis-0.207.0 → orionis-0.208.0}/README.md +0 -0
  16. {orionis-0.207.0 → orionis-0.208.0}/orionis/__init__.py +0 -0
  17. {orionis-0.207.0 → orionis-0.208.0}/orionis/console.py +0 -0
  18. {orionis-0.207.0 → orionis-0.208.0}/orionis/installer/__init__.py +0 -0
  19. {orionis-0.207.0 → orionis-0.208.0}/orionis/installer/contracts/__init__.py +0 -0
  20. {orionis-0.207.0 → orionis-0.208.0}/orionis/installer/contracts/manager.py +0 -0
  21. {orionis-0.207.0 → orionis-0.208.0}/orionis/installer/contracts/output.py +0 -0
  22. {orionis-0.207.0 → orionis-0.208.0}/orionis/installer/contracts/setup.py +0 -0
  23. {orionis-0.207.0 → orionis-0.208.0}/orionis/installer/manager.py +0 -0
  24. {orionis-0.207.0 → orionis-0.208.0}/orionis/installer/output.py +0 -0
  25. {orionis-0.207.0 → orionis-0.208.0}/orionis/installer/setup.py +0 -0
  26. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/__init__.py +0 -0
  27. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/application.py +0 -0
  28. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/config/__init__.py +0 -0
  29. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/config/app.py +0 -0
  30. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/config/auth.py +0 -0
  31. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/config/cache.py +0 -0
  32. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/config/cors.py +0 -0
  33. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/config/database.py +0 -0
  34. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/config/filesystems.py +0 -0
  35. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/config/logging.py +0 -0
  36. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/config/mail.py +0 -0
  37. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/config/queue.py +0 -0
  38. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/config/session.py +0 -0
  39. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/__init__.py +0 -0
  40. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/base/__init__.py +0 -0
  41. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/base/command.py +0 -0
  42. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/command_filter.py +0 -0
  43. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/commands/__init__.py +0 -0
  44. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
  45. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/commands/help.py +0 -0
  46. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
  47. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/commands/version.py +0 -0
  48. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/exceptions/__init__.py +0 -0
  49. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/exceptions/cli-orionis-value-error.py +0 -0
  50. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
  51. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/exceptions/cli_runtime_error.py +0 -0
  52. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/exceptions/cli_schedule_exception.py +0 -0
  53. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/kernel.py +0 -0
  54. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/output/__init__.py +0 -0
  55. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/output/console.py +0 -0
  56. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/output/executor.py +0 -0
  57. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/output/progress_bar.py +0 -0
  58. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/output/styles.py +0 -0
  59. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/console/parser.py +0 -0
  60. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/container/__init__.py +0 -0
  61. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/container/container.py +0 -0
  62. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/container/container_integrity.py +0 -0
  63. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/container/exception.py +0 -0
  64. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/container/lifetimes.py +0 -0
  65. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/container/resolve.py +0 -0
  66. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/__init__.py +0 -0
  67. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/application.py +0 -0
  68. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/config/__init__.py +0 -0
  69. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/config/config.py +0 -0
  70. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/console/__init__.py +0 -0
  71. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/console/base/__init__.py +0 -0
  72. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/console/base/command.py +0 -0
  73. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/console/command_filter.py +0 -0
  74. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/console/kernel.py +0 -0
  75. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/console/output/__init__.py +0 -0
  76. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/console/output/console.py +0 -0
  77. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/console/output/executor.py +0 -0
  78. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/console/output/progress_bar.py +0 -0
  79. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/console/parser.py +0 -0
  80. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/console/task_manager.py +0 -0
  81. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/container/container.py +0 -0
  82. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/container/container_integrity.py +0 -0
  83. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/__init__.py +0 -0
  84. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/commands/__init__.py +0 -0
  85. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/commands/commands_facade.py +0 -0
  86. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/commands/scheduler_facade.py +0 -0
  87. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/config/__init__.py +0 -0
  88. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/config/config_facade.py +0 -0
  89. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/environment/__init__.py +0 -0
  90. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/environment/environment_facade.py +0 -0
  91. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/facade.py +0 -0
  92. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/files/__init__.py +0 -0
  93. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/files/path_facade.py +0 -0
  94. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/log/__init__.py +0 -0
  95. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/log/log_facade.py +0 -0
  96. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/tests/__init__.py +0 -0
  97. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/facades/tests/tests_facade.py +0 -0
  98. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/foundation/__init__.py +0 -0
  99. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/foundation/bootstraper.py +0 -0
  100. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/foundation/config/__init__.py +0 -0
  101. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/foundation/config/config_bootstrapper.py +0 -0
  102. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/foundation/console/__init__.py +0 -0
  103. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/foundation/console/command_bootstrapper.py +0 -0
  104. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/foundation/environment/__init__.py +0 -0
  105. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/foundation/environment/environment_bootstrapper.py +0 -0
  106. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/foundation/providers/__init__.py +0 -0
  107. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/foundation/providers/service_providers_bootstrapper.py +0 -0
  108. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/providers/__init__.py +0 -0
  109. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/providers/service_provider.py +0 -0
  110. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/__init__.py +0 -0
  111. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/commands/__init__.py +0 -0
  112. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/commands/reactor_commands_service.py +0 -0
  113. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/commands/schedule_service.py +0 -0
  114. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/config/__init__.py +0 -0
  115. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/config/config_service.py +0 -0
  116. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/environment/__init__.py +0 -0
  117. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/environment/environment_service.py +0 -0
  118. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/files/__init__.py +0 -0
  119. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/files/path_resolver_service.py +0 -0
  120. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/log/__init__.py +0 -0
  121. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/services/log/log_service.py +0 -0
  122. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/support/exception_parse.py +0 -0
  123. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/support/reflection.py +0 -0
  124. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/contracts/support/std.py +0 -0
  125. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/__init__.py +0 -0
  126. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/app_facade.py +0 -0
  127. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/commands/__init__.py +0 -0
  128. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/commands/commands_facade.py +0 -0
  129. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/commands/scheduler_facade.py +0 -0
  130. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/config/__init__.py +0 -0
  131. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/config/config_facade.py +0 -0
  132. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/environment/__init__.py +0 -0
  133. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/environment/environment_facade.py +0 -0
  134. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/files/__init__.py +0 -0
  135. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/files/path_facade.py +0 -0
  136. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/log/__init__.py +0 -0
  137. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/log/log_facade.py +0 -0
  138. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/tests/__init__.py +0 -0
  139. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/facades/tests/tests_facade.py +0 -0
  140. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/__init__.py +0 -0
  141. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/config/__init__.py +0 -0
  142. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/config/config_bootstrapper.py +0 -0
  143. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/console/__init__.py +0 -0
  144. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/console/command_bootstrapper.py +0 -0
  145. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/environment/__init__.py +0 -0
  146. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/environment/environment_bootstrapper.py +0 -0
  147. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/exceptions/__init__.py +0 -0
  148. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/exceptions/exception_bootstrapper.py +0 -0
  149. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/exceptions/exception_providers.py +0 -0
  150. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/providers/__init__.py +0 -0
  151. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/foundation/providers/service_providers_bootstrapper.py +0 -0
  152. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/patterns/__init__.py +0 -0
  153. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/patterns/singleton.py +0 -0
  154. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/__init__.py +0 -0
  155. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/commands/__init__.py +0 -0
  156. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/commands/reactor_commands_service_provider.py +0 -0
  157. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/commands/scheduler_provider.py +0 -0
  158. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/config/__init__.py +0 -0
  159. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/config/config_service_provider.py +0 -0
  160. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/environment/__init__.py +0 -0
  161. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/environment/environment__service_provider.py +0 -0
  162. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/files/__init__.py +0 -0
  163. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/files/paths_provider.py +0 -0
  164. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/log/__init__.py +0 -0
  165. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/log/log_service_provider.py +0 -0
  166. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/providers/service_provider.py +0 -0
  167. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/__init__.py +0 -0
  168. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/commands/__init__.py +0 -0
  169. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/commands/reactor_commands_service.py +0 -0
  170. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/commands/scheduler_service.py +0 -0
  171. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/config/__init__.py +0 -0
  172. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/config/config_service.py +0 -0
  173. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/environment/__init__.py +0 -0
  174. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/environment/environment_service.py +0 -0
  175. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/files/__init__.py +0 -0
  176. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/files/path_resolver_service.py +0 -0
  177. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/log/__init__.py +0 -0
  178. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/services/log/log_service.py +0 -0
  179. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/asyn_run.py +0 -0
  180. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/dot_dict.py +0 -0
  181. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/exception_parse.py +0 -0
  182. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/inspection/__init__.py +0 -0
  183. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/inspection/container_integrity.py +0 -0
  184. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/inspection/functions.py +0 -0
  185. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/inspection/reflection.py +0 -0
  186. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/inspection/reflexion_concrete.py +0 -0
  187. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/inspection/reflexion_concrete_with_abstract.py +0 -0
  188. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/inspection/reflexion_module.py +0 -0
  189. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/inspection/reflexion_module_with_classname.py +0 -0
  190. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/reflection.py +0 -0
  191. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/support/std.py +0 -0
  192. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/test/__init__.py +0 -0
  193. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/test/test_exception.py +0 -0
  194. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/test/test_output.py +0 -0
  195. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/test/test_result.py +0 -0
  196. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/test/test_status.py +0 -0
  197. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/test/tests.py +0 -0
  198. {orionis-0.207.0 → orionis-0.208.0}/orionis/luminate/test/unit_test.py +0 -0
  199. {orionis-0.207.0 → orionis-0.208.0}/orionis/static/ascii/icon.ascii +0 -0
  200. {orionis-0.207.0 → orionis-0.208.0}/orionis/static/ascii/info.ascii +0 -0
  201. {orionis-0.207.0 → orionis-0.208.0}/orionis/static/bg/galaxy.jpg +0 -0
  202. {orionis-0.207.0 → orionis-0.208.0}/orionis/static/favicon/OrionisFrameworkFavicon.png +0 -0
  203. {orionis-0.207.0 → orionis-0.208.0}/orionis/static/logos/OrionisFramework.jpg +0 -0
  204. {orionis-0.207.0 → orionis-0.208.0}/orionis/static/logos/OrionisFramework.png +0 -0
  205. {orionis-0.207.0 → orionis-0.208.0}/orionis/static/logos/OrionisFramework.psd +0 -0
  206. {orionis-0.207.0 → orionis-0.208.0}/orionis/static/logos/OrionisFramework2.png +0 -0
  207. {orionis-0.207.0 → orionis-0.208.0}/orionis/static/logos/OrionisFramework3.png +0 -0
  208. {orionis-0.207.0 → orionis-0.208.0}/orionis.egg-info/dependency_links.txt +0 -0
  209. {orionis-0.207.0 → orionis-0.208.0}/orionis.egg-info/entry_points.txt +0 -0
  210. {orionis-0.207.0 → orionis-0.208.0}/orionis.egg-info/requires.txt +0 -0
  211. {orionis-0.207.0 → orionis-0.208.0}/orionis.egg-info/top_level.txt +0 -0
  212. {orionis-0.207.0 → orionis-0.208.0}/setup.cfg +0 -0
  213. {orionis-0.207.0 → orionis-0.208.0}/setup.py +0 -0
  214. {orionis-0.207.0 → orionis-0.208.0}/tests/__init__.py +0 -0
  215. {orionis-0.207.0 → orionis-0.208.0}/tests/example/__init__.py +0 -0
  216. {orionis-0.207.0 → orionis-0.208.0}/tests/example/test_example.py +0 -0
  217. {orionis-0.207.0 → orionis-0.208.0}/tests/support/__init__.py +0 -0
  218. {orionis-0.207.0 → orionis-0.208.0}/tests/support/inspection/__init__.py +0 -0
  219. {orionis-0.207.0 → orionis-0.208.0}/tests/support/inspection/fakes/__init__.py +0 -0
  220. {orionis-0.207.0 → orionis-0.208.0}/tests/support/inspection/fakes/fake_reflection_abstract.py +0 -0
  221. {orionis-0.207.0 → orionis-0.208.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.207.0
3
+ Version: 0.208.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.207.0"
8
+ VERSION = "0.208.0"
9
9
 
10
10
  # Full name of the author or maintainer of the project
11
11
  AUTHOR = "Raul Mauricio Uñate Castro"
@@ -54,9 +54,25 @@ class ReflexionAbstract:
54
54
  """
55
55
  methods = []
56
56
  for method in self._abstract.__abstractmethods__:
57
- methods.append(method)
57
+ if not isinstance(getattr(self._abstract, method), property):
58
+ methods.append(method)
58
59
  return set(methods)
59
60
 
61
+ def getAbstractProperties(self) -> Set[str]:
62
+ """Get all abstract property names required by the class.
63
+
64
+ Returns
65
+ -------
66
+ Set[str]
67
+ Set of abstract property names
68
+ """
69
+ properties = []
70
+ for name in getattr(self._abstract, '__abstractmethods__', set()):
71
+ attr = getattr(self._abstract, name, None)
72
+ if isinstance(attr, property):
73
+ properties.append(name)
74
+ return set(properties)
75
+
60
76
  def getConcreteMethods(self) -> Dict[str, Callable]:
61
77
  """Get all concrete methods implemented in the abstract class.
62
78
 
@@ -154,7 +170,31 @@ class ReflexionAbstract:
154
170
  If the method doesn't exist
155
171
  """
156
172
  method = getattr(self._abstract, methodName)
157
- return inspect.signature(method)
173
+ if callable(method):
174
+ return inspect.signature(method)
175
+
176
+ def getPropertySignature(self, propertyName: str) -> inspect.Signature:
177
+ """Get the signature of an abstract property's getter.
178
+
179
+ Parameters
180
+ ----------
181
+ propertyName : str
182
+ Name of the abstract property
183
+
184
+ Returns
185
+ -------
186
+ inspect.Signature
187
+ The getter signature of the abstract property
188
+
189
+ Raises
190
+ ------
191
+ AttributeError
192
+ If the property doesn't exist or is not an abstract property
193
+ """
194
+ attr = getattr(self._abstract, propertyName, None)
195
+ if isinstance(attr, property) and attr.fget is not None:
196
+ return inspect.signature(attr.fget)
197
+ raise AttributeError(f"{propertyName} is not an abstract property or doesn't have a getter.")
158
198
 
159
199
  def getDocstring(self) -> Optional[str]:
160
200
  """Get the docstring of the abstract class.
@@ -198,7 +198,37 @@ class ReflexionInstance:
198
198
  '(x, y)'
199
199
  """
200
200
  method = getattr(self._instance, methodName)
201
- return inspect.signature(method)
201
+ if callable(method):
202
+ return inspect.signature(method)
203
+
204
+ def getPropertySignature(self, propertyName: str) -> inspect.Signature:
205
+ """Get the signature of a property getter.
206
+
207
+ Parameters
208
+ ----------
209
+ propertyName : str
210
+ Name of the property
211
+
212
+ Returns
213
+ -------
214
+ inspect.Signature
215
+ The property's getter method signature
216
+
217
+ Raises
218
+ ------
219
+ AttributeError
220
+ If the property doesn't exist or is not a property
221
+
222
+ Examples
223
+ --------
224
+ >>> sig = reflex.getPropertySignature('config')
225
+ >>> str(sig)
226
+ '(self)'
227
+ """
228
+ attr = getattr(type(self._instance), propertyName, None)
229
+ if isinstance(attr, property) and attr.fget is not None:
230
+ return inspect.signature(attr.fget)
231
+ raise AttributeError(f"{propertyName} is not a property or doesn't have a getter.")
202
232
 
203
233
  def getDocstring(self) -> Optional[str]:
204
234
  """Get the docstring of the instance's class.
@@ -0,0 +1,230 @@
1
+ import abc
2
+ import inspect
3
+ from typing import Any, Dict, List, Tuple, Type, TypeVar, Union
4
+ from orionis.luminate.support.inspection.reflexion_abstract import ReflexionAbstract
5
+ from orionis.luminate.support.inspection.reflexion_instance import ReflexionInstance
6
+
7
+ T = TypeVar('T')
8
+ ABC = TypeVar('ABC', bound=abc.ABC)
9
+
10
+ class ReflexionInstanceWithAbstract:
11
+ """Advanced reflection tool for analyzing concrete implementations against abstract bases.
12
+
13
+ Combines inspection of both concrete instances and their abstract parent classes,
14
+ providing detailed comparison and compatibility analysis.
15
+
16
+ Parameters
17
+ ----------
18
+ instance : Any
19
+ The concrete instance to inspect
20
+ abstract : Type[ABC]
21
+ The abstract base class/interface being implemented
22
+
23
+ Attributes
24
+ ----------
25
+ _instance : Any
26
+ The concrete instance being analyzed
27
+ _abstract : Type[ABC]
28
+ The abstract base class/interface
29
+ _concrete_reflexion : ReflexionInstance
30
+ Reflection helper for the concrete instance
31
+ _abstract_reflexion : ReflexionAbstract
32
+ Reflection helper for the abstract class
33
+ """
34
+
35
+ def __init__(self, instance: Any, abstract: Type[ABC]) -> None:
36
+ self._instance = instance
37
+ self._abstract = abstract
38
+ self._concrete_reflexion = ReflexionInstance(instance)
39
+ self._abstract_reflexion = ReflexionAbstract(abstract)
40
+
41
+ @property
42
+ def concrete(self) -> ReflexionInstance:
43
+ """Access the concrete instance reflection helper."""
44
+ return self._concrete_reflexion
45
+
46
+ @property
47
+ def abstract(self) -> ReflexionAbstract:
48
+ """Access the abstract class reflection helper."""
49
+ return self._abstract_reflexion
50
+
51
+ def getImplementationAnalysis(self) -> Dict[str, Dict[str, Union[bool, str, inspect.Signature]]]:
52
+ """Comprehensive analysis of implementation compliance.
53
+
54
+ Returns
55
+ -------
56
+ Dict[str, Dict[str, Union[bool, str, inspect.Signature]]]
57
+ Detailed analysis including:
58
+ - 'implemented': Whether method is implemented
59
+ - 'signature_match': Whether signatures match
60
+ - 'abstract_signature': Signature from abstract class
61
+ - 'concrete_signature': Signature from concrete class
62
+ """
63
+ analysis = {}
64
+ abstract_methods = self._abstract_reflexion.getAbstractMethods()
65
+ for method in abstract_methods:
66
+ entry = {
67
+ 'implemented': False,
68
+ 'abstract_signature': None,
69
+ 'concrete_signature': None,
70
+ 'signature_match': False,
71
+ 'type' : 'method'
72
+ }
73
+
74
+ if hasattr(self._instance, method):
75
+ entry['implemented'] = True
76
+ abstract_sig = self._abstract_reflexion.getMethodSignature(method)
77
+ concrete_sig = self._concrete_reflexion.getMethodSignature(method)
78
+
79
+ entry.update({
80
+ 'abstract_signature': abstract_sig,
81
+ 'concrete_signature': concrete_sig,
82
+ 'signature_match': (
83
+ abstract_sig.parameters == concrete_sig.parameters and
84
+ abstract_sig.return_annotation == concrete_sig.return_annotation
85
+ )
86
+ })
87
+
88
+ analysis[method] = entry
89
+
90
+ abstract_properties = self._abstract_reflexion.getAbstractProperties()
91
+ for prop in abstract_properties:
92
+ entry = {
93
+ 'implemented': False,
94
+ 'abstract_signature': None,
95
+ 'concrete_signature': None,
96
+ 'signature_match': False,
97
+ 'type' : 'property'
98
+ }
99
+
100
+ if hasattr(self._instance, prop):
101
+ entry['implemented'] = True
102
+ abstract_sig = self._abstract_reflexion.getPropertySignature(prop)
103
+ concrete_sig = self._concrete_reflexion.getPropertySignature(prop)
104
+
105
+ entry.update({
106
+ 'abstract_signature': abstract_sig,
107
+ 'concrete_signature': concrete_sig,
108
+ 'signature_match': (
109
+ abstract_sig.parameters == concrete_sig.parameters and
110
+ abstract_sig.return_annotation == concrete_sig.return_annotation
111
+ )
112
+ })
113
+
114
+ analysis[prop] = entry
115
+
116
+ return analysis
117
+
118
+ def getNonInheritedImplementation(self) -> Dict[str, Any]:
119
+ """Get implementation details for methods, properties, and attributes not inherited from other parents.
120
+
121
+ Returns
122
+ -------
123
+ Dict[str, Any]
124
+ Dictionary containing:
125
+ - 'methods': List of non-inherited method names
126
+ - 'properties': List of non-inherited property names
127
+ - 'attributes': Dict of non-inherited attributes
128
+ """
129
+ # Get all members from concrete class (non-inherited methods, properties, and attributes)
130
+ concrete_members = set(dir(self._instance.__class__))
131
+
132
+ # Get members from the abstract class (base class)
133
+ base_members = set(dir(self._abstract))
134
+
135
+ # Filter out inherited members (methods, properties, and attributes)
136
+ non_inherited_methods = [
137
+ name for name in concrete_members
138
+ if callable(getattr(self._instance.__class__, name)) and name not in base_members
139
+ ]
140
+
141
+ non_inherited_properties = [
142
+ name for name in concrete_members
143
+ if isinstance(getattr(self._instance.__class__, name, None), property) and name not in base_members
144
+ ]
145
+
146
+ non_inherited_attributes = {
147
+ name: getattr(self._instance.__class__, name)
148
+ for name in concrete_members
149
+ if not callable(getattr(self._instance.__class__, name)) and not isinstance(getattr(self._instance.__class__, name, None), property) and name not in base_members
150
+ }
151
+
152
+ return {
153
+ 'methods': non_inherited_methods,
154
+ 'properties': non_inherited_properties,
155
+ 'attributes': non_inherited_attributes
156
+ }
157
+
158
+ def validateImplementation(self) -> Tuple[bool, Dict[str, List[str]]]:
159
+ """Validate the implementation against the abstract base.
160
+
161
+ Returns
162
+ -------
163
+ Tuple[bool, Dict[str, List[str]]]
164
+ - First element: True if fully valid implementation
165
+ - Second element: Dictionary of issues by category:
166
+ * 'missing': Missing required methods
167
+ * 'signature_mismatch': Methods with signature mismatches
168
+ * 'type_mismatch': Methods with return type mismatches
169
+ """
170
+ issues = {
171
+ 'missing': [],
172
+ 'signature_mismatch': [],
173
+ 'type_mismatch': []
174
+ }
175
+
176
+ analysis = self.getImplementationAnalysis()
177
+ for method, data in analysis.items():
178
+ if not data['implemented']:
179
+ issues['missing'].append(method)
180
+ elif not data['signature_match']:
181
+ issues['signature_mismatch'].append(method)
182
+ # Check specifically for return type mismatch
183
+ abstract_return = data['abstract_signature'].return_annotation
184
+ concrete_return = data['concrete_signature'].return_annotation
185
+ if abstract_return != concrete_return and abstract_return is not inspect.Parameter.empty:
186
+ issues['type_mismatch'].append(method)
187
+
188
+ is_valid = not any(issues.values())
189
+ return (is_valid, issues)
190
+
191
+ def getHierarchyAnalysis(self) -> Dict[str, List[str]]:
192
+ """Analyze the class hierarchy relationships.
193
+
194
+ Returns
195
+ -------
196
+ Dict[str, List[str]]
197
+ Dictionary containing:
198
+ - 'concrete_hierarchy': List of class names in concrete hierarchy
199
+ - 'abstract_hierarchy': List of class names in abstract hierarchy
200
+ - 'common_ancestors': List of common ancestor class names
201
+ """
202
+ concrete_hierarchy = [cls.__name__ for cls in inspect.getmro(self._instance.__class__)]
203
+ abstract_hierarchy = [cls.__name__ for cls in inspect.getmro(self._abstract)]
204
+
205
+ concrete_bases = set(inspect.getmro(self._instance.__class__))
206
+ abstract_bases = set(inspect.getmro(self._abstract))
207
+ common = concrete_bases & abstract_bases - {self._abstract, object}
208
+
209
+ return {
210
+ 'concrete_hierarchy': concrete_hierarchy,
211
+ 'abstract_hierarchy': abstract_hierarchy,
212
+ 'common_ancestors': [cls.__name__ for cls in common]
213
+ }
214
+
215
+ def getImplementationCoverage(self) -> float:
216
+ """Calculate the percentage of abstract methods implemented.
217
+
218
+ Returns
219
+ -------
220
+ float
221
+ Implementation coverage percentage (0.0 to 1.0)
222
+ """
223
+ attr = self.getImplementationAnalysis()
224
+ attr_len = len(attr) * 2
225
+ attr_implemented = 0
226
+ for method in attr.values():
227
+ if method.get('implemented'):
228
+ attr_implemented += 2 if method.get('signature_match') else 1
229
+
230
+ return attr_implemented / attr_len if attr_len > 0 else 0.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.207.0
3
+ Version: 0.208.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
@@ -211,6 +211,8 @@ tests/support/__init__.py
211
211
  tests/support/inspection/__init__.py
212
212
  tests/support/inspection/test_reflection_abstract.py
213
213
  tests/support/inspection/test_reflection_instance.py
214
+ tests/support/inspection/test_reflection_instance_with_abstract.py
214
215
  tests/support/inspection/fakes/__init__.py
215
216
  tests/support/inspection/fakes/fake_reflection_abstract.py
216
- tests/support/inspection/fakes/fake_reflection_instance.py
217
+ tests/support/inspection/fakes/fake_reflection_instance.py
218
+ tests/support/inspection/fakes/fake_reflection_instance_with_abstract.py
@@ -0,0 +1,45 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import List, Dict
3
+
4
+ class IDataProcessor(ABC):
5
+ """Interfaz para procesamiento de datos."""
6
+
7
+ @property
8
+ @abstractmethod
9
+ def config(self) -> Dict[str, str]:
10
+ """Configuración del procesador."""
11
+ pass
12
+
13
+ @abstractmethod
14
+ def process(self, data: List[float]) -> Dict[str, float]:
15
+ """Procesa una lista de números y devuelve métricas."""
16
+ pass
17
+
18
+ @abstractmethod
19
+ def validate_input(self, raw_data: str) -> bool:
20
+ """Valida si los datos en crudo pueden ser procesados."""
21
+ pass
22
+
23
+ class FakeDataProcessor:
24
+ """Implementación concreta fake de IDataProcessor."""
25
+
26
+ def __init__(self):
27
+ self._config = {"mode": "standard"}
28
+ self._version = "1.0"
29
+
30
+ @property
31
+ def config(self) -> Dict[str, str]:
32
+ """Implementación correcta de la propiedad."""
33
+ return self._config
34
+
35
+ def process(self, values: List[float]) -> Dict[str, float]:
36
+ """Implementación con tipo de retorno incorrecto (float vs Dict)."""
37
+ return sum(values) / len(values) if values else 0.0
38
+
39
+ def validate_input(self, source: str) -> bool:
40
+ """Implementación con parámetro renombrado (source vs raw_data)."""
41
+ return bool(source)
42
+
43
+ def extra_method(self) -> str:
44
+ """Método adicional no definido en la interfaz."""
45
+ return f"Processing with version {self._version}"
@@ -226,4 +226,13 @@ class TestReflexionAbstract(unittest.TestCase, PrinterInTest):
226
226
  Verifies that:
227
227
  - Returns empty set for non-Protocol classes
228
228
  """
229
- self.assertEqual(Reflection.abstract(FakeAbstractClass).getRequiredAttributes(), set())
229
+ self.assertEqual(Reflection.abstract(FakeAbstractClass).getRequiredAttributes(), set())
230
+
231
+ def testReflectionAbstractGetAbstractProperties(self):
232
+ """Test getRequiredMethods() method."""
233
+ self.assertEqual(Reflection.abstract(FakeAbstractClass).getAbstractProperties(), set())
234
+
235
+ def testReflectionAbstractGetPropertySignature(self):
236
+ """Test getPropertySignature() method."""
237
+ signature = Reflection.abstract(FakeAbstractClass).getPropertySignature('computed_property')
238
+ self.assertEqual(str(signature), '(self) -> float')
@@ -139,3 +139,8 @@ class TestReflection(unittest.TestCase, PrinterInTest):
139
139
 
140
140
  result = reflex.callMethod("myMacro", reflex._instance, 3)
141
141
  self.assertEqual(result, 25)
142
+
143
+ def testReflectionInstanceGetPropertySignature(self):
144
+ """Ensure getPropertySignature returns the correct property signature."""
145
+ signature = Reflection.instance(FakeClass()).getPropertySignature('computed_property')
146
+ self.assertEqual(str(signature), '(self) -> str')
@@ -0,0 +1,80 @@
1
+ import unittest
2
+ from orionis.luminate.support.inspection.reflexion_instance_with_abstract import ReflexionInstanceWithAbstract
3
+ from orionis.luminate.test.test_output import PrinterInTest
4
+ from tests.support.inspection.fakes.fake_reflection_instance_with_abstract import FakeDataProcessor, IDataProcessor
5
+
6
+ class TestReflexionWithFakes(unittest.TestCase, PrinterInTest):
7
+
8
+ def testReflexionInstanceWithAbstractGetImplementationAnalysis(self):
9
+ """Test reflexion con IDataProcessor y FakeDataProcessor."""
10
+ processor = FakeDataProcessor()
11
+ inspector = ReflexionInstanceWithAbstract(processor, IDataProcessor)
12
+
13
+ # Get Implementation analysis
14
+ analysis = inspector.getImplementationAnalysis()
15
+
16
+ # Verifying implemented methods
17
+ self.assertTrue(analysis['validate_input']['implemented'])
18
+ self.assertEqual(str(analysis['validate_input']['abstract_signature']), "(self, raw_data: str) -> bool")
19
+ self.assertEqual(str(analysis['validate_input']['concrete_signature']), "(source: str) -> bool")
20
+ self.assertFalse(analysis['validate_input']['signature_match'])
21
+ self.assertEqual(analysis['validate_input']['type'], 'method')
22
+
23
+ self.assertTrue(analysis['process']['implemented'])
24
+ self.assertEqual(str(analysis['process']['abstract_signature']), "(self, data: List[float]) -> Dict[str, float]")
25
+ self.assertEqual(str(analysis['process']['concrete_signature']), "(values: List[float]) -> Dict[str, float]")
26
+ self.assertFalse(analysis['process']['signature_match'])
27
+ self.assertEqual(analysis['process']['type'], 'method')
28
+
29
+ self.assertTrue(analysis['config']['implemented'])
30
+ self.assertEqual(str(analysis['config']['abstract_signature']), "(self) -> Dict[str, str]")
31
+ self.assertEqual(str(analysis['config']['concrete_signature']), "(self) -> Dict[str, str]")
32
+ self.assertTrue(analysis['config']['signature_match'])
33
+ self.assertEqual(analysis['config']['type'], 'property')
34
+
35
+ def testReflexionInstanceWithAbstractGetNonInheritedImplementation(self):
36
+ """Test reflexion con IDataProcessor y FakeDataProcessor."""
37
+ processor = FakeDataProcessor()
38
+ inspector = ReflexionInstanceWithAbstract(processor, IDataProcessor)
39
+
40
+ # Get Non-Inherited implementation analysis
41
+ analysis = inspector.getNonInheritedImplementation()
42
+
43
+ # Verifying implemented methods
44
+ self.assertIn('extra_method', analysis['methods'])
45
+
46
+ def testReflexionInstanceWithAbstractValidateImplementation(self):
47
+ """Test reflexion con IDataProcessor y FakeDataProcessor."""
48
+ processor = FakeDataProcessor()
49
+ inspector = ReflexionInstanceWithAbstract(processor, IDataProcessor)
50
+
51
+ # Get Implementation analysis
52
+ is_valid, issues = inspector.validateImplementation()
53
+
54
+ # Verifying implemented methods
55
+ self.assertFalse(is_valid)
56
+ self.assertIn('process', issues['signature_mismatch'])
57
+
58
+ def testReflexionInstanceWithAbstractGetHierarchyAnalysis(self):
59
+ """Test reflexion con IDataProcessor y FakeDataProcessor."""
60
+ processor = FakeDataProcessor()
61
+ inspector = ReflexionInstanceWithAbstract(processor, IDataProcessor)
62
+
63
+ # Get Hierarchy analysis
64
+ analysis = inspector.getHierarchyAnalysis()
65
+
66
+ # Verifying implemented methods
67
+ self.assertEqual(analysis['common_ancestors'], [])
68
+ self.assertIn('IDataProcessor', analysis['abstract_hierarchy'])
69
+ self.assertIn('FakeDataProcessor', analysis['concrete_hierarchy'])
70
+
71
+ def testReflexionInstanceWithAbstractGetImplementationCoverage(self):
72
+ """Test reflexion con IDataProcessor y FakeDataProcessor."""
73
+ processor = FakeDataProcessor()
74
+ inspector = ReflexionInstanceWithAbstract(processor, IDataProcessor)
75
+
76
+ # Get Implementation coverage
77
+ coverage = inspector.getImplementationCoverage()
78
+
79
+ # Verifying implemented methods
80
+ self.assertTrue(coverage >= 0.66)