orionis 0.30.0__tar.gz → 0.34.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 (162) hide show
  1. {orionis-0.30.0/orionis.egg-info → orionis-0.34.0}/PKG-INFO +1 -1
  2. {orionis-0.30.0 → orionis-0.34.0}/orionis/framework.py +1 -1
  3. orionis-0.34.0/orionis/luminate/app.py +26 -0
  4. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/output/console.py +10 -6
  5. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/container/container.py +22 -19
  6. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/orionis.py +4 -3
  7. orionis-0.34.0/orionis/luminate/patterns/singleton.py +44 -0
  8. {orionis-0.30.0 → orionis-0.34.0/orionis.egg-info}/PKG-INFO +1 -1
  9. {orionis-0.30.0 → orionis-0.34.0}/orionis.egg-info/SOURCES.txt +1 -0
  10. orionis-0.30.0/orionis/luminate/app.py +0 -36
  11. {orionis-0.30.0 → orionis-0.34.0}/LICENCE +0 -0
  12. {orionis-0.30.0 → orionis-0.34.0}/MANIFEST.in +0 -0
  13. {orionis-0.30.0 → orionis-0.34.0}/README.md +0 -0
  14. {orionis-0.30.0 → orionis-0.34.0}/orionis/__init__.py +0 -0
  15. {orionis-0.30.0 → orionis-0.34.0}/orionis/cli_manager.py +0 -0
  16. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/__init__.py +0 -0
  17. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/bootstrap/__init__.py +0 -0
  18. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/bootstrap/cli_exception.py +0 -0
  19. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/bootstrap/commands/bootstrapper.py +0 -0
  20. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/bootstrap/commands/register.py +0 -0
  21. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/bootstrap/config/__init__.py +0 -0
  22. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/bootstrap/config/bootstrapper.py +0 -0
  23. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/bootstrap/config/parser.py +0 -0
  24. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/bootstrap/config/register.py +0 -0
  25. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/cache/__init__.py +0 -0
  26. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/cache/app/__init__.py +0 -0
  27. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/cache/app/config.py +0 -0
  28. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/cache/console/__init__.py +0 -0
  29. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/cache/console/commands.py +0 -0
  30. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/__init__.py +0 -0
  31. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/dataclass/__init__.py +0 -0
  32. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/dataclass/app.py +0 -0
  33. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/dataclass/auth.py +0 -0
  34. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/dataclass/cache.py +0 -0
  35. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/dataclass/cors.py +0 -0
  36. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/dataclass/database.py +0 -0
  37. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/dataclass/filesystems.py +0 -0
  38. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/dataclass/logging.py +0 -0
  39. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/dataclass/mail.py +0 -0
  40. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/dataclass/queue.py +0 -0
  41. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/dataclass/session.py +0 -0
  42. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/config/environment.py +0 -0
  43. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/__init__.py +0 -0
  44. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/base/__init__.py +0 -0
  45. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/base/command.py +0 -0
  46. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/cache.py +0 -0
  47. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/command.py +0 -0
  48. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/command_filter.py +0 -0
  49. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/commands/__init__.py +0 -0
  50. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
  51. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/commands/help.py +0 -0
  52. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
  53. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/commands/tests.py +0 -0
  54. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/commands/version.py +0 -0
  55. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/exceptions/__init__.py +0 -0
  56. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
  57. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/kernel.py +0 -0
  58. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/output/__init__.py +0 -0
  59. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/output/executor.py +0 -0
  60. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/output/progress_bar.py +0 -0
  61. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/output/styles.py +0 -0
  62. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/parser.py +0 -0
  63. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/runner.py +0 -0
  64. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/scripts/__init__.py +0 -0
  65. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/scripts/management.py +0 -0
  66. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/tasks/__init__.py +0 -0
  67. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/console/tasks/scheduler.py +0 -0
  68. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/container/exception.py +0 -0
  69. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/container/types.py +0 -0
  70. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/__init__.py +0 -0
  71. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/bootstrap/commands/bootstrapper_interface.py +0 -0
  72. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/bootstrap/commands/register_interface.py +0 -0
  73. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/bootstrap/config/bootstrapper_interface.py +0 -0
  74. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/bootstrap/config/parser_interface.py +0 -0
  75. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/bootstrap/config/register_interface.py +0 -0
  76. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/cache/__init__.py +0 -0
  77. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/cache/app/config_interface.py +0 -0
  78. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/cache/console/commands_interface.py +0 -0
  79. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/config/__init__.py +0 -0
  80. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/config/config_interface.py +0 -0
  81. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/config/environment_interface.py +0 -0
  82. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/__init__.py +0 -0
  83. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/base/base_command_interface.py +0 -0
  84. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/command_filter_interface.py +0 -0
  85. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/command_interface.py +0 -0
  86. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/kernel_interface.py +0 -0
  87. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/output/console_interface.py +0 -0
  88. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/output/executor_interface.py +0 -0
  89. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/output/progress_bar_interface.py +0 -0
  90. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/parser_interface.py +0 -0
  91. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/runner_interface.py +0 -0
  92. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/scripts/management_interface.py +0 -0
  93. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/task_manager_interface.py +0 -0
  94. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/console/tasks/schedule_interface.py +0 -0
  95. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/container/container_interface.py +0 -0
  96. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/container/types_interface.py +0 -0
  97. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/facades/__init__.py +0 -0
  98. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/facades/env_interface.py +0 -0
  99. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/facades/log_interface.py +0 -0
  100. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/facades/paths_interface.py +0 -0
  101. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/facades/tests_interface.py +0 -0
  102. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/files/__init__.py +0 -0
  103. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/files/paths_interface.py +0 -0
  104. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/installer/__init__.py +0 -0
  105. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/installer/output_interface.py +0 -0
  106. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/installer/setup_interface.py +0 -0
  107. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/installer/upgrade_interface.py +0 -0
  108. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/log/__init__.py +0 -0
  109. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/log/logger_interface.py +0 -0
  110. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/pipelines/cli_pipeline_interface.py +0 -0
  111. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/publisher/__init__.py +0 -0
  112. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/publisher/pypi_publisher_interface.py +0 -0
  113. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/test/__init__.py +0 -0
  114. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/test/unit_test_interface.py +0 -0
  115. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/tools/__init__.py +0 -0
  116. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/tools/exception_to_dict_interface.py +0 -0
  117. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/tools/reflection_interface.py +0 -0
  118. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/contracts/tools/std_interface.py +0 -0
  119. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/facades/__init__.py +0 -0
  120. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/facades/environment.py +0 -0
  121. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/facades/log.py +0 -0
  122. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/facades/paths.py +0 -0
  123. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/facades/tests.py +0 -0
  124. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/files/__init__.py +0 -0
  125. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/files/paths.py +0 -0
  126. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/installer/__init__.py +0 -0
  127. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/installer/icon.ascii +0 -0
  128. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/installer/info.ascii +0 -0
  129. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/installer/output.py +0 -0
  130. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/installer/setup.py +0 -0
  131. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/installer/upgrade.py +0 -0
  132. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/log/__init__.py +0 -0
  133. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/log/logger.py +0 -0
  134. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/pipelines/__init__.py +0 -0
  135. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/pipelines/cli_pipeline.py +0 -0
  136. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/publisher/__init__.py +0 -0
  137. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/publisher/pypi.py +0 -0
  138. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/static/bg/galaxy.jpg +0 -0
  139. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/static/favicon/OrionisFrameworkFavicon.png +0 -0
  140. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/static/logos/OrionisFramework.jpg +0 -0
  141. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/static/logos/OrionisFramework.png +0 -0
  142. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/static/logos/OrionisFramework.psd +0 -0
  143. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/static/logos/OrionisFramework2.png +0 -0
  144. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/static/logos/OrionisFramework3.png +0 -0
  145. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/test/__init__.py +0 -0
  146. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/test/exception.py +0 -0
  147. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/test/unit_test.py +0 -0
  148. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/tools/__init__.py +0 -0
  149. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/tools/dot_dict.py +0 -0
  150. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/tools/exception_to_dict.py +0 -0
  151. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/tools/reflection.py +0 -0
  152. {orionis-0.30.0 → orionis-0.34.0}/orionis/luminate/tools/std.py +0 -0
  153. {orionis-0.30.0 → orionis-0.34.0}/orionis.egg-info/dependency_links.txt +0 -0
  154. {orionis-0.30.0 → orionis-0.34.0}/orionis.egg-info/entry_points.txt +0 -0
  155. {orionis-0.30.0 → orionis-0.34.0}/orionis.egg-info/requires.txt +0 -0
  156. {orionis-0.30.0 → orionis-0.34.0}/orionis.egg-info/top_level.txt +0 -0
  157. {orionis-0.30.0 → orionis-0.34.0}/setup.cfg +0 -0
  158. {orionis-0.30.0 → orionis-0.34.0}/setup.py +0 -0
  159. {orionis-0.30.0 → orionis-0.34.0}/tests/__init__.py +0 -0
  160. {orionis-0.30.0 → orionis-0.34.0}/tests/tools/__init__.py +0 -0
  161. {orionis-0.30.0 → orionis-0.34.0}/tests/tools/class_example.py +0 -0
  162. {orionis-0.30.0 → orionis-0.34.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.30.0
3
+ Version: 0.34.0
4
4
  Summary: Orionis Framework – Elegant, Fast, and Powerful.
5
5
  Home-page: https://github.com/orionis-framework/framework
6
6
  Author: Raul Mauricio Uñate Castro
@@ -5,7 +5,7 @@
5
5
  NAME = "orionis"
6
6
 
7
7
  # Current version of the framework
8
- VERSION = "0.30.0"
8
+ VERSION = "0.34.0"
9
9
 
10
10
  # Full name of the author or maintainer of the project
11
11
  AUTHOR = "Raul Mauricio Uñate Castro"
@@ -0,0 +1,26 @@
1
+ from orionis.luminate.container.container import Container
2
+ from orionis.luminate.cache.app.config import CacheConfig
3
+ from orionis.luminate.bootstrap.config.register import Register
4
+ from orionis.luminate.bootstrap.config.bootstrapper import Bootstrapper
5
+ from orionis.luminate.patterns.singleton import SingletonMeta
6
+
7
+ class App(metaclass=SingletonMeta):
8
+
9
+ def __init__(self):
10
+ self.container = Container()
11
+
12
+ def start(self):
13
+ self._register_config_providers()
14
+ self._resolve_config_providers()
15
+
16
+ def finish(self):
17
+ self.container = None
18
+
19
+ def _register_config_providers(self):
20
+ self.container.singleton(CacheConfig)
21
+ self.container.singleton(Register)
22
+ self.container.singleton(Bootstrapper)
23
+
24
+ def _resolve_config_providers(self):
25
+ self.container.make(Register)
26
+ self.container.make(Bootstrapper)
@@ -442,15 +442,17 @@ class Console(IConsole):
442
442
  """
443
443
 
444
444
  errors = ExceptionsToDict.parse(e)
445
- error_type = errors.get("error_type")
446
- error_message = errors.get("error_message")
445
+ error_type = errors.get("error_type").split(".")[-1]
446
+ error_message = errors.get("error_message").replace(error_type, "").replace("[]", "").strip()
447
447
  stack_trace = errors.get("stack_trace")
448
448
 
449
449
  # Format the output with a more eye-catching appearance
450
- message = f"{ANSIColors.BG_ERROR.value}{ANSIColors.TEXT_WHITE.value} [{error_type}] {ANSIColors.TEXT_RESET.value}: {ANSIColors.TEXT_WARNING.value}{error_message}{ANSIColors.TEXT_RESET.value}"
451
- print("-" * len(f" [{error_type}] : {error_message}")) # separator line
450
+ message = f"{ANSIColors.BG_ERROR.value}{ANSIColors.TEXT_WHITE.value}[{error_type}]{ANSIColors.TEXT_RESET.value}: {ANSIColors.TEXT_WARNING.value}{error_message}{ANSIColors.TEXT_RESET.value}"
451
+ print("" * len(f" [{error_type}] : {error_message}"))
452
452
  print(message)
453
453
 
454
+ real_count = len(stack_trace)
455
+ count_error = real_count
454
456
  for frame in stack_trace:
455
457
  filename = frame["filename"]
456
458
  lineno = frame["lineno"]
@@ -458,6 +460,8 @@ class Console(IConsole):
458
460
  line = frame["line"]
459
461
 
460
462
  # Print the stack trace with enhanced styling
461
- print(f"{ANSIColors.CYAN.value}{ANSIColors.DIM.value} {ANSIColors.MAGENTA.value}{ANSIColors.TEXT_BOLD.value}{filename}:{ANSIColors.TEXT_BOLD.value}{lineno}{ANSIColors.TEXT_RESET.value} / {ANSIColors.DIM.value}{ANSIColors.ITALIC.value}{ANSIColors.TEXT_WARNING.value}{name}{ANSIColors.TEXT_RESET.value} / {ANSIColors.CYAN.value}{line}{ANSIColors.TEXT_RESET.value}")
463
+ print(f"{ANSIColors.TEXT_MUTED.value}Trace Call ({count_error}/{real_count}){ANSIColors.TEXT_RESET.value} - {ANSIColors.TEXT_WHITE.value}{filename}:{lineno}{ANSIColors.TEXT_RESET.value}")
464
+ print(f" {ANSIColors.DIM.value}{ANSIColors.ITALIC.value}{ANSIColors.TEXT_WARNING.value}{name}{ANSIColors.TEXT_RESET.value} : {ANSIColors.CYAN.value}{line}{ANSIColors.TEXT_RESET.value}")
465
+ count_error -= 1
462
466
 
463
- print("-" * len(f" [{error_type}] : {error_message}"))
467
+ print("" * len(f" [{error_type}] : {error_message}"))
@@ -5,6 +5,7 @@ from typing import Callable, Any, Dict
5
5
  from orionis.luminate.container.exception import OrionisContainerException, OrionisContainerValueError, OrionisContainerTypeError
6
6
  from orionis.luminate.container.types import Types
7
7
  from orionis.luminate.contracts.container.container_interface import IContainer
8
+ from orionis.luminate.patterns.singleton import SingletonMeta
8
9
 
9
10
  BINDING = 'binding'
10
11
  TRANSIENT = 'transient'
@@ -12,7 +13,7 @@ SINGLETON = 'singleton'
12
13
  SCOPED = 'scoped'
13
14
  INSTANCE = 'instance'
14
15
 
15
- class Container(IContainer):
16
+ class Container(IContainer, metaclass=SingletonMeta):
16
17
  """
17
18
  Service container and dependency injection manager.
18
19
 
@@ -20,23 +21,15 @@ class Container(IContainer):
20
21
  and different lifecycle types such as transient, singleton, and scoped.
21
22
  """
22
23
 
23
- _instance = None
24
- _lock = Lock()
25
-
26
- def __new__(cls):
27
- if cls._instance is None:
28
- with cls._lock:
29
- if cls._instance is None:
30
- cls._instance = super().__new__(cls)
31
- cls._instance._bindings = {}
32
- cls._instance._transients = {}
33
- cls._instance._singletons = {}
34
- cls._instance._scoped_services = {}
35
- cls._instance._instances = {}
36
- cls._instance._aliases = {}
37
- cls._instance._scoped_instances = {}
38
- cls._instance._validate_types = Types()
39
- return cls._instance
24
+ def __init__(self):
25
+ self._bindings = {}
26
+ self._transients = {}
27
+ self._singletons = {}
28
+ self._scoped_services = {}
29
+ self._instances = {}
30
+ self._aliases = {}
31
+ self._scoped_instances = {}
32
+ self._validate_types = Types()
40
33
 
41
34
  def _newRequest(self) -> None:
42
35
  """
@@ -312,7 +305,17 @@ class Container(IContainer):
312
305
  OrionisContainerException
313
306
  If the service is not found in the container.
314
307
  """
315
- key = self._aliases.get(abstract, abstract)
308
+
309
+ key = abstract
310
+
311
+ if isinstance(abstract, str):
312
+ key = self._aliases.get(key, key)
313
+
314
+ if callable(abstract):
315
+ key = f"{abstract.__module__}.{abstract.__name__}"
316
+
317
+ if isinstance(abstract, object) and abstract.__class__.__module__ not in {'builtins', 'abc'}:
318
+ key = f"{abstract.__class__.__module__}.{abstract.__class__.__name__}"
316
319
 
317
320
  if key in self._instances:
318
321
  return self._instances[key]['instance']
@@ -1,7 +1,8 @@
1
1
  import traceback
2
2
  from orionis.luminate.app import App
3
+ from orionis.luminate.patterns.singleton import SingletonMeta
3
4
 
4
- class OrionisContext:
5
+ class Orionis(metaclass=SingletonMeta):
5
6
  """
6
7
  Context manager for the Orionis application that handles startup and cleanup.
7
8
 
@@ -87,7 +88,7 @@ class OrionisContext:
87
88
  self.error_info = (exc_val, traceback.format_exc())
88
89
  return False
89
90
 
90
- def is_active(self):
91
+ def isStarted(self):
91
92
  """
92
93
  Check if the application is currently active.
93
94
 
@@ -98,7 +99,7 @@ class OrionisContext:
98
99
  """
99
100
  return self.is_started
100
101
 
101
- def get_error(self):
102
+ def getError(self):
102
103
  """
103
104
  Retrieve the stored error information.
104
105
 
@@ -0,0 +1,44 @@
1
+ import threading
2
+
3
+ class SingletonMeta(type):
4
+ """
5
+ A thread-safe metaclass for implementing the Singleton pattern.
6
+
7
+ This metaclass ensures that only one instance of a class is created,
8
+ even in a multithreaded environment, by using a lock to synchronize
9
+ instance creation.
10
+
11
+ Attributes
12
+ ----------
13
+ _instances : dict
14
+ A dictionary that holds the single instances of the classes using this metaclass.
15
+ _lock : threading.Lock
16
+ A lock to ensure thread-safe instance creation.
17
+ """
18
+ _instances = {}
19
+ _lock = threading.Lock()
20
+
21
+ def __call__(cls, *args, **kwargs):
22
+ """
23
+ Return the singleton instance of the class in a thread-safe manner.
24
+
25
+ If an instance does not already exist, it is created under the protection
26
+ of a lock; otherwise, the existing instance is returned.
27
+
28
+ Parameters
29
+ ----------
30
+ *args : list
31
+ Positional arguments for the class constructor.
32
+ **kwargs : dict
33
+ Keyword arguments for the class constructor.
34
+
35
+ Returns
36
+ -------
37
+ object
38
+ The singleton instance of the class.
39
+ """
40
+ if cls not in cls._instances:
41
+ with cls._lock:
42
+ if cls not in cls._instances:
43
+ cls._instances[cls] = super().__call__(*args, **kwargs)
44
+ return cls._instances[cls]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.30.0
3
+ Version: 0.34.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
@@ -133,6 +133,7 @@ orionis/luminate/installer/setup.py
133
133
  orionis/luminate/installer/upgrade.py
134
134
  orionis/luminate/log/__init__.py
135
135
  orionis/luminate/log/logger.py
136
+ orionis/luminate/patterns/singleton.py
136
137
  orionis/luminate/pipelines/__init__.py
137
138
  orionis/luminate/pipelines/cli_pipeline.py
138
139
  orionis/luminate/publisher/__init__.py
@@ -1,36 +0,0 @@
1
- from orionis.luminate.container.container import Container
2
-
3
- class App:
4
-
5
- def __init__(self):
6
- # Inicializa el contenedor de dependencias
7
- self.container = Container()
8
-
9
- def start(self):
10
- pass
11
-
12
- def finish(self):
13
- pass
14
-
15
- def in_context(self):
16
- """Método placeholder para gestionar el contexto de la aplicación"""
17
- pass
18
-
19
- def register_service_providers(self):
20
- """
21
- Registra los proveedores de servicios en el contenedor.
22
- Carga y registra los servicios de forma perezosa.
23
- """
24
- # Importación perezosa de los servicios
25
- from orionis.luminate.cache.app.config import CacheConfig
26
- from orionis.luminate.bootstrap.config.register import Register
27
- from orionis.luminate.bootstrap.config.bootstrapper import Bootstrapper
28
-
29
- # Registro de servicios esenciales en el contenedor
30
- self.container.singleton(CacheConfig) # Configuración del cache
31
- self.container.singleton(Register) # Registro de la configuración de la app
32
- self.container.singleton(Bootstrapper) # Inicialización del sistema
33
-
34
- def load_config(self):
35
- """Método placeholder para cargar la configuración de la aplicación"""
36
- pass
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes