orionis 0.410.0__tar.gz → 0.411.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 (578) hide show
  1. {orionis-0.410.0/orionis.egg-info → orionis-0.411.0}/PKG-INFO +1 -1
  2. {orionis-0.410.0 → orionis-0.411.0}/orionis/metadata/framework.py +1 -1
  3. orionis-0.411.0/orionis/support/patterns/singleton/meta.py +106 -0
  4. orionis-0.411.0/orionis/support/wrapper/dot_dict.py +235 -0
  5. {orionis-0.410.0 → orionis-0.411.0/orionis.egg-info}/PKG-INFO +1 -1
  6. {orionis-0.410.0 → orionis-0.411.0}/orionis.egg-info/SOURCES.txt +16 -16
  7. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/dependencies/mocks/mock_user_controller.py +2 -2
  8. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/dependencies/test_reflect_dependencies.py +7 -7
  9. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/reflection/test_reflection_abstract.py +3 -3
  10. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/reflection/test_reflection_concrete.py +5 -5
  11. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/reflection/test_reflection_instance.py +4 -4
  12. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/reflection/test_reflection_module.py +1 -1
  13. orionis-0.411.0/tests/support/patterns/singleton/test_patterns_singleton.py +40 -0
  14. orionis-0.411.0/tests/support/wrapper/test_services_wrapper_docdict.py +217 -0
  15. orionis-0.410.0/orionis/support/patterns/singleton/meta.py +0 -56
  16. orionis-0.410.0/orionis/support/wrapper/dot_dict.py +0 -156
  17. orionis-0.410.0/tests/support/patterns/singleton/test_patterns_singleton.py +0 -27
  18. orionis-0.410.0/tests/support/wrapper/test_services_wrapper_docdict.py +0 -141
  19. {orionis-0.410.0 → orionis-0.411.0}/LICENCE +0 -0
  20. {orionis-0.410.0 → orionis-0.411.0}/MANIFEST.in +0 -0
  21. {orionis-0.410.0 → orionis-0.411.0}/README.md +0 -0
  22. {orionis-0.410.0 → orionis-0.411.0}/orionis/__init__.py +0 -0
  23. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/__init__.py +0 -0
  24. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/base/__init__.py +0 -0
  25. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/base/command.py +0 -0
  26. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/command_filter.py +0 -0
  27. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/commands/__init__.py +0 -0
  28. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/commands/cache_clear.py +0 -0
  29. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/commands/help.py +0 -0
  30. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/commands/schedule_work.py +0 -0
  31. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/commands/version.py +0 -0
  32. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/dumper/__init__.py +0 -0
  33. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/dumper/dump_die.py +0 -0
  34. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/exceptions/__init__.py +0 -0
  35. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/exceptions/cli-orionis-value-error.py +0 -0
  36. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/exceptions/cli_exception.py +0 -0
  37. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/exceptions/cli_runtime_error.py +0 -0
  38. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/exceptions/cli_schedule_exception.py +0 -0
  39. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/kernel.py +0 -0
  40. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/output/__init__.py +0 -0
  41. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/output/console.py +0 -0
  42. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/output/executor.py +0 -0
  43. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/output/progress_bar.py +0 -0
  44. {orionis-0.410.0 → orionis-0.411.0}/orionis/_console/parser.py +0 -0
  45. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/__init__.py +0 -0
  46. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/application.py +0 -0
  47. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/config/__init__.py +0 -0
  48. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/config/config.py +0 -0
  49. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/console/__init__.py +0 -0
  50. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/console/base/__init__.py +0 -0
  51. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/console/base/command.py +0 -0
  52. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/console/command_filter.py +0 -0
  53. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/console/kernel.py +0 -0
  54. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/console/output/__init__.py +0 -0
  55. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/console/output/console.py +0 -0
  56. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/console/output/executor.py +0 -0
  57. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/console/parser.py +0 -0
  58. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/console/task_manager.py +0 -0
  59. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/__init__.py +0 -0
  60. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/commands/__init__.py +0 -0
  61. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/commands/commands_facade.py +0 -0
  62. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/commands/scheduler_facade.py +0 -0
  63. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/config/__init__.py +0 -0
  64. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/config/config_facade.py +0 -0
  65. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/environment/__init__.py +0 -0
  66. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/environment/environment_facade.py +0 -0
  67. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/facade.py +0 -0
  68. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/files/__init__.py +0 -0
  69. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/files/path_facade.py +0 -0
  70. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/log/__init__.py +0 -0
  71. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/log/log_facade.py +0 -0
  72. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/tests/__init__.py +0 -0
  73. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/facades/tests/tests_facade.py +0 -0
  74. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/foundation/__init__.py +0 -0
  75. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/foundation/bootstraper.py +0 -0
  76. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/foundation/config/__init__.py +0 -0
  77. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/foundation/config/config_bootstrapper.py +0 -0
  78. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/foundation/console/__init__.py +0 -0
  79. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/foundation/console/command_bootstrapper.py +0 -0
  80. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/foundation/environment/__init__.py +0 -0
  81. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/foundation/environment/environment_bootstrapper.py +0 -0
  82. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/foundation/providers/__init__.py +0 -0
  83. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/foundation/providers/service_providers_bootstrapper.py +0 -0
  84. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/providers/__init__.py +0 -0
  85. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/providers/service_provider.py +0 -0
  86. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/__init__.py +0 -0
  87. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/commands/__init__.py +0 -0
  88. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/commands/reactor_commands_service.py +0 -0
  89. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/commands/schedule_service.py +0 -0
  90. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/config/__init__.py +0 -0
  91. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/config/config_service.py +0 -0
  92. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/environment/__init__.py +0 -0
  93. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/environment/environment_service.py +0 -0
  94. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/files/__init__.py +0 -0
  95. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/files/path_resolver_service.py +0 -0
  96. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/log/__init__.py +0 -0
  97. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/services/log/log_service.py +0 -0
  98. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/support/exception_parse.py +0 -0
  99. {orionis-0.410.0 → orionis-0.411.0}/orionis/_contracts/support/reflection.py +0 -0
  100. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/__init__.py +0 -0
  101. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/console/__init__.py +0 -0
  102. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/console/command_bootstrapper.py +0 -0
  103. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/environment/__init__.py +0 -0
  104. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/environment/environment_bootstrapper.py +0 -0
  105. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/exceptions/__init__.py +0 -0
  106. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/exceptions/exception_bootstrapper.py +0 -0
  107. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/exceptions/exception_providers.py +0 -0
  108. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/foundation/config/__init__.py +0 -0
  109. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/foundation/config/config_bootstrapper.py +0 -0
  110. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/providers/__init__.py +0 -0
  111. {orionis-0.410.0 → orionis-0.411.0}/orionis/_foundation/providers/service_providers_bootstrapper.py +0 -0
  112. {orionis-0.410.0 → orionis-0.411.0}/orionis/_services/__init__.py +0 -0
  113. {orionis-0.410.0 → orionis-0.411.0}/orionis/_services/commands/__init__.py +0 -0
  114. {orionis-0.410.0 → orionis-0.411.0}/orionis/_services/commands/reactor_commands_service.py +0 -0
  115. {orionis-0.410.0 → orionis-0.411.0}/orionis/_services/commands/scheduler_service.py +0 -0
  116. {orionis-0.410.0 → orionis-0.411.0}/orionis/_services/config/__init__.py +0 -0
  117. {orionis-0.410.0 → orionis-0.411.0}/orionis/_services/config/config_service.py +0 -0
  118. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/__init__.py +0 -0
  119. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/base/__init__.py +0 -0
  120. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/base/command.py +0 -0
  121. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/base/contracts/__init__.py +0 -0
  122. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/base/contracts/command.py +0 -0
  123. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/dumper/__init__.py +0 -0
  124. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/dumper/contracts/__init__.py +0 -0
  125. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/dumper/contracts/dump.py +0 -0
  126. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/dumper/dump.py +0 -0
  127. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/dynamic/__init__.py +0 -0
  128. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/dynamic/contracts/__init__.py +0 -0
  129. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/dynamic/contracts/progress_bar.py +0 -0
  130. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/dynamic/progress_bar.py +0 -0
  131. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/output/__init__.py +0 -0
  132. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/output/console.py +0 -0
  133. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/output/contracts/__init__.py +0 -0
  134. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/output/contracts/console.py +0 -0
  135. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/output/enums/__init__.py +0 -0
  136. {orionis-0.410.0 → orionis-0.411.0}/orionis/console/output/enums/styles.py +0 -0
  137. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/__init__.py +0 -0
  138. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/container.py +0 -0
  139. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/context/__init__.py +0 -0
  140. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/context/manager.py +0 -0
  141. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/context/scope.py +0 -0
  142. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/contracts/__init__.py +0 -0
  143. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/contracts/container.py +0 -0
  144. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/contracts/resolver.py +0 -0
  145. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/contracts/service_provider.py +0 -0
  146. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/entities/__init__.py +0 -0
  147. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/entities/binding.py +0 -0
  148. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/enums/__init__.py +0 -0
  149. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/enums/lifetimes.py +0 -0
  150. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/exceptions/__init__.py +0 -0
  151. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/exceptions/attribute.py +0 -0
  152. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/exceptions/exception.py +0 -0
  153. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/exceptions/type.py +0 -0
  154. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/exceptions/value.py +0 -0
  155. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/facades/__init__.py +0 -0
  156. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/facades/facade.py +0 -0
  157. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/providers/__init__.py +0 -0
  158. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/providers/service_provider.py +0 -0
  159. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/resolver/__init__.py +0 -0
  160. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/resolver/resolver.py +0 -0
  161. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/validators/__init__.py +0 -0
  162. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/validators/implements.py +0 -0
  163. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/validators/is_abstract_class.py +0 -0
  164. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/validators/is_callable.py +0 -0
  165. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/validators/is_concrete_class.py +0 -0
  166. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/validators/is_instance.py +0 -0
  167. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/validators/is_not_subclass.py +0 -0
  168. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/validators/is_subclass.py +0 -0
  169. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/validators/is_valid_alias.py +0 -0
  170. {orionis-0.410.0 → orionis-0.411.0}/orionis/container/validators/lifetime.py +0 -0
  171. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/__init__.py +0 -0
  172. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/application.py +0 -0
  173. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/__init__.py +0 -0
  174. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/app/__init__.py +0 -0
  175. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/app/entities/__init__.py +0 -0
  176. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/app/entities/app.py +0 -0
  177. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/app/enums/__init__.py +0 -0
  178. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/app/enums/ciphers.py +0 -0
  179. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/app/enums/environments.py +0 -0
  180. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/auth/__init__.py +0 -0
  181. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/auth/entities/__init__.py +0 -0
  182. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/auth/entities/auth.py +0 -0
  183. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/cache/__init__.py +0 -0
  184. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/cache/entities/__init__.py +0 -0
  185. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/cache/entities/cache.py +0 -0
  186. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/cache/entities/file.py +0 -0
  187. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/cache/entities/stores.py +0 -0
  188. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/cache/enums/__init__.py +0 -0
  189. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/cache/enums/drivers.py +0 -0
  190. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/cors/__init__.py +0 -0
  191. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/cors/entities/__init__.py +0 -0
  192. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/cors/entities/cors.py +0 -0
  193. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/__init__.py +0 -0
  194. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/entities/__init__.py +0 -0
  195. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/entities/connections.py +0 -0
  196. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/entities/database.py +0 -0
  197. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/entities/mysql.py +0 -0
  198. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/entities/oracle.py +0 -0
  199. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/entities/pgsql.py +0 -0
  200. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/entities/sqlite.py +0 -0
  201. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/__init__.py +0 -0
  202. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/mysql_charsets.py +0 -0
  203. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/mysql_collations.py +0 -0
  204. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/mysql_engine.py +0 -0
  205. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/oracle_encoding.py +0 -0
  206. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/oracle_nencoding.py +0 -0
  207. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/pgsql_charsets.py +0 -0
  208. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/pgsql_collations.py +0 -0
  209. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/pgsql_mode.py +0 -0
  210. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/sqlite_foreign_key.py +0 -0
  211. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/sqlite_journal.py +0 -0
  212. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/database/enums/sqlite_synchronous.py +0 -0
  213. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/filesystems/__init__.py +0 -0
  214. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/filesystems/entitites/__init__.py +0 -0
  215. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/filesystems/entitites/aws.py +0 -0
  216. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/filesystems/entitites/disks.py +0 -0
  217. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/filesystems/entitites/filesystems.py +0 -0
  218. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/filesystems/entitites/local.py +0 -0
  219. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/filesystems/entitites/public.py +0 -0
  220. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/__init__.py +0 -0
  221. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/entities/__init__.py +0 -0
  222. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/entities/channels.py +0 -0
  223. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/entities/chunked.py +0 -0
  224. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/entities/daily.py +0 -0
  225. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/entities/hourly.py +0 -0
  226. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/entities/logging.py +0 -0
  227. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/entities/monthly.py +0 -0
  228. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/entities/stack.py +0 -0
  229. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/entities/weekly.py +0 -0
  230. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/enums/__init__.py +0 -0
  231. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/enums/levels.py +0 -0
  232. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/validators/__init__.py +0 -0
  233. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/validators/level.py +0 -0
  234. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/logging/validators/path.py +0 -0
  235. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/mail/__init__.py +0 -0
  236. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/mail/entities/__init__.py +0 -0
  237. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/mail/entities/file.py +0 -0
  238. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/mail/entities/mail.py +0 -0
  239. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/mail/entities/mailers.py +0 -0
  240. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/mail/entities/smtp.py +0 -0
  241. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/queue/__init__.py +0 -0
  242. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/queue/entities/__init__.py +0 -0
  243. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/queue/entities/brokers.py +0 -0
  244. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/queue/entities/database.py +0 -0
  245. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/queue/entities/queue.py +0 -0
  246. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/queue/enums/__init__.py +0 -0
  247. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/queue/enums/strategy.py +0 -0
  248. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/roots/__init__.py +0 -0
  249. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/roots/paths.py +0 -0
  250. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/session/__init__.py +0 -0
  251. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/session/entities/__init__.py +0 -0
  252. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/session/entities/session.py +0 -0
  253. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/session/enums/__init__.py +0 -0
  254. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/session/enums/same_site_policy.py +0 -0
  255. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/session/helpers/__init__.py +0 -0
  256. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/session/helpers/secret_key.py +0 -0
  257. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/startup.py +0 -0
  258. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/testing/__init__.py +0 -0
  259. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/testing/entities/__init__.py +0 -0
  260. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/testing/entities/testing.py +0 -0
  261. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/testing/enums/__init__.py +0 -0
  262. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/testing/enums/drivers.py +0 -0
  263. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/testing/enums/mode.py +0 -0
  264. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/config/testing/enums/verbosity.py +0 -0
  265. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/contracts/__init__.py +0 -0
  266. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/contracts/application.py +0 -0
  267. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/contracts/config.py +0 -0
  268. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/exceptions/__init__.py +0 -0
  269. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/exceptions/integrity.py +0 -0
  270. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/exceptions/runtime.py +0 -0
  271. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/exceptions/type.py +0 -0
  272. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/exceptions/value.py +0 -0
  273. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/providers/__init__.py +0 -0
  274. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/providers/console_provider.py +0 -0
  275. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/providers/dumper_provider.py +0 -0
  276. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/providers/logger_provider.py +0 -0
  277. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/providers/path_resolver_provider.py +0 -0
  278. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/providers/progress_bar_provider.py +0 -0
  279. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/providers/testing_provider.py +0 -0
  280. {orionis-0.410.0 → orionis-0.411.0}/orionis/foundation/providers/workers_provider.py +0 -0
  281. {orionis-0.410.0 → orionis-0.411.0}/orionis/metadata/__init__.py +0 -0
  282. {orionis-0.410.0 → orionis-0.411.0}/orionis/metadata/package.py +0 -0
  283. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/__init__.py +0 -0
  284. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/asynchrony/__init__.py +0 -0
  285. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/asynchrony/contracts/__init__.py +0 -0
  286. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/asynchrony/contracts/coroutines.py +0 -0
  287. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/asynchrony/coroutines.py +0 -0
  288. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/asynchrony/exceptions/__init__.py +0 -0
  289. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/asynchrony/exceptions/exception.py +0 -0
  290. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/__init__.py +0 -0
  291. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/contracts/__init__.py +0 -0
  292. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/contracts/env.py +0 -0
  293. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/contracts/types.py +0 -0
  294. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/core/__init__.py +0 -0
  295. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/core/dot_env.py +0 -0
  296. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/dynamic/__init__.py +0 -0
  297. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/dynamic/types.py +0 -0
  298. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/enums/__init__.py +0 -0
  299. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/enums/cast_type.py +0 -0
  300. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/env.py +0 -0
  301. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/exceptions/__init__.py +0 -0
  302. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/exceptions/exception.py +0 -0
  303. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/exceptions/value.py +0 -0
  304. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/helpers/__init__.py +0 -0
  305. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/helpers/functions.py +0 -0
  306. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/key/__init__.py +0 -0
  307. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/key/key_generator.py +0 -0
  308. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/serializer/__init__.py +0 -0
  309. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/serializer/values.py +0 -0
  310. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/validators/__init__.py +0 -0
  311. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/validators/key_name.py +0 -0
  312. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/environment/validators/types.py +0 -0
  313. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/__init__.py +0 -0
  314. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/abstract/__init__.py +0 -0
  315. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/abstract/contracts/__init__.py +0 -0
  316. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/abstract/contracts/reflection.py +0 -0
  317. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/abstract/reflection.py +0 -0
  318. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/callables/__init__.py +0 -0
  319. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/callables/contracts/__init__.py +0 -0
  320. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/callables/contracts/reflection.py +0 -0
  321. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/callables/reflection.py +0 -0
  322. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/concretes/__init__.py +0 -0
  323. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/concretes/contracts/__init__.py +0 -0
  324. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/concretes/contracts/concrete.py +0 -0
  325. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/concretes/reflection.py +0 -0
  326. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/dependencies/__init__.py +0 -0
  327. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/dependencies/contracts/__init__.py +0 -0
  328. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/dependencies/contracts/reflection.py +0 -0
  329. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/dependencies/entities/__init__.py +0 -0
  330. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/dependencies/entities/callable_dependencies.py +0 -0
  331. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/dependencies/entities/class_dependencies.py +0 -0
  332. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/dependencies/entities/known_dependencies.py +0 -0
  333. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/dependencies/entities/method_dependencies.py +0 -0
  334. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/dependencies/reflection.py +0 -0
  335. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/exceptions/__init__.py +0 -0
  336. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/exceptions/attribute.py +0 -0
  337. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/exceptions/type.py +0 -0
  338. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/exceptions/value.py +0 -0
  339. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/instances/__init__.py +0 -0
  340. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/instances/contracts/__init__.py +0 -0
  341. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/instances/contracts/reflection.py +0 -0
  342. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/instances/reflection.py +0 -0
  343. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/modules/__init__.py +0 -0
  344. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/modules/contracts/__init__.py +0 -0
  345. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/modules/contracts/reflection.py +0 -0
  346. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/modules/reflection.py +0 -0
  347. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/objects/__init__.py +0 -0
  348. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/objects/types.py +0 -0
  349. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/introspection/reflection.py +0 -0
  350. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/log/__init__.py +0 -0
  351. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/log/contracts/__init__.py +0 -0
  352. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/log/contracts/log_service.py +0 -0
  353. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/log/exceptions/__init__.py +0 -0
  354. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/log/exceptions/runtime.py +0 -0
  355. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/log/handlers/__init__.py +0 -0
  356. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/log/handlers/filename.py +0 -0
  357. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/log/handlers/size_rotating.py +0 -0
  358. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/log/handlers/timed_rotating.py +0 -0
  359. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/log/log_service.py +0 -0
  360. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/paths/__init__.py +0 -0
  361. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/paths/contracts/__init__.py +0 -0
  362. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/paths/contracts/resolver.py +0 -0
  363. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/paths/exceptions/__init__.py +0 -0
  364. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/paths/exceptions/exception.py +0 -0
  365. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/paths/exceptions/file.py +0 -0
  366. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/paths/resolver.py +0 -0
  367. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/system/__init__.py +0 -0
  368. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/system/contracts/__init__.py +0 -0
  369. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/system/contracts/imports.py +0 -0
  370. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/system/contracts/workers.py +0 -0
  371. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/system/imports.py +0 -0
  372. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/system/runtime/__init__.py +0 -0
  373. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/system/runtime/imports.py +0 -0
  374. {orionis-0.410.0 → orionis-0.411.0}/orionis/services/system/workers.py +0 -0
  375. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/__init__.py +0 -0
  376. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/entities/__init__.py +0 -0
  377. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/entities/base.py +0 -0
  378. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/facades/__init__.py +0 -0
  379. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/facades/console.py +0 -0
  380. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/facades/dumper.py +0 -0
  381. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/facades/logger.py +0 -0
  382. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/facades/path_resolver.py +0 -0
  383. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/facades/progress_bar.py +0 -0
  384. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/facades/testing.py +0 -0
  385. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/facades/workers.py +0 -0
  386. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/formatter/__init__.py +0 -0
  387. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/formatter/exceptions/__init__.py +0 -0
  388. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/formatter/exceptions/contracts/__init__.py +0 -0
  389. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/formatter/exceptions/contracts/parser.py +0 -0
  390. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/formatter/exceptions/parser.py +0 -0
  391. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/formatter/serializer.py +0 -0
  392. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/patterns/__init__.py +0 -0
  393. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/patterns/singleton/__init__.py +0 -0
  394. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/standard/__init__.py +0 -0
  395. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/standard/contracts/__init__.py +0 -0
  396. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/standard/contracts/std.py +0 -0
  397. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/standard/exceptions/__init__.py +0 -0
  398. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/standard/exceptions/value.py +0 -0
  399. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/standard/std.py +0 -0
  400. {orionis-0.410.0 → orionis-0.411.0}/orionis/support/wrapper/__init__.py +0 -0
  401. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/__init__.py +0 -0
  402. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/cases/__init__.py +0 -0
  403. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/cases/asynchronous.py +0 -0
  404. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/cases/synchronous.py +0 -0
  405. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/contracts/__init__.py +0 -0
  406. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/contracts/dumper.py +0 -0
  407. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/contracts/kernel.py +0 -0
  408. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/contracts/logs.py +0 -0
  409. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/contracts/printer.py +0 -0
  410. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/contracts/render.py +0 -0
  411. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/contracts/test_result.py +0 -0
  412. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/contracts/unit_test.py +0 -0
  413. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/core/__init__.py +0 -0
  414. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/core/unit_test.py +0 -0
  415. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/entities/__init__.py +0 -0
  416. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/entities/result.py +0 -0
  417. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/enums/__init__.py +0 -0
  418. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/enums/status.py +0 -0
  419. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/exceptions/__init__.py +0 -0
  420. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/exceptions/config.py +0 -0
  421. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/exceptions/failure.py +0 -0
  422. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/exceptions/persistence.py +0 -0
  423. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/exceptions/runtime.py +0 -0
  424. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/exceptions/value.py +0 -0
  425. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/kernel.py +0 -0
  426. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/output/__init__.py +0 -0
  427. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/output/dumper.py +0 -0
  428. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/output/printer.py +0 -0
  429. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/records/__init__.py +0 -0
  430. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/records/logs.py +0 -0
  431. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/__init__.py +0 -0
  432. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/base_path.py +0 -0
  433. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/execution_mode.py +0 -0
  434. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/fail_fast.py +0 -0
  435. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/folder_path.py +0 -0
  436. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/module_name.py +0 -0
  437. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/name_pattern.py +0 -0
  438. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/pattern.py +0 -0
  439. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/persistent.py +0 -0
  440. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/persistent_driver.py +0 -0
  441. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/print_result.py +0 -0
  442. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/tags.py +0 -0
  443. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/throw_exception.py +0 -0
  444. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/verbosity.py +0 -0
  445. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/web_report.py +0 -0
  446. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/validators/workers.py +0 -0
  447. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/view/__init__.py +0 -0
  448. {orionis-0.410.0 → orionis-0.411.0}/orionis/test/view/render.py +0 -0
  449. {orionis-0.410.0 → orionis-0.411.0}/orionis.egg-info/dependency_links.txt +0 -0
  450. {orionis-0.410.0 → orionis-0.411.0}/orionis.egg-info/requires.txt +0 -0
  451. {orionis-0.410.0 → orionis-0.411.0}/orionis.egg-info/top_level.txt +0 -0
  452. {orionis-0.410.0 → orionis-0.411.0}/orionis.egg-info/zip-safe +0 -0
  453. {orionis-0.410.0 → orionis-0.411.0}/setup.cfg +0 -0
  454. {orionis-0.410.0 → orionis-0.411.0}/setup.py +0 -0
  455. {orionis-0.410.0 → orionis-0.411.0}/tests/__init__.py +0 -0
  456. {orionis-0.410.0 → orionis-0.411.0}/tests/container/__init__.py +0 -0
  457. {orionis-0.410.0 → orionis-0.411.0}/tests/container/context/__init__.py +0 -0
  458. {orionis-0.410.0 → orionis-0.411.0}/tests/container/context/test_manager.py +0 -0
  459. {orionis-0.410.0 → orionis-0.411.0}/tests/container/context/test_scope.py +0 -0
  460. {orionis-0.410.0 → orionis-0.411.0}/tests/container/entities/__init__.py +0 -0
  461. {orionis-0.410.0 → orionis-0.411.0}/tests/container/entities/test_binding.py +0 -0
  462. {orionis-0.410.0 → orionis-0.411.0}/tests/container/enums/__init__.py +0 -0
  463. {orionis-0.410.0 → orionis-0.411.0}/tests/container/enums/test_lifetimes.py +0 -0
  464. {orionis-0.410.0 → orionis-0.411.0}/tests/container/facades/__init__.py +0 -0
  465. {orionis-0.410.0 → orionis-0.411.0}/tests/container/facades/test_facade.py +0 -0
  466. {orionis-0.410.0 → orionis-0.411.0}/tests/container/mocks/__init__.py +0 -0
  467. {orionis-0.410.0 → orionis-0.411.0}/tests/container/mocks/mock_complex_classes.py +0 -0
  468. {orionis-0.410.0 → orionis-0.411.0}/tests/container/mocks/mock_simple_classes.py +0 -0
  469. {orionis-0.410.0 → orionis-0.411.0}/tests/container/providers/__init__.py +0 -0
  470. {orionis-0.410.0 → orionis-0.411.0}/tests/container/providers/test_providers.py +0 -0
  471. {orionis-0.410.0 → orionis-0.411.0}/tests/container/resolver/__init__.py +0 -0
  472. {orionis-0.410.0 → orionis-0.411.0}/tests/container/resolver/test_resolver.py +0 -0
  473. {orionis-0.410.0 → orionis-0.411.0}/tests/container/test_container.py +0 -0
  474. {orionis-0.410.0 → orionis-0.411.0}/tests/container/test_singleton.py +0 -0
  475. {orionis-0.410.0 → orionis-0.411.0}/tests/container/test_thread_safety.py +0 -0
  476. {orionis-0.410.0 → orionis-0.411.0}/tests/container/validators/__init__.py +0 -0
  477. {orionis-0.410.0 → orionis-0.411.0}/tests/container/validators/test_implements.py +0 -0
  478. {orionis-0.410.0 → orionis-0.411.0}/tests/container/validators/test_is_abstract_class.py +0 -0
  479. {orionis-0.410.0 → orionis-0.411.0}/tests/container/validators/test_is_callable.py +0 -0
  480. {orionis-0.410.0 → orionis-0.411.0}/tests/container/validators/test_is_concrete_class.py +0 -0
  481. {orionis-0.410.0 → orionis-0.411.0}/tests/container/validators/test_is_instance.py +0 -0
  482. {orionis-0.410.0 → orionis-0.411.0}/tests/container/validators/test_is_not_subclass.py +0 -0
  483. {orionis-0.410.0 → orionis-0.411.0}/tests/container/validators/test_is_subclass.py +0 -0
  484. {orionis-0.410.0 → orionis-0.411.0}/tests/container/validators/test_is_valid_alias.py +0 -0
  485. {orionis-0.410.0 → orionis-0.411.0}/tests/container/validators/test_lifetime.py +0 -0
  486. {orionis-0.410.0 → orionis-0.411.0}/tests/example/__init__.py +0 -0
  487. {orionis-0.410.0 → orionis-0.411.0}/tests/example/test_example.py +0 -0
  488. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/__init__.py +0 -0
  489. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/__init__.py +0 -0
  490. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/app/__init__.py +0 -0
  491. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/app/test_foundation_config_app.py +0 -0
  492. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/auth/__init__.py +0 -0
  493. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/auth/test_foundation_config_auth.py +0 -0
  494. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/cache/__init__.py +0 -0
  495. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/cache/test_foundation_config_cache.py +0 -0
  496. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/cache/test_foundation_config_cache_file.py +0 -0
  497. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/cache/test_foundation_config_cache_stores.py +0 -0
  498. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/cors/__init__.py +0 -0
  499. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/cors/test_foundation_config_cors.py +0 -0
  500. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/database/__init__.py +0 -0
  501. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/database/test_foundation_config_database.py +0 -0
  502. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/database/test_foundation_config_database_connections.py +0 -0
  503. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/database/test_foundation_config_database_mysql.py +0 -0
  504. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/database/test_foundation_config_database_oracle.py +0 -0
  505. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/database/test_foundation_config_database_pgsql.py +0 -0
  506. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/database/test_foundation_config_database_sqlite.py +0 -0
  507. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/filesystems/__init__.py +0 -0
  508. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems.py +0 -0
  509. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_aws.py +0 -0
  510. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_disks.py +0 -0
  511. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_local.py +0 -0
  512. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_public.py +0 -0
  513. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/logging/__init__.py +0 -0
  514. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/logging/test_foundation_config_logging.py +0 -0
  515. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/logging/test_foundation_config_logging_channels.py +0 -0
  516. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/logging/test_foundation_config_logging_chunked.py +0 -0
  517. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/logging/test_foundation_config_logging_daily.py +0 -0
  518. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/logging/test_foundation_config_logging_hourly.py +0 -0
  519. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/logging/test_foundation_config_logging_monthly.py +0 -0
  520. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/logging/test_foundation_config_logging_stack.py +0 -0
  521. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/logging/test_foundation_config_logging_weekly.py +0 -0
  522. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/mail/__init__.py +0 -0
  523. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/mail/test_foundation_config_mail.py +0 -0
  524. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/mail/test_foundation_config_mail_file.py +0 -0
  525. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/mail/test_foundation_config_mail_mailers.py +0 -0
  526. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/mail/test_foundation_config_mail_smtp.py +0 -0
  527. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/queue/__init__.py +0 -0
  528. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/queue/test_foundation_config_queue.py +0 -0
  529. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/queue/test_foundation_config_queue_brokers.py +0 -0
  530. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/queue/test_foundation_config_queue_database.py +0 -0
  531. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/root/__init__.py +0 -0
  532. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/root/test_foundation_config_root_paths.py +0 -0
  533. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/session/__init__.py +0 -0
  534. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/session/test_foundation_config_session.py +0 -0
  535. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/startup/__init__.py +0 -0
  536. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/startup/test_foundation_config_startup.py +0 -0
  537. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/testing/__init__.py +0 -0
  538. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/config/testing/test_foundation_config_testing.py +0 -0
  539. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/exceptions/__init__.py +0 -0
  540. {orionis-0.410.0 → orionis-0.411.0}/tests/foundation/exceptions/test_foundation_config_exceptions.py +0 -0
  541. {orionis-0.410.0 → orionis-0.411.0}/tests/metadata/__init__.py +0 -0
  542. {orionis-0.410.0 → orionis-0.411.0}/tests/metadata/test_metadata_framework.py +0 -0
  543. {orionis-0.410.0 → orionis-0.411.0}/tests/metadata/test_metadata_package.py +0 -0
  544. {orionis-0.410.0 → orionis-0.411.0}/tests/services/__init__.py +0 -0
  545. {orionis-0.410.0 → orionis-0.411.0}/tests/services/asynchrony/__init__.py +0 -0
  546. {orionis-0.410.0 → orionis-0.411.0}/tests/services/asynchrony/test_services_asynchrony_coroutine.py +0 -0
  547. {orionis-0.410.0 → orionis-0.411.0}/tests/services/environment/__init__.py +0 -0
  548. {orionis-0.410.0 → orionis-0.411.0}/tests/services/environment/test_services_environment.py +0 -0
  549. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/__init__.py +0 -0
  550. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/dependencies/__init__.py +0 -0
  551. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/dependencies/mocks/__init__.py +0 -0
  552. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/dependencies/mocks/mock_user.py +0 -0
  553. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/dependencies/mocks/mock_users_permissions.py +0 -0
  554. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/reflection/__init__.py +0 -0
  555. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/reflection/mock/__init__.py +0 -0
  556. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/reflection/mock/fake_reflect_instance.py +0 -0
  557. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/reflection/test_reflection_callable.py +0 -0
  558. {orionis-0.410.0/tests/services/inspection → orionis-0.411.0/tests/services/introspection}/test_reflection.py +0 -0
  559. {orionis-0.410.0 → orionis-0.411.0}/tests/services/log/__init__.py +0 -0
  560. {orionis-0.410.0 → orionis-0.411.0}/tests/services/log/test_log.py +0 -0
  561. {orionis-0.410.0 → orionis-0.411.0}/tests/services/path/__init__.py +0 -0
  562. {orionis-0.410.0 → orionis-0.411.0}/tests/services/path/test_services_resolver.py +0 -0
  563. {orionis-0.410.0 → orionis-0.411.0}/tests/services/system/__init__.py +0 -0
  564. {orionis-0.410.0 → orionis-0.411.0}/tests/services/system/test_services_system_imports.py +0 -0
  565. {orionis-0.410.0 → orionis-0.411.0}/tests/services/system/test_services_system_workers.py +0 -0
  566. {orionis-0.410.0 → orionis-0.411.0}/tests/support/__init__.py +0 -0
  567. {orionis-0.410.0 → orionis-0.411.0}/tests/support/parsers/__init__.py +0 -0
  568. {orionis-0.410.0 → orionis-0.411.0}/tests/support/parsers/mocks/__init__.py +0 -0
  569. {orionis-0.410.0 → orionis-0.411.0}/tests/support/parsers/mocks/mock_custom_error.py +0 -0
  570. {orionis-0.410.0 → orionis-0.411.0}/tests/support/parsers/test_services_parser_exceptions.py +0 -0
  571. {orionis-0.410.0 → orionis-0.411.0}/tests/support/patterns/__init__.py +0 -0
  572. {orionis-0.410.0 → orionis-0.411.0}/tests/support/patterns/singleton/__init__.py +0 -0
  573. {orionis-0.410.0 → orionis-0.411.0}/tests/support/standard/__init__.py +0 -0
  574. {orionis-0.410.0 → orionis-0.411.0}/tests/support/standard/test_services_std.py +0 -0
  575. {orionis-0.410.0 → orionis-0.411.0}/tests/support/wrapper/__init__.py +0 -0
  576. {orionis-0.410.0 → orionis-0.411.0}/tests/testing/__init__.py +0 -0
  577. {orionis-0.410.0 → orionis-0.411.0}/tests/testing/test_testing_result.py +0 -0
  578. {orionis-0.410.0 → orionis-0.411.0}/tests/testing/test_testing_unit.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orionis
