orionis 0.211.0__tar.gz → 0.213.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 (224) hide show
  1. {orionis-0.211.0/orionis.egg-info → orionis-0.213.0}/PKG-INFO +1 -1
  2. {orionis-0.211.0 → orionis-0.213.0}/orionis/framework.py +1 -1
  3. orionis-0.213.0/orionis/luminate/support/inspection/reflexion_concrete_with_abstract.py +185 -0
  4. {orionis-0.211.0 → orionis-0.213.0/orionis.egg-info}/PKG-INFO +1 -1
  5. {orionis-0.211.0 → orionis-0.213.0}/orionis.egg-info/SOURCES.txt +2 -0
  6. orionis-0.213.0/tests/support/inspection/fakes/fake_reflection_concrete_with_abstract.py +78 -0
  7. orionis-0.213.0/tests/support/inspection/test_reflection_concrete_with_abstract.py +87 -0
  8. orionis-0.211.0/orionis/luminate/support/inspection/reflexion_concrete_with_abstract.py +0 -31
  9. {orionis-0.211.0 → orionis-0.213.0}/LICENCE +0 -0
  10. {orionis-0.211.0 → orionis-0.213.0}/MANIFEST.in +0 -0
  11. {orionis-0.211.0 → orionis-0.213.0}/README.md +0 -0
  12. {orionis-0.211.0 → orionis-0.213.0}/orionis/__init__.py +0 -0
  13. {orionis-0.211.0 → orionis-0.213.0}/orionis/console.py +0 -0
  14. {orionis-0.211.0 → orionis-0.213.0}/orionis/installer/__init__.py +0 -0
  15. {orionis-0.211.0 → orionis-0.213.0}/orionis/installer/contracts/__init__.py +0 -0
  16. {orionis-0.211.0 → orionis-0.213.0}/orionis/installer/contracts/manager.py +0 -0
  17. {orionis-0.211.0 → orionis-0.213.0}/orionis/installer/contracts/output.py +0 -0
  18. {orionis-0.211.0 → orionis-0.213.0}/orionis/installer/contracts/setup.py +0 -0
  19. {orionis-0.211.0 → orionis-0.213.0}/orionis/installer/manager.py +0 -0
  20. {orionis-0.211.0 → orionis-0.213.0}/orionis/installer/output.py +0 -0
  21. {orionis-0.211.0 → orionis-0.213.0}/orionis/installer/setup.py +0 -0
  22. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/__init__.py +0 -0
  23. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/application.py +0 -0
  24. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/config/__init__.py +0 -0
  25. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/config/app.py +0 -0
  26. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/config/auth.py +0 -0
  27. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/config/cache.py +0 -0
  28. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/config/cors.py +0 -0
  29. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/config/database.py +0 -0
  30. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/config/filesystems.py +0 -0
  31. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/config/logging.py +0 -0
  32. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/config/mail.py +0 -0
  33. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/config/queue.py +0 -0
  34. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/config/session.py +0 -0
  35. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/__init__.py +0 -0
  36. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/base/__init__.py +0 -0
  37. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/base/command.py +0 -0
  38. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/command_filter.py +0 -0
  39. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/commands/__init__.py +0 -0
  40. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
  41. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/commands/help.py +0 -0
  42. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
  43. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/commands/version.py +0 -0
  44. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/exceptions/__init__.py +0 -0
  45. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/exceptions/cli-orionis-value-error.py +0 -0
  46. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
  47. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/exceptions/cli_runtime_error.py +0 -0
  48. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/exceptions/cli_schedule_exception.py +0 -0
  49. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/kernel.py +0 -0
  50. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/output/__init__.py +0 -0
  51. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/output/console.py +0 -0
  52. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/output/executor.py +0 -0
  53. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/output/progress_bar.py +0 -0
  54. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/output/styles.py +0 -0
  55. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/console/parser.py +0 -0
  56. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/container/__init__.py +0 -0
  57. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/container/container.py +0 -0
  58. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/container/container_integrity.py +0 -0
  59. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/container/exception.py +0 -0
  60. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/container/lifetimes.py +0 -0
  61. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/container/resolve.py +0 -0
  62. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/__init__.py +0 -0
  63. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/application.py +0 -0
  64. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/config/__init__.py +0 -0
  65. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/config/config.py +0 -0
  66. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/console/__init__.py +0 -0
  67. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/console/base/__init__.py +0 -0
  68. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/console/base/command.py +0 -0
  69. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/console/command_filter.py +0 -0
  70. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/console/kernel.py +0 -0
  71. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/console/output/__init__.py +0 -0
  72. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/console/output/console.py +0 -0
  73. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/console/output/executor.py +0 -0
  74. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/console/output/progress_bar.py +0 -0
  75. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/console/parser.py +0 -0
  76. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/console/task_manager.py +0 -0
  77. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/container/container.py +0 -0
  78. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/container/container_integrity.py +0 -0
  79. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/__init__.py +0 -0
  80. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/commands/__init__.py +0 -0
  81. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/commands/commands_facade.py +0 -0
  82. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/commands/scheduler_facade.py +0 -0
  83. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/config/__init__.py +0 -0
  84. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/config/config_facade.py +0 -0
  85. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/environment/__init__.py +0 -0
  86. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/environment/environment_facade.py +0 -0
  87. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/facade.py +0 -0
  88. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/files/__init__.py +0 -0
  89. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/files/path_facade.py +0 -0
  90. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/log/__init__.py +0 -0
  91. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/log/log_facade.py +0 -0
  92. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/tests/__init__.py +0 -0
  93. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/facades/tests/tests_facade.py +0 -0
  94. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/foundation/__init__.py +0 -0
  95. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/foundation/bootstraper.py +0 -0
  96. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/foundation/config/__init__.py +0 -0
  97. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/foundation/config/config_bootstrapper.py +0 -0
  98. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/foundation/console/__init__.py +0 -0
  99. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/foundation/console/command_bootstrapper.py +0 -0
  100. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/foundation/environment/__init__.py +0 -0
  101. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/foundation/environment/environment_bootstrapper.py +0 -0
  102. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/foundation/providers/__init__.py +0 -0
  103. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/foundation/providers/service_providers_bootstrapper.py +0 -0
  104. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/providers/__init__.py +0 -0
  105. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/providers/service_provider.py +0 -0
  106. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/__init__.py +0 -0
  107. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/commands/__init__.py +0 -0
  108. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/commands/reactor_commands_service.py +0 -0
  109. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/commands/schedule_service.py +0 -0
  110. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/config/__init__.py +0 -0
  111. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/config/config_service.py +0 -0
  112. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/environment/__init__.py +0 -0
  113. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/environment/environment_service.py +0 -0
  114. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/files/__init__.py +0 -0
  115. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/files/path_resolver_service.py +0 -0
  116. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/log/__init__.py +0 -0
  117. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/services/log/log_service.py +0 -0
  118. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/support/exception_parse.py +0 -0
  119. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/support/reflection.py +0 -0
  120. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/contracts/support/std.py +0 -0
  121. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/__init__.py +0 -0
  122. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/app_facade.py +0 -0
  123. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/commands/__init__.py +0 -0
  124. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/commands/commands_facade.py +0 -0
  125. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/commands/scheduler_facade.py +0 -0
  126. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/config/__init__.py +0 -0
  127. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/config/config_facade.py +0 -0
  128. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/environment/__init__.py +0 -0
  129. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/environment/environment_facade.py +0 -0
  130. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/files/__init__.py +0 -0
  131. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/files/path_facade.py +0 -0
  132. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/log/__init__.py +0 -0
  133. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/facades/log/log_facade.py +0 -0
  134. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/__init__.py +0 -0
  135. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/config/__init__.py +0 -0
  136. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/config/config_bootstrapper.py +0 -0
  137. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/console/__init__.py +0 -0
  138. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/console/command_bootstrapper.py +0 -0
  139. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/environment/__init__.py +0 -0
  140. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/environment/environment_bootstrapper.py +0 -0
  141. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/exceptions/__init__.py +0 -0
  142. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/exceptions/exception_bootstrapper.py +0 -0
  143. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/exceptions/exception_providers.py +0 -0
  144. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/providers/__init__.py +0 -0
  145. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/foundation/providers/service_providers_bootstrapper.py +0 -0
  146. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/patterns/__init__.py +0 -0
  147. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/patterns/singleton.py +0 -0
  148. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/__init__.py +0 -0
  149. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/commands/__init__.py +0 -0
  150. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/commands/reactor_commands_service_provider.py +0 -0
  151. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/commands/scheduler_provider.py +0 -0
  152. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/config/__init__.py +0 -0
  153. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/config/config_service_provider.py +0 -0
  154. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/environment/__init__.py +0 -0
  155. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/environment/environment__service_provider.py +0 -0
  156. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/files/__init__.py +0 -0
  157. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/files/paths_provider.py +0 -0
  158. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/log/__init__.py +0 -0
  159. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/log/log_service_provider.py +0 -0
  160. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/providers/service_provider.py +0 -0
  161. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/__init__.py +0 -0
  162. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/commands/__init__.py +0 -0
  163. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/commands/reactor_commands_service.py +0 -0
  164. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/commands/scheduler_service.py +0 -0
  165. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/config/__init__.py +0 -0
  166. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/config/config_service.py +0 -0
  167. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/environment/__init__.py +0 -0
  168. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/environment/environment_service.py +0 -0
  169. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/files/__init__.py +0 -0
  170. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/files/path_resolver_service.py +0 -0
  171. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/log/__init__.py +0 -0
  172. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/services/log/log_service.py +0 -0
  173. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/asyn_run.py +0 -0
  174. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/dot_dict.py +0 -0
  175. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/exception_parse.py +0 -0
  176. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/inspection/__init__.py +0 -0
  177. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/inspection/container_integrity.py +0 -0
  178. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/inspection/functions.py +0 -0
  179. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/inspection/reflection.py +0 -0
  180. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/inspection/reflexion_abstract.py +0 -0
  181. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/inspection/reflexion_concrete.py +0 -0
  182. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/inspection/reflexion_instance.py +0 -0
  183. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/inspection/reflexion_instance_with_abstract.py +0 -0
  184. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/inspection/reflexion_module.py +0 -0
  185. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/inspection/reflexion_module_with_classname.py +0 -0
  186. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/reflection.py +0 -0
  187. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/support/std.py +0 -0
  188. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/test/__init__.py +0 -0
  189. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/test/test_case.py +0 -0
  190. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/test/test_exception.py +0 -0
  191. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/test/test_result.py +0 -0
  192. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/test/test_status.py +0 -0
  193. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/test/test_std_out.py +0 -0
  194. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/test/test_suite.py +0 -0
  195. {orionis-0.211.0 → orionis-0.213.0}/orionis/luminate/test/test_unit.py +0 -0
  196. {orionis-0.211.0 → orionis-0.213.0}/orionis/static/ascii/icon.ascii +0 -0
  197. {orionis-0.211.0 → orionis-0.213.0}/orionis/static/ascii/info.ascii +0 -0
  198. {orionis-0.211.0 → orionis-0.213.0}/orionis/static/bg/galaxy.jpg +0 -0
  199. {orionis-0.211.0 → orionis-0.213.0}/orionis/static/favicon/OrionisFrameworkFavicon.png +0 -0
  200. {orionis-0.211.0 → orionis-0.213.0}/orionis/static/logos/OrionisFramework.jpg +0 -0
  201. {orionis-0.211.0 → orionis-0.213.0}/orionis/static/logos/OrionisFramework.png +0 -0
  202. {orionis-0.211.0 → orionis-0.213.0}/orionis/static/logos/OrionisFramework.psd +0 -0
  203. {orionis-0.211.0 → orionis-0.213.0}/orionis/static/logos/OrionisFramework2.png +0 -0
  204. {orionis-0.211.0 → orionis-0.213.0}/orionis/static/logos/OrionisFramework3.png +0 -0
  205. {orionis-0.211.0 → orionis-0.213.0}/orionis.egg-info/dependency_links.txt +0 -0
  206. {orionis-0.211.0 → orionis-0.213.0}/orionis.egg-info/entry_points.txt +0 -0
  207. {orionis-0.211.0 → orionis-0.213.0}/orionis.egg-info/requires.txt +0 -0
  208. {orionis-0.211.0 → orionis-0.213.0}/orionis.egg-info/top_level.txt +0 -0
  209. {orionis-0.211.0 → orionis-0.213.0}/setup.cfg +0 -0
  210. {orionis-0.211.0 → orionis-0.213.0}/setup.py +0 -0
  211. {orionis-0.211.0 → orionis-0.213.0}/tests/__init__.py +0 -0
  212. {orionis-0.211.0 → orionis-0.213.0}/tests/example/__init__.py +0 -0
  213. {orionis-0.211.0 → orionis-0.213.0}/tests/example/test_example.py +0 -0
  214. {orionis-0.211.0 → orionis-0.213.0}/tests/support/__init__.py +0 -0
  215. {orionis-0.211.0 → orionis-0.213.0}/tests/support/inspection/__init__.py +0 -0
  216. {orionis-0.211.0 → orionis-0.213.0}/tests/support/inspection/fakes/__init__.py +0 -0
  217. {orionis-0.211.0 → orionis-0.213.0}/tests/support/inspection/fakes/fake_reflection_abstract.py +0 -0
  218. {orionis-0.211.0 → orionis-0.213.0}/tests/support/inspection/fakes/fake_reflection_concrete.py +0 -0
  219. {orionis-0.211.0 → orionis-0.213.0}/tests/support/inspection/fakes/fake_reflection_instance.py +0 -0
  220. {orionis-0.211.0 → orionis-0.213.0}/tests/support/inspection/fakes/fake_reflection_instance_with_abstract.py +0 -0
  221. {orionis-0.211.0 → orionis-0.213.0}/tests/support/inspection/test_reflection_abstract.py +0 -0
  222. {orionis-0.211.0 → orionis-0.213.0}/tests/support/inspection/test_reflection_concrete.py +0 -0
  223. {orionis-0.211.0 → orionis-0.213.0}/tests/support/inspection/test_reflection_instance.py +0 -0
  224. {orionis-0.211.0 → orionis-0.213.0}/tests/support/inspection/test_reflection_instance_with_abstract.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.211.0
