orionis 0.103.0__tar.gz → 0.110.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 (190) hide show
  1. {orionis-0.103.0/orionis.egg-info → orionis-0.110.0}/PKG-INFO +1 -1
  2. orionis-0.110.0/orionis/contracts/foundation/i_bootstraper.py +41 -0
  3. orionis-0.110.0/orionis/contracts/foundation/providers/i_service_providers_bootstrapper.py +59 -0
  4. {orionis-0.103.0 → orionis-0.110.0}/orionis/framework.py +1 -1
  5. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/app.py +105 -85
  6. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/container/container.py +1 -1
  7. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/foundation/config/config_bootstrapper.py +1 -1
  8. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/foundation/console/command_bootstrapper.py +1 -1
  9. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/foundation/environment/environment_bootstrapper.py +1 -1
  10. orionis-0.110.0/orionis/luminate/foundation/providers/service_providers_bootstrapper.py +98 -0
  11. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/providers/environment/environment__service_provider.py +2 -5
  12. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/providers/files/paths_provider.py +2 -1
  13. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/providers/service_provider.py +4 -1
  14. orionis-0.110.0/orionis/luminate/services/files/__init__.py +0 -0
  15. orionis-0.110.0/orionis/luminate/services/log/__init__.py +0 -0
  16. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/services/log/log_service.py +7 -2
  17. orionis-0.110.0/orionis/luminate/test/__init__.py +0 -0
  18. {orionis-0.103.0 → orionis-0.110.0/orionis.egg-info}/PKG-INFO +1 -1
  19. {orionis-0.103.0 → orionis-0.110.0}/orionis.egg-info/SOURCES.txt +10 -3
  20. orionis-0.110.0/tests/__init__.py +0 -0
  21. orionis-0.110.0/tests/tools/__init__.py +0 -0
  22. orionis-0.103.0/orionis/luminate/foundation/providers/service_providers_bootstrapper.py +0 -10
  23. {orionis-0.103.0 → orionis-0.110.0}/LICENCE +0 -0
  24. {orionis-0.103.0 → orionis-0.110.0}/MANIFEST.in +0 -0
  25. {orionis-0.103.0 → orionis-0.110.0}/README.md +0 -0
  26. {orionis-0.103.0 → orionis-0.110.0}/orionis/__init__.py +0 -0
  27. {orionis-0.103.0 → orionis-0.110.0}/orionis/cli_manager.py +0 -0
  28. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/__init__.py +0 -0
  29. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/config/__init__.py +0 -0
  30. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/config/i_config.py +0 -0
  31. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/console/__init__.py +0 -0
  32. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/console/base/__init__.py +0 -0
  33. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/console/base/i_command.py +0 -0
  34. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/console/i_command_filter.py +0 -0
  35. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/console/i_kernel.py +0 -0
  36. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/console/i_parser.py +0 -0
  37. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/console/i_task_manager.py +0 -0
  38. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/console/output/__init__.py +0 -0
  39. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/console/output/i_console.py +0 -0
  40. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/console/output/i_executor.py +0 -0
  41. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/console/output/i_progress_bar.py +0 -0
  42. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/container/i_container.py +0 -0
  43. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/container/i_types.py +0 -0
  44. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/__init__.py +0 -0
  45. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/commands/__init__.py +0 -0
  46. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/commands/i_commands_facade.py +0 -0
  47. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/commands/i_scheduler_facade.py +0 -0
  48. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/config/__init__.py +0 -0
  49. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/config/i_config_facade.py +0 -0
  50. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/environment/__init__.py +0 -0
  51. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/environment/i_environment_facade.py +0 -0
  52. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/files/__init__.py +0 -0
  53. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/files/i_path_facade.py +0 -0
  54. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/log/__init__.py +0 -0
  55. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/log/i_log_facade.py +0 -0
  56. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/tests/__init__.py +0 -0
  57. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/facades/tests/i_tests_facade.py +0 -0
  58. {orionis-0.103.0/orionis/contracts/installer → orionis-0.110.0/orionis/contracts/foundation}/__init__.py +0 -0
  59. {orionis-0.103.0/orionis/contracts/providers → orionis-0.110.0/orionis/contracts/foundation/config}/__init__.py +0 -0
  60. {orionis-0.103.0/orionis/contracts/bootstrap → orionis-0.110.0/orionis/contracts/foundation/config}/i_config_bootstrapper.py +0 -0
  61. {orionis-0.103.0/orionis/contracts/services → orionis-0.110.0/orionis/contracts/foundation/console}/__init__.py +0 -0
  62. {orionis-0.103.0/orionis/contracts/bootstrap → orionis-0.110.0/orionis/contracts/foundation/console}/i_command_bootstrapper.py +0 -0
  63. {orionis-0.103.0/orionis/contracts/services/commands → orionis-0.110.0/orionis/contracts/foundation/environment}/__init__.py +0 -0
  64. {orionis-0.103.0/orionis/contracts/bootstrap → orionis-0.110.0/orionis/contracts/foundation/environment}/i_environment_bootstrapper.py +0 -0
  65. {orionis-0.103.0/orionis/contracts/services/config → orionis-0.110.0/orionis/contracts/foundation/providers}/__init__.py +0 -0
  66. {orionis-0.103.0/orionis/contracts/services/environment → orionis-0.110.0/orionis/contracts/installer}/__init__.py +0 -0
  67. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/installer/i_installer_manager.py +0 -0
  68. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/installer/i_installer_output.py +0 -0
  69. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/installer/i_installer_setup.py +0 -0
  70. {orionis-0.103.0/orionis/contracts/services/files → orionis-0.110.0/orionis/contracts/providers}/__init__.py +0 -0
  71. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/providers/i_service_provider.py +0 -0
  72. {orionis-0.103.0/orionis/contracts/services/log → orionis-0.110.0/orionis/contracts/services}/__init__.py +0 -0
  73. {orionis-0.103.0/orionis/installer → orionis-0.110.0/orionis/contracts/services/commands}/__init__.py +0 -0
  74. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/services/commands/i_reactor_commands_service.py +0 -0
  75. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/services/commands/i_schedule_service.py +0 -0
  76. {orionis-0.103.0/orionis/luminate → orionis-0.110.0/orionis/contracts/services/config}/__init__.py +0 -0
  77. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/services/config/i_config_service.py +0 -0
  78. {orionis-0.103.0/orionis/luminate/config → orionis-0.110.0/orionis/contracts/services/environment}/__init__.py +0 -0
  79. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/services/environment/i_environment_service.py +0 -0
  80. {orionis-0.103.0/orionis/luminate/console → orionis-0.110.0/orionis/contracts/services/files}/__init__.py +0 -0
  81. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/services/files/i_path_resolver_service.py +0 -0
  82. {orionis-0.103.0/orionis/luminate/console/base → orionis-0.110.0/orionis/contracts/services/log}/__init__.py +0 -0
  83. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/services/log/i_log_service.py +0 -0
  84. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/support/i_exception_to_dict.py +0 -0
  85. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/support/i_reflection.py +0 -0
  86. {orionis-0.103.0 → orionis-0.110.0}/orionis/contracts/support/i_std.py +0 -0
  87. {orionis-0.103.0/orionis/luminate/console/commands → orionis-0.110.0/orionis/installer}/__init__.py +0 -0
  88. {orionis-0.103.0 → orionis-0.110.0}/orionis/installer/installer_manager.py +0 -0
  89. {orionis-0.103.0 → orionis-0.110.0}/orionis/installer/installer_output.py +0 -0
  90. {orionis-0.103.0 → orionis-0.110.0}/orionis/installer/installer_setup.py +0 -0
  91. {orionis-0.103.0/orionis/luminate/console/exceptions → orionis-0.110.0/orionis/luminate}/__init__.py +0 -0
  92. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/app_context.py +0 -0
  93. {orionis-0.103.0/orionis/luminate/console/output → orionis-0.110.0/orionis/luminate/config}/__init__.py +0 -0
  94. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/config/app.py +0 -0
  95. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/config/auth.py +0 -0
  96. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/config/cache.py +0 -0
  97. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/config/cors.py +0 -0
  98. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/config/database.py +0 -0
  99. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/config/filesystems.py +0 -0
  100. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/config/logging.py +0 -0
  101. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/config/mail.py +0 -0
  102. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/config/queue.py +0 -0
  103. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/config/session.py +0 -0
  104. {orionis-0.103.0/orionis/luminate/facades → orionis-0.110.0/orionis/luminate/console}/__init__.py +0 -0
  105. {orionis-0.103.0/orionis/luminate/facades/commands → orionis-0.110.0/orionis/luminate/console/base}/__init__.py +0 -0
  106. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/base/command.py +0 -0
  107. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/command_filter.py +0 -0
  108. {orionis-0.103.0/orionis/luminate/facades/config → orionis-0.110.0/orionis/luminate/console/commands}/__init__.py +0 -0
  109. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
  110. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/commands/help.py +0 -0
  111. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
  112. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/commands/tests.py +0 -0
  113. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/commands/version.py +0 -0
  114. {orionis-0.103.0/orionis/luminate/facades/environment → orionis-0.110.0/orionis/luminate/console/exceptions}/__init__.py +0 -0
  115. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
  116. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/kernel.py +0 -0
  117. {orionis-0.103.0/orionis/luminate/facades/files → orionis-0.110.0/orionis/luminate/console/output}/__init__.py +0 -0
  118. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/output/console.py +0 -0
  119. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/output/executor.py +0 -0
  120. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/output/progress_bar.py +0 -0
  121. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/output/styles.py +0 -0
  122. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/console/parser.py +0 -0
  123. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/container/exception.py +0 -0
  124. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/container/types.py +0 -0
  125. {orionis-0.103.0/orionis/luminate/facades/log → orionis-0.110.0/orionis/luminate/facades}/__init__.py +0 -0
  126. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/facades/app.py +0 -0
  127. {orionis-0.103.0/orionis/luminate/facades/tests → orionis-0.110.0/orionis/luminate/facades/commands}/__init__.py +0 -0
  128. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/facades/commands/commands_facade.py +0 -0
  129. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/facades/commands/scheduler_facade.py +0 -0
  130. {orionis-0.103.0/orionis/luminate/foundation → orionis-0.110.0/orionis/luminate/facades/config}/__init__.py +0 -0
  131. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/facades/config/config_facade.py +0 -0
  132. {orionis-0.103.0/orionis/luminate/foundation/config → orionis-0.110.0/orionis/luminate/facades/environment}/__init__.py +0 -0
  133. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/facades/environment/environment_facade.py +0 -0
  134. {orionis-0.103.0/orionis/luminate/foundation/console → orionis-0.110.0/orionis/luminate/facades/files}/__init__.py +0 -0
  135. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/facades/files/path_facade.py +0 -0
  136. {orionis-0.103.0/orionis/luminate/foundation/environment → orionis-0.110.0/orionis/luminate/facades/log}/__init__.py +0 -0
  137. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/facades/log/log_facade.py +0 -0
  138. {orionis-0.103.0/orionis/luminate/foundation/exceptions → orionis-0.110.0/orionis/luminate/facades/tests}/__init__.py +0 -0
  139. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/facades/tests/tests_facade.py +0 -0
  140. {orionis-0.103.0/orionis/luminate/foundation/providers → orionis-0.110.0/orionis/luminate/foundation}/__init__.py +0 -0
  141. {orionis-0.103.0/orionis/luminate/patterns → orionis-0.110.0/orionis/luminate/foundation/config}/__init__.py +0 -0
  142. {orionis-0.103.0/orionis/luminate/providers → orionis-0.110.0/orionis/luminate/foundation/console}/__init__.py +0 -0
  143. {orionis-0.103.0/orionis/luminate/providers/commands → orionis-0.110.0/orionis/luminate/foundation/environment}/__init__.py +0 -0
  144. {orionis-0.103.0/orionis/luminate/providers/config → orionis-0.110.0/orionis/luminate/foundation/exceptions}/__init__.py +0 -0
  145. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/foundation/exceptions/exception_bootstrapper.py +0 -0
  146. {orionis-0.103.0/orionis/luminate/providers/environment → orionis-0.110.0/orionis/luminate/foundation/providers}/__init__.py +0 -0
  147. {orionis-0.103.0/orionis/luminate/providers/files → orionis-0.110.0/orionis/luminate/patterns}/__init__.py +0 -0
  148. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/patterns/singleton.py +0 -0
  149. {orionis-0.103.0/orionis/luminate/providers/log → orionis-0.110.0/orionis/luminate/providers}/__init__.py +0 -0
  150. {orionis-0.103.0/orionis/luminate/services → orionis-0.110.0/orionis/luminate/providers/commands}/__init__.py +0 -0
  151. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/providers/commands/reactor_commands_service_provider.py +0 -0
  152. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/providers/commands/scheduler_provider.py +0 -0
  153. {orionis-0.103.0/orionis/luminate/services/commands → orionis-0.110.0/orionis/luminate/providers/config}/__init__.py +0 -0
  154. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/providers/config/config_service_provider.py +0 -0
  155. {orionis-0.103.0/orionis/luminate/services/config → orionis-0.110.0/orionis/luminate/providers/environment}/__init__.py +0 -0
  156. {orionis-0.103.0/orionis/luminate/services/environment → orionis-0.110.0/orionis/luminate/providers/files}/__init__.py +0 -0
  157. {orionis-0.103.0/orionis/luminate/services/files → orionis-0.110.0/orionis/luminate/providers/log}/__init__.py +0 -0
  158. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/providers/log/log_service_provider.py +0 -0
  159. {orionis-0.103.0/orionis/luminate/services/log → orionis-0.110.0/orionis/luminate/services}/__init__.py +0 -0
  160. {orionis-0.103.0/orionis/luminate/test → orionis-0.110.0/orionis/luminate/services/commands}/__init__.py +0 -0
  161. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/services/commands/reactor_commands_service.py +0 -0
  162. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/services/commands/scheduler_service.py +0 -0
  163. {orionis-0.103.0/tests → orionis-0.110.0/orionis/luminate/services/config}/__init__.py +0 -0
  164. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/services/config/config_service.py +0 -0
  165. {orionis-0.103.0/tests/tools → orionis-0.110.0/orionis/luminate/services/environment}/__init__.py +0 -0
  166. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/services/environment/environment_service.py +0 -0
  167. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/services/files/path_resolver_service.py +0 -0
  168. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/support/dot_dict.py +0 -0
  169. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/support/exception_to_dict.py +0 -0
  170. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/support/reflection.py +0 -0
  171. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/support/std.py +0 -0
  172. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/test/exception.py +0 -0
  173. {orionis-0.103.0 → orionis-0.110.0}/orionis/luminate/test/unit_test.py +0 -0
  174. {orionis-0.103.0 → orionis-0.110.0}/orionis/static/ascii/icon.ascii +0 -0
  175. {orionis-0.103.0 → orionis-0.110.0}/orionis/static/ascii/info.ascii +0 -0
  176. {orionis-0.103.0 → orionis-0.110.0}/orionis/static/bg/galaxy.jpg +0 -0
  177. {orionis-0.103.0 → orionis-0.110.0}/orionis/static/favicon/OrionisFrameworkFavicon.png +0 -0
  178. {orionis-0.103.0 → orionis-0.110.0}/orionis/static/logos/OrionisFramework.jpg +0 -0
  179. {orionis-0.103.0 → orionis-0.110.0}/orionis/static/logos/OrionisFramework.png +0 -0
  180. {orionis-0.103.0 → orionis-0.110.0}/orionis/static/logos/OrionisFramework.psd +0 -0
  181. {orionis-0.103.0 → orionis-0.110.0}/orionis/static/logos/OrionisFramework2.png +0 -0
  182. {orionis-0.103.0 → orionis-0.110.0}/orionis/static/logos/OrionisFramework3.png +0 -0
  183. {orionis-0.103.0 → orionis-0.110.0}/orionis.egg-info/dependency_links.txt +0 -0
  184. {orionis-0.103.0 → orionis-0.110.0}/orionis.egg-info/entry_points.txt +0 -0
  185. {orionis-0.103.0 → orionis-0.110.0}/orionis.egg-info/requires.txt +0 -0
  186. {orionis-0.103.0 → orionis-0.110.0}/orionis.egg-info/top_level.txt +0 -0
  187. {orionis-0.103.0 → orionis-0.110.0}/setup.cfg +0 -0
  188. {orionis-0.103.0 → orionis-0.110.0}/setup.py +0 -0
  189. {orionis-0.103.0 → orionis-0.110.0}/tests/tools/class_example.py +0 -0
  190. {orionis-0.103.0 → orionis-0.110.0}/tests/tools/test_reflection.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.103.0
3
+ Version: 0.110.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,41 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any
3
+
4
+ class IBootstrapper(ABC):
5
+
6
+ @abstractmethod
7
+ def _autoload(self) -> None:
8
+ """
9
+ Loads environment variables from the `.env` file or creates the file if it does not exist.
10
+
11
+ This method checks if the `.env` file exists in the current working directory.
12
+ If the file does not exist, it creates an empty `.env` file. If the file exists,
13
+ it loads the environment variables into the `_environment_vars` dictionary.
14
+
15
+ Raises
16
+ ------
17
+ PermissionError
18
+ If the `.env` file cannot be created or read due to insufficient permissions.
19
+ """
20
+ pass
21
+
22
+ def get(self, *args, **kwargs) -> Any:
23
+ """
24
+ Retrieves the value of an environment variable.
25
+
26
+ Parameters
27
+ ----------
28
+ key : str
29
+ The name of the environment variable.
30
+
31
+ Returns
32
+ -------
33
+ str
34
+ The value of the environment variable.
35
+
36
+ Raises
37
+ ------
38
+ KeyError
39
+ If the environment variable does not exist.
40
+ """
41
+ pass
@@ -0,0 +1,59 @@
1
+ from abc import ABC, abstractmethod
2
+ from orionis.luminate.providers.service_provider import ServiceProvider
3
+
4
+ class IServiceProvidersBootstrapper(ABC):
5
+
6
+ @abstractmethod
7
+ def _autoload(self) -> None:
8
+ """
9
+ Scans the provider directories and loads provider classes.
10
+
11
+ This method searches for Python files in the specified directories, imports them,
12
+ and registers any class that inherits from `ServiceProvider`.
13
+
14
+ Raises
15
+ ------
16
+ BootstrapRuntimeError
17
+ If there is an error loading a module.
18
+ """
19
+ pass
20
+
21
+ @abstractmethod
22
+ def _register(self, concrete: ServiceProvider) -> None:
23
+ """
24
+ Validates and registers a service provider class.
25
+
26
+ This method ensures that the provided class is valid (inherits from `ServiceProvider`,
27
+ has a `register` and `boot` method) and registers it in the
28
+ `_service_providers` dictionary.
29
+
30
+ Parameters
31
+ ----------
32
+ concrete : ServiceProvider
33
+ The service provider class to register
34
+ """
35
+ pass
36
+
37
+ @abstractmethod
38
+ def getBeforeServiceProviders(self) -> list:
39
+ """
40
+ Retrieve the registered service providers.
41
+
42
+ Returns
43
+ -------
44
+ list
45
+ A list of registered service providers
46
+ """
47
+ pass
48
+
49
+ @abstractmethod
50
+ def getAfterServiceProviders(self) -> list:
51
+ """
52
+ Retrieve the registered service providers.
53
+
54
+ Returns
55
+ -------
56
+ list
57
+ A list of registered service providers
58
+ """
59
+ pass
@@ -5,7 +5,7 @@
5
5
  NAME = "orionis"
