orionis 0.319.0__tar.gz → 0.321.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 (471) hide show
  1. {orionis-0.319.0/orionis.egg-info → orionis-0.321.0}/PKG-INFO +1 -1
  2. orionis-0.321.0/orionis/container/container.py +636 -0
  3. {orionis-0.319.0 → orionis-0.321.0}/orionis/container/contracts/container.py +61 -15
  4. orionis-0.321.0/orionis/container/resolver.py +404 -0
  5. orionis-0.321.0/orionis/container/validators/implements.py +67 -0
  6. orionis-0.321.0/orionis/container/validators/is_abstract_class.py +34 -0
  7. orionis-0.321.0/orionis/container/validators/is_callable.py +30 -0
  8. orionis-0.321.0/orionis/container/validators/is_concrete_class.py +34 -0
  9. orionis-0.321.0/orionis/container/validators/is_instance.py +32 -0
  10. orionis-0.321.0/orionis/container/validators/is_not_subclass.py +32 -0
  11. orionis-0.321.0/orionis/container/validators/is_subclass.py +32 -0
  12. orionis-0.321.0/orionis/container/validators/is_valid_alias.py +37 -0
  13. orionis-0.321.0/orionis/container/validators/lifetime.py +53 -0
  14. {orionis-0.319.0 → orionis-0.321.0}/orionis/metadata/framework.py +1 -1
  15. {orionis-0.319.0 → orionis-0.321.0/orionis.egg-info}/PKG-INFO +1 -1
  16. {orionis-0.319.0 → orionis-0.321.0}/orionis.egg-info/SOURCES.txt +11 -0
  17. orionis-0.321.0/tests/testing/__init__.py +0 -0
  18. orionis-0.319.0/orionis/container/container.py +0 -1237
  19. {orionis-0.319.0 → orionis-0.321.0}/LICENCE +0 -0
  20. {orionis-0.319.0 → orionis-0.321.0}/MANIFEST.in +0 -0
  21. {orionis-0.319.0 → orionis-0.321.0}/README.md +0 -0
  22. {orionis-0.319.0 → orionis-0.321.0}/orionis/__init__.py +0 -0
  23. {orionis-0.319.0 → orionis-0.321.0}/orionis/_application.py +0 -0
  24. {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/__init__.py +0 -0
  25. {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/container.py +0 -0
  26. {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/container_integrity.py +0 -0
  27. {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/exception.py +0 -0
  28. {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/lifetimes.py +0 -0
  29. {orionis-0.319.0 → orionis-0.321.0}/orionis/_container/resolve.py +0 -0
  30. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/__init__.py +0 -0
  31. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/application.py +0 -0
  32. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/config/__init__.py +0 -0
  33. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/config/config.py +0 -0
  34. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/__init__.py +0 -0
  35. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/base/__init__.py +0 -0
  36. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/base/command.py +0 -0
  37. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/command_filter.py +0 -0
  38. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/kernel.py +0 -0
  39. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/output/__init__.py +0 -0
  40. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/output/console.py +0 -0
  41. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/output/executor.py +0 -0
  42. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/output/progress_bar.py +0 -0
  43. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/parser.py +0 -0
  44. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/console/task_manager.py +0 -0
  45. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/container/container.py +0 -0
  46. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/container/container_integrity.py +0 -0
  47. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/__init__.py +0 -0
  48. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/commands/__init__.py +0 -0
  49. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/commands/commands_facade.py +0 -0
  50. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/commands/scheduler_facade.py +0 -0
  51. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/config/__init__.py +0 -0
  52. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/config/config_facade.py +0 -0
  53. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/environment/__init__.py +0 -0
  54. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/environment/environment_facade.py +0 -0
  55. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/facade.py +0 -0
  56. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/files/__init__.py +0 -0
  57. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/files/path_facade.py +0 -0
  58. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/log/__init__.py +0 -0
  59. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/log/log_facade.py +0 -0
  60. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/tests/__init__.py +0 -0
  61. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/facades/tests/tests_facade.py +0 -0
  62. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/__init__.py +0 -0
  63. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/bootstraper.py +0 -0
  64. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/config/__init__.py +0 -0
  65. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/config/config_bootstrapper.py +0 -0
  66. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/console/__init__.py +0 -0
  67. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/console/command_bootstrapper.py +0 -0
  68. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/environment/__init__.py +0 -0
  69. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/environment/environment_bootstrapper.py +0 -0
  70. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/providers/__init__.py +0 -0
  71. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/foundation/providers/service_providers_bootstrapper.py +0 -0
  72. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/providers/__init__.py +0 -0
  73. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/providers/service_provider.py +0 -0
  74. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/__init__.py +0 -0
  75. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/commands/__init__.py +0 -0
  76. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/commands/reactor_commands_service.py +0 -0
  77. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/commands/schedule_service.py +0 -0
  78. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/config/__init__.py +0 -0
  79. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/config/config_service.py +0 -0
  80. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/environment/__init__.py +0 -0
  81. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/environment/environment_service.py +0 -0
  82. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/files/__init__.py +0 -0
  83. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/files/path_resolver_service.py +0 -0
  84. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/log/__init__.py +0 -0
  85. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/services/log/log_service.py +0 -0
  86. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/support/exception_parse.py +0 -0
  87. {orionis-0.319.0 → orionis-0.321.0}/orionis/_contracts/support/reflection.py +0 -0
  88. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/__init__.py +0 -0
  89. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/app_facade.py +0 -0
  90. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/commands/__init__.py +0 -0
  91. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/commands/commands_facade.py +0 -0
  92. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/commands/scheduler_facade.py +0 -0
  93. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/config/__init__.py +0 -0
  94. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/config/config_facade.py +0 -0
  95. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/environment/__init__.py +0 -0
  96. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/environment/environment_facade.py +0 -0
  97. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/files/__init__.py +0 -0
  98. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/files/path_facade.py +0 -0
  99. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/log/__init__.py +0 -0
  100. {orionis-0.319.0 → orionis-0.321.0}/orionis/_facades/log/log_facade.py +0 -0
  101. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/__init__.py +0 -0
  102. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/console/__init__.py +0 -0
  103. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/console/command_bootstrapper.py +0 -0
  104. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/environment/__init__.py +0 -0
  105. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/environment/environment_bootstrapper.py +0 -0
  106. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/exceptions/__init__.py +0 -0
  107. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/exceptions/exception_bootstrapper.py +0 -0
  108. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/exceptions/exception_providers.py +0 -0
  109. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/foundation/config/__init__.py +0 -0
  110. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/foundation/config/config_bootstrapper.py +0 -0
  111. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/providers/__init__.py +0 -0
  112. {orionis-0.319.0 → orionis-0.321.0}/orionis/_foundation/providers/service_providers_bootstrapper.py +0 -0
  113. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/__init__.py +0 -0
  114. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/commands/__init__.py +0 -0
  115. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/commands/reactor_commands_service_provider.py +0 -0
  116. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/commands/scheduler_provider.py +0 -0
  117. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/config/__init__.py +0 -0
  118. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/config/config_service_provider.py +0 -0
  119. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/environment/__init__.py +0 -0
  120. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/environment/environment__service_provider.py +0 -0
  121. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/files/__init__.py +0 -0
  122. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/files/paths_provider.py +0 -0
  123. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/log/__init__.py +0 -0
  124. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/log/log_service_provider.py +0 -0
  125. {orionis-0.319.0 → orionis-0.321.0}/orionis/_providers/service_provider.py +0 -0
  126. {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/__init__.py +0 -0
  127. {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/commands/__init__.py +0 -0
  128. {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/commands/reactor_commands_service.py +0 -0
  129. {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/commands/scheduler_service.py +0 -0
  130. {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/config/__init__.py +0 -0
  131. {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/config/config_service.py +0 -0
  132. {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/log/__init__.py +0 -0
  133. {orionis-0.319.0 → orionis-0.321.0}/orionis/_services/log/log_service.py +0 -0
  134. {orionis-0.319.0 → orionis-0.321.0}/orionis/application.py +0 -0
  135. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/__init__.py +0 -0
  136. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/base/__init__.py +0 -0
  137. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/base/command.py +0 -0
  138. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/command_filter.py +0 -0
  139. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/commands/__init__.py +0 -0
  140. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/commands/cache_clear.py +0 -0
  141. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/commands/help.py +0 -0
  142. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/commands/schedule_work.py +0 -0
  143. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/commands/version.py +0 -0
  144. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/dumper/__init__.py +0 -0
  145. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/dumper/dump_die.py +0 -0
  146. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/exceptions/__init__.py +0 -0
  147. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/exceptions/cli-orionis-value-error.py +0 -0
  148. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/exceptions/cli_exception.py +0 -0
  149. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/exceptions/cli_runtime_error.py +0 -0
  150. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/exceptions/cli_schedule_exception.py +0 -0
  151. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/kernel.py +0 -0
  152. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/output/__init__.py +0 -0
  153. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/output/console.py +0 -0
  154. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/output/executor.py +0 -0
  155. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/output/progress_bar.py +0 -0
  156. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/output/styles.py +0 -0
  157. {orionis-0.319.0 → orionis-0.321.0}/orionis/console/parser.py +0 -0
  158. {orionis-0.319.0 → orionis-0.321.0}/orionis/container/entities/binding.py +0 -0
  159. {orionis-0.319.0 → orionis-0.321.0}/orionis/container/enums/lifetimes.py +0 -0
  160. {orionis-0.319.0 → orionis-0.321.0}/orionis/container/exceptions/container_exception.py +0 -0
  161. {orionis-0.319.0 → orionis-0.321.0}/orionis/container/exceptions/type_error_exception.py +0 -0
  162. {orionis-0.319.0 → orionis-0.321.0}/orionis/container/exceptions/value_exception.py +0 -0
  163. {orionis-0.319.0/orionis/foundation → orionis-0.321.0/orionis/container/validators}/__init__.py +0 -0
  164. {orionis-0.319.0/orionis/foundation/config → orionis-0.321.0/orionis/foundation}/__init__.py +0 -0
  165. {orionis-0.319.0/orionis/foundation/config/app → orionis-0.321.0/orionis/foundation/config}/__init__.py +0 -0
  166. {orionis-0.319.0/orionis/foundation/config/app/entities → orionis-0.321.0/orionis/foundation/config/app}/__init__.py +0 -0
  167. {orionis-0.319.0/orionis/foundation/config/app/enums → orionis-0.321.0/orionis/foundation/config/app/entities}/__init__.py +0 -0
  168. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/app/entities/app.py +0 -0
  169. {orionis-0.319.0/orionis/foundation/config/auth → orionis-0.321.0/orionis/foundation/config/app/enums}/__init__.py +0 -0
  170. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/app/enums/ciphers.py +0 -0
  171. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/app/enums/environments.py +0 -0
  172. {orionis-0.319.0/orionis/foundation/config/auth/entities → orionis-0.321.0/orionis/foundation/config/auth}/__init__.py +0 -0
  173. {orionis-0.319.0/orionis/foundation/config/cache → orionis-0.321.0/orionis/foundation/config/auth/entities}/__init__.py +0 -0
  174. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/auth/entities/auth.py +0 -0
  175. {orionis-0.319.0/orionis/foundation/config/cache/entities → orionis-0.321.0/orionis/foundation/config/cache}/__init__.py +0 -0
  176. {orionis-0.319.0/orionis/foundation/config/cache/enums → orionis-0.321.0/orionis/foundation/config/cache/entities}/__init__.py +0 -0
  177. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/cache/entities/cache.py +0 -0
  178. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/cache/entities/file.py +0 -0
  179. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/cache/entities/stores.py +0 -0
  180. {orionis-0.319.0/orionis/foundation/config/cors → orionis-0.321.0/orionis/foundation/config/cache/enums}/__init__.py +0 -0
  181. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/cache/enums/drivers.py +0 -0
  182. {orionis-0.319.0/orionis/foundation/config/cors/entities → orionis-0.321.0/orionis/foundation/config/cors}/__init__.py +0 -0
  183. {orionis-0.319.0/orionis/foundation/config/database → orionis-0.321.0/orionis/foundation/config/cors/entities}/__init__.py +0 -0
  184. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/cors/entities/cors.py +0 -0
  185. {orionis-0.319.0/orionis/foundation/config/database/entities → orionis-0.321.0/orionis/foundation/config/database}/__init__.py +0 -0
  186. {orionis-0.319.0/orionis/foundation/config/database/enums → orionis-0.321.0/orionis/foundation/config/database/entities}/__init__.py +0 -0
  187. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/connections.py +0 -0
  188. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/database.py +0 -0
  189. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/mysql.py +0 -0
  190. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/oracle.py +0 -0
  191. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/pgsql.py +0 -0
  192. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/entities/sqlite.py +0 -0
  193. {orionis-0.319.0/orionis/foundation/config/filesystems → orionis-0.321.0/orionis/foundation/config/database/enums}/__init__.py +0 -0
  194. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/mysql_charsets.py +0 -0
  195. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/mysql_collations.py +0 -0
  196. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/mysql_engine.py +0 -0
  197. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/oracle_encoding.py +0 -0
  198. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/oracle_nencoding.py +0 -0
  199. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/pgsql_charsets.py +0 -0
  200. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/pgsql_collations.py +0 -0
  201. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/pgsql_mode.py +0 -0
  202. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/sqlite_foreign_key.py +0 -0
  203. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/sqlite_journal.py +0 -0
  204. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/database/enums/sqlite_synchronous.py +0 -0
  205. {orionis-0.319.0/orionis/foundation/config/filesystems/entitites → orionis-0.321.0/orionis/foundation/config/filesystems}/__init__.py +0 -0
  206. {orionis-0.319.0/orionis/foundation/config/logging → orionis-0.321.0/orionis/foundation/config/filesystems/entitites}/__init__.py +0 -0
  207. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/filesystems/entitites/aws.py +0 -0
  208. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/filesystems/entitites/disks.py +0 -0
  209. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/filesystems/entitites/filesystems.py +0 -0
  210. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/filesystems/entitites/local.py +0 -0
  211. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/filesystems/entitites/public.py +0 -0
  212. {orionis-0.319.0/orionis/foundation/config/logging/entities → orionis-0.321.0/orionis/foundation/config/logging}/__init__.py +0 -0
  213. {orionis-0.319.0/orionis/foundation/config/logging/enums → orionis-0.321.0/orionis/foundation/config/logging/entities}/__init__.py +0 -0
  214. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/channels.py +0 -0
  215. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/chunked.py +0 -0
  216. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/daily.py +0 -0
  217. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/hourly.py +0 -0
  218. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/logging.py +0 -0
  219. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/monthly.py +0 -0
  220. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/stack.py +0 -0
  221. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/entities/weekly.py +0 -0
  222. {orionis-0.319.0/orionis/foundation/config/mail → orionis-0.321.0/orionis/foundation/config/logging/enums}/__init__.py +0 -0
  223. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/logging/enums/levels.py +0 -0
  224. {orionis-0.319.0/orionis/foundation/config/mail/entities → orionis-0.321.0/orionis/foundation/config/mail}/__init__.py +0 -0
  225. {orionis-0.319.0/orionis/foundation/config/queue → orionis-0.321.0/orionis/foundation/config/mail/entities}/__init__.py +0 -0
  226. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/mail/entities/file.py +0 -0
  227. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/mail/entities/mail.py +0 -0
  228. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/mail/entities/mailers.py +0 -0
  229. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/mail/entities/smtp.py +0 -0
  230. {orionis-0.319.0/orionis/foundation/config/queue/entities → orionis-0.321.0/orionis/foundation/config/queue}/__init__.py +0 -0
  231. {orionis-0.319.0/orionis/foundation/config/roots → orionis-0.321.0/orionis/foundation/config/queue/entities}/__init__.py +0 -0
  232. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/queue/entities/brokers.py +0 -0
  233. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/queue/entities/database.py +0 -0
  234. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/queue/entities/queue.py +0 -0
  235. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/queue/enums/strategy.py +0 -0
  236. {orionis-0.319.0/orionis/foundation/config/session → orionis-0.321.0/orionis/foundation/config/roots}/__init__.py +0 -0
  237. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/roots/paths.py +0 -0
  238. {orionis-0.319.0/orionis/foundation/config/session/entities → orionis-0.321.0/orionis/foundation/config/session}/__init__.py +0 -0
  239. {orionis-0.319.0/orionis/foundation/config/session/enums → orionis-0.321.0/orionis/foundation/config/session/entities}/__init__.py +0 -0
  240. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/session/entities/session.py +0 -0
  241. {orionis-0.319.0/orionis/foundation/config/testing → orionis-0.321.0/orionis/foundation/config/session/enums}/__init__.py +0 -0
  242. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/session/enums/same_site_policy.py +0 -0
  243. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/session/helpers/secret_key.py +0 -0
  244. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/startup.py +0 -0
  245. {orionis-0.319.0/orionis/foundation/config/testing/entities → orionis-0.321.0/orionis/foundation/config/testing}/__init__.py +0 -0
  246. {orionis-0.319.0/orionis/foundation/config/testing/enums → orionis-0.321.0/orionis/foundation/config/testing/entities}/__init__.py +0 -0
  247. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/testing/entities/testing.py +0 -0
  248. {orionis-0.319.0/orionis/foundation/contracts → orionis-0.321.0/orionis/foundation/config/testing/enums}/__init__.py +0 -0
  249. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/config/testing/enums/test_mode.py +0 -0
  250. {orionis-0.319.0/orionis/foundation/exceptions → orionis-0.321.0/orionis/foundation/contracts}/__init__.py +0 -0
  251. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/contracts/config.py +0 -0
  252. {orionis-0.319.0/orionis/metadata → orionis-0.321.0/orionis/foundation/exceptions}/__init__.py +0 -0
  253. {orionis-0.319.0 → orionis-0.321.0}/orionis/foundation/exceptions/integrity.py +0 -0
  254. {orionis-0.319.0/orionis/patterns → orionis-0.321.0/orionis/metadata}/__init__.py +0 -0
  255. {orionis-0.319.0 → orionis-0.321.0}/orionis/metadata/package.py +0 -0
  256. {orionis-0.319.0/orionis/patterns/singleton → orionis-0.321.0/orionis/patterns}/__init__.py +0 -0
  257. {orionis-0.319.0/orionis/services → orionis-0.321.0/orionis/patterns/singleton}/__init__.py +0 -0
  258. {orionis-0.319.0 → orionis-0.321.0}/orionis/patterns/singleton/meta_class.py +0 -0
  259. {orionis-0.319.0/orionis/services/asynchrony → orionis-0.321.0/orionis/services}/__init__.py +0 -0
  260. {orionis-0.319.0/orionis/services/asynchrony/contracts → orionis-0.321.0/orionis/services/asynchrony}/__init__.py +0 -0
  261. {orionis-0.319.0/orionis/services/asynchrony/exceptions → orionis-0.321.0/orionis/services/asynchrony/contracts}/__init__.py +0 -0
  262. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/asynchrony/contracts/coroutines.py +0 -0
  263. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/asynchrony/coroutines.py +0 -0
  264. {orionis-0.319.0/orionis/services/environment → orionis-0.321.0/orionis/services/asynchrony/exceptions}/__init__.py +0 -0
  265. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/asynchrony/exceptions/coroutine_exception.py +0 -0
  266. {orionis-0.319.0/orionis/services/environment/contracts → orionis-0.321.0/orionis/services/environment}/__init__.py +0 -0
  267. {orionis-0.319.0/orionis/services/environment/exceptions → orionis-0.321.0/orionis/services/environment/contracts}/__init__.py +0 -0
  268. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/contracts/env.py +0 -0
  269. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/contracts/types.py +0 -0
  270. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/dot_env.py +0 -0
  271. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/env.py +0 -0
  272. {orionis-0.319.0/orionis/services/introspection → orionis-0.321.0/orionis/services/environment/exceptions}/__init__.py +0 -0
  273. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/exceptions/environment_value_error.py +0 -0
  274. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/exceptions/environment_value_exception.py +0 -0
  275. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/environment/types.py +0 -0
  276. {orionis-0.319.0/orionis/services/introspection/abstract → orionis-0.321.0/orionis/services/introspection}/__init__.py +0 -0
  277. {orionis-0.319.0/orionis/services/introspection/callables → orionis-0.321.0/orionis/services/introspection/abstract}/__init__.py +0 -0
  278. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/abstract/reflection_abstract.py +0 -0
  279. {orionis-0.319.0/orionis/services/introspection/concretes → orionis-0.321.0/orionis/services/introspection/callables}/__init__.py +0 -0
  280. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/callables/reflection_callable.py +0 -0
  281. {orionis-0.319.0/orionis/services/introspection/contracts → orionis-0.321.0/orionis/services/introspection/concretes}/__init__.py +0 -0
  282. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/concretes/reflection_concrete.py +0 -0
  283. {orionis-0.319.0/orionis/services/introspection/dependencies → orionis-0.321.0/orionis/services/introspection/contracts}/__init__.py +0 -0
  284. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/contracts/reflect_dependencies.py +0 -0
  285. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/contracts/reflection_abstract.py +0 -0
  286. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/contracts/reflection_concrete.py +0 -0
  287. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/contracts/reflection_instance.py +0 -0
  288. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/contracts/reflection_module.py +0 -0
  289. {orionis-0.319.0/orionis/services/introspection/dependencies/entities → orionis-0.321.0/orionis/services/introspection/dependencies}/__init__.py +0 -0
  290. {orionis-0.319.0/orionis/services/introspection/exceptions → orionis-0.321.0/orionis/services/introspection/dependencies/entities}/__init__.py +0 -0
  291. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/dependencies/entities/callable_dependencies.py +0 -0
  292. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/dependencies/entities/class_dependencies.py +0 -0
  293. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/dependencies/entities/method_dependencies.py +0 -0
  294. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/dependencies/entities/resolved_dependencies.py +0 -0
  295. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/dependencies/reflect_dependencies.py +0 -0
  296. {orionis-0.319.0/orionis/services/introspection/instances → orionis-0.321.0/orionis/services/introspection/exceptions}/__init__.py +0 -0
  297. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/exceptions/reflection_attribute_error.py +0 -0
  298. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/exceptions/reflection_type_error.py +0 -0
  299. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/exceptions/reflection_value_error.py +0 -0
  300. {orionis-0.319.0/orionis/services/introspection/modules → orionis-0.321.0/orionis/services/introspection/instances}/__init__.py +0 -0
  301. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/instances/reflection_instance.py +0 -0
  302. {orionis-0.319.0/orionis/services/parsers → orionis-0.321.0/orionis/services/introspection/modules}/__init__.py +0 -0
  303. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/modules/reflection_module.py +0 -0
  304. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/introspection/reflection.py +0 -0
  305. {orionis-0.319.0/orionis/services/parsers/contracts → orionis-0.321.0/orionis/services/parsers}/__init__.py +0 -0
  306. {orionis-0.319.0/orionis/services/parsers/exceptions → orionis-0.321.0/orionis/services/parsers/contracts}/__init__.py +0 -0
  307. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/parsers/contracts/exception_parser.py +0 -0
  308. {orionis-0.319.0/orionis/services/paths → orionis-0.321.0/orionis/services/parsers/exceptions}/__init__.py +0 -0
  309. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/parsers/exceptions/exception_parser.py +0 -0
  310. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/parsers/serializer.py +0 -0
  311. {orionis-0.319.0/orionis/services/paths/contracts → orionis-0.321.0/orionis/services/paths}/__init__.py +0 -0
  312. {orionis-0.319.0/orionis/services/paths/exceptions → orionis-0.321.0/orionis/services/paths/contracts}/__init__.py +0 -0
  313. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/paths/contracts/resolver.py +0 -0
  314. {orionis-0.319.0/orionis/services/system → orionis-0.321.0/orionis/services/paths/exceptions}/__init__.py +0 -0
  315. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/paths/exceptions/not_found_exceptions.py +0 -0
  316. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/paths/exceptions/path_value_exceptions.py +0 -0
  317. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/paths/resolver.py +0 -0
  318. {orionis-0.319.0/orionis/services/system/contracts → orionis-0.321.0/orionis/services/system}/__init__.py +0 -0
  319. {orionis-0.319.0/orionis/support → orionis-0.321.0/orionis/services/system/contracts}/__init__.py +0 -0
  320. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/system/contracts/imports.py +0 -0
  321. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/system/contracts/workers.py +0 -0
  322. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/system/imports.py +0 -0
  323. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/system/runtime_imports.py +0 -0
  324. {orionis-0.319.0 → orionis-0.321.0}/orionis/services/system/workers.py +0 -0
  325. {orionis-0.319.0/orionis/support/standard → orionis-0.321.0/orionis/support}/__init__.py +0 -0
  326. {orionis-0.319.0/orionis/support/standard/contracts → orionis-0.321.0/orionis/support/standard}/__init__.py +0 -0
  327. {orionis-0.319.0/orionis/support/standard/exceptions → orionis-0.321.0/orionis/support/standard/contracts}/__init__.py +0 -0
  328. {orionis-0.319.0 → orionis-0.321.0}/orionis/support/standard/contracts/std.py +0 -0
  329. {orionis-0.319.0/orionis/support/wrapper → orionis-0.321.0/orionis/support/standard/exceptions}/__init__.py +0 -0
  330. {orionis-0.319.0 → orionis-0.321.0}/orionis/support/standard/exceptions/std_value_exception.py +0 -0
  331. {orionis-0.319.0 → orionis-0.321.0}/orionis/support/standard/std.py +0 -0
  332. {orionis-0.319.0/orionis/support/wrapper/dicts → orionis-0.321.0/orionis/support/wrapper}/__init__.py +0 -0
  333. {orionis-0.319.0/orionis/test → orionis-0.321.0/orionis/support/wrapper/dicts}/__init__.py +0 -0
  334. {orionis-0.319.0 → orionis-0.321.0}/orionis/support/wrapper/dicts/dot_dict.py +0 -0
  335. {orionis-0.319.0/orionis/test/cases → orionis-0.321.0/orionis/test}/__init__.py +0 -0
  336. {orionis-0.319.0/orionis/test/contracts → orionis-0.321.0/orionis/test/cases}/__init__.py +0 -0
  337. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/cases/test_async.py +0 -0
  338. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/cases/test_case.py +0 -0
  339. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/cases/test_sync.py +0 -0
  340. {orionis-0.319.0/orionis/test/entities → orionis-0.321.0/orionis/test/contracts}/__init__.py +0 -0
  341. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/contracts/dumper.py +0 -0
  342. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/contracts/history.py +0 -0
  343. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/contracts/printer.py +0 -0
  344. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/contracts/test_unit.py +0 -0
  345. {orionis-0.319.0/orionis/test/enums → orionis-0.321.0/orionis/test/entities}/__init__.py +0 -0
  346. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/entities/test_result.py +0 -0
  347. {orionis-0.319.0/orionis/test/exceptions → orionis-0.321.0/orionis/test/enums}/__init__.py +0 -0
  348. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/enums/test_mode.py +0 -0
  349. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/enums/test_status.py +0 -0
  350. {orionis-0.319.0/orionis/test/logs → orionis-0.321.0/orionis/test/exceptions}/__init__.py +0 -0
  351. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/exceptions/test_config_exception.py +0 -0
  352. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/exceptions/test_failure_exception.py +0 -0
  353. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/exceptions/test_persistence_error.py +0 -0
  354. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/exceptions/test_runtime_error.py +0 -0
  355. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/exceptions/test_value_error.py +0 -0
  356. {orionis-0.319.0/orionis/test/output → orionis-0.321.0/orionis/test/logs}/__init__.py +0 -0
  357. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/logs/history.py +0 -0
  358. {orionis-0.319.0/orionis/test/suite → orionis-0.321.0/orionis/test/output}/__init__.py +0 -0
  359. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/output/dumper.py +0 -0
  360. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/output/printer.py +0 -0
  361. {orionis-0.319.0/orionis/test/view → orionis-0.321.0/orionis/test/suite}/__init__.py +0 -0
  362. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/suite/test_unit.py +0 -0
  363. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/test_suite.py +0 -0
  364. {orionis-0.319.0/tests → orionis-0.321.0/orionis/test/view}/__init__.py +0 -0
  365. {orionis-0.319.0 → orionis-0.321.0}/orionis/test/view/render.py +0 -0
  366. {orionis-0.319.0 → orionis-0.321.0}/orionis/unittesting.py +0 -0
  367. {orionis-0.319.0 → orionis-0.321.0}/orionis.egg-info/dependency_links.txt +0 -0
  368. {orionis-0.319.0 → orionis-0.321.0}/orionis.egg-info/requires.txt +0 -0
  369. {orionis-0.319.0 → orionis-0.321.0}/orionis.egg-info/top_level.txt +0 -0
  370. {orionis-0.319.0 → orionis-0.321.0}/orionis.egg-info/zip-safe +0 -0
  371. {orionis-0.319.0 → orionis-0.321.0}/setup.cfg +0 -0
  372. {orionis-0.319.0 → orionis-0.321.0}/setup.py +0 -0
  373. {orionis-0.319.0/tests/example → orionis-0.321.0/tests}/__init__.py +0 -0
  374. {orionis-0.319.0/tests/foundation → orionis-0.321.0/tests/example}/__init__.py +0 -0
  375. {orionis-0.319.0 → orionis-0.321.0}/tests/example/test_example.py +0 -0
  376. {orionis-0.319.0/tests/foundation/config → orionis-0.321.0/tests/foundation}/__init__.py +0 -0
  377. {orionis-0.319.0/tests/foundation/config/app → orionis-0.321.0/tests/foundation/config}/__init__.py +0 -0
  378. {orionis-0.319.0/tests/foundation/config/auth → orionis-0.321.0/tests/foundation/config/app}/__init__.py +0 -0
  379. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/app/test_foundation_config_app.py +0 -0
  380. {orionis-0.319.0/tests/foundation/config/cache → orionis-0.321.0/tests/foundation/config/auth}/__init__.py +0 -0
  381. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/auth/test_foundation_config_auth.py +0 -0
  382. {orionis-0.319.0/tests/foundation/config/cors → orionis-0.321.0/tests/foundation/config/cache}/__init__.py +0 -0
  383. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/cache/test_foundation_config_cache.py +0 -0
  384. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/cache/test_foundation_config_cache_file.py +0 -0
  385. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/cache/test_foundation_config_cache_stores.py +0 -0
  386. {orionis-0.319.0/tests/foundation/config/database → orionis-0.321.0/tests/foundation/config/cors}/__init__.py +0 -0
  387. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/cors/test_foundation_config_cors.py +0 -0
  388. {orionis-0.319.0/tests/foundation/config/filesystems → orionis-0.321.0/tests/foundation/config/database}/__init__.py +0 -0
  389. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database.py +0 -0
  390. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database_connections.py +0 -0
  391. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database_mysql.py +0 -0
  392. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database_oracle.py +0 -0
  393. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database_pgsql.py +0 -0
  394. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/database/test_foundation_config_database_sqlite.py +0 -0
  395. {orionis-0.319.0/tests/foundation/config/logging → orionis-0.321.0/tests/foundation/config/filesystems}/__init__.py +0 -0
  396. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems.py +0 -0
  397. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_aws.py +0 -0
  398. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_disks.py +0 -0
  399. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_local.py +0 -0
  400. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/filesystems/test_foundation_config_filesystems_public.py +0 -0
  401. {orionis-0.319.0/tests/foundation/config/mail → orionis-0.321.0/tests/foundation/config/logging}/__init__.py +0 -0
  402. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging.py +0 -0
  403. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_channels.py +0 -0
  404. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_chunked.py +0 -0
  405. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_daily.py +0 -0
  406. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_hourly.py +0 -0
  407. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_monthly.py +0 -0
  408. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_stack.py +0 -0
  409. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/logging/test_foundation_config_logging_weekly.py +0 -0
  410. {orionis-0.319.0/tests/foundation/config/queue → orionis-0.321.0/tests/foundation/config/mail}/__init__.py +0 -0
  411. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/mail/test_foundation_config_mail.py +0 -0
  412. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/mail/test_foundation_config_mail_file.py +0 -0
  413. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/mail/test_foundation_config_mail_mailers.py +0 -0
  414. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/mail/test_foundation_config_mail_smtp.py +0 -0
  415. {orionis-0.319.0/tests/foundation/config/root → orionis-0.321.0/tests/foundation/config/queue}/__init__.py +0 -0
  416. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/queue/test_foundation_config_queue.py +0 -0
  417. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/queue/test_foundation_config_queue_brokers.py +0 -0
  418. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/queue/test_foundation_config_queue_database.py +0 -0
  419. {orionis-0.319.0/tests/foundation/config/session → orionis-0.321.0/tests/foundation/config/root}/__init__.py +0 -0
  420. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/root/test_foundation_config_root_paths.py +0 -0
  421. {orionis-0.319.0/tests/foundation/config/startup → orionis-0.321.0/tests/foundation/config/session}/__init__.py +0 -0
  422. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/session/test_foundation_config_session.py +0 -0
  423. {orionis-0.319.0/tests/foundation/config/testing → orionis-0.321.0/tests/foundation/config/startup}/__init__.py +0 -0
  424. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/startup/test_foundation_config_startup.py +0 -0
  425. {orionis-0.319.0/tests/foundation/exceptions → orionis-0.321.0/tests/foundation/config/testing}/__init__.py +0 -0
  426. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/config/testing/test_foundation_config_testing.py +0 -0
  427. {orionis-0.319.0/tests/metadata → orionis-0.321.0/tests/foundation/exceptions}/__init__.py +0 -0
  428. {orionis-0.319.0 → orionis-0.321.0}/tests/foundation/exceptions/test_foundation_config_exceptions.py +0 -0
  429. {orionis-0.319.0/tests/patterns → orionis-0.321.0/tests/metadata}/__init__.py +0 -0
  430. {orionis-0.319.0 → orionis-0.321.0}/tests/metadata/test_metadata_framework.py +0 -0
  431. {orionis-0.319.0 → orionis-0.321.0}/tests/metadata/test_metadata_package.py +0 -0
  432. {orionis-0.319.0/tests/patterns/singleton → orionis-0.321.0/tests/patterns}/__init__.py +0 -0
  433. {orionis-0.319.0/tests/services → orionis-0.321.0/tests/patterns/singleton}/__init__.py +0 -0
  434. {orionis-0.319.0 → orionis-0.321.0}/tests/patterns/singleton/test_patterns_singleton.py +0 -0
  435. {orionis-0.319.0/tests/services/asynchrony → orionis-0.321.0/tests/services}/__init__.py +0 -0
  436. {orionis-0.319.0/tests/services/environment → orionis-0.321.0/tests/services/asynchrony}/__init__.py +0 -0
  437. {orionis-0.319.0 → orionis-0.321.0}/tests/services/asynchrony/test_services_asynchrony_coroutine.py +0 -0
  438. {orionis-0.319.0/tests/services/inspection → orionis-0.321.0/tests/services/environment}/__init__.py +0 -0
  439. {orionis-0.319.0 → orionis-0.321.0}/tests/services/environment/test_services_environment.py +0 -0
  440. {orionis-0.319.0/tests/services/inspection/dependencies → orionis-0.321.0/tests/services/inspection}/__init__.py +0 -0
  441. {orionis-0.319.0/tests/services/inspection/dependencies/mocks → orionis-0.321.0/tests/services/inspection/dependencies}/__init__.py +0 -0
  442. {orionis-0.319.0/tests/services/inspection/reflection → orionis-0.321.0/tests/services/inspection/dependencies/mocks}/__init__.py +0 -0
  443. {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/dependencies/mocks/mock_user.py +0 -0
  444. {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/dependencies/mocks/mock_user_controller.py +0 -0
  445. {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/dependencies/mocks/mock_users_permissions.py +0 -0
  446. {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/dependencies/test_reflect_dependencies.py +0 -0
  447. {orionis-0.319.0/tests/services/inspection/reflection/mock → orionis-0.321.0/tests/services/inspection/reflection}/__init__.py +0 -0
  448. {orionis-0.319.0/tests/services/parsers → orionis-0.321.0/tests/services/inspection/reflection/mock}/__init__.py +0 -0
  449. {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/mock/fake_reflect_instance.py +0 -0
  450. {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/test_reflection_abstract.py +0 -0
  451. {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/test_reflection_callable.py +0 -0
  452. {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/test_reflection_concrete.py +0 -0
  453. {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/test_reflection_instance.py +0 -0
  454. {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/reflection/test_reflection_module.py +0 -0
  455. {orionis-0.319.0 → orionis-0.321.0}/tests/services/inspection/test_reflection.py +0 -0
  456. {orionis-0.319.0/tests/services/parsers/mocks → orionis-0.321.0/tests/services/parsers}/__init__.py +0 -0
  457. {orionis-0.319.0/tests/services/path → orionis-0.321.0/tests/services/parsers/mocks}/__init__.py +0 -0
  458. {orionis-0.319.0 → orionis-0.321.0}/tests/services/parsers/mocks/mock_custom_error.py +0 -0
  459. {orionis-0.319.0 → orionis-0.321.0}/tests/services/parsers/test_services_parser_exceptions.py +0 -0
  460. {orionis-0.319.0/tests/services/system → orionis-0.321.0/tests/services/path}/__init__.py +0 -0
  461. {orionis-0.319.0 → orionis-0.321.0}/tests/services/path/test_services_resolver.py +0 -0
  462. {orionis-0.319.0/tests/support → orionis-0.321.0/tests/services/system}/__init__.py +0 -0
  463. {orionis-0.319.0 → orionis-0.321.0}/tests/services/system/test_services_system_imports.py +0 -0
  464. {orionis-0.319.0 → orionis-0.321.0}/tests/services/system/test_services_system_workers.py +0 -0
  465. {orionis-0.319.0/tests/support/standard → orionis-0.321.0/tests/support}/__init__.py +0 -0
  466. {orionis-0.319.0/tests/support/wrapper → orionis-0.321.0/tests/support/standard}/__init__.py +0 -0
  467. {orionis-0.319.0 → orionis-0.321.0}/tests/support/standard/test_services_std.py +0 -0
  468. {orionis-0.319.0/tests/testing → orionis-0.321.0/tests/support/wrapper}/__init__.py +0 -0
  469. {orionis-0.319.0 → orionis-0.321.0}/tests/support/wrapper/test_services_wrapper_docdict.py +0 -0
  470. {orionis-0.319.0 → orionis-0.321.0}/tests/testing/test_testing_result.py +0 -0
  471. {orionis-0.319.0 → orionis-0.321.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.319.0
3
+ Version: 0.321.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
@@ -0,0 +1,636 @@
1
+ import threading
2
+ from typing import Any, Callable
3
+ from orionis.container.contracts.container import IContainer
4
+ from orionis.container.entities.binding import Binding
5
+ from orionis.container.enums.lifetimes import Lifetime
6
+ from orionis.container.exceptions.container_exception import OrionisContainerException
7
+ from orionis.container.resolver import Resolver
8
+ from orionis.container.validators.implements import ImplementsAbstractMethods
9
+ from orionis.container.validators.is_abstract_class import IsAbstractClass
10
+ from orionis.container.validators.is_callable import IsCallable
11
+ from orionis.container.validators.is_concrete_class import IsConcreteClass
12
+ from orionis.container.validators.is_instance import IsInstance
13
+ from orionis.container.validators.is_not_subclass import IsNotSubclass
14
+ from orionis.container.validators.is_subclass import IsSubclass
15
+ from orionis.container.validators.is_valid_alias import IsValidAlias
16
+ from orionis.container.validators.lifetime import LifetimeValidator
17
+ from orionis.services.introspection.abstract.reflection_abstract import ReflectionAbstract
18
+ from orionis.services.introspection.callables.reflection_callable import ReflectionCallable
19
+
20
+ class Container(IContainer):
21
+
22
+ # Singleton instance of the container.
23
+ # This is a class variable that holds the single instance of the Container class.
24
+ _instance = None
25
+
26
+ # Lock for thread-safe singleton instantiation.
27
+ # This lock ensures that only one thread can create the instance at a time,
28
+ # preventing
29
+ _lock = threading.Lock()
30
+
31
+ # Class variable to track if the container has been initialized.
32
+ # This is used to ensure that the initialization logic runs only once,
33
+ # regardless of how many times the class is instantiated.
34
+ _initialized = False
35
+
36
+ def __new__(
37
+ cls
38
+ ) -> 'Container':
39
+ """
40
+ Creates and returns a singleton instance of the class.
41
+
42
+ This method implements the singleton pattern, ensuring that only one instance
43
+ of the class exists. If an instance does not exist, it acquires a lock to
44
+ ensure thread safety and creates the instance. Subsequent calls return the
45
+ existing instance.
46
+
47
+ Returns
48
+ -------
49
+ Container
50
+ The singleton instance of the class.
51
+ """
52
+
53
+ # Check if the class has an existing instance
54
+ if cls._instance is None:
55
+
56
+ # Acquire the lock to ensure thread safety during instance creation
57
+ with cls._lock:
58
+
59
+ # If the instance is still None, create a new instance
60
+ if cls._instance is None:
61
+
62
+ # Call the superclass's __new__ method to create a new instance
63
+ cls._instance = super(Container, cls).__new__(cls)
64
+
65
+ # Return the existing instance of the class
66
+ return cls._instance
67
+
68
+ def __init__(
69
+ self
70
+ ) -> None:
71
+ """
72
+ Initializes a new instance of the container.
73
+
74
+ This constructor sets up the internal dictionaries for bindings and aliases,
75
+ ensuring that these are only initialized once per class. The initialization
76
+ is guarded by the `_initialized` class attribute to prevent redundant setup.
77
+ The container also registers itself as a service to allow for injection.
78
+
79
+ Notes
80
+ -----
81
+ - The `__bindings` dictionary is used to store service bindings.
82
+ - The `__aliasses` dictionary is used to store service aliases.
83
+ - Initialization occurs only once per class, regardless of the number of instances.
84
+ - The container registers itself under the IContainer interface to allow for dependency injection.
85
+ """
86
+
87
+ # Check if the class has been initialized
88
+ if not self.__class__._initialized:
89
+
90
+ # Initialize the container's internal state
91
+ self.__bindings = {}
92
+ self.__aliasses = {}
93
+
94
+ # Set the initialized flag to True to prevent re-initialization
95
+ self.__class__._initialized = True
96
+
97
+ # Register the container itself as a service
98
+ self.instance(IContainer, self)
99
+
100
+ def transient(
101
+ self,
102
+ abstract: Callable[..., Any],
103
+ concrete: Callable[..., Any],
104
+ *,
105
+ alias: str = None,
106
+ enforce_decoupling: bool = False
107
+ ) -> bool:
108
+ """
109
+ Registers a service with a transient lifetime.
110
+
111
+ Parameters
112
+ ----------
113
+ abstract : Callable[..., Any]
114
+ The abstract base type or interface to be bound.
115
+ concrete : Callable[..., Any]
116
+ The concrete implementation to associate with the abstract type.
117
+ alias : str, optional
118
+ An alternative name to register the service under. If not provided, the abstract's class name is used.
119
+
120
+ Returns
121
+ -------
122
+ bool
123
+ True if the service was registered successfully.
124
+
125
+ Raises
126
+ ------
127
+ OrionisContainerTypeError
128
+ If the abstract or concrete class checks fail.
129
+ OrionisContainerException
130
+ If the concrete class inherits from the abstract class.
131
+
132
+ Notes
133
+ -----
134
+ Registers the given concrete implementation to the abstract type with a transient lifetime,
135
+ meaning a new instance will be created each time the service is requested. Optionally, an alias
136
+ can be provided for registration.
137
+ """
138
+
139
+ # Ensure that abstract is an abstract class
140
+ IsAbstractClass(abstract, Lifetime.TRANSIENT)
141
+
142
+ # Ensure that concrete is a concrete class
143
+ IsConcreteClass(concrete, Lifetime.TRANSIENT)
144
+
145
+ # Ensure that concrete is NOT a subclass of abstract
146
+ if enforce_decoupling:
147
+ IsNotSubclass(abstract, concrete)
148
+
149
+ # Validate that concrete is a subclass of abstract
150
+ else:
151
+ IsSubclass(abstract, concrete)
152
+
153
+ # Ensure implementation
154
+ ImplementsAbstractMethods(
155
+ abstract=abstract,
156
+ concrete=concrete
157
+ )
158
+
159
+ # Ensure that the alias is a valid string if provided
160
+ if alias:
161
+ IsValidAlias(alias)
162
+
163
+ # Extract the module and class name for the alias
164
+ else:
165
+ rf_asbtract = ReflectionAbstract(abstract)
166
+ alias = rf_asbtract.getModuleWithClassName()
167
+
168
+ # If the service is already registered, drop it
169
+ self.drop(abstract, alias)
170
+
171
+ # Register the service with transient lifetime
172
+ self.__bindings[abstract] = Binding(
173
+ contract = abstract,
174
+ concrete = concrete,
175
+ lifetime = Lifetime.TRANSIENT,
176
+ enforce_decoupling = enforce_decoupling,
177
+ alias = alias
178
+ )
179
+
180
+ # Register the alias
181
+ self.__aliasses[alias] = self.__bindings[abstract]
182
+
183
+ # Return True to indicate successful registration
184
+ return True
185
+
186
+ def singleton(
187
+ self,
188
+ abstract: Callable[..., Any],
189
+ concrete: Callable[..., Any],
190
+ *,
191
+ alias: str = None,
192
+ enforce_decoupling: bool = False
193
+ ) -> bool:
194
+ """
195
+ Registers a service with a singleton lifetime.
196
+
197
+ Parameters
198
+ ----------
199
+ abstract : Callable[..., Any]
200
+ The abstract base type or interface to be bound.
201
+ concrete : Callable[..., Any]
202
+ The concrete implementation to associate with the abstract type.
203
+ alias : str, optional
204
+ An alternative name to register the service under. If not provided, the abstract's class name is used.
205
+
206
+ Returns
207
+ -------
208
+ bool
209
+ True if the service was registered successfully.
210
+
211
+ Raises
212
+ ------
213
+ OrionisContainerTypeError
214
+ If the abstract or concrete class checks fail.
215
+ OrionisContainerException
216
+ If the concrete class inherits from the abstract class.
217
+
218
+ Notes
219
+ -----
220
+ Registers the given concrete implementation to the abstract type with a singleton lifetime,
221
+ meaning a single instance will be created and shared. Optionally, an alias can be provided for registration.
222
+ """
223
+
224
+ # Ensure that abstract is an abstract class
225
+ IsAbstractClass(abstract, Lifetime.SINGLETON)
226
+
227
+ # Ensure that concrete is a concrete class
228
+ IsConcreteClass(concrete, Lifetime.SINGLETON)
229
+
230
+ # Ensure that concrete is NOT a subclass of abstract
231
+ if enforce_decoupling:
232
+ IsNotSubclass(abstract, concrete)
233
+
234
+ # Validate that concrete is a subclass of abstract
235
+ else:
236
+ IsSubclass(abstract, concrete)
237
+
238
+ # Ensure implementation
239
+ ImplementsAbstractMethods(
240
+ abstract=abstract,
241
+ concrete=concrete
242
+ )
243
+
244
+ # Ensure that the alias is a valid string if provided
245
+ if alias:
246
+ IsValidAlias(alias)
247
+ else:
248
+ rf_asbtract = ReflectionAbstract(abstract)
249
+ alias = rf_asbtract.getModuleWithClassName()
250
+
251
+ # If the service is already registered, drop it
252
+ self.drop(abstract, alias)
253
+
254
+ # Register the service with singleton lifetime
255
+ self.__bindings[abstract] = Binding(
256
+ contract = abstract,
257
+ concrete = concrete,
258
+ lifetime = Lifetime.SINGLETON,
259
+ enforce_decoupling = enforce_decoupling,
260
+ alias = alias
261
+ )
262
+
263
+ # Register the alias
264
+ self.__aliasses[alias] = self.__bindings[abstract]
265
+
266
+ # Return True to indicate successful registration
267
+ return True
268
+
269
+ def scoped(
270
+ self,
271
+ abstract: Callable[..., Any],
272
+ concrete: Callable[..., Any],
273
+ *,
274
+ alias: str = None,
275
+ enforce_decoupling: bool = False
276
+ ) -> bool:
277
+ """
278
+ Registers a service with a scoped lifetime.
279
+
280
+ Parameters
281
+ ----------
282
+ abstract : Callable[..., Any]
283
+ The abstract base type or interface to be bound.
284
+ concrete : Callable[..., Any]
285
+ The concrete implementation to associate with the abstract type.
286
+ alias : str, optional
287
+ An alternative name to register the service under. If not provided, the abstract's class name is used.
288
+
289
+ Returns
290
+ -------
291
+ bool
292
+ True if the service was registered successfully.
293
+
294
+ Raises
295
+ ------
296
+ OrionisContainerTypeError
297
+ If the abstract or concrete class checks fail.
298
+ OrionisContainerException
299
+ If the concrete class inherits from the abstract class.
300
+
301
+ Notes
302
+ -----
303
+ Registers the given concrete implementation to the abstract type with a scoped lifetime,
304
+ meaning a new instance will be created per scope. Optionally, an alias can be provided for registration.
305
+ """
306
+
307
+ # Ensure that abstract is an abstract class
308
+ IsAbstractClass(abstract, Lifetime.SCOPED)
309
+
310
+ # Ensure that concrete is a concrete class
311
+ IsConcreteClass(concrete, Lifetime.SCOPED)
312
+
313
+ # Ensure that concrete is NOT a subclass of abstract
314
+ if enforce_decoupling:
315
+ IsNotSubclass(abstract, concrete)
316
+
317
+ # Validate that concrete is a subclass of abstract
318
+ else:
319
+ IsSubclass(abstract, concrete)
320
+
321
+ # Ensure implementation
322
+ ImplementsAbstractMethods(
323
+ abstract=abstract,
324
+ concrete=concrete
325
+ )
326
+
327
+ # Ensure that the alias is a valid string if provided
328
+ if alias:
329
+ IsValidAlias(alias)
330
+ else:
331
+ rf_asbtract = ReflectionAbstract(abstract)
332
+ alias = rf_asbtract.getModuleWithClassName()
333
+
334
+ # If the service is already registered, drop it
335
+ self.drop(abstract, alias)
336
+
337
+ # Register the service with scoped lifetime
338
+ self.__bindings[abstract] = Binding(
339
+ contract = abstract,
340
+ concrete = concrete,
341
+ lifetime = Lifetime.SCOPED,
342
+ enforce_decoupling = enforce_decoupling,
343
+ alias = alias
344
+ )
345
+
346
+ # Register the alias
347
+ self.__aliasses[alias] = self.__bindings[abstract]
348
+
349
+ # Return True to indicate successful registration
350
+ return True
351
+
352
+ def instance(
353
+ self,
354
+ abstract: Callable[..., Any],
355
+ instance: Any,
356
+ *,
357
+ alias: str = None,
358
+ enforce_decoupling: bool = False
359
+ ) -> bool:
360
+ """
361
+ Registers an instance of a class or interface in the container.
362
+ Parameters
363
+ ----------
364
+ abstract : Callable[..., Any]
365
+ The abstract class or interface to associate with the instance.
366
+ instance : Any
367
+ The concrete instance to register.
368
+ alias : str, optional
369
+ An optional alias to register the instance under. If not provided,
370
+ the abstract's `__name__` attribute will be used as the alias if available.
371
+ Returns
372
+ -------
373
+ bool
374
+ True if the instance was successfully registered.
375
+ Raises
376
+ ------
377
+ TypeError
378
+ If `abstract` is not an abstract class or if `alias` is not a valid string.
379
+ ValueError
380
+ If `instance` is not a valid instance of `abstract`.
381
+ Notes
382
+ -----
383
+ This method ensures that the abstract is a valid abstract class, the instance
384
+ is valid, and the alias (if provided) is a valid string. The instance is then
385
+ registered in the container under both the abstract and the alias.
386
+ """
387
+
388
+ # Ensure that the abstract is an abstract class
389
+ IsAbstractClass(abstract, f"Instance {Lifetime.SINGLETON}")
390
+
391
+ # Ensure that the instance is a valid instance
392
+ IsInstance(instance)
393
+
394
+ # Ensure that instance is NOT a subclass of abstract
395
+ if enforce_decoupling:
396
+ IsNotSubclass(abstract, instance.__class__)
397
+
398
+ # Validate that instance is a subclass of abstract
399
+ else:
400
+ IsSubclass(abstract, instance.__class__)
401
+
402
+ # Ensure implementation
403
+ ImplementsAbstractMethods(
404
+ abstract=abstract,
405
+ instance=instance
406
+ )
407
+
408
+ # Ensure that the alias is a valid string if provided
409
+ if alias:
410
+ IsValidAlias(alias)
411
+ else:
412
+ rf_asbtract = ReflectionAbstract(abstract)
413
+ alias = rf_asbtract.getModuleWithClassName()
414
+
415
+ # If the service is already registered, drop it
416
+ self.drop(abstract, alias)
417
+
418
+ # Register the instance with the abstract type
419
+ self.__bindings[abstract] = Binding(
420
+ contract = abstract,
421
+ instance = instance,
422
+ lifetime = Lifetime.SINGLETON,
423
+ enforce_decoupling = enforce_decoupling,
424
+ alias = alias
425
+ )
426
+
427
+ # Register the alias
428
+ self.__aliasses[alias] = self.__bindings[abstract]
429
+
430
+ # Return True to indicate successful registration
431
+ return True
432
+
433
+ def function(
434
+ self,
435
+ alias: str,
436
+ fn: Callable[..., Any],
437
+ *,
438
+ lifetime: Lifetime = Lifetime.TRANSIENT
439
+ ) -> bool:
440
+ """
441
+ Registers a function or factory under a given alias.
442
+
443
+ Parameters
444
+ ----------
445
+ alias : str
446
+ The alias to register the function under.
447
+ fn : Callable[..., Any]
448
+ The function or factory to register.
449
+ lifetime : Lifetime, optional
450
+ The lifetime of the function registration (default is TRANSIENT).
451
+
452
+ Returns
453
+ -------
454
+ bool
455
+ True if the function was registered successfully.
456
+
457
+ Raises
458
+ ------
459
+ OrionisContainerTypeError
460
+ If the alias is invalid or the function is not callable.
461
+ OrionisContainerException
462
+ If the lifetime is not allowed for the function signature.
463
+ """
464
+
465
+ # Normalize and validate the lifetime parameter
466
+ lifetime = LifetimeValidator(lifetime)
467
+
468
+ # Ensure that the alias is a valid string
469
+ IsValidAlias(alias)
470
+
471
+ # Validate that the function is callable
472
+ IsCallable(fn)
473
+
474
+ # Inspect the function signature
475
+ params = ReflectionCallable(fn).getDependencies()
476
+
477
+ # If the function requires arguments, only allow TRANSIENT
478
+ if (len(params.resolved) + len(params.unresolved)) > 0 and lifetime != Lifetime.TRANSIENT:
479
+ raise OrionisContainerException(
480
+ "Functions that require arguments can only be registered with a TRANSIENT lifetime."
481
+ )
482
+
483
+ # If the service is already registered, drop it
484
+ self.drop(None, alias)
485
+
486
+ # Register the function with the specified alias and lifetime
487
+ self.__bindings[alias] = Binding(
488
+ function=fn,
489
+ lifetime=lifetime,
490
+ alias=alias
491
+ )
492
+
493
+ # Register the function as a binding
494
+ self.__aliasses[alias] = self.__bindings[alias]
495
+
496
+ return True
497
+
498
+ def bound(
499
+ self,
500
+ abstract_or_alias: Any,
501
+ ) -> bool:
502
+ """
503
+ Checks if a service (by abstract type or alias) is registered in the container.
504
+
505
+ Parameters
506
+ ----------
507
+ abstract_or_alias : Any
508
+ The abstract class, interface, or alias (str) to check for registration.
509
+
510
+ Returns
511
+ -------
512
+ bool
513
+ True if the service is registered (either as an abstract type or alias), False otherwise.
514
+
515
+ Notes
516
+ -----
517
+ This method allows you to verify whether a service has been registered in the container,
518
+ either by its abstract type or by its alias. It supports both class-based and string-based lookups.
519
+ """
520
+ return (
521
+ abstract_or_alias in self.__bindings
522
+ or abstract_or_alias in self.__aliasses
523
+ )
524
+
525
+ def getBinding(
526
+ self,
527
+ abstract_or_alias: Any
528
+ ) -> Binding:
529
+ """
530
+ Retrieves the binding for the requested abstract type or alias.
531
+
532
+ Parameters
533
+ ----------
534
+ abstract_or_alias : Any
535
+ The abstract class, interface, or alias (str) to retrieve.
536
+
537
+ Returns
538
+ -------
539
+ Binding
540
+ The binding associated with the requested abstract type or alias.
541
+ """
542
+ return self.__bindings.get(abstract_or_alias) or self.__aliasses.get(abstract_or_alias)
543
+
544
+ def drop(
545
+ self,
546
+ abstract: Callable[..., Any] = None,
547
+ alias: str = None
548
+ ) -> None:
549
+ """
550
+ Drops a service from the container by removing its bindings and aliases.
551
+ This method allows removing registered services from the dependency injection container,
552
+ either by their abstract type or by their alias. When a service is dropped,
553
+ all its bindings and aliases are removed from the container.
554
+
555
+ Warning
556
+ -------
557
+ Using this method irresponsibly can severely damage the system's logic.
558
+ Only use it when you are certain about the consequences, as removing
559
+ critical services may lead to system failures and unexpected behavior.
560
+ abstract : Callable[..., Any], optional
561
+ The abstract type or interface to be removed from the container.
562
+ If provided, both the binding and the default alias for this type will be removed.
563
+ The alias of the service to be removed. If provided, both the alias entry
564
+ and any associated binding will be removed.
565
+
566
+ Notes
567
+ -----
568
+ At least one parameter (abstract or alias) must be provided for the method to take effect.
569
+ If both are provided, both will be processed independently.
570
+ """
571
+
572
+ # If abstract is provided
573
+ if abstract:
574
+
575
+ # Remove the abstract service from the bindings if it exists
576
+ if abstract in self.__bindings:
577
+ del self.__bindings[abstract]
578
+
579
+ # Remove the default alias (module + class name) from aliases if it exists
580
+ abs_alias = ReflectionAbstract(abstract).getModuleWithClassName()
581
+ if abs_alias in self.__aliasses:
582
+ del self.__aliasses[abs_alias]
583
+
584
+ # If a custom alias is provided
585
+ if alias:
586
+
587
+ # Remove it from the aliases dictionary if it exists
588
+ if alias in self.__aliasses:
589
+ del self.__aliasses[alias]
590
+
591
+ # Remove the binding associated with the alias
592
+ if alias in self.__bindings:
593
+ del self.__bindings[alias]
594
+
595
+ def make(
596
+ self,
597
+ abstract_or_alias: Any,
598
+ *args: tuple,
599
+ **kwargs: dict
600
+ ) -> Any:
601
+ """
602
+ Resolves and returns an instance of the requested service.
603
+
604
+ Parameters
605
+ ----------
606
+ abstract_or_alias : Any
607
+ The abstract class, interface, or alias (str) to resolve.
608
+ *args : tuple
609
+ Positional arguments to pass to the constructor of the resolved service.
610
+ **kwargs : dict
611
+ Keyword arguments to pass to the constructor of the resolved service.
612
+
613
+ Returns
614
+ -------
615
+ Any
616
+ An instance of the requested service.
617
+
618
+ Raises
619
+ ------
620
+ OrionisContainerException
621
+ If the requested service is not registered in the container.
622
+ """
623
+ if not self.bound(abstract_or_alias):
624
+ raise OrionisContainerException(
625
+ f"The requested service '{abstract_or_alias}' is not registered in the container."
626
+ )
627
+
628
+ # Get the binding for the requested abstract type or alias
629
+ binding = self.getBinding(abstract_or_alias)
630
+
631
+ # Resolve the binding using the Resolver class
632
+ return Resolver(self).resolve(
633
+ binding,
634
+ *args,
635
+ **kwargs
636
+ )