orionis 0.210.0__tar.gz → 0.211.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 (223) hide show
  1. {orionis-0.210.0/orionis.egg-info → orionis-0.211.0}/PKG-INFO +1 -1
  2. {orionis-0.210.0 → orionis-0.211.0}/orionis/framework.py +1 -1
  3. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/functions.py +47 -19
  4. orionis-0.211.0/orionis/luminate/support/inspection/reflection.py +221 -0
  5. orionis-0.211.0/orionis/luminate/support/inspection/reflexion_concrete.py +276 -0
  6. {orionis-0.210.0 → orionis-0.211.0/orionis.egg-info}/PKG-INFO +1 -1
  7. {orionis-0.210.0 → orionis-0.211.0}/orionis.egg-info/SOURCES.txt +2 -0
  8. orionis-0.211.0/tests/support/inspection/fakes/fake_reflection_concrete.py +44 -0
  9. orionis-0.211.0/tests/support/inspection/test_reflection_concrete.py +139 -0
  10. {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/test_reflection_instance.py +1 -1
  11. {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/test_reflection_instance_with_abstract.py +1 -1
  12. orionis-0.210.0/orionis/luminate/support/inspection/reflection.py +0 -649
  13. orionis-0.210.0/orionis/luminate/support/inspection/reflexion_concrete.py +0 -24
  14. {orionis-0.210.0 → orionis-0.211.0}/LICENCE +0 -0
  15. {orionis-0.210.0 → orionis-0.211.0}/MANIFEST.in +0 -0
  16. {orionis-0.210.0 → orionis-0.211.0}/README.md +0 -0
  17. {orionis-0.210.0 → orionis-0.211.0}/orionis/__init__.py +0 -0
  18. {orionis-0.210.0 → orionis-0.211.0}/orionis/console.py +0 -0
  19. {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/__init__.py +0 -0
  20. {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/contracts/__init__.py +0 -0
  21. {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/contracts/manager.py +0 -0
  22. {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/contracts/output.py +0 -0
  23. {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/contracts/setup.py +0 -0
  24. {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/manager.py +0 -0
  25. {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/output.py +0 -0
  26. {orionis-0.210.0 → orionis-0.211.0}/orionis/installer/setup.py +0 -0
  27. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/__init__.py +0 -0
  28. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/application.py +0 -0
  29. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/__init__.py +0 -0
  30. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/app.py +0 -0
  31. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/auth.py +0 -0
  32. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/cache.py +0 -0
  33. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/cors.py +0 -0
  34. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/database.py +0 -0
  35. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/filesystems.py +0 -0
  36. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/logging.py +0 -0
  37. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/mail.py +0 -0
  38. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/queue.py +0 -0
  39. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/config/session.py +0 -0
  40. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/__init__.py +0 -0
  41. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/base/__init__.py +0 -0
  42. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/base/command.py +0 -0
  43. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/command_filter.py +0 -0
  44. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/commands/__init__.py +0 -0
  45. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
  46. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/commands/help.py +0 -0
  47. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
  48. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/commands/version.py +0 -0
  49. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/exceptions/__init__.py +0 -0
  50. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/exceptions/cli-orionis-value-error.py +0 -0
  51. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
  52. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/exceptions/cli_runtime_error.py +0 -0
  53. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/exceptions/cli_schedule_exception.py +0 -0
  54. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/kernel.py +0 -0
  55. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/output/__init__.py +0 -0
  56. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/output/console.py +0 -0
  57. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/output/executor.py +0 -0
  58. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/output/progress_bar.py +0 -0
  59. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/output/styles.py +0 -0
  60. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/console/parser.py +0 -0
  61. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/__init__.py +0 -0
  62. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/container.py +0 -0
  63. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/container_integrity.py +0 -0
  64. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/exception.py +0 -0
  65. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/lifetimes.py +0 -0
  66. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/container/resolve.py +0 -0
  67. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/__init__.py +0 -0
  68. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/application.py +0 -0
  69. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/config/__init__.py +0 -0
  70. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/config/config.py +0 -0
  71. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/__init__.py +0 -0
  72. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/base/__init__.py +0 -0
  73. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/base/command.py +0 -0
  74. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/command_filter.py +0 -0
  75. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/kernel.py +0 -0
  76. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/output/__init__.py +0 -0
  77. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/output/console.py +0 -0
  78. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/output/executor.py +0 -0
  79. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/output/progress_bar.py +0 -0
  80. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/parser.py +0 -0
  81. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/console/task_manager.py +0 -0
  82. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/container/container.py +0 -0
  83. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/container/container_integrity.py +0 -0
  84. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/__init__.py +0 -0
  85. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/commands/__init__.py +0 -0
  86. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/commands/commands_facade.py +0 -0
  87. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/commands/scheduler_facade.py +0 -0
  88. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/config/__init__.py +0 -0
  89. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/config/config_facade.py +0 -0
  90. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/environment/__init__.py +0 -0
  91. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/environment/environment_facade.py +0 -0
  92. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/facade.py +0 -0
  93. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/files/__init__.py +0 -0
  94. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/files/path_facade.py +0 -0
  95. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/log/__init__.py +0 -0
  96. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/log/log_facade.py +0 -0
  97. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/tests/__init__.py +0 -0
  98. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/facades/tests/tests_facade.py +0 -0
  99. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/__init__.py +0 -0
  100. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/bootstraper.py +0 -0
  101. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/config/__init__.py +0 -0
  102. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/config/config_bootstrapper.py +0 -0
  103. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/console/__init__.py +0 -0
  104. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/console/command_bootstrapper.py +0 -0
  105. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/environment/__init__.py +0 -0
  106. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/environment/environment_bootstrapper.py +0 -0
  107. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/providers/__init__.py +0 -0
  108. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/foundation/providers/service_providers_bootstrapper.py +0 -0
  109. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/providers/__init__.py +0 -0
  110. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/providers/service_provider.py +0 -0
  111. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/__init__.py +0 -0
  112. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/commands/__init__.py +0 -0
  113. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/commands/reactor_commands_service.py +0 -0
  114. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/commands/schedule_service.py +0 -0
  115. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/config/__init__.py +0 -0
  116. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/config/config_service.py +0 -0
  117. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/environment/__init__.py +0 -0
  118. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/environment/environment_service.py +0 -0
  119. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/files/__init__.py +0 -0
  120. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/files/path_resolver_service.py +0 -0
  121. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/log/__init__.py +0 -0
  122. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/services/log/log_service.py +0 -0
  123. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/support/exception_parse.py +0 -0
  124. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/support/reflection.py +0 -0
  125. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/contracts/support/std.py +0 -0
  126. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/__init__.py +0 -0
  127. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/app_facade.py +0 -0
  128. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/commands/__init__.py +0 -0
  129. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/commands/commands_facade.py +0 -0
  130. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/commands/scheduler_facade.py +0 -0
  131. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/config/__init__.py +0 -0
  132. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/config/config_facade.py +0 -0
  133. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/environment/__init__.py +0 -0
  134. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/environment/environment_facade.py +0 -0
  135. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/files/__init__.py +0 -0
  136. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/files/path_facade.py +0 -0
  137. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/log/__init__.py +0 -0
  138. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/facades/log/log_facade.py +0 -0
  139. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/__init__.py +0 -0
  140. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/config/__init__.py +0 -0
  141. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/config/config_bootstrapper.py +0 -0
  142. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/console/__init__.py +0 -0
  143. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/console/command_bootstrapper.py +0 -0
  144. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/environment/__init__.py +0 -0
  145. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/environment/environment_bootstrapper.py +0 -0
  146. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/exceptions/__init__.py +0 -0
  147. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/exceptions/exception_bootstrapper.py +0 -0
  148. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/exceptions/exception_providers.py +0 -0
  149. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/providers/__init__.py +0 -0
  150. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/foundation/providers/service_providers_bootstrapper.py +0 -0
  151. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/patterns/__init__.py +0 -0
  152. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/patterns/singleton.py +0 -0
  153. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/__init__.py +0 -0
  154. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/commands/__init__.py +0 -0
  155. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/commands/reactor_commands_service_provider.py +0 -0
  156. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/commands/scheduler_provider.py +0 -0
  157. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/config/__init__.py +0 -0
  158. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/config/config_service_provider.py +0 -0
  159. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/environment/__init__.py +0 -0
  160. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/environment/environment__service_provider.py +0 -0
  161. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/files/__init__.py +0 -0
  162. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/files/paths_provider.py +0 -0
  163. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/log/__init__.py +0 -0
  164. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/log/log_service_provider.py +0 -0
  165. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/providers/service_provider.py +0 -0
  166. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/__init__.py +0 -0
  167. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/commands/__init__.py +0 -0
  168. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/commands/reactor_commands_service.py +0 -0
  169. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/commands/scheduler_service.py +0 -0
  170. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/config/__init__.py +0 -0
  171. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/config/config_service.py +0 -0
  172. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/environment/__init__.py +0 -0
  173. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/environment/environment_service.py +0 -0
  174. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/files/__init__.py +0 -0
  175. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/files/path_resolver_service.py +0 -0
  176. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/log/__init__.py +0 -0
  177. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/services/log/log_service.py +0 -0
  178. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/asyn_run.py +0 -0
  179. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/dot_dict.py +0 -0
  180. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/exception_parse.py +0 -0
  181. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/__init__.py +0 -0
  182. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/container_integrity.py +0 -0
  183. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_abstract.py +0 -0
  184. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_concrete_with_abstract.py +0 -0
  185. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_instance.py +0 -0
  186. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_instance_with_abstract.py +0 -0
  187. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_module.py +0 -0
  188. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/inspection/reflexion_module_with_classname.py +0 -0
  189. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/reflection.py +0 -0
  190. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/support/std.py +0 -0
  191. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/__init__.py +0 -0
  192. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_case.py +0 -0
  193. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_exception.py +0 -0
  194. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_result.py +0 -0
  195. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_status.py +0 -0
  196. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_std_out.py +0 -0
  197. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_suite.py +0 -0
  198. {orionis-0.210.0 → orionis-0.211.0}/orionis/luminate/test/test_unit.py +0 -0
  199. {orionis-0.210.0 → orionis-0.211.0}/orionis/static/ascii/icon.ascii +0 -0
  200. {orionis-0.210.0 → orionis-0.211.0}/orionis/static/ascii/info.ascii +0 -0
  201. {orionis-0.210.0 → orionis-0.211.0}/orionis/static/bg/galaxy.jpg +0 -0
  202. {orionis-0.210.0 → orionis-0.211.0}/orionis/static/favicon/OrionisFrameworkFavicon.png +0 -0
  203. {orionis-0.210.0 → orionis-0.211.0}/orionis/static/logos/OrionisFramework.jpg +0 -0
  204. {orionis-0.210.0 → orionis-0.211.0}/orionis/static/logos/OrionisFramework.png +0 -0
  205. {orionis-0.210.0 → orionis-0.211.0}/orionis/static/logos/OrionisFramework.psd +0 -0
  206. {orionis-0.210.0 → orionis-0.211.0}/orionis/static/logos/OrionisFramework2.png +0 -0
  207. {orionis-0.210.0 → orionis-0.211.0}/orionis/static/logos/OrionisFramework3.png +0 -0
  208. {orionis-0.210.0 → orionis-0.211.0}/orionis.egg-info/dependency_links.txt +0 -0
  209. {orionis-0.210.0 → orionis-0.211.0}/orionis.egg-info/entry_points.txt +0 -0
  210. {orionis-0.210.0 → orionis-0.211.0}/orionis.egg-info/requires.txt +0 -0
  211. {orionis-0.210.0 → orionis-0.211.0}/orionis.egg-info/top_level.txt +0 -0
  212. {orionis-0.210.0 → orionis-0.211.0}/setup.cfg +0 -0
  213. {orionis-0.210.0 → orionis-0.211.0}/setup.py +0 -0
  214. {orionis-0.210.0 → orionis-0.211.0}/tests/__init__.py +0 -0
  215. {orionis-0.210.0 → orionis-0.211.0}/tests/example/__init__.py +0 -0
  216. {orionis-0.210.0 → orionis-0.211.0}/tests/example/test_example.py +0 -0
  217. {orionis-0.210.0 → orionis-0.211.0}/tests/support/__init__.py +0 -0
  218. {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/__init__.py +0 -0
  219. {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/fakes/__init__.py +0 -0
  220. {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/fakes/fake_reflection_abstract.py +0 -0
  221. {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/fakes/fake_reflection_instance.py +0 -0
  222. {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/fakes/fake_reflection_instance_with_abstract.py +0 -0
  223. {orionis-0.210.0 → orionis-0.211.0}/tests/support/inspection/test_reflection_abstract.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.210.0
3
+ Version: 0.211.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.210.0"
8
+ VERSION = "0.211.0"
9
9
 
10
10
  # Full name of the author or maintainer of the project
11
11
  AUTHOR = "Raul Mauricio Uñate Castro"
@@ -2,7 +2,7 @@ from typing import Any, Type
2
2
  import inspect
3
3
  import importlib
4
4
 
5
- def is_valid_module(module_name: str) -> bool:
5
+ def _is_valid_module(module_name: str) -> bool:
6
6
  """Check if a module name is valid and can be imported.
7
7
 
8
8
  Parameters
@@ -21,7 +21,7 @@ def is_valid_module(module_name: str) -> bool:
21
21
  except ImportError:
22
22
  return False
23
23
 
24
- def ensure_valid_module(module_name: str) -> None:
24
+ def _ensure_valid_module(module_name: str) -> None:
25
25
  """Ensure a module name is valid and can be imported.
26
26
 
27
27
  Parameters
@@ -36,10 +36,10 @@ def ensure_valid_module(module_name: str) -> None:
36
36
  """
37
37
  if not isinstance(module_name, str):
38
38
  raise TypeError(f"Module name must be a string, got {type(module_name)}")
39
- if not is_valid_module(module_name):
39
+ if not _is_valid_module(module_name):
40
40
  raise ValueError(f"Invalid or non-importable module: {module_name}")
41
41
 
42
- def is_instantiable_class(cls: Type) -> bool:
42
+ def _is_instantiable_class(cls: Type) -> bool:
43
43
  """Check if a class is concrete and can be instantiated.
44
44
 
45
45
  Parameters
@@ -54,7 +54,7 @@ def is_instantiable_class(cls: Type) -> bool:
54
54
  """
55
55
  if not isinstance(cls, type):
56
56
  return False
57
- if is_abstract_class(cls):
57
+ if _is_abstract_class(cls):
58
58
  return False
59
59
  try:
60
60
  # Try to create an instance to verify it's truly concrete
@@ -63,7 +63,33 @@ def is_instantiable_class(cls: Type) -> bool:
63
63
  except TypeError:
64
64
  return False
65
65
 
66
- def ensure_instantiable_class(cls: Type) -> None:
66
+ def _ensure_not_builtin_type(cls: Type) -> None:
67
+ """Ensure a class is not a built-in or primitive type.
68
+
69
+ Parameters
70
+ ----------
71
+ cls : Type
72
+ The class to check
73
+
74
+ Raises
75
+ ------
76
+ TypeError
77
+ If the input is not a class
78
+ ValueError
79
+ If the class is a built-in or primitive type
80
+ """
81
+ if not isinstance(cls, type):
82
+ raise TypeError(f"Expected a class, got {type(cls)}")
83
+
84
+ builtin_types = {
85
+ int, float, str, bool, bytes, type(None), complex,
86
+ list, tuple, dict, set, frozenset
87
+ }
88
+
89
+ if cls in builtin_types:
90
+ raise ValueError(f"Class '{cls.__name__}' is a built-in or primitive type and cannot be used.")
91
+
92
+ def _ensure_instantiable_class(cls: Type) -> None:
67
93
  """Ensure a class is concrete and can be instantiated.
68
94
 
69
95
  Parameters
@@ -78,16 +104,18 @@ def ensure_instantiable_class(cls: Type) -> None:
78
104
  ValueError
79
105
  If the class is abstract or cannot be instantiated
80
106
  """
107
+ if _ensure_not_builtin_type(cls):
108
+ raise TypeError(f"Invalid class: {cls!r}")
81
109
  if not isinstance(cls, type):
82
110
  raise TypeError(f"Expected a class, got {type(cls)}")
83
- if is_abstract_class(cls):
111
+ if _is_abstract_class(cls):
84
112
  raise ValueError(f"Class '{cls.__name__}' is abstract")
85
113
  try:
86
114
  cls()
87
115
  except TypeError as e:
88
116
  raise ValueError(f"Class '{cls.__name__}' cannot be instantiated: {str(e)}")
89
117
 
90
- def is_valid_class_name(module_name: str, class_name: str) -> bool:
118
+ def _is_valid_class_name(module_name: str, class_name: str) -> bool:
91
119
  """Check if a class exists in a given module.
92
120
 
93
121
  Parameters
@@ -108,7 +136,7 @@ def is_valid_class_name(module_name: str, class_name: str) -> bool:
108
136
  except ImportError:
109
137
  return False
110
138
 
111
- def ensure_valid_class_name(module_name: str, class_name: str) -> None:
139
+ def _ensure_valid_class_name(module_name: str, class_name: str) -> None:
112
140
  """Ensure a class exists in a given module.
113
141
 
114
142
  Parameters
@@ -123,10 +151,10 @@ def ensure_valid_class_name(module_name: str, class_name: str) -> None:
123
151
  ValueError
124
152
  If the class doesn't exist in the module
125
153
  """
126
- if not is_valid_class_name(module_name, class_name):
154
+ if not _is_valid_class_name(module_name, class_name):
127
155
  raise ValueError(f"Class '{class_name}' not found in module '{module_name}'")
128
156
 
129
- def is_user_defined_class_instance(instance: Any) -> bool:
157
+ def _is_user_defined_class_instance(instance: Any) -> bool:
130
158
  """Check if an object is an instance of a user-defined class.
131
159
 
132
160
  Parameters
@@ -141,7 +169,7 @@ def is_user_defined_class_instance(instance: Any) -> bool:
141
169
  """
142
170
  return isinstance(instance, object) and type(instance).__module__ not in {'builtins', 'abc', '__main__'}
143
171
 
144
- def ensure_user_defined_class_instance(instance: Any) -> None:
172
+ def _ensure_user_defined_class_instance(instance: Any) -> None:
145
173
  """Ensure an object is an instance of a user-defined class.
146
174
 
147
175
  Parameters
@@ -164,7 +192,7 @@ def ensure_user_defined_class_instance(instance: Any) -> None:
164
192
  if module == '__main__':
165
193
  raise ValueError("Instance originates from '__main__', origin indeterminate.")
166
194
 
167
- def is_abstract_class(cls: Type) -> bool:
195
+ def _is_abstract_class(cls: Type) -> bool:
168
196
  """Check if a class is abstract.
169
197
 
170
198
  Parameters
@@ -179,7 +207,7 @@ def is_abstract_class(cls: Type) -> bool:
179
207
  """
180
208
  return isinstance(cls, type) and bool(getattr(cls, '__abstractmethods__', False))
181
209
 
182
- def ensure_abstract_class(cls: Type) -> None:
210
+ def _ensure_abstract_class(cls: Type) -> None:
183
211
  """Ensure a class is abstract.
184
212
 
185
213
  Parameters
@@ -196,10 +224,10 @@ def ensure_abstract_class(cls: Type) -> None:
196
224
  """
197
225
  if not isinstance(cls, type):
198
226
  raise TypeError(f"Invalid class: {cls!r}")
199
- if not is_abstract_class(cls):
227
+ if not _is_abstract_class(cls):
200
228
  raise ValueError(f"Class '{cls.__name__}' is not abstract.")
201
229
 
202
- def is_concrete_class(cls: Type) -> bool:
230
+ def _is_concrete_class(cls: Type) -> bool:
203
231
  """Check if a class is concrete.
204
232
 
205
233
  Parameters
@@ -212,9 +240,9 @@ def is_concrete_class(cls: Type) -> bool:
212
240
  bool
213
241
  True if the class is concrete, False otherwise
214
242
  """
215
- return isinstance(cls, type) and not is_abstract_class(cls)
243
+ return isinstance(cls, type) and not _is_abstract_class(cls)
216
244
 
217
- def ensure_concrete_class(cls: Type) -> None:
245
+ def _ensure_concrete_class(cls: Type) -> None:
218
246
  """Ensure a class is concrete.
219
247
 
220
248
  Parameters
@@ -231,5 +259,5 @@ def ensure_concrete_class(cls: Type) -> None:
231
259
  """
232
260
  if not isinstance(cls, type):
233
261
  raise TypeError(f"Invalid class: {cls!r}")
234
- if not is_concrete_class(cls):
262
+ if not _is_concrete_class(cls):
235
263
  raise ValueError(f"Class '{cls.__name__}' is not concrete.")
@@ -0,0 +1,221 @@
1
+ import abc
2
+ from typing import Any, Type, TypeVar
3
+ from orionis.luminate.support.inspection.functions import (
4
+ _ensure_abstract_class,
5
+ _ensure_instantiable_class,
6
+ _ensure_user_defined_class_instance,
7
+ _ensure_valid_class_name,
8
+ _ensure_valid_module,
9
+ )
10
+ from orionis.luminate.support.inspection.reflexion_abstract import ReflexionAbstract
11
+ from orionis.luminate.support.inspection.reflexion_concrete import ReflexionConcrete
12
+ from orionis.luminate.support.inspection.reflexion_concrete_with_abstract import ReflexionConcreteWithAbstract
13
+ from orionis.luminate.support.inspection.reflexion_instance import ReflexionInstance
14
+ from orionis.luminate.support.inspection.reflexion_instance_with_abstract import ReflexionInstanceWithAbstract
15
+ from orionis.luminate.support.inspection.reflexion_module import ReflexionModule
16
+ from orionis.luminate.support.inspection.reflexion_module_with_classname import ReflexionModuleWithClassName
17
+
18
+ T = TypeVar('T')
19
+ ABC = TypeVar('ABC', bound=abc.ABC)
20
+
21
+ class Reflection:
22
+ """A static class providing factory methods for creating reflection objects.
23
+
24
+ This class provides methods to create various types of reflection objects
25
+ that encapsulate different aspects of Python's reflection capabilities.
26
+ Each method validates its inputs before creating the appropriate reflection object.
27
+
28
+ Methods
29
+ -------
30
+ instance(instance: Any) -> ReflexionInstance
31
+ Creates a reflection object for a class instance
32
+ instanceWithAbstract(instance: Any, abstract: Type[ABC]) -> ReflexionInstanceWithAbstract
33
+ Creates a reflection object for a class instance with its abstract parent
34
+ abstract(abstract: Type[ABC]) -> ReflexionAbstract
35
+ Creates a reflection object for an abstract class
36
+ concrete(concrete: Type[T]) -> ReflexionConcrete
37
+ Creates a reflection object for a concrete class
38
+ concreteWithAbstract(concrete: Type[T], abstract: Type[ABC]) -> ReflexionConcreteWithAbstract
39
+ Creates a reflection object for a concrete class with its abstract parent
40
+ module(module: str) -> ReflexionModule
41
+ Creates a reflection object for a module
42
+ moduleWithClassName(module: str, class_name: str) -> ReflexionModuleWithClassName
43
+ Creates a reflection object for a module with a specific class name
44
+ """
45
+
46
+ @staticmethod
47
+ def instance(instance: Any) -> 'ReflexionInstance':
48
+ """Create a reflection object for a class instance.
49
+
50
+ Parameters
51
+ ----------
52
+ instance : Any
53
+ The instance to reflect upon
54
+
55
+ Returns
56
+ -------
57
+ ReflexionInstance
58
+ A reflection object encapsulating the instance
59
+
60
+ Raises
61
+ ------
62
+ TypeError
63
+ If the input is not an object instance
64
+ ValueError
65
+ If the instance is from builtins, abc, or __main__
66
+ """
67
+ _ensure_user_defined_class_instance(instance)
68
+ return ReflexionInstance(instance)
69
+
70
+ @staticmethod
71
+ def instanceWithAbstract(instance: Any, abstract: Type[ABC]) -> 'ReflexionInstanceWithAbstract':
72
+ """Create a reflection object for a class instance with its abstract parent.
73
+
74
+ Parameters
75
+ ----------
76
+ instance : Any
77
+ The instance to reflect upon
78
+ abstract : Type[ABC]
79
+ The abstract parent class
80
+
81
+ Returns
82
+ -------
83
+ ReflexionInstanceWithAbstract
84
+ A reflection object encapsulating the instance and its abstract parent
85
+
86
+ Raises
87
+ ------
88
+ TypeError
89
+ If the instance is not an object or abstract is not a class
90
+ ValueError
91
+ If the instance is invalid or abstract is not actually abstract
92
+ """
93
+ _ensure_user_defined_class_instance(instance)
94
+ _ensure_abstract_class(abstract)
95
+ return ReflexionInstanceWithAbstract(instance, abstract)
96
+
97
+ @staticmethod
98
+ def abstract(abstract: Type[ABC]) -> 'ReflexionAbstract':
99
+ """Create a reflection object for an abstract class.
100
+
101
+ Parameters
102
+ ----------
103
+ abstract : Type[ABC]
104
+ The abstract class to reflect upon
105
+
106
+ Returns
107
+ -------
108
+ ReflexionAbstract
109
+ A reflection object encapsulating the abstract class
110
+
111
+ Raises
112
+ ------
113
+ TypeError
114
+ If the input is not a class
115
+ ValueError
116
+ If the class is not abstract
117
+ """
118
+ _ensure_abstract_class(abstract)
119
+ return ReflexionAbstract(abstract)
120
+
121
+ @staticmethod
122
+ def concrete(concrete: Type[T]) -> 'ReflexionConcrete':
123
+ """Create a reflection object for a concrete class.
124
+
125
+ Parameters
126
+ ----------
127
+ concrete : Type[T]
128
+ The concrete class to reflect upon
129
+
130
+ Returns
131
+ -------
132
+ ReflexionConcrete
133
+ A reflection object encapsulating the concrete class
134
+
135
+ Raises
136
+ ------
137
+ TypeError
138
+ If the input is not a class
139
+ ValueError
140
+ If the class is abstract or cannot be instantiated
141
+ """
142
+ _ensure_instantiable_class(concrete)
143
+ return ReflexionConcrete(concrete)
144
+
145
+ @staticmethod
146
+ def concreteWithAbstract(concrete: Type[T], abstract: Type[ABC]) -> 'ReflexionConcreteWithAbstract':
147
+ """Create a reflection object for a concrete class with its abstract parent.
148
+
149
+ Parameters
150
+ ----------
151
+ concrete : Type[T]
152
+ The concrete class to reflect upon
153
+ abstract : Type[ABC]
154
+ The abstract parent class
155
+
156
+ Returns
157
+ -------
158
+ ReflexionConcreteWithAbstract
159
+ A reflection object encapsulating the concrete class and its abstract parent
160
+
161
+ Raises
162
+ ------
163
+ TypeError
164
+ If either input is not a class
165
+ ValueError
166
+ If concrete is not instantiable or abstract is not actually abstract
167
+ """
168
+ _ensure_instantiable_class(concrete)
169
+ _ensure_abstract_class(abstract)
170
+ return ReflexionConcreteWithAbstract(concrete, abstract)
171
+
172
+ @staticmethod
173
+ def module(module: str) -> 'ReflexionModule':
174
+ """Create a reflection object for a module.
175
+
176
+ Parameters
177
+ ----------
178
+ module : str
179
+ The module name to reflect upon
180
+
181
+ Returns
182
+ -------
183
+ ReflexionModule
184
+ A reflection object encapsulating the module
185
+
186
+ Raises
187
+ ------
188
+ TypeError
189
+ If the input is not a string
190
+ ValueError
191
+ If the module cannot be imported
192
+ """
193
+ _ensure_valid_module(module)
194
+ return ReflexionModule(module)
195
+
196
+ @staticmethod
197
+ def moduleWithClassName(module: str, class_name: str) -> 'ReflexionModuleWithClassName':
198
+ """Create a reflection object for a module with a specific class name.
199
+
200
+ Parameters
201
+ ----------
202
+ module : str
203
+ The module name to reflect upon
204
+ class_name : str
205
+ The class name to look for in the module
206
+
207
+ Returns
208
+ -------
209
+ ReflexionModuleWithClassName
210
+ A reflection object encapsulating the module and class name
211
+
212
+ Raises
213
+ ------
214
+ TypeError
215
+ If either input is not a string
216
+ ValueError
217
+ If the module cannot be imported or the class doesn't exist in it
218
+ """
219
+ _ensure_valid_module(module)
220
+ _ensure_valid_class_name(module, class_name)
221
+ return ReflexionModuleWithClassName(module, class_name)
@@ -0,0 +1,276 @@
1
+ from typing import Any, Callable, Dict, List, Optional, Tuple, Type, TypeVar
2
+ import inspect
3
+
4
+ T = TypeVar('T')
5
+
6
+ class ReflexionConcrete:
7
+ """A reflection object encapsulating a concrete class.
8
+
9
+ Parameters
10
+ ----------
11
+ concrete : Type[T]
12
+ The concrete class being reflected upon
13
+
14
+ Attributes
15
+ ----------
16
+ _concrete : Type[T]
17
+ The encapsulated concrete class
18
+ """
19
+
20
+ def __init__(self, concrete: Type[T]) -> None:
21
+ """Initialize with the concrete class."""
22
+ self._concrete = concrete
23
+
24
+ def getClassName(self) -> str:
25
+ """Get the name of the concrete class.
26
+
27
+ Returns
28
+ -------
29
+ str
30
+ The name of the class
31
+ """
32
+ return self._concrete.__name__
33
+
34
+ def getClass(self) -> Type:
35
+ """Get the class of the instance.
36
+
37
+ Returns
38
+ -------
39
+ Type
40
+ The class object of the instance
41
+
42
+ Examples
43
+ --------
44
+ >>> reflex.getClass() is SomeClass
45
+ True
46
+ """
47
+ return self._concrete
48
+
49
+ def getModuleName(self) -> str:
50
+ """Get the name of the module where the class is defined.
51
+
52
+ Returns
53
+ -------
54
+ str
55
+ The module name
56
+ """
57
+ return self._concrete.__module__
58
+
59
+ def getAttributes(self) -> Dict[str, Any]:
60
+ """Get all class-level attributes.
61
+
62
+ Returns
63
+ -------
64
+ Dict[str, Any]
65
+ Dictionary of attribute names and their values
66
+ """
67
+ return {
68
+ k: v for k, v in vars(self._concrete).items()
69
+ if not callable(v) and not isinstance(v, staticmethod) and not isinstance(v, classmethod) and not k.startswith('_') and not isinstance(v, property)
70
+ }
71
+
72
+ def getMethods(self) -> List[str]:
73
+ """Get all method names of the class.
74
+
75
+ Returns
76
+ -------
77
+ List[str]
78
+ List of method names
79
+ """
80
+ return [
81
+ name for name, member in inspect.getmembers(self._concrete, predicate=inspect.isfunction)
82
+ if not name.startswith('_')
83
+ ]
84
+
85
+ def getStaticMethods(self) -> List[str]:
86
+ """Get all static method names of the class.
87
+
88
+ Returns
89
+ -------
90
+ List[str]
91
+ List of static method names, excluding private methods
92
+ """
93
+ return [
94
+ name for name in dir(self._concrete)
95
+ if not name.startswith('_') and isinstance(inspect.getattr_static(self._concrete, name), staticmethod)
96
+ ]
97
+
98
+ def getPropertyNames(self) -> List[str]:
99
+ """Get all property names of the class.
100
+
101
+ Returns
102
+ -------
103
+ List[str]
104
+ List of property names
105
+ """
106
+ return [
107
+ name for name, val in vars(self._concrete).items()
108
+ if isinstance(val, property)
109
+ ]
110
+
111
+ def getMethodSignature(self, methodName: str) -> inspect.Signature:
112
+ """Get the signature of a class method.
113
+
114
+ Parameters
115
+ ----------
116
+ methodName : str
117
+ Name of the method
118
+
119
+ Returns
120
+ -------
121
+ inspect.Signature
122
+ The method signature
123
+
124
+ Raises
125
+ ------
126
+ AttributeError
127
+ If the method doesn't exist
128
+ """
129
+ method = getattr(self._concrete, methodName)
130
+ if callable(method):
131
+ return inspect.signature(method)
132
+ raise AttributeError(f"{methodName} is not a valid method.")
133
+
134
+ def getPropertySignature(self, propertyName: str) -> inspect.Signature:
135
+ """Get the signature of a property getter.
136
+
137
+ Parameters
138
+ ----------
139
+ propertyName : str
140
+ Name of the property
141
+
142
+ Returns
143
+ -------
144
+ inspect.Signature
145
+ The property's getter method signature
146
+
147
+ Raises
148
+ ------
149
+ AttributeError
150
+ If the property doesn't exist or is not a property
151
+ """
152
+ attr = getattr(self._concrete, propertyName, None)
153
+ if isinstance(attr, property) and attr.fget is not None:
154
+ return inspect.signature(attr.fget)
155
+ raise AttributeError(f"{propertyName} is not a property or doesn't have a getter.")
156
+
157
+ def getDocstring(self) -> Optional[str]:
158
+ """Get the docstring of the class.
159
+
160
+ Returns
161
+ -------
162
+ Optional[str]
163
+ The class docstring, or None if not available
164
+ """
165
+ return self._concrete.__doc__
166
+
167
+ def getBaseClasses(self) -> Tuple[Type, ...]:
168
+ """Get the base classes of the class.
169
+
170
+ Returns
171
+ -------
172
+ Tuple[Type, ...]
173
+ Tuple of base classes
174
+ """
175
+ return self._concrete.__bases__
176
+
177
+ def isSubclassOf(self, cls: Type) -> bool:
178
+ """Check if the concrete class is a subclass of another.
179
+
180
+ Parameters
181
+ ----------
182
+ cls : Type
183
+ The parent class to check against
184
+
185
+ Returns
186
+ -------
187
+ bool
188
+ True if the concrete class is a subclass of the given class
189
+ """
190
+ return issubclass(self._concrete, cls)
191
+
192
+ def getSourceCode(self) -> Optional[str]:
193
+ """Get the source code of the class.
194
+
195
+ Returns
196
+ -------
197
+ Optional[str]
198
+ The source code if available, None otherwise
199
+ """
200
+ try:
201
+ return inspect.getsource(self._concrete)
202
+ except (TypeError, OSError):
203
+ return None
204
+
205
+ def getFileLocation(self) -> Optional[str]:
206
+ """Get the file location where the class is defined.
207
+
208
+ Returns
209
+ -------
210
+ Optional[str]
211
+ The file path if available, None otherwise
212
+ """
213
+ try:
214
+ return inspect.getfile(self._concrete)
215
+ except (TypeError, OSError):
216
+ return None
217
+
218
+ def getAnnotations(self) -> Dict[str, Any]:
219
+ """Get type annotations of the class.
220
+
221
+ Returns
222
+ -------
223
+ Dict[str, Any]
224
+ Dictionary of attribute names and their type annotations
225
+ """
226
+ return getattr(self._concrete, '__annotations__', {})
227
+
228
+ def hasAttribute(self, name: str) -> bool:
229
+ """Check if the class has a specific attribute.
230
+
231
+ Parameters
232
+ ----------
233
+ name : str
234
+ The attribute name to check
235
+
236
+ Returns
237
+ -------
238
+ bool
239
+ True if the attribute exists
240
+ """
241
+ return hasattr(self._concrete, name)
242
+
243
+ def getAttribute(self, name: str) -> Any:
244
+ """Get a class attribute by name.
245
+
246
+ Parameters
247
+ ----------
248
+ name : str
249
+ The attribute name
250
+
251
+ Returns
252
+ -------
253
+ Any
254
+ The attribute value
255
+
256
+ Raises
257
+ ------
258
+ AttributeError
259
+ If the attribute doesn't exist
260
+ """
261
+ return getattr(self._concrete, name)
262
+
263
+ def getCallableMembers(self) -> Dict[str, Callable]:
264
+ """Get all callable members (functions/methods) of the class.
265
+
266
+ Returns
267
+ -------
268
+ Dict[str, Callable]
269
+ Dictionary of method names and their callable objects
270
+ """
271
+ return {
272
+ name: member for name, member in inspect.getmembers(
273
+ self._concrete,
274
+ callable
275
+ ) if not name.startswith('__')
276
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.210.0
3
+ Version: 0.211.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