6
6
 
7
7
  # Current version of the framework
8
- VERSION = "0.103.0"
8
+ VERSION = "0.110.0"
9
9
 
10
10
  # Full name of the author or maintainer of the project
11
11
  AUTHOR = "Raul Mauricio Uñate Castro"
@@ -1,15 +1,13 @@
1
1
  from typing import Any, Callable
2
+ from orionis.contracts.foundation.i_bootstraper import IBootstrapper
3
+ from orionis.luminate.console.output.console import Console
2
4
  from orionis.luminate.container.container import Container
3
5
  from orionis.luminate.foundation.config.config_bootstrapper import ConfigBootstrapper
4
6
  from orionis.luminate.foundation.console.command_bootstrapper import CommandsBootstrapper
5
7
  from orionis.luminate.foundation.environment.environment_bootstrapper import EnvironmentBootstrapper
8
+ from orionis.luminate.foundation.providers.service_providers_bootstrapper import ServiceProvidersBootstrapper
6
9
  from orionis.luminate.patterns.singleton import SingletonMeta
7
- from orionis.luminate.providers.commands.reactor_commands_service_provider import ReactorCommandsServiceProvider
8
- from orionis.luminate.providers.commands.scheduler_provider import ScheduleServiceProvider
9
- from orionis.luminate.providers.environment.environment__service_provider import EnvironmentServiceProvider
10
- from orionis.luminate.providers.config.config_service_provider import ConfigServiceProvider
11
- from orionis.luminate.providers.files.paths_provider import PathResolverProvider
12
- from orionis.luminate.providers.log.log_service_provider import LogServiceProvider
10
+ from orionis.luminate.providers.service_provider import ServiceProvider
13
11
 