3
- Version: 0.410.0
3
+ Version: 0.411.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.410.0"
8
+ VERSION = "0.411.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,106 @@
1
+ import threading
2
+ import asyncio
3
+ from typing import Dict, Type, Any, TypeVar
4
+
5
+ T = TypeVar('T')
6
+
7
+ class Singleton(type):
8
+ """
9
+ Thread-safe and async-safe singleton metaclass.
10
+
11
+ Ensures that only one instance of a class exists, regardless of whether the code is running in a synchronous or asynchronous context. This metaclass provides both a synchronous (`__call__`) and asynchronous (`__acall__`) method for instance creation, using appropriate locking mechanisms to prevent race conditions in multi-threaded or async environments.
12
+
13
+ Attributes
14
+ ----------
15
+ _instances : Dict[Type[T], T]
16
+ Stores singleton instances for each class using this metaclass.
17
+ _lock : threading.Lock
18
+ Thread lock for synchronizing instance creation in synchronous contexts.
19
+ _async_lock : asyncio.Lock
20
+ Async lock for synchronizing instance creation in asynchronous contexts.
21
+
22
+ Methods
23
+ -------
24
+ __call__(cls, *args, **kwargs)
25
+ Synchronously creates or retrieves the singleton instance.
26
+ __acall__(cls, *args, **kwargs)
27
+ Asynchronously creates or retrieves the singleton instance.
28
+ """
29
+
30
+ _instances: Dict[Type[T], T] = {}
31
+ _lock = threading.Lock()
32
+ _async_lock = asyncio.Lock()
33
+
34
+ def __call__(cls: Type[T], *args: Any, **kwargs: Any) -> T:
35
+ """
36
+ Synchronously creates or retrieves a singleton instance of the class.
37
+
38
+ This method ensures that only one instance of the class is created, even in multi-threaded environments.
39
+ If the instance does not exist, it acquires a thread lock to prevent race conditions, creates the instance,
40
+ and stores it in the class-level `_instances` dictionary. If the instance already exists, it simply returns
41
+ the existing instance.
42
+
43
+ Parameters
44
+ ----------
45
+ *args : Any
46
+ Positional arguments to pass to the class constructor.
47
+ **kwargs : Any
48
+ Keyword arguments to pass to the class constructor.
49
+
50
+ Returns
51
+ -------
52
+ T
53
+ The singleton instance of the class.
54
+ """
55
+
56
+ # Check if the instance already exists
57
+ if cls not in cls._instances:
58
+
59
+ # Acquire the thread lock to ensure thread safety
60
+ with cls._lock:
61
+
62
+ # Double-check if the instance was created while waiting for the lock
63
+ if cls not in cls._instances:
64
+
65
+ # Create and store the singleton instance
66
+ cls._instances[cls] = super().__call__(*args, **kwargs)
67
+
68
+ # Return the singleton instance
69
+ return cls._instances[cls]
70
+
71
+ async def __acall__(cls: Type[T], *args: Any, **kwargs: Any) -> T:
72
+ """
73
+ Asynchronously creates or retrieves a singleton instance of the class.
74
+
75
+ This method ensures that only one instance of the class is created, even in asynchronous contexts.
76
+ If the instance does not exist, it acquires an asynchronous lock to prevent race conditions,
77
+ creates the instance, and stores it in the class-level `_instances` dictionary. If the instance
78
+ already exists, it simply returns the existing instance.
79
+
80
+ Parameters
81
+ ----------
82
+ *args : Any
83
+ Positional arguments to pass to the class constructor.
84
+ **kwargs : Any
85
+ Keyword arguments to pass to the class constructor.
86
+
87
+ Returns
88
+ -------
89
+ T
90
+ The singleton instance of the class.
91
+ """
92
+
93
+ # Check if the instance already exists
94
+ if cls not in cls._instances:
95
+
96
+ # Acquire the asynchronous lock to ensure async safety
97
+ async with cls._async_lock:
98
+
99
+ # Double-check if the instance was created while waiting for the lock
100
+ if cls not in cls._instances:
101
+
102
+ # Create and store the singleton instance
103
+ cls._instances[cls] = super().__call__(*args, **kwargs)
104
+
105
+ # Return the singleton instance
106
+ return cls._instances[cls]
@@ -0,0 +1,235 @@
1
+ from typing import Any, Optional, Dict
2
+
3
+ class DotDict(dict):
4
+
5
+ __slots__ = ()
6
+
7
+ def __getattr__(self, key: str) -> Optional[Any]:
8
+ """
9
+ Retrieve the value associated with the given key as an attribute.
10
+
11
+ If the value is a dictionary (but not already a DotDict), it is converted
12
+ to a DotDict and updated in-place. If the key does not exist, returns None.
13
+
14
+ Parameters
15
+ ----------
16
+ key : str
17
+ The attribute name to retrieve.
18
+
19
+ Returns
20
+ -------
21
+ Any or None
22
+ The value associated with the key. If the value is a dict, it is converted
23
+ to a DotDict before returning. Returns None if the key is not present.
24
+
25
+ Notes
26
+ -----
27
+ This method allows attribute-style access to dictionary keys. If the value
28
+ is a plain dictionary, it is automatically wrapped as a DotDict for consistency.
29
+ """
30
+ try:
31
+ value = self[key] # Attempt to retrieve the value by key
32
+ # Convert plain dicts to DotDict for attribute access
33
+ if isinstance(value, dict) and not isinstance(value, DotDict):
34
+ value = DotDict(value)
35
+ self[key] = value # Update the value in-place
36
+ return value
37
+ except KeyError:
38
+ # Return None if the key does not exist
39
+ return None
40
+
41
+ def __setattr__(self, key: str, value: Any) -> None:
42
+ """
43
+ Assign a value to an attribute of the DotDict instance.
44
+
45
+ This method enables attribute-style assignment for dictionary keys. If the
46
+ assigned value is a plain dictionary (not a DotDict), it is automatically
47
+ converted to a DotDict for consistency and recursive attribute access.
48
+
49
+ Parameters
50
+ ----------
51
+ key : str
52
+ The attribute name to assign.
53
+ value : Any
54
+ The value to assign to the attribute. If it is a dict (but not a DotDict),
55
+ it will be converted to a DotDict before assignment.
56
+
57
+ Returns
58
+ -------
59
+ None
60
+ This method does not return a value.
61
+
62
+ Notes
63
+ -----
64
+ The attribute is stored as a key-value pair in the underlying dictionary.
65
+ This allows seamless attribute-style access and assignment for dictionary keys.
66
+ """
67
+
68
+ # Convert plain dicts to DotDict for recursive attribute access
69
+ if isinstance(value, dict) and not isinstance(value, DotDict):
70
+ value = DotDict(value)
71
+
72
+ # Store the value in the underlying dictionary using the key
73
+ self[key] = value
74
+
75
+ def __delattr__(self, key: str) -> None:
76
+ """
77
+ Remove an attribute from the DotDict instance.
78
+
79
+ This method deletes the key-value pair corresponding to the given attribute name
80
+ from the underlying dictionary. If the key does not exist, an AttributeError is raised.
81
+
82
+ Parameters
83
+ ----------
84
+ key : str
85
+ The name of the attribute to remove.
86
+
87
+ Returns
88
+ -------
89
+ None
90
+ This method does not return a value.
91
+
92
+ Raises
93
+ ------
94
+ AttributeError
95
+ If the specified attribute does not exist in the DotDict.
96
+
97
+ Notes
98
+ -----
99
+ This method enables attribute-style deletion for dictionary keys, allowing
100
+ seamless removal of items using dot notation.
101
+ """
102
+ try:
103
+ # Attempt to delete the key from the dictionary
104
+ del self[key]
105
+ except KeyError as e:
106
+ # Raise AttributeError if the key is not present
107
+ raise AttributeError(f"'{self.__class__.__name__}' has no attribute '{key}'") from e
108
+
109
+ def get(self, key: str, default: Optional[Any] = None) -> Optional[Any]:
110
+ """
111
+ Retrieve the value associated with the given key, returning a default value if the key is not found.
112
+
113
+ If the retrieved value is a plain dictionary (not a DotDict), it is converted to a DotDict,
114
+ stored back in the dictionary, and then returned. This ensures consistent attribute-style access
115
+ for nested dictionaries.
116
+
117
+ Parameters
118
+ ----------
119
+ key : str
120
+ The key to look up in the dictionary.
121
+ default : Any, optional
122
+ The value to return if the key is not found. Defaults to None.
123
+
124
+ Returns
125
+ -------
126
+ Any or None
127
+ The value associated with the key, converted to a DotDict if it is a dict.
128
+ If the key is not present, returns the specified default value.
129
+
130
+ Notes
131
+ -----
132
+ This method overrides the standard dict.get() to provide automatic conversion of nested
133
+ dictionaries to DotDict instances, enabling recursive attribute-style access.
134
+ """
135
+ # Retrieve the value using the base dict's get method
136
+ value = super().get(key, default)
137
+ # If the value is a plain dict, convert it to DotDict for consistency
138
+ if isinstance(value, dict) and not isinstance(value, DotDict):
139
+ value = DotDict(value)
140
+ self[key] = value # Store the converted value back in the dictionary
141
+ return value
142
+
143
+ def export(self) -> Dict[str, Any]:
144
+ """
145
+ Recursively export the contents of the DotDict as a standard Python dictionary.
146
+
147
+ This method traverses the DotDict and converts all nested DotDict instances
148
+ into regular dictionaries by recursively calling their `export` method.
149
+ Non-DotDict values are included as-is. This ensures that the returned object
150
+ is composed entirely of built-in Python types, making it suitable for serialization
151
+ or interoperability with code expecting standard dictionaries.
152
+
153
+ Parameters
154
+ ----------
155
+ None
156
+
157
+ Returns
158
+ -------
159
+ result : dict
160
+ A dictionary representation of the DotDict, where all nested DotDict instances
161
+ are recursively converted to dictionaries. Non-DotDict values are returned unchanged.
162
+
163
+ Notes
164
+ -----
165
+ This method is useful for converting a DotDict (which supports attribute-style access)
166
+ into a plain dictionary for use with APIs, serialization, or other libraries that
167
+ require standard dict objects.
168
+ """
169
+ result = {}
170
+ # Iterate through all key-value pairs in the DotDict
171
+ for k, v in self.items():
172
+ if isinstance(v, DotDict):
173
+ # Recursively export nested DotDicts
174
+ result[k] = v.export()
175
+ else:
176
+ # Include non-DotDict values as-is
177
+ result[k] = v
178
+ return result
179
+
180
+ def copy(self) -> 'DotDict':
181
+ """
182
+ Create a deep copy of the DotDict instance, recursively copying all nested DotDict and dict objects.
183
+
184
+ This method traverses the DotDict and ensures that all nested DotDict and dict instances are
185
+ copied recursively, so that the returned DotDict is fully independent of the original. Non-dict
186
+ values are copied by reference.
187
+
188
+ Returns
189
+ -------
190
+ DotDict
191
+ A new DotDict instance containing a deep copy of the original contents. All nested DotDict
192
+ and dict objects are recursively copied, ensuring no shared references with the original.
193
+
194
+ Notes
195
+ -----
196
+ This method is useful when you need a completely independent copy of a DotDict, including all
197
+ nested structures, to avoid unintended side effects from shared references.
198
+ """
199
+ copied = {}
200
+ # Iterate through all key-value pairs in the DotDict
201
+ for k, v in self.items():
202
+ if isinstance(v, DotDict):
203
+ # Recursively copy nested DotDict instances
204
+ copied[k] = v.copy()
205
+ elif isinstance(v, dict):
206
+ # Convert plain dicts to DotDict and recursively copy
207
+ copied[k] = DotDict(v).copy()
208
+ else:
209
+ # Copy non-dict values by reference
210
+ copied[k] = v
211
+ # Return a new DotDict containing the copied data
212
+ return DotDict(copied)
213
+
214
+ def __repr__(self) -> str:
215
+ """
216
+ Return a string representation of the DotDict instance.
217
+
218
+ This method overrides the default `__repr__` implementation to provide a concise
219
+ and informative string that displays the class name (`DotDict`) and the contents
220
+ of the underlying dictionary. This is useful for debugging and logging, as it
221
+ clearly distinguishes DotDict objects from regular dictionaries.
222
+
223
+ Returns
224
+ -------
225
+ str
226
+ A string representation of the DotDict object, formatted as
227
+ 'DotDict({...})', where {...} is the dictionary content.
228
+
229
+ Notes
230
+ -----
231
+ The returned string uses the base dictionary's representation, but is prefixed
232
+ with the DotDict class name for clarity.
233
+ """
234
+ # Use the base dict's __repr__ for the contents, but keep DotDict class name
235
+ return super().__repr__()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orionis
3
- Version: 0.410.0
3
+ Version: 0.411.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
@@ -532,22 +532,22 @@ tests/services/asynchrony/__init__.py
532
532
  tests/services/asynchrony/test_services_asynchrony_coroutine.py
