orionis 0.203.0__tar.gz → 0.205.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.203.0/orionis.egg-info → orionis-0.205.0}/PKG-INFO +1 -1
  2. {orionis-0.203.0 → orionis-0.205.0}/orionis/framework.py +1 -1
  3. orionis-0.205.0/orionis/luminate/support/inspection/reflexion_abstract.py +271 -0
  4. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/inspection/reflexion_instance.py +26 -0
  5. orionis-0.205.0/orionis/luminate/test/test_output.py +65 -0
  6. {orionis-0.203.0 → orionis-0.205.0/orionis.egg-info}/PKG-INFO +1 -1
  7. {orionis-0.203.0 → orionis-0.205.0}/orionis.egg-info/SOURCES.txt +4 -2
  8. {orionis-0.203.0 → orionis-0.205.0}/tests/example/test_example.py +0 -1
  9. orionis-0.205.0/tests/support/inspection/fakes/fake_reflection.py +60 -0
  10. orionis-0.205.0/tests/support/inspection/test_reflection_instance.py +147 -0
  11. orionis-0.203.0/orionis/luminate/support/inspection/reflexion_abstract.py +0 -23
  12. orionis-0.203.0/tests/support/inspection/test_reflection.py +0 -9
  13. {orionis-0.203.0 → orionis-0.205.0}/LICENCE +0 -0
  14. {orionis-0.203.0 → orionis-0.205.0}/MANIFEST.in +0 -0
  15. {orionis-0.203.0 → orionis-0.205.0}/README.md +0 -0
  16. {orionis-0.203.0 → orionis-0.205.0}/orionis/__init__.py +0 -0
  17. {orionis-0.203.0 → orionis-0.205.0}/orionis/console.py +0 -0
  18. {orionis-0.203.0 → orionis-0.205.0}/orionis/installer/__init__.py +0 -0
  19. {orionis-0.203.0 → orionis-0.205.0}/orionis/installer/contracts/__init__.py +0 -0
  20. {orionis-0.203.0 → orionis-0.205.0}/orionis/installer/contracts/manager.py +0 -0
  21. {orionis-0.203.0 → orionis-0.205.0}/orionis/installer/contracts/output.py +0 -0
  22. {orionis-0.203.0 → orionis-0.205.0}/orionis/installer/contracts/setup.py +0 -0
  23. {orionis-0.203.0 → orionis-0.205.0}/orionis/installer/manager.py +0 -0
  24. {orionis-0.203.0 → orionis-0.205.0}/orionis/installer/output.py +0 -0
  25. {orionis-0.203.0 → orionis-0.205.0}/orionis/installer/setup.py +0 -0
  26. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/__init__.py +0 -0
  27. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/application.py +0 -0
  28. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/config/__init__.py +0 -0
  29. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/config/app.py +0 -0
  30. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/config/auth.py +0 -0
  31. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/config/cache.py +0 -0
  32. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/config/cors.py +0 -0
  33. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/config/database.py +0 -0
  34. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/config/filesystems.py +0 -0
  35. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/config/logging.py +0 -0
  36. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/config/mail.py +0 -0
  37. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/config/queue.py +0 -0
  38. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/config/session.py +0 -0
  39. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/__init__.py +0 -0
  40. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/base/__init__.py +0 -0
  41. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/base/command.py +0 -0
  42. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/command_filter.py +0 -0
  43. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/commands/__init__.py +0 -0
  44. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
  45. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/commands/help.py +0 -0
  46. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
  47. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/commands/version.py +0 -0
  48. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/exceptions/__init__.py +0 -0
  49. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/exceptions/cli-orionis-value-error.py +0 -0
  50. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
  51. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/exceptions/cli_runtime_error.py +0 -0
  52. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/exceptions/cli_schedule_exception.py +0 -0
  53. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/kernel.py +0 -0
  54. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/output/__init__.py +0 -0
  55. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/output/console.py +0 -0
  56. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/output/executor.py +0 -0
  57. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/output/progress_bar.py +0 -0
  58. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/output/styles.py +0 -0
  59. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/console/parser.py +0 -0
  60. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/container/__init__.py +0 -0
  61. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/container/container.py +0 -0
  62. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/container/container_integrity.py +0 -0
  63. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/container/exception.py +0 -0
  64. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/container/lifetimes.py +0 -0
  65. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/container/resolve.py +0 -0
  66. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/__init__.py +0 -0
  67. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/application.py +0 -0
  68. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/config/__init__.py +0 -0
  69. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/config/config.py +0 -0
  70. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/console/__init__.py +0 -0
  71. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/console/base/__init__.py +0 -0
  72. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/console/base/command.py +0 -0
  73. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/console/command_filter.py +0 -0
  74. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/console/kernel.py +0 -0
  75. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/console/output/__init__.py +0 -0
  76. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/console/output/console.py +0 -0
  77. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/console/output/executor.py +0 -0
  78. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/console/output/progress_bar.py +0 -0
  79. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/console/parser.py +0 -0
  80. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/console/task_manager.py +0 -0
  81. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/container/container.py +0 -0
  82. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/container/container_integrity.py +0 -0
  83. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/__init__.py +0 -0
  84. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/commands/__init__.py +0 -0
  85. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/commands/commands_facade.py +0 -0
  86. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/commands/scheduler_facade.py +0 -0
  87. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/config/__init__.py +0 -0
  88. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/config/config_facade.py +0 -0
  89. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/environment/__init__.py +0 -0
  90. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/environment/environment_facade.py +0 -0
  91. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/facade.py +0 -0
  92. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/files/__init__.py +0 -0
  93. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/files/path_facade.py +0 -0
  94. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/log/__init__.py +0 -0
  95. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/log/log_facade.py +0 -0
  96. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/tests/__init__.py +0 -0
  97. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/facades/tests/tests_facade.py +0 -0
  98. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/foundation/__init__.py +0 -0
  99. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/foundation/bootstraper.py +0 -0
  100. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/foundation/config/__init__.py +0 -0
  101. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/foundation/config/config_bootstrapper.py +0 -0
  102. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/foundation/console/__init__.py +0 -0
  103. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/foundation/console/command_bootstrapper.py +0 -0
  104. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/foundation/environment/__init__.py +0 -0
  105. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/foundation/environment/environment_bootstrapper.py +0 -0
  106. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/foundation/providers/__init__.py +0 -0
  107. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/foundation/providers/service_providers_bootstrapper.py +0 -0
  108. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/providers/__init__.py +0 -0
  109. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/providers/service_provider.py +0 -0
  110. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/__init__.py +0 -0
  111. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/commands/__init__.py +0 -0
  112. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/commands/reactor_commands_service.py +0 -0
  113. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/commands/schedule_service.py +0 -0
  114. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/config/__init__.py +0 -0
  115. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/config/config_service.py +0 -0
  116. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/environment/__init__.py +0 -0
  117. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/environment/environment_service.py +0 -0
  118. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/files/__init__.py +0 -0
  119. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/files/path_resolver_service.py +0 -0
  120. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/log/__init__.py +0 -0
  121. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/services/log/log_service.py +0 -0
  122. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/support/exception_parse.py +0 -0
  123. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/support/reflection.py +0 -0
  124. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/contracts/support/std.py +0 -0
  125. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/__init__.py +0 -0
  126. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/app_facade.py +0 -0
  127. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/commands/__init__.py +0 -0
  128. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/commands/commands_facade.py +0 -0
  129. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/commands/scheduler_facade.py +0 -0
  130. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/config/__init__.py +0 -0
  131. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/config/config_facade.py +0 -0
  132. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/environment/__init__.py +0 -0
  133. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/environment/environment_facade.py +0 -0
  134. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/files/__init__.py +0 -0
  135. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/files/path_facade.py +0 -0
  136. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/log/__init__.py +0 -0
  137. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/log/log_facade.py +0 -0
  138. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/tests/__init__.py +0 -0
  139. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/facades/tests/tests_facade.py +0 -0
  140. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/__init__.py +0 -0
  141. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/config/__init__.py +0 -0
  142. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/config/config_bootstrapper.py +0 -0
  143. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/console/__init__.py +0 -0
  144. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/console/command_bootstrapper.py +0 -0
  145. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/environment/__init__.py +0 -0
  146. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/environment/environment_bootstrapper.py +0 -0
  147. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/exceptions/__init__.py +0 -0
  148. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/exceptions/exception_bootstrapper.py +0 -0
  149. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/exceptions/exception_providers.py +0 -0
  150. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/providers/__init__.py +0 -0
  151. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/foundation/providers/service_providers_bootstrapper.py +0 -0
  152. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/patterns/__init__.py +0 -0
  153. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/patterns/singleton.py +0 -0
  154. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/__init__.py +0 -0
  155. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/commands/__init__.py +0 -0
  156. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/commands/reactor_commands_service_provider.py +0 -0
  157. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/commands/scheduler_provider.py +0 -0
  158. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/config/__init__.py +0 -0
  159. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/config/config_service_provider.py +0 -0
  160. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/environment/__init__.py +0 -0
  161. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/environment/environment__service_provider.py +0 -0
  162. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/files/__init__.py +0 -0
  163. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/files/paths_provider.py +0 -0
  164. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/log/__init__.py +0 -0
  165. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/log/log_service_provider.py +0 -0
  166. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/providers/service_provider.py +0 -0
  167. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/__init__.py +0 -0
  168. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/commands/__init__.py +0 -0
  169. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/commands/reactor_commands_service.py +0 -0
  170. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/commands/scheduler_service.py +0 -0
  171. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/config/__init__.py +0 -0
  172. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/config/config_service.py +0 -0
  173. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/environment/__init__.py +0 -0
  174. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/environment/environment_service.py +0 -0
  175. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/files/__init__.py +0 -0
  176. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/files/path_resolver_service.py +0 -0
  177. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/log/__init__.py +0 -0
  178. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/services/log/log_service.py +0 -0
  179. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/asyn_run.py +0 -0
  180. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/dot_dict.py +0 -0
  181. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/exception_parse.py +0 -0
  182. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/inspection/__init__.py +0 -0
  183. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/inspection/container_integrity.py +0 -0
  184. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/inspection/functions.py +0 -0
  185. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/inspection/reflection.py +0 -0
  186. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/inspection/reflexion_concrete.py +0 -0
  187. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/inspection/reflexion_concrete_with_abstract.py +0 -0
  188. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/inspection/reflexion_instance_with_abstract.py +0 -0
  189. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/inspection/reflexion_module.py +0 -0
  190. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/inspection/reflexion_module_with_classname.py +0 -0
  191. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/reflection.py +0 -0
  192. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/support/std.py +0 -0
  193. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/test/__init__.py +0 -0
  194. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/test/test_exception.py +0 -0
  195. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/test/test_result.py +0 -0
  196. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/test/test_status.py +0 -0
  197. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/test/tests.py +0 -0
  198. {orionis-0.203.0 → orionis-0.205.0}/orionis/luminate/test/unit_test.py +0 -0
  199. {orionis-0.203.0 → orionis-0.205.0}/orionis/static/ascii/icon.ascii +0 -0
  200. {orionis-0.203.0 → orionis-0.205.0}/orionis/static/ascii/info.ascii +0 -0
  201. {orionis-0.203.0 → orionis-0.205.0}/orionis/static/bg/galaxy.jpg +0 -0
  202. {orionis-0.203.0 → orionis-0.205.0}/orionis/static/favicon/OrionisFrameworkFavicon.png +0 -0
  203. {orionis-0.203.0 → orionis-0.205.0}/orionis/static/logos/OrionisFramework.jpg +0 -0
  204. {orionis-0.203.0 → orionis-0.205.0}/orionis/static/logos/OrionisFramework.png +0 -0
  205. {orionis-0.203.0 → orionis-0.205.0}/orionis/static/logos/OrionisFramework.psd +0 -0
  206. {orionis-0.203.0 → orionis-0.205.0}/orionis/static/logos/OrionisFramework2.png +0 -0
  207. {orionis-0.203.0 → orionis-0.205.0}/orionis/static/logos/OrionisFramework3.png +0 -0
  208. {orionis-0.203.0 → orionis-0.205.0}/orionis.egg-info/dependency_links.txt +0 -0
  209. {orionis-0.203.0 → orionis-0.205.0}/orionis.egg-info/entry_points.txt +0 -0
  210. {orionis-0.203.0 → orionis-0.205.0}/orionis.egg-info/requires.txt +0 -0
  211. {orionis-0.203.0 → orionis-0.205.0}/orionis.egg-info/top_level.txt +0 -0
  212. {orionis-0.203.0 → orionis-0.205.0}/setup.cfg +0 -0
  213. {orionis-0.203.0 → orionis-0.205.0}/setup.py +0 -0
  214. {orionis-0.203.0 → orionis-0.205.0}/tests/__init__.py +0 -0
  215. {orionis-0.203.0 → orionis-0.205.0}/tests/example/__init__.py +0 -0
  216. {orionis-0.203.0 → orionis-0.205.0}/tests/support/__init__.py +0 -0
  217. {orionis-0.203.0 → orionis-0.205.0}/tests/support/inspection/__init__.py +0 -0
  218. /orionis-0.203.0/tests/main.py → /orionis-0.205.0/tests/support/inspection/fakes/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.203.0