14
12
  class Application(metaclass=SingletonMeta):
15
13
  """
@@ -50,6 +48,8 @@ class Application(metaclass=SingletonMeta):
50
48
  The dependency injection container for the application.
51
49
  """
52
50
  # Class attributes
51
+ self._before_boot_service_providers: list = []
52
+ self._after_boot_service_providers: list = []
53
53
  self._config: dict = {}
54
54
  self._commands: dict = {}
55
55
  self._environment_vars: dict = {}
@@ -58,7 +58,10 @@ class Application(metaclass=SingletonMeta):
58
58
  # Initialize the application container
59
59
  self.container = container
60
60
  self.container.instance(container)
61
- self.boot()
61
+ try:
62
+ self._boot()
63
+ except Exception as e:
64
+ Console.exception(e)
62
65
 
63
66
  def isBooted(self) -> bool:
64
67
  """
@@ -186,101 +189,118 @@ class Application(metaclass=SingletonMeta):
186
189
  """
187
190
  return self.container.forgetScopedInstances()
188
191
 
189
- def boot(self):
192
+ def _boot(self):
190
193
  """
191
- Bootstraps the application.
192
-
193
- This method is responsible for loading the environment, configuration, and core providers.
194
- It ensures the application is ready to handle requests or commands.
194
+ Bootstraps the application by loading environment configuration and core providers.
195
+ Notes
196
+ -----
197
+ The bootstrapping process involves several steps:
198
+ 1. Loading essential services.
199
+ 2. Executing pre-bootstrap provider hooks.
200
+ 3. Initializing core components.
201
+ 4. Executing post-bootstrap provider hooks.
202
+ 5. Loading command-line interface commands.
203
+ After these steps, the application is marked as booted.
195
204
  """