3
+ Version: 0.213.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.211.0"
8
+ VERSION = "0.213.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,185 @@
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_concrete import ReflexionConcrete
6
+
7
+ T = TypeVar('T')
8
+ ABC = TypeVar('ABC', bound=abc.ABC)
9
+
10
+ class ReflexionConcreteWithAbstract:
11
+ """Advanced reflection tool for analyzing concrete classes against abstract bases.
12
+
13
+ Allows static analysis of class definitions to verify compatibility
14
+ and adherence to interface contracts without instantiation.
15
+
16
+ Parameters
17
+ ----------
18
+ concrete : Type[T]
19
+ The concrete class to inspect
20
+ abstract : Type[ABC]
21
+ The abstract base class/interface being implemented
22
+
23
+ Attributes
24
+ ----------
25
+ _concrete : Type[T]
26
+ The concrete class being analyzed
27
+ _abstract : Type[ABC]
28
+ The abstract base class/interface
29
+ _concrete_reflexion : ReflexionConcrete
30
+ Reflection helper for the concrete class
31
+ _abstract_reflexion : ReflexionAbstract
32
+ Reflection helper for the abstract class
33
+ """
34
+
35
+ def __init__(self, concrete: Type[T], abstract: Type[ABC]) -> None:
36
+ self._concrete = concrete
37
+ self._abstract = abstract
38
+ self._concrete_reflexion = ReflexionConcrete(concrete)
39
+ self._abstract_reflexion = ReflexionAbstract(abstract)
40
+
41
+ @property
42
+ def concrete(self) -> ReflexionConcrete:
43
+ """Access the concrete class 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
+ analysis = {}
54
+
55
+ abstract_methods = self._abstract_reflexion.getAbstractMethods()
56
+ for method in abstract_methods:
57
+ entry = {
58
+ 'implemented': False,
59
+ 'abstract_signature': None,
60
+ 'concrete_signature': None,
61
+ 'signature_match': False,
62
+ 'type': 'method'
63
+ }
64
+
65
+ if hasattr(self._concrete, method):
66
+ entry['implemented'] = True
67
+ abstract_sig = self._abstract_reflexion.getMethodSignature(method)
68
+ concrete_sig = self._concrete_reflexion.getMethodSignature(method)
69
+
70
+ entry.update({
71
+ 'abstract_signature': abstract_sig,
72
+ 'concrete_signature': concrete_sig,
73
+ 'signature_match': (
74
+ abstract_sig.parameters == concrete_sig.parameters and
75
+ abstract_sig.return_annotation == concrete_sig.return_annotation
76
+ )
77
+ })
78
+
79
+ analysis[method] = entry
80
+
81
+ abstract_properties = self._abstract_reflexion.getAbstractProperties()
82
+ for prop in abstract_properties:
83
+ entry = {
84
+ 'implemented': False,
85
+ 'abstract_signature': None,
86
+ 'concrete_signature': None,
87
+ 'signature_match': False,
88
+ 'type': 'property'
89
+ }
90
+
91
+ if hasattr(self._concrete, prop):
92
+ entry['implemented'] = True
93
+ abstract_sig = self._abstract_reflexion.getPropertySignature(prop)
94
+ concrete_sig = self._concrete_reflexion.getPropertySignature(prop)
95
+
96
+ entry.update({
97
+ 'abstract_signature': abstract_sig,
98
+ 'concrete_signature': concrete_sig,
99
+ 'signature_match': (
100
+ abstract_sig.parameters == concrete_sig.parameters and
101
+ abstract_sig.return_annotation == concrete_sig.return_annotation
102
+ )
103
+ })
104
+
105
+ analysis[prop] = entry
106
+
107
+ return analysis
108
+
109
+ def validateImplementation(self) -> Tuple[bool, Dict[str, List[str]]]:
110
+ """Validate the implementation against the abstract base."""
111
+ issues = {
112
+ 'missing': [],
113
+ 'signature_mismatch': [],
114
+ 'type_mismatch': []
115
+ }
116
+
117
+ analysis = self.getImplementationAnalysis()
118
+ for name, data in analysis.items():
119
+ if not data['implemented']:
120
+ issues['missing'].append(name)
121
+ elif not data['signature_match']:
122
+ issues['signature_mismatch'].append(name)
123
+ abstract_return = data['abstract_signature'].return_annotation
124
+ concrete_return = data['concrete_signature'].return_annotation
125
+ if abstract_return != concrete_return and abstract_return is not inspect.Parameter.empty:
126
+ issues['type_mismatch'].append(name)
127
+
128
+ is_valid = not any(issues.values())
129
+ return (is_valid, issues)
130
+
131
+ def getImplementationCoverage(self) -> float:
132
+ """Calculate the percentage of abstract methods/properties implemented."""
133
+ analysis = self.getImplementationAnalysis()
134
+ total = len(analysis) * 2
135
+ implemented = 0
136
+ for item in analysis.values():
137
+ if item['implemented']:
138
+ implemented += 2 if item['signature_match'] else 1
139
+ return implemented / total if total else 0.0
140
+
141
+ def getNonInheritedImplementation(self) -> Dict[str, Any]:
142
+ """Get implementation details for methods, properties, and attributes not inherited from the abstract base."""
143
+ concrete_members = set(dir(self._concrete))
144
+ base_members = set(dir(self._abstract))
145
+
146
+ non_inherited_methods = [
147
+ name for name in concrete_members
148
+ if callable(getattr(self._concrete, name, None)) and name not in base_members
149
+ ]
150
+
151
+ non_inherited_properties = [
152
+ name for name in concrete_members
153
+ if isinstance(getattr(self._concrete, name, None), property) and name not in base_members
154
+ ]
155
+
156
+ non_inherited_attributes = {
157
+ name: getattr(self._concrete, name, None)
158
+ for name in concrete_members
159
+ if (
160
+ not callable(getattr(self._concrete, name, None)) and
161
+ not isinstance(getattr(self._concrete, name, None), property) and
162
+ name not in base_members
163
+ )
164
+ }
165
+
166
+ return {
167
+ 'methods': non_inherited_methods,
168
+ 'properties': non_inherited_properties,
169
+ 'attributes': non_inherited_attributes
170
+ }
171
+
172
+ def getHierarchyAnalysis(self) -> Dict[str, List[str]]:
173
+ """Analyze the class hierarchy relationships."""
174
+ concrete_hierarchy = [cls.__name__ for cls in inspect.getmro(self._concrete)]
175
+ abstract_hierarchy = [cls.__name__ for cls in inspect.getmro(self._abstract)]
176
+
177
+ concrete_bases = set(inspect.getmro(self._concrete))
178
+ abstract_bases = set(inspect.getmro(self._abstract))
179
+ common = concrete_bases & abstract_bases - {self._abstract, object}
180
+
181
+ return {
182
+ 'concrete_hierarchy': concrete_hierarchy,
183
+ 'abstract_hierarchy': abstract_hierarchy,
184
+ 'common_ancestors': [cls.__name__ for cls in common]
185
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.211.0
3
+ Version: 0.213.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
@@ -210,10 +210,12 @@ tests/support/__init__.py
210
210
  tests/support/inspection/__init__.py
211
211
  tests/support/inspection/test_reflection_abstract.py
212
212
  tests/support/inspection/test_reflection_concrete.py
213
+ tests/support/inspection/test_reflection_concrete_with_abstract.py
213
214
  tests/support/inspection/test_reflection_instance.py
214
215
  tests/support/inspection/test_reflection_instance_with_abstract.py
215
216
  tests/support/inspection/fakes/__init__.py
216
217
  tests/support/inspection/fakes/fake_reflection_abstract.py
217
218
  tests/support/inspection/fakes/fake_reflection_concrete.py
219
+ tests/support/inspection/fakes/fake_reflection_concrete_with_abstract.py
218
220
  tests/support/inspection/fakes/fake_reflection_instance.py
219
221
  tests/support/inspection/fakes/fake_reflection_instance_with_abstract.py
@@ -0,0 +1,78 @@
1
+ import abc
2
+ from typing import Any, Dict, List
3
+
4
+ class AbstractService(abc.ABC):
5
+ """
6
+ Abstract interface for service-like behavior.
7
+
8
+ Methods
9
+ -------
10
+ process(data: str) -> bool
11
+ Perform processing on input data.
12
+
13
+ reset() -> None
14
+ Reset the internal state of the service.
15
+
16
+ configure(options: Dict[str, Any]) -> None
17
+ Apply configuration settings to the service.
18
+
19
+ get_logs(limit: int = 10) -> List[str]
20
+ Retrieve a limited number of log messages.
21
+
22
+ Properties
23
+ ----------
24
+ status : str
25
+ Current status of the service.
26
+ """
27
+
28
+ @abc.abstractmethod
29
+ def process(self, data: str) -> bool:
30
+ """Perform processing on input data."""
31
+ pass
32
+
33
+ @abc.abstractmethod
34
+ def reset(self) -> None:
35
+ """Reset the internal state of the service."""
36
+ pass
37
+
38
+ @abc.abstractmethod
39
+ def configure(self, options: Dict[str, Any]) -> None:
40
+ """Apply configuration settings to the service."""
41
+ pass
42
+
43
+ @abc.abstractmethod
44
+ def get_logs(self, limit: int = 10) -> List[str]:
45
+ """Retrieve a limited number of log messages."""
46
+ pass
47
+
48
+ @property
49
+ @abc.abstractmethod
50
+ def status(self) -> str:
51
+ """Current status of the service."""
52
+ pass
53
+
54
+ class PartiallyImplementedService:
55
+ """
56
+ A partial implementation of AbstractService.
57
+
58
+ This class mimics the interface but lacks some methods/properties,
59
+ making it useful for testing reflection-based validation.
60
+ """
61
+
62
+ def process(self, data: str) -> bool:
63
+ """Basic processing implementation."""
64
+ return bool(data)
65
+
66
+ def get_logs(self, limit: int = 10) -> List[str]:
67
+ """Return a fixed list of logs (mock implementation)."""
68
+ return [f"log {i}" for i in range(limit)]
69
+
70
+ # ❌ Missing: reset()
71
+ # ❌ Missing: configure()
72
+ # ❌ Missing: status (property)
73
+
74
+ def extra(self) -> str:
75
+ """An extra method not part of the abstract interface."""
76
+ return "Just extra"
77
+
78
+ version: str = "1.0"
@@ -0,0 +1,87 @@
1
+ from orionis.luminate.support.inspection.reflexion_concrete_with_abstract import ReflexionConcreteWithAbstract
2
+ from orionis.luminate.test.test_case import TestCase
3
+ from tests.support.inspection.fakes.fake_reflection_concrete_with_abstract import AbstractService, PartiallyImplementedService
4
+
5
+ class TestReflexionConcreteWithAbstract(TestCase):
6
+
7
+ def testReflexionInstanceWithAbstractGetImplementationAnalysis(self):
8
+ """Test reflexion con AbstractService y PartiallyImplementedService."""
9
+ inspector = ReflexionConcreteWithAbstract(PartiallyImplementedService, AbstractService)
10
+
11
+ # Get Implementation analysis
12
+ analysis = inspector.getImplementationAnalysis()
13
+
14
+ # Verifying implemented methods
15
+ self.assertFalse(analysis['configure']['implemented'])
16
+ self.assertIsNone(analysis['configure']['abstract_signature'])
17
+ self.assertIsNone(analysis['configure']['concrete_signature'])
18
+ self.assertFalse(analysis['configure']['signature_match'])
19
+ self.assertEqual(analysis['configure']['type'], 'method')
20
+
21
+ self.assertTrue(analysis['get_logs']['implemented'])
22
+ self.assertEqual(str(analysis['get_logs']['abstract_signature']), "(self, limit: int = 10) -> List[str]")
23
+ self.assertEqual(str(analysis['get_logs']['concrete_signature']), "(self, limit: int = 10) -> List[str]")
24
+ self.assertTrue(analysis['get_logs']['signature_match'])
25
+ self.assertEqual(analysis['get_logs']['type'], 'method')
26
+
27
+ self.assertFalse(analysis['reset']['implemented'])
28
+ self.assertIsNone(analysis['reset']['abstract_signature'])
29
+ self.assertIsNone(analysis['reset']['concrete_signature'])
30
+ self.assertFalse(analysis['reset']['signature_match'])
31
+ self.assertEqual(analysis['reset']['type'], 'method')
32
+
33
+ self.assertTrue(analysis['process']['implemented'])
34
+ self.assertEqual(str(analysis['process']['abstract_signature']), "(self, data: str) -> bool")
35
+ self.assertEqual(str(analysis['process']['concrete_signature']), "(self, data: str) -> bool")
36
+ self.assertTrue(analysis['process']['signature_match'])
37
+ self.assertEqual(analysis['process']['type'], 'method')
38
+
39
+ self.assertFalse(analysis['status']['implemented'])
40
+ self.assertIsNone(analysis['status']['abstract_signature'])
41
+ self.assertIsNone(analysis['status']['concrete_signature'])
42
+ self.assertFalse(analysis['status']['signature_match'])
43
+ self.assertEqual(analysis['status']['type'], 'property')
44
+
45
+ def testReflexionConcreteWithAbstractGetNonInheritedImplementation(self):
46
+ """Test reflexion con AbstractService y PartiallyImplementedService."""
47
+ inspector = ReflexionConcreteWithAbstract(PartiallyImplementedService, AbstractService)
48
+
49
+ # Get Non-Inherited implementation analysis
50
+ analysis = inspector.getNonInheritedImplementation()
51
+
52
+ self.assertIn('extra', analysis['methods'])
53
+ self.assertListEqual(analysis['properties'], [])
54
+ self.assertIn('__annotations__', analysis['attributes'])
55
+
56
+ def testReflexionConcreteWithAbstractValidateImplementation(self):
57
+ """Test reflexion con AbstractService y PartiallyImplementedService."""
58
+ inspector = ReflexionConcreteWithAbstract(PartiallyImplementedService, AbstractService)
59
+
60
+ # Get Implementation analysis
61
+ is_valid, issues = inspector.validateImplementation()
62
+
63
+ # Verifying implemented methods
64
+ self.assertFalse(is_valid)
65
+ self.assertIn('reset', issues['missing'])
66
+
67
+ def testReflexionConcreteWithAbstractGetHierarchyAnalysis(self):
68
+ """Test reflexion con AbstractService y PartiallyImplementedService."""
69
+ inspector = ReflexionConcreteWithAbstract(PartiallyImplementedService, AbstractService)
70
+
71
+ # Get Hierarchy analysis
72
+ analysis = inspector.getHierarchyAnalysis()
73
+
74
+ # Verifying implemented methods
75
+ self.assertEqual(analysis['common_ancestors'], [])
76
+ self.assertIn('AbstractService', analysis['abstract_hierarchy'])
77
+ self.assertIn('PartiallyImplementedService', analysis['concrete_hierarchy'])
78
+
79
+ def testReflexionConcreteWithAbstractGetImplementationCoverage(self):
80
+ """Test reflexion con AbstractService y PartiallyImplementedService."""
81
+ inspector = ReflexionConcreteWithAbstract(PartiallyImplementedService, AbstractService)
82
+
83
+ # Get Implementation coverage
84
+ coverage = inspector.getImplementationCoverage()
85
+
86
+ # Verifying implemented methods
87
+ self.assertTrue(coverage >= 0.4)
@@ -1,31 +0,0 @@
1
- from typing import Type, TypeVar
2
- import abc
3
-
4
- T = TypeVar('T')
5
- ABC = TypeVar('ABC', bound=abc.ABC)
6
-
7
-
8
- class ReflexionConcreteWithAbstract:
9
- """A reflection object encapsulating a concrete class and its abstract parent.
10
-
11
- Parameters
12
- ----------
13
- concrete : Type[T]
14
- The concrete class being reflected upon
15
- abstract : Type[ABC]
16
- The abstract parent class
17
-
18
- Attributes
19
- ----------
20
- _concrete : Type[T]
21
- The encapsulated concrete class
22
- _abstract : Type[ABC]
23
- The encapsulated abstract parent class
24
- """
25
-
26
- def __init__(self, concrete: Type[T], abstract: Type[ABC]) -> None:
27
- """Initialize with the concrete class and abstract parent."""
28
- self._concrete = concrete
29
- self._abstract = abstract
30
-
31
-
File without changes
File without changes
File without changes
File without changes
File without changes