3
+ Version: 0.205.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.203.0"
8
+ VERSION = "0.205.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,271 @@
1
+ from typing import Any, Type, Dict, List, Tuple, Callable, Optional, TypeVar, Set
2
+ import inspect
3
+ import abc
4
+ from functools import wraps
5
+
6
+ ABC = TypeVar('ABC', bound=abc.ABC)
7
+
8
+ class ReflexionAbstract:
9
+ """A reflection object encapsulating an abstract class.
10
+
11
+ Parameters
12
+ ----------
13
+ abstract : Type[ABC]
14
+ The abstract class being reflected upon
15
+
16
+ Attributes
17
+ ----------
18
+ _abstract : Type[ABC]
19
+ The encapsulated abstract class
20
+ """
21
+
22
+ def __init__(self, abstract: Type[ABC]) -> None:
23
+ """Initialize with the abstract class."""
24
+ self._abstract = abstract
25
+
26
+ def getClassName(self) -> str:
27
+ """Get the name of the abstract class.
28
+
29
+ Returns
30
+ -------
31
+ str
32
+ The name of the abstract class
33
+ """
34
+ return self._abstract.__name__
35
+
36
+ def getModuleName(self) -> str:
37
+ """Get the name of the module where the abstract class is defined.
38
+
39
+ Returns
40
+ -------
41
+ str
42
+ The module name
43
+ """
44
+ return self._abstract.__module__
45
+
46
+ def getAbstractMethods(self) -> Set[str]:
47
+ """Get all abstract method names required by the class.
48
+
49
+ Returns
50
+ -------
51
+ Set[str]
52
+ Set of abstract method names
53
+ """
54
+ return {name for name, _ in self._abstract.__abstractmethods__}
55
+
56
+ def getConcreteMethods(self) -> Dict[str, Callable]:
57
+ """Get all concrete methods implemented in the abstract class.
58
+
59
+ Returns
60
+ -------
61
+ Dict[str, Callable]
62
+ Dictionary of method names and their implementations
63
+ """
64
+ return {
65
+ name: member for name, member in inspect.getmembers(
66
+ self._abstract,
67
+ predicate=inspect.isfunction
68
+ ) if not name.startswith('_') and name not in self.getAbstractMethods()
69
+ }
70
+
71
+ def getStaticMethods(self) -> List[str]:
72
+ """Get all static method names of the abstract class.
73
+
74
+ Returns
75
+ -------
76
+ List[str]
77
+ List of static method names
78
+ """
79
+ return [
80
+ name for name in dir( self._abstract)
81
+ if not name.startswith('_') and
82
+ isinstance(inspect.getattr_static( self._abstract, name), staticmethod)
83
+ ]
84
+
85
+ def getClassMethods(self) -> List[str]:
86
+ """Get all class method names of the abstract class.
87
+
88
+ Returns
89
+ -------
90
+ List[str]
91
+ List of class method names
92
+ """
93
+ return [
94
+ name for name, member in inspect.getmembers(
95
+ self._abstract,
96
+ predicate=lambda x: isinstance(x, classmethod))
97
+ if not name.startswith('_')
98
+ ]
99
+
100
+ def getProperties(self) -> List[str]:
101
+ """Get all property names of the abstract class.
102
+
103
+ Returns
104
+ -------
105
+ List[str]
106
+ List of property names
107
+ """
108
+ return [
109
+ name for name, member in inspect.getmembers(
110
+ self._abstract,
111
+ predicate=lambda x: isinstance(x, property))
112
+ if not name.startswith('_')
113
+ ]
114
+
115
+ def getMethodSignature(self, methodName: str) -> inspect.Signature:
116
+ """Get the signature of a method.
117
+
118
+ Parameters
119
+ ----------
120
+ methodName : str
121
+ Name of the method
122
+
123
+ Returns
124
+ -------
125
+ inspect.Signature
126
+ The method signature
127
+
128
+ Raises
129
+ ------
130
+ AttributeError
131
+ If the method doesn't exist
132
+ """
133
+ method = getattr(self._abstract, methodName)
134
+ return inspect.signature(method)
135
+
136
+ def getDocstring(self) -> Optional[str]:
137
+ """Get the docstring of the abstract class.
138
+
139
+ Returns
140
+ -------
141
+ Optional[str]
142
+ The class docstring
143
+ """
144
+ return self._abstract.__doc__
145
+
146
+ def getBaseAbstractClasses(self) -> Tuple[Type[ABC], ...]:
147
+ """Get the abstract base classes.
148
+
149
+ Returns
150
+ -------
151
+ Tuple[Type[ABC], ...]
152
+ Tuple of abstract base classes
153
+ """
154
+ return tuple(
155
+ base for base in self._abstract.__bases__
156
+ if inspect.isabstract(base)
157
+ )
158
+
159
+ def getInterfaceMethods(self) -> Dict[str, inspect.Signature]:
160
+ """Get all abstract methods with their signatures.
161
+
162
+ Returns
163
+ -------
164
+ Dict[str, inspect.Signature]
165
+ Dictionary of method names and their signatures
166
+ """
167
+ return {
168
+ name: inspect.signature(getattr(self._abstract, name))
169
+ for name in self.getAbstractMethods()
170
+ }
171
+
172
+ def isSubclassOf(self, abstract_class: Type[ABC]) -> bool:
173
+ """Check if the abstract class inherits from another abstract class.
174
+
175
+ Parameters
176
+ ----------
177
+ abstract_class : Type[ABC]
178
+ The abstract class to check against
179
+
180
+ Returns
181
+ -------
182
+ bool
183
+ True if this is a subclass
184
+ """
185
+ return issubclass(self._abstract, abstract_class)
186
+
187
+ def getSourceCode(self) -> Optional[str]:
188
+ """Get the source code of the abstract class.
189
+
190
+ Returns
191
+ -------
192
+ Optional[str]
193
+ The source code if available
194
+ """
195
+ try:
196
+ return inspect.getsource(self._abstract)
197
+ except (TypeError, OSError):
198
+ return None
199
+
200
+ def getFileLocation(self) -> Optional[str]:
201
+ """Get the file location where the abstract class is defined.
202
+
203
+ Returns
204
+ -------
205
+ Optional[str]
206
+ The file path if available
207
+ """
208
+ try:
209
+ return inspect.getfile(self._abstract)
210
+ except (TypeError, OSError):
211
+ return None
212
+
213
+ def getAnnotations(self) -> Dict[str, Any]:
214
+ """Get type annotations of the abstract class.
215
+
216
+ Returns
217
+ -------
218
+ Dict[str, Any]
219
+ Dictionary of attribute names and their type annotations
220
+ """
221
+ return self._abstract.__annotations__
222
+
223
+ def getDecorators(self, method_name: str) -> List[Callable]:
224
+ """Get decorators applied to a method.
225
+
226
+ Parameters
227
+ ----------
228
+ method_name : str
229
+ Name of the method
230
+
231
+ Returns
232
+ -------
233
+ List[Callable]
234
+ List of decorator functions
235
+ """
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__
244
+
245
+ return decorators
246
+
247
+ def isProtocol(self) -> bool:
248
+ """Check if the abstract class is a Protocol.
249
+
250
+ Returns
251
+ -------
252
+ bool
253
+ True if this is a Protocol class
254
+ """
255
+ return hasattr(self._abstract, '_is_protocol') and self._abstract._is_protocol
256
+
257
+ def getRequiredAttributes(self) -> Set[str]:
258
+ """For Protocol classes, get required attributes.
259
+
260
+ Returns
261
+ -------
262
+ Set[str]
263
+ Set of required attribute names
264
+ """
265
+ if not self.isProtocol():
266
+ return set()
267
+
268
+ return {
269
+ name for name in dir(self._abstract)
270
+ if not name.startswith('_') and not inspect.isfunction(getattr(self._abstract, name))
271
+ }
@@ -99,6 +99,32 @@ class ReflexionInstance:
99
99
  predicate=inspect.ismethod