196
- # Load environment server
205
+ self._bootServices()
197
206
  self._beforeBootstrapProviders()
198
-
199
- # Dynamically load application configuration
200
207
  self._bootstraping()
201
-
202
- # Load core providers
203
208
  self._afterBootstrapProviders()
204
-
205
- # Set the booted flag to True
209
+ self._loadCommands()
206
210
  self._booted = True
207
211
 
208
- def _beforeBootstrapProviders(self):
212
+ def _bootServices(self):
209
213
  """
210
- Registers and boots essential providers required before bootstrapping.
214
+ Bootstraps the application services.
215
+
216
+ This method is responsible for loading the application's services. It reads all the
217
+ ServiceProviders from the Core and those defined by the developer. Then, it stores
218
+ in class dictionaries the services that need to be loaded before and after the Bootstrap.
219
+
220
+ Parameters
221
+ ----------
222
+ None
211
223
 
212
- This method ensures that environment variables are loaded and available
213
- for use during the bootstrapping process.
224
+ Returns
225
+ -------
226
+ None
214
227
  """
215
- # Load the path provider, which is responsible for resolving file paths.
216
- # Developers can interact with it through the facade "orionis.luminate.facades.files.paths.paths_facade.Paths".
217
- _path_provider = PathResolverProvider(app=self.container)
218
- _path_provider.register()
219
- _path_provider.boot()
228
+ services_bootstrapper_key = self.singleton(ServiceProvidersBootstrapper)
229
+ services_bootstrapper: ServiceProvidersBootstrapper = self.make(services_bootstrapper_key)
230
+ self._before_boot_service_providers = services_bootstrapper.getBeforeServiceProviders()
231
+ self._after_boot_service_providers = services_bootstrapper.getAfterServiceProviders()
220
232
 
221
- # Load the environment provider, which is responsible for returning values from the .env file.
222
- # This provider is essential as it must be loaded first to resolve environment variables.
223
- # Developers can interact with it through the facade "orionis.luminate.facades.environment.environment_facade.Env".
224
- _environment_provider = EnvironmentServiceProvider(app=self.container)
225
- _environment_provider.register()
226
- _environment_provider.boot()
233
+ def _beforeBootstrapProviders(self):
234
+ """
235
+ Loads and registers essential services before bootstrapping.
236
+
237
+ This method is responsible for loading and registering the services that are
238
+ required before the main bootstrapping process. It iterates through the list
239
+ of service providers that need to be initialized early, registers them, and
240
+ then boots them to make sure they are ready for use.
241
+ """
242
+ for service in self._before_boot_service_providers:
243
+ _environment_provider : ServiceProvider = service(app=self.container)
244
+ _environment_provider.register()
245
+ _environment_provider.boot()
227
246
 
228
247
  def _bootstraping(self):