533
533
  tests/services/environment/__init__.py
534
534
  tests/services/environment/test_services_environment.py
535
- tests/services/inspection/__init__.py
536
- tests/services/inspection/test_reflection.py
537
- tests/services/inspection/dependencies/__init__.py
538
- tests/services/inspection/dependencies/test_reflect_dependencies.py
539
- tests/services/inspection/dependencies/mocks/__init__.py
540
- tests/services/inspection/dependencies/mocks/mock_user.py
541
- tests/services/inspection/dependencies/mocks/mock_user_controller.py
542
- tests/services/inspection/dependencies/mocks/mock_users_permissions.py
543
- tests/services/inspection/reflection/__init__.py
544
- tests/services/inspection/reflection/test_reflection_abstract.py
545
- tests/services/inspection/reflection/test_reflection_callable.py
546
- tests/services/inspection/reflection/test_reflection_concrete.py
547
- tests/services/inspection/reflection/test_reflection_instance.py
548
- tests/services/inspection/reflection/test_reflection_module.py
549
- tests/services/inspection/reflection/mock/__init__.py
550
- tests/services/inspection/reflection/mock/fake_reflect_instance.py
535
+ tests/services/introspection/__init__.py
536
+ tests/services/introspection/test_reflection.py
537
+ tests/services/introspection/dependencies/__init__.py
538
+ tests/services/introspection/dependencies/test_reflect_dependencies.py
539
+ tests/services/introspection/dependencies/mocks/__init__.py
540
+ tests/services/introspection/dependencies/mocks/mock_user.py
541
+ tests/services/introspection/dependencies/mocks/mock_user_controller.py
542
+ tests/services/introspection/dependencies/mocks/mock_users_permissions.py
543
+ tests/services/introspection/reflection/__init__.py
544
+ tests/services/introspection/reflection/test_reflection_abstract.py
545
+ tests/services/introspection/reflection/test_reflection_callable.py
546
+ tests/services/introspection/reflection/test_reflection_concrete.py
547
+ tests/services/introspection/reflection/test_reflection_instance.py
548
+ tests/services/introspection/reflection/test_reflection_module.py
549
+ tests/services/introspection/reflection/mock/__init__.py
550
+ tests/services/introspection/reflection/mock/fake_reflect_instance.py
551
551
  tests/services/log/__init__.py