100
100
  )]
101
101
 
102
+ def getStaticMethods(self) -> List[str]:
103
+ """Get all static method names of the instance.
104
+
105
+ Returns
106
+ -------
107
+ List[str]
108
+ List of static method names, excluding private methods (starting with '_')
109
+
110
+ Examples
111
+ --------
112
+ >>> class MyClass:
113
+ ... @staticmethod
114
+ ... def static_method(): pass
115
+ ... @staticmethod
116
+ ... def _private_static(): pass
117
+ ...
118
+ >>> reflex = ReflexionInstance(MyClass())
119
+ >>> reflex.getStaticMethods()
120
+ ['static_method']
121
+ """
122
+ return [
123
+ name for name in dir(self._instance.__class__)
124
+ if not name.startswith('_') and
125
+ isinstance(inspect.getattr_static(self._instance.__class__, name), staticmethod)
126
+ ]
127
+
102
128
  def getPropertyNames(self) -> List[str]:
103
129
  """Get all property names of the instance.
104
130
 
@@ -0,0 +1,65 @@
1
+ import sys
2
+ from orionis.luminate.console.output.console import Console
3
+ import os
4
+
5
+ class PrinterInTest:
6
+ """
7
+ A utility class for printing debug information during testing. This class temporarily
8
+ redirects the standard output and error streams to their original states to ensure
9
+ proper console output, and provides contextual information about the file and line
10
+ number where the print call was made.
11
+ Methods
12
+ -------
13
+ print(*args)
14
+ Prints the provided arguments to the console with contextual information
15
+ about the file and line number of the caller. If no arguments are provided,
16
+ the method does nothing.
17
+ """
18
+
19
+ def print(*args):
20
+ """
21
+ Prints the provided arguments to the console with contextual information
22
+ about the file and line number of the caller. The output is formatted with
23
+ muted text decorations for better readability.
24
+ Parameters
25
+ ----------
26
+ *args : tuple
27
+ The arguments to be printed. The first argument is ignored, and the
28
+ remaining arguments are printed. If no arguments are provided, the
29
+ method does nothing.
30
+ Notes
31
+ -----
32
+ - The method temporarily redirects `sys.stdout` and `sys.stderr` to their
33
+ original states (`sys.__stdout__` and `sys.__stderr__`) to ensure proper
34
+ console output.
35
+ - The contextual information includes the file path and line number of the
36
+ caller, which is displayed in a muted text format.
37
+ - After printing, the method restores the original `sys.stdout` and
38
+ `sys.stderr` streams.
39
+ """
40
+
41
+ # Check if the first argument is a string and remove it from the args tuple
42
+ if len(args) == 0:
43
+ return
44
+
45
+ # Change the output stream to the original stdout and stderr
46
+ # to avoid any issues with the console output
47
+ original_stdout = sys.stdout
48
+ original_stderr = sys.stderr
49
+ sys.stdout = sys.__stdout__
50
+ sys.stderr = sys.__stderr__
51
+
52
+ # Get the file name and line number of the caller
53
+ # using sys._getframe(1) to access the caller's frame
54
+ _file = os.path.relpath(sys._getframe(1).f_code.co_filename, start=os.getcwd())
55
+ _method = sys._getframe(1).f_code.co_name
56
+ _line = sys._getframe(1).f_lineno
57
+
58
+ # Print the contextual information and the provided arguments
59
+ Console.textMuted(f"[DEBUG] File: {_file}, Line: {_line}, Method: {_method}")
60
+ print(*args[1:], end='\n')
61
+ Console.newLine()
62
+
63
+ # Restore the original stdout and stderr streams
64
+ sys.stdout = original_stdout
65
+ sys.stderr = original_stderr
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.203.0
3
+ Version: 0.205.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
@@ -190,6 +190,7 @@ orionis/luminate/support/inspection/reflexion_module.py
190
190
  orionis/luminate/support/inspection/reflexion_module_with_classname.py
191
191
  orionis/luminate/test/__init__.py
192
192
  orionis/luminate/test/test_exception.py
193
+ orionis/luminate/test/test_output.py
193
194
  orionis/luminate/test/test_result.py
194
195
  orionis/luminate/test/test_status.py
195
196
  orionis/luminate/test/tests.py
@@ -204,9 +205,10 @@ orionis/static/logos/OrionisFramework.psd
204
205
  orionis/static/logos/OrionisFramework2.png
205
206
  orionis/static/logos/OrionisFramework3.png
206
207
  tests/__init__.py
207
- tests/main.py
208
208
  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.py
212
+ tests/support/inspection/test_reflection_instance.py
213
+ tests/support/inspection/fakes/__init__.py
214
+ tests/support/inspection/fakes/fake_reflection.py
@@ -1,5 +1,4 @@
1
1
  import unittest
2
-
3
2
  class TestExample(unittest.TestCase):
4
3
  """