229
248
  """
230
- Loads user-defined configuration, commands, and environment variables.
249
+ Loads configuration, commands, environment variables, and other bootstrappers.
231
250
 
232
- This method initializes the configuration, commands, and environment variables
233
- required for the application to function.
234
- """
235
- # This initializer loads the user-defined configuration from the "config" folder.
236
- # It extracts configuration values and stores them as class properties for future use.
237
- config_bootstrapper_key = self.singleton(ConfigBootstrapper)
238
- config_bootstrapper: ConfigBootstrapper = self.make(config_bootstrapper_key)
239
- self._config = config_bootstrapper.get()
240
-
241
- # This initializer dynamically searches for all user-defined commands in the "commands" folder,
242
- # both from the framework core and developer-defined commands.
243
- # It stores them in a dictionary and registers them in the container.
244
- commands_bootstrapper_key = self.singleton(CommandsBootstrapper)
245
- commands_bootstrapper: CommandsBootstrapper = self.make(commands_bootstrapper_key)
246
- self._commands = commands_bootstrapper.get()
247
- for command in self._commands.keys():
248
- _key_instance_container = self.bind(self._commands[command].get('concrete'))
249
- self.alias(alias=command, concrete=_key_instance_container)
251
+ This method initializes and updates the class dictionaries with the results
252
+ from various bootstrappers. It ensures that the application has the necessary
253
+ configuration, commands, and environment variables loaded before proceeding
254
+ with the rest of the bootstrapping process.
255
+ """
256
+ singletons_bootstrappers = [
257
+ (self._config, ConfigBootstrapper),
258
+ (self._commands, CommandsBootstrapper),
259
+ (self._environment_vars, EnvironmentBootstrapper)
260
+ ]
261
+ for bootstrapper in singletons_bootstrappers:
262
+ property_cls, bootstrapper_class = bootstrapper
263
+ bootstrapper_key = self.singleton(bootstrapper_class)
264
+ bootstrapper_instance : IBootstrapper = self.make(bootstrapper_key)
265
+ property_cls.update(bootstrapper_instance.get())
266
+
267
+ def _loadCommands(self):
268
+ """
269
+ Loads CLI commands, including both core system commands and those defined by the developer.
270
+
271
+ This method iterates over the commands stored in the `_commands` attribute, binds each command
272
+ to its corresponding concrete implementation, and registers the command alias.
250
273
 
251
- # Load environment variables and store them as class properties.
252
- # This is useful for executing future tasks conditioned on environment values.
253
- environment_bootstrapper_key = self.singleton(EnvironmentBootstrapper)
254
- environment_bootstrapper: EnvironmentBootstrapper = self.make(environment_bootstrapper_key)
255
- self._environment_vars = environment_bootstrapper.get()
274
+ Parameters
275
+ ----------
276
+ None
277
+
278
+ Returns
279
+ -------
280
+ None
281
+ """
282
+ for command in self._commands.keys():
283
+ data_command:dict = self._commands[command]
284
+ id_container_concrete = self.bind(data_command.get('concrete'))
285
+ self.alias(alias=command, concrete=id_container_concrete)
256
286
 
257
287
  def _afterBootstrapProviders(self):
258
288
  """
259
- Registers and boots additional providers after bootstrapping.
289
+ Loads services into the container that depend on the Bootstrap process being completed.
290
+
291
+ This method iterates over the list of service providers that need to be loaded after the
292
+ Bootstrap process. For each service provider, it creates an instance, registers it, and
293
+ then boots it.
260
294
 
261
- This method ensures that configuration and logging providers are loaded
262
- and available for use in the application.
263
- """
264
- # Load the configuration provider, which is responsible for returning configuration values.
265
- # Developers can interact with it through the facade "orionis.luminate.facades.config.config_facade.Config".
266
- _environment_provider = ConfigServiceProvider(app=self.container)
267
- _environment_provider.register()
268
- _environment_provider.boot()
269
-
270
- # Load the log provider based on the application configuration defined by the developer.
271
- # Developers can interact with it through the facade "orionis.luminate.facades.log.log_facade.Log".
272
- _log_provider = LogServiceProvider(app=self.container)
273
- _log_provider.register()
274
- _log_provider.boot()
275
-
276
- # Load the scheduler provider, which is responsible for managing scheduled tasks.
277
- # Developers can interact with it through the facade "orionis.luminate.facades.scheduler.scheduler_facade.Schedule".
278
- _schedule_provider = ScheduleServiceProvider(app=self.container)
279
- _schedule_provider.register()
280
- _schedule_provider.boot()
281
-
282
- # Load the commands provider, which is responsible for executing and managing CLI commands.
283
- # Developers can interact with it through the facade "orionis.luminate.facades.commands.commands_facade.Commands".
284
- _commands_provider = ReactorCommandsServiceProvider(app=self.container)
285
- _commands_provider.register()
286
- _commands_provider.boot()
295
+ Parameters
296
+ ----------
297
+ None
298
+
299
+ Returns
300
+ -------
301
+ None
302
+ """
303
+ for service in self._after_boot_service_providers:
304
+ _environment_provider : ServiceProvider = service(app=self.container)
305
+ _environment_provider.register()
306
+ _environment_provider.boot()
@@ -75,7 +75,7 @@ class Container(IContainer):
75
75
  If the service is already registered.
76
76
  """
77
77
  if self.has(obj):
78
- raise OrionisContainerValueError("The service is already registered in the container.")
78
+ raise OrionisContainerValueError(f"The service ({str(obj)}) is already registered in the container.")
79
79
 
80
80
  def _ensureIsCallable(self, concrete: Callable[..., Any]) -> None:
81
81
  """