552
552
  tests/services/log/test_log.py
553
553
  tests/services/path/__init__.py
@@ -1,5 +1,5 @@
1
- from tests.services.inspection.dependencies.mocks.mock_user import FakeUser
2
- from tests.services.inspection.dependencies.mocks.mock_users_permissions import FakeUserWithPermissions
1
+ from tests.services.introspection.dependencies.mocks.mock_user import FakeUser
2
+ from tests.services.introspection.dependencies.mocks.mock_users_permissions import FakeUserWithPermissions
3
3
 
4
4
 
5
5
  class UserController:
@@ -7,9 +7,9 @@ from orionis.services.introspection.dependencies.reflection import (
7
7
  KnownDependency
8
8
  )
9
9
  from orionis.test.cases.asynchronous import AsyncTestCase
10
- from tests.services.inspection.dependencies.mocks.mock_user import FakeUser
11
- from tests.services.inspection.dependencies.mocks.mock_user_controller import UserController
12
- from tests.services.inspection.dependencies.mocks.mock_users_permissions import FakeUserWithPermissions
10
+ from tests.services.introspection.dependencies.mocks.mock_user import FakeUser
11
+ from tests.services.introspection.dependencies.mocks.mock_user_controller import UserController
12
+ from tests.services.introspection.dependencies.mocks.mock_users_permissions import FakeUserWithPermissions
13
13
 