5
4
  Unit tests for basic example functionality.
@@ -0,0 +1,60 @@
1
+ class BaseFakeClass:
2
+ pass
3
+
4
+ class FakeClass(BaseFakeClass):
5
+ """This is a test class for ReflexionInstance.
6
+
7
+ Attributes
8
+ ----------
9
+ public_attr : int
10
+ An example public attribute
11
+ _private_attr : str
12
+ An example "private" attribute
13
+ """
14
+
15
+ class_attr: str = "class_value"
16
+
17
+ def __init__(self) -> None:
18
+ self.public_attr = 42
19
+ self._private_attr = "secret"
20
+ self.dynamic_attr = None
21
+
22
+ def instance_method(self, x: int, y: int) -> int:
23
+ """Adds two numbers.
24
+
25
+ Parameters
26
+ ----------
27
+ x : int
28
+ First number
29
+ y : int
30
+ Second number
31
+
32
+ Returns
33
+ -------
34
+ int
35
+ The sum of x and y
36
+ """
37
+ return x + y
38
+
39
+ @property
40
+ def computed_property(self) -> str:
41
+ """A computed property."""
42
+ return f"Value: {self.public_attr}"
43
+
44
+ @classmethod
45
+ def class_method(cls) -> str:
46
+ """A class method."""
47
+ return f"Class attr: {cls.class_attr}"
48
+
49
+ @staticmethod
50
+ def static_method(text: str) -> str:
51
+ """A static method."""
52
+ return text.upper()
53
+
54
+ def __private_method(self) -> str:
55
+ """A 'private' method."""
56
+ return "This is private"
57
+
58
+ def _protected_method(self) -> str:
59
+ """A 'protected' method."""
60
+ return "This is protected"
@@ -0,0 +1,147 @@
1
+ import unittest
2
+ from orionis.luminate.support.inspection.reflection import Reflection
3
+ from orionis.luminate.support.inspection.reflexion_instance import ReflexionInstance
4
+ from orionis.luminate.test.test_output import PrinterInTest
5
+ from tests.support.inspection.fakes.fake_reflection import BaseFakeClass, FakeClass
6
+
7
+ class TestReflection(unittest.TestCase, PrinterInTest):
8
+ """
9
+ Unit tests for the Reflection class.
10
+ This class tests the functionality of the Reflection class, ensuring that it correctly handles
11
+ """
12
+
13
+ def testReflectionInstanceExceptionValueError(self):
14
+ """Test that Reflection.instance raises ValueError for invalid types."""
15
+ with self.assertRaises(ValueError):
16
+ Reflection.instance(str)
17
+
18
+ def testReflectionInstance(self):
19
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
20
+ self.assertIsInstance(Reflection.instance(FakeClass()), ReflexionInstance)
21
+
22
+ def testReflectionInstanceGetClassName(self):
23
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
24
+ reflex = Reflection.instance(FakeClass())
25
+ self.assertEqual(reflex.getClassName(), "FakeClass")
26
+
27
+ def testReflectionInstanceGetClass(self):
28
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
29
+ reflex = Reflection.instance(FakeClass())
30
+ self.assertEqual(reflex.getClass(), FakeClass)
31
+
32
+ def testReflectionInstanceGetModuleName(self):
33
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
34
+ reflex = Reflection.instance(FakeClass())
35
+ self.assertEqual(reflex.getModuleName(), "tests.support.inspection.fakes.fake_reflection")
36
+
37
+ def testReflectionInstanceGetAttributes(self):
38
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
39
+ reflex = Reflection.instance(FakeClass())
40
+ attributes = reflex.getAttributes()
41
+ self.assertTrue("public_attr" in attributes)
42
+ self.assertTrue("_private_attr" in attributes)
43
+ self.assertTrue("dynamic_attr" in attributes)
44
+
45
+ def testReflectionInstanceGetMethods(self):
46
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
47
+ reflex = Reflection.instance(FakeClass())
48
+ methods = reflex.getMethods()
49
+ self.assertTrue("instance_method" in methods)
50
+ self.assertTrue("class_method" in methods)
51
+
52
+ def testReflectionInstanceGetStaticMethods(self):
53
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
54
+ reflex = Reflection.instance(FakeClass())
55
+ methods = reflex.getStaticMethods()
56
+ self.assertTrue("static_method" in methods)
57
+
58
+ def testReflectionInstanceGetPropertyNames(self):
59
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
60
+ reflex = Reflection.instance(FakeClass())
61
+ properties = reflex.getPropertyNames()
62
+ self.assertTrue("computed_property" in properties)
63
+
64
+ def testReflectionInstanceCallMethod(self):
65
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
66
+ reflex = Reflection.instance(FakeClass())
67
+ result = reflex.callMethod("instance_method", 1, 2)
68
+ self.assertEqual(result, 3)
69
+
70
+ def testReflectionInstanceGetMethodSignature(self):
71
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
72
+ reflex = Reflection.instance(FakeClass())
73
+ signature = reflex.getMethodSignature("instance_method")
74
+ self.assertEqual(str(signature), "(x: int, y: int) -> int")
75
+
76
+ def testReflectionInstanceGetDocstring(self):
77
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
78
+ reflex = Reflection.instance(FakeClass())
79
+ docstring = reflex.getDocstring()
80
+ self.assertIn("This is a test class for ReflexionInstance", docstring)
81
+
82
+ def testReflectionInstanceGetBaseClasses(self):
83
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
84
+ reflex = Reflection.instance(FakeClass())
85
+ base_classes = reflex.getBaseClasses()
86
+ self.assertIn(BaseFakeClass, base_classes)
87
+
88
+ def testReflectionInstanceIsInstanceOf(self):
89
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
90
+ reflex = Reflection.instance(FakeClass())
91
+ self.assertTrue(reflex.isInstanceOf(BaseFakeClass))
92
+
93
+ def testReflectionInstanceGetSourceCode(self):
94
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
95
+ reflex = Reflection.instance(FakeClass())
96
+ source_code = reflex.getSourceCode()
97
+ self.assertIn("class FakeClass(BaseFakeClass):", source_code)
98
+
99
+ def testReflectionInstanceGetFileLocation(self):
100
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
101
+ reflex = Reflection.instance(FakeClass())
102
+ file_location = reflex.getFileLocation()
103
+ self.assertIn("fake_reflection.py", file_location)
104
+
105
+ def testReflectionInstanceGetAnnotations(self):
106
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
107
+ reflex = Reflection.instance(FakeClass())
108
+ annotations = reflex.getAnnotations()
109
+ self.assertEqual("{'class_attr': <class 'str'>}", str(annotations))
110
+
111
+ def testReflectionInstanceHasAttribute(self):
112
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
113
+ reflex = Reflection.instance(FakeClass())
114
+ self.assertTrue(reflex.hasAttribute("public_attr"))
115
+ self.assertFalse(reflex.hasAttribute("non_existent_attr"))
116
+
117
+ def testReflectionInstanceGetAttribute(self):
118
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
119
+ reflex = Reflection.instance(FakeClass())
120
+ attr_value = reflex.getAttribute("public_attr")
121
+ self.assertEqual(attr_value, 42)
122
+
123
+ def testReflectionInstanceGetCallableMembers(self):
124
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
125
+ reflex = Reflection.instance(FakeClass())
126
+ callable_members = reflex.getCallableMembers()
127
+ self.assertIn("instance_method", callable_members)
128
+ self.assertIn("class_method", callable_members)
129
+ self.assertIn("static_method", callable_members)
130
+
131
+ def testReflectionInstanceSetAttribute(self):
132
+ """Test that Reflection.instance returns an instance of ReflexionInstance."""
133
+
134
+ # Create a new macro function
135
+ def myMacro(cls:FakeClass, num):
136
+ return cls.instance_method(10, 12) + num
137
+
138
+ # Create an instance of FakeClass and set the macro as an attribute
139
+ reflex = Reflection.instance(FakeClass())
140
+ reflex.setAttribute("myMacro", myMacro)
141
+
142
+ # Check if the macro was set correctly
143
+ self.assertTrue(reflex.hasAttribute("myMacro"))
144
+
145
+ # Call the macro method and check the result
146
+ result = reflex.callMethod("myMacro", reflex._instance, 3)
147
+ self.assertEqual(result, 25)
@@ -1,23 +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
- class ReflexionAbstract:
8
- """A reflection object encapsulating an abstract class.
9
-
10
- Parameters
11
- ----------
12
- abstract : Type[ABC]
13
- The abstract class being reflected upon
14
-
15
- Attributes
16
- ----------
17
- _abstract : Type[ABC]
18
- The encapsulated abstract class
19
- """
20
-
21
- def __init__(self, abstract: Type[ABC]) -> None:
22
- """Initialize with the abstract class."""
23
- self._abstract = abstract
@@ -1,9 +0,0 @@
1
- import unittest
2
-
3
- class TestReflection(unittest.TestCase):
4
- """
5
- Unit tests for basic example functionality.
6
- """
7
-
8
- def testReflection(self):
9
- self.assertEqual(3, 3)
File without changes
File without changes
File without changes
File without changes
File without changes