@@ -2,7 +2,7 @@ import importlib
2
2
  import pathlib
3
3
  from dataclasses import asdict
4
4
  from typing import Any, Dict
5
- from orionis.contracts.bootstrap.i_config_bootstrapper import IConfigBootstrapper
5
+ from orionis.contracts.foundation.config.i_config_bootstrapper import IConfigBootstrapper
6
6
  from orionis.contracts.config.i_config import IConfig
7
7
  from orionis.luminate.foundation.exceptions.exception_bootstrapper import BootstrapRuntimeError
8
8
 
@@ -2,7 +2,7 @@ import pathlib
2
2
  import importlib
3
3
  import inspect
4
4
  from typing import Any, Callable, Dict, List
5
- from orionis.contracts.bootstrap.i_command_bootstrapper import ICommandsBootstrapper
5
+ from orionis.contracts.foundation.console.i_command_bootstrapper import ICommandsBootstrapper
6
6
  from orionis.luminate.foundation.exceptions.exception_bootstrapper import BootstrapRuntimeError
7
7
  from orionis.luminate.console.base.command import BaseCommand
8
8
 
@@ -1,5 +1,5 @@
1
1
  from typing import Dict
2
- from orionis.contracts.bootstrap.i_environment_bootstrapper import IEnvironmentBootstrapper
2
+ from orionis.contracts.foundation.environment.i_environment_bootstrapper import IEnvironmentBootstrapper
3
3
  from orionis.luminate.facades.app import app
4
4
  from orionis.luminate.services.environment.environment_service import EnvironmentService
5
5
 
@@ -0,0 +1,98 @@
1
+ import importlib
2
+ import inspect
3
+ import pathlib
4
+ from orionis.contracts.foundation.providers.i_service_providers_bootstrapper import IServiceProvidersBootstrapper
5
+ from orionis.luminate.container.container import Container
6
+ from orionis.luminate.foundation.exceptions.exception_bootstrapper import BootstrapRuntimeError
7
+ from orionis.luminate.providers.service_provider import ServiceProvider
8
+
9
+ class ServiceProvidersBootstrapper(IServiceProvidersBootstrapper):
10
+
11
+ def __init__(self, container : Container) -> None:
12
+ self._container = container
13
+ self._before_providers = []
14
+ self._after_providers = []
15
+ self._autoload()
16
+
17
+ def _autoload(self) -> None:
18
+ """
19
+ Scans the provider directories and loads provider classes.
20
+
21
+ This method searches for Python files in the specified directories, imports them,
22
+ and registers any class that inherits from `ServiceProvider`.
23
+
24
+ Raises
25
+ ------
26
+ BootstrapRuntimeError
27
+ If there is an error loading a module.
28
+ """
29
+
30
+ base_path = pathlib.Path.cwd()
31
+
32
+ command_dirs = [
33
+ pathlib.Path(__file__).resolve().parent.parent.parent / "providers"
34
+ ]
35
+
36
+ for cmd_dir in command_dirs:
37
+ if not cmd_dir.is_dir():
38
+ continue
39
+
40
+ for file_path in cmd_dir.rglob("*.py"):
41
+ if file_path.name == "__init__.py":
42
+ continue
43
+
44
+ module_path = ".".join(file_path.relative_to(base_path).with_suffix("").parts)
45
+
46
+ # Remove 'site-packages.' prefix if present
47
+ if 'site-packages.' in module_path:
48
+ module_path = module_path.split('site-packages.')[1]
49
+
50
+ try:
51
+ module = importlib.import_module(module_path.strip())
52
+
53
+ # Find and register command classes
54
+ for name, concrete in inspect.getmembers(module, inspect.isclass):
55
+ if issubclass(concrete, ServiceProvider) and concrete is not ServiceProvider:
56
+ self._register(concrete)
57
+ except Exception as e:
58
+ raise BootstrapRuntimeError(f"Error loading {module_path}") from e
59
+
60
+ def _register(self, concrete: ServiceProvider) -> None:
61
+ """
62
+ Validates and registers a service provider class.
63
+
64
+ This method ensures that the provided class is valid (inherits from `ServiceProvider`,
65
+ has a `register` and `boot` method) and registers it in the
66
+ `_service_providers` dictionary.
67
+
68
+ Parameters
69
+ ----------
70
+ concrete : ServiceProvider
71
+ The service provider class to register
72
+ """
73
+ if concrete.beferoBootstrapping:
74
+ self._before_providers.append(concrete)
75
+ else:
76
+ self._after_providers.append(concrete)
77
+
78
+ def getBeforeServiceProviders(self) -> list:
79
+ """
80
+ Retrieve the registered service providers.
81
+
82
+ Returns
83
+ -------
84
+ list
85
+ A list of registered service providers
86
+ """
87
+ return self._before_providers
88
+
89
+ def getAfterServiceProviders(self) -> list:
90
+ """
91
+ Retrieve the registered service providers.
92
+
93
+ Returns
94
+ -------
95
+ list
96
+ A list of registered service providers
97
+ """
98
+ return self._after_providers
@@ -4,15 +4,12 @@ from orionis.luminate.services.files.path_resolver_service import PathResolverSe
4
4
 