14
14
  class TestReflectDependencies(AsyncTestCase):
15
15
  """
@@ -48,9 +48,9 @@ class TestReflectDependencies(AsyncTestCase):
48
48
 
49
49
  # Check resolved dependencies for 'user_repository'
50
50
  dependencies:KnownDependency = dep_user_repository
51
- self.assertEqual(dependencies.module_name, 'tests.services.inspection.dependencies.mocks.mock_user')
51
+ self.assertEqual(dependencies.module_name, 'tests.services.introspection.dependencies.mocks.mock_user')
52
52
  self.assertEqual(dependencies.class_name, 'FakeUser')
53
- self.assertEqual(dependencies.full_class_path, 'tests.services.inspection.dependencies.mocks.mock_user.FakeUser')
53
+ self.assertEqual(dependencies.full_class_path, 'tests.services.introspection.dependencies.mocks.mock_user.FakeUser')
54
54
  self.assertEqual(dependencies.type, FakeUser)
55
55
 
56
56
  async def testReflectionDependenciesGetMethodDependencies(self):
@@ -80,9 +80,9 @@ class TestReflectDependencies(AsyncTestCase):
80
80
  self.assertIsInstance(dep_user_permissions, KnownDependency)
81
81
 
82
82
  # Check resolved dependencies for 'user_permissions'
83
- self.assertEqual(dep_user_permissions.module_name, 'tests.services.inspection.dependencies.mocks.mock_users_permissions')
83
+ self.assertEqual(dep_user_permissions.module_name, 'tests.services.introspection.dependencies.mocks.mock_users_permissions')
84
84
  self.assertEqual(dep_user_permissions.class_name, 'FakeUserWithPermissions')
85
- self.assertEqual(dep_user_permissions.full_class_path, 'tests.services.inspection.dependencies.mocks.mock_users_permissions.FakeUserWithPermissions')
85
+ self.assertEqual(dep_user_permissions.full_class_path, 'tests.services.introspection.dependencies.mocks.mock_users_permissions.FakeUserWithPermissions')
86
86
  self.assertEqual(dep_user_permissions.type, FakeUserWithPermissions)
87
87
 
88
88
  # Check Instance of KnownDependency for 'permissions'
@@ -1,6 +1,6 @@
1
1
  from orionis.services.introspection.abstract.reflection import ReflectionAbstract
2
2
  from orionis.services.introspection.dependencies.entities.class_dependencies import ClassDependency
3
- from tests.services.inspection.reflection.mock.fake_reflect_instance import AbstractFakeClass
3
+ from tests.services.introspection.reflection.mock.fake_reflect_instance import AbstractFakeClass
4
4
  from orionis.test.cases.asynchronous import AsyncTestCase
5
5
 
6
6
  class TestServiceReflectionAbstract(AsyncTestCase):
@@ -27,7 +27,7 @@ class TestServiceReflectionAbstract(AsyncTestCase):
27
27
  """
28
28
  reflect = ReflectionAbstract(AbstractFakeClass)
29
29
  module_name = reflect.getModuleName()
30
- self.assertEqual(module_name, 'tests.services.inspection.reflection.mock.fake_reflect_instance')
30
+ self.assertEqual(module_name, 'tests.services.introspection.reflection.mock.fake_reflect_instance')
31
31
 
32
32
  async def testGetModuleWithClassName(self):
33
33
  """
@@ -35,7 +35,7 @@ class TestServiceReflectionAbstract(AsyncTestCase):
35
35
  """
36
36
  reflect = ReflectionAbstract(AbstractFakeClass)
37
37
  module_with_class_name = reflect.getModuleWithClassName()
38
- self.assertEqual(module_with_class_name, 'tests.services.inspection.reflection.mock.fake_reflect_instance.AbstractFakeClass')
38
+ self.assertEqual(module_with_class_name, 'tests.services.introspection.reflection.mock.fake_reflect_instance.AbstractFakeClass')
39
39
 
40
40
  async def testGetDocstring(self):
41
41
  """
@@ -1,6 +1,6 @@
1
1
  from orionis.services.introspection.concretes.reflection import ReflectionConcrete
2
2
  from orionis.services.introspection.dependencies.entities.class_dependencies import ClassDependency
3
- from tests.services.inspection.reflection.mock.fake_reflect_instance import FakeClass
3
+ from tests.services.introspection.reflection.mock.fake_reflect_instance import FakeClass
4
4
  from orionis.test.cases.asynchronous import AsyncTestCase
5
5
 
6
6
  class TestServiceReflectionConcrete(AsyncTestCase):
@@ -44,11 +44,11 @@ class TestServiceReflectionConcrete(AsyncTestCase):
44
44
  """