5
5
  class EnvironmentServiceProvider(ServiceProvider):
6
6
 
7
+ beferoBootstrapping = True
8
+
7
9
  def register(self) -> None:
8
10
  """
9
11
  Registers services or bindings into the given container.
10
12
  """
11
- self.beferoBootstrapping = True
12
-
13
- if not self.app.bound(PathResolverService):
14
- self.app.singleton(PathResolverService)
15
-
16
13
  self._container_id = self.app.singleton(EnvironmentService)
17
14
 
18
15
  def boot(self) -> None:
@@ -3,11 +3,12 @@ from orionis.luminate.services.files.path_resolver_service import PathResolverSe
3
3
 
4
4
  class PathResolverProvider(ServiceProvider):
5
5
 
6
+ beferoBootstrapping = True
7
+
6
8
  def register(self) -> None:
7
9
  """
8
10
  Registers services or bindings into the given container.
9
11
  """
10
- self.beferoBootstrapping = True
11
12
  self._container_id = self.app.singleton(PathResolverService)
12
13
 
13
14
  def boot(self) -> None:
@@ -11,6 +11,10 @@ class ServiceProvider(IServiceProvider):
11
11
  The container instance to be used by the service provider.
12
12
  """
13
13
 
14
+ # Indicates whether the service provider is a bootstrapper.
15
+ beferoBootstrapping = False
16
+
17
+
14
18
  def __init__(self, app : Container) -> None:
15
19
  """
16
20
  Initialize the service provider with the given container.
@@ -21,7 +25,6 @@ class ServiceProvider(IServiceProvider):
21
25
  The container instance to be used by the service provider.
22
26
  """
23
27
  self.app = app
24
- self.beferoBootstrapping = False
25
28
 
26
29
  def register(self) -> None:
27
30
  """
@@ -1,9 +1,9 @@
1
1
  import logging
2
2
  import os
3
+ from pathlib import Path
3
4
  import re
4
5
  from datetime import datetime
5
6
  from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler
6
- from pathlib import Path
7
7
  from orionis.contracts.services.log.i_log_service import ILogguerService
8
8
  from orionis.luminate.services.config.config_service import ConfigService
9
9
 
@@ -69,11 +69,16 @@ class LogguerService(ILogguerService):
69
69
  """
70
70
  try:
71
71
 
72
+ base = Path(self.config_service.get("logging.base_path", os.getcwd()))
73
+ default_path = base / "storage" / "logs"
74
+ default_path.mkdir(parents=True, exist_ok=True)
75
+ default_path = default_path / "orionis.log"
76
+
72
77
  handlers = []
73
78
 
74
79
  channel : str = self.config_service.get("logging.default")
75
80
  config : dict = self.config_service.get(f"logging.channels.{channel}", {})
76
- path : str = config.get("path", 'logs/orionis.log')
81
+ path : str = config.get("path", default_path)
77
82
  app_timezone : str = self.config_service.get("app.timezone", "UTC")
78
83
 
79
84
  if channel == "stack":
File without changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.103.0
3
+ Version: 0.110.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
@@ -12,9 +12,6 @@ orionis.egg-info/entry_points.txt
12
12
  orionis.egg-info/requires.txt
13
13
  orionis.egg-info/top_level.txt
14
14
  orionis/contracts/__init__.py
15
- orionis/contracts/bootstrap/i_command_bootstrapper.py
16
- orionis/contracts/bootstrap/i_config_bootstrapper.py
17
- orionis/contracts/bootstrap/i_environment_bootstrapper.py
18
15
  orionis/contracts/config/__init__.py
19
16
  orionis/contracts/config/i_config.py
20
17
  orionis/contracts/console/__init__.py
@@ -44,6 +41,16 @@ orionis/contracts/facades/log/__init__.py
44
41
  orionis/contracts/facades/log/i_log_facade.py
45
42
  orionis/contracts/facades/tests/__init__.py
46
43
  orionis/contracts/facades/tests/i_tests_facade.py
44
+ orionis/contracts/foundation/__init__.py
45
+ orionis/contracts/foundation/i_bootstraper.py
46
+ orionis/contracts/foundation/config/__init__.py
47
+ orionis/contracts/foundation/config/i_config_bootstrapper.py
48
+ orionis/contracts/foundation/console/__init__.py
49
+ orionis/contracts/foundation/console/i_command_bootstrapper.py
50
+ orionis/contracts/foundation/environment/__init__.py
51
+ orionis/contracts/foundation/environment/i_environment_bootstrapper.py
52
+ orionis/contracts/foundation/providers/__init__.py
53
+ orionis/contracts/foundation/providers/i_service_providers_bootstrapper.py
47
54
  orionis/contracts/installer/__init__.py
48
55
  orionis/contracts/installer/i_installer_manager.py
49
56
  orionis/contracts/installer/i_installer_output.py
File without changes
File without changes
@@ -1,10 +0,0 @@
1
- from orionis.luminate.container.container import Container
2
-
3
- class ServiceProvidersBootstrapper:
4
-
5
- def __init__(self, container : Container) -> None:
6
- self._container = container
7
- self._autoload()
8
-
9
- def _autoload(self) -> None:
10
- pass
File without changes
File without changes
File without changes
File without changes