45
45
  Tests that the getModuleName method of the ReflectionConcrete class returns the correct module name
46
46
  for the provided FakeClass. Asserts that the returned module name matches the expected string
47
- 'tests.services.inspection.reflection.mock.fake_reflect_instance'.
47
+ 'tests.services.introspection.reflection.mock.fake_reflect_instance'.
48
48
  """
49
49
  reflect = ReflectionConcrete(FakeClass)
50
50
  module_name = reflect.getModuleName()
51
- self.assertEqual(module_name, 'tests.services.inspection.reflection.mock.fake_reflect_instance')
51
+ self.assertEqual(module_name, 'tests.services.introspection.reflection.mock.fake_reflect_instance')
52
52
 
53
53
  async def testGetModuleWithClassName(self):
54
54
  """
@@ -57,11 +57,11 @@ class TestServiceReflectionConcrete(AsyncTestCase):
57
57
 
58
58
  Asserts:
59
59
  The returned string matches the expected module path and class name:
60
- 'tests.services.inspection.reflection.mock.fake_reflect_instance.FakeClass'
60
+ 'tests.services.introspection.reflection.mock.fake_reflect_instance.FakeClass'
61
61
  """
62
62
  reflect = ReflectionConcrete(FakeClass)
63
63
  module_with_class_name = reflect.getModuleWithClassName()
64
- self.assertEqual(module_with_class_name, 'tests.services.inspection.reflection.mock.fake_reflect_instance.FakeClass')
64
+ self.assertEqual(module_with_class_name, 'tests.services.introspection.reflection.mock.fake_reflect_instance.FakeClass')
65
65
 
66
66
  async def testGetDocstring(self):
67
67
  """
@@ -1,5 +1,5 @@
1
1
  from orionis.services.introspection.dependencies.entities.class_dependencies import ClassDependency
2
- from tests.services.inspection.reflection.mock.fake_reflect_instance import FakeClass
2
+ from tests.services.introspection.reflection.mock.fake_reflect_instance import FakeClass
3
3
  from orionis.services.introspection.instances.reflection import ReflectionInstance
4
4
  from orionis.test.cases.asynchronous import AsyncTestCase
5
5
 
@@ -43,11 +43,11 @@ class TestServiceReflectionInstance(AsyncTestCase):
43
43
 
44
44
  Asserts:
45
45
  The returned module name matches the expected string
46
- 'tests.services.inspection.reflection.mock.fake_reflect_instance'.
46
+ 'tests.services.introspection.reflection.mock.fake_reflect_instance'.
47
47
  """
48
48
  reflect = ReflectionInstance(FakeClass())
49
49
  module_name = reflect.getModuleName()
50
- self.assertEqual(module_name, 'tests.services.inspection.reflection.mock.fake_reflect_instance')
50
+ self.assertEqual(module_name, 'tests.services.introspection.reflection.mock.fake_reflect_instance')
51
51
 
52
52
  async def testGetModuleWithClassName(self):
53
53
  """
@@ -59,7 +59,7 @@ class TestServiceReflectionInstance(AsyncTestCase):
59
59
  """
60
60
  reflect = ReflectionInstance(FakeClass())
61
61
  module_with_class_name = reflect.getModuleWithClassName()
62
- self.assertEqual(module_with_class_name, 'tests.services.inspection.reflection.mock.fake_reflect_instance.FakeClass')
62
+ self.assertEqual(module_with_class_name, 'tests.services.introspection.reflection.mock.fake_reflect_instance.FakeClass')
63
63
 
64
64
  async def testGetDocstring(self):
65
65
  """
@@ -4,7 +4,7 @@ from orionis.services.introspection.exceptions import ReflectionTypeError, Refle
4
4
 
5
5
  class TestServiceReflectionModule(AsyncTestCase):
6
6
 
7
- module_name = 'tests.services.inspection.reflection.mock.fake_reflect_instance'
7
+ module_name = 'tests.services.introspection.reflection.mock.fake_reflect_instance'
8
8
 
9
9
  async def testGetModule(self):
10
10
  """
@@ -0,0 +1,40 @@
1
+ from orionis.support.patterns.singleton import Singleton
2
+ from orionis.test.cases.asynchronous import AsyncTestCase
3
+
4
+ class TestPatternsSingleton(AsyncTestCase):
5
+
6
+ async def testSingleton(self):
7
+ """
8
+ Tests the behavior of the Singleton metaclass.
9
+
10
+ Validates that a class using the Singleton metaclass only ever creates a single instance,
11
+ regardless of how many times it is instantiated. Also checks that the initial state of the
12
+ singleton instance remains unchanged after subsequent instantiations.
13
+
14
+ Parameters
15
+ ----------
16
+ self : TestPatternsSingleton
17
+ The test case instance.
18
+
19
+ Returns
20
+ -------
21
+ None
22
+ This method does not return any value. Assertions are used to verify singleton behavior.
23
+
24
+ """
25
+ # Define a class using the Singleton metaclass
26
+ class SingletonClass(metaclass=Singleton):
27
+ def __init__(self, value):
28
+ self.value = value
29
+
30
+ # Create the first instance of SingletonClass
31
+ instance1 = SingletonClass(1)
32
+
33
+ # Attempt to create a second instance with a different value
34
+ instance2 = SingletonClass(2)
35
+
36
+ # Assert that both instances are actually the same object
37
+ self.assertIs(instance1, instance2)
38
+
39
+ # Assert that the value remains as set by the first instantiation
40
+ self.assertEqual(instance1.value, 1)