orionis 0.28.0__tar.gz → 0.32.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 (161) hide show
  1. {orionis-0.28.0/orionis.egg-info → orionis-0.32.0}/PKG-INFO +1 -1
  2. {orionis-0.28.0 → orionis-0.32.0}/orionis/framework.py +1 -1
  3. orionis-0.32.0/orionis/luminate/app.py +25 -0
  4. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/output/console.py +41 -0
  5. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/output/styles.py +4 -0
  6. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/container/container.py +11 -1
  7. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/output/console_interface.py +16 -0
  8. orionis-0.32.0/orionis/luminate/contracts/tools/exception_to_dict_interface.py +35 -0
  9. orionis-0.32.0/orionis/luminate/orionis.py +111 -0
  10. orionis-0.32.0/orionis/luminate/tools/exception_to_dict.py +52 -0
  11. {orionis-0.28.0 → orionis-0.32.0/orionis.egg-info}/PKG-INFO +1 -1
  12. {orionis-0.28.0 → orionis-0.32.0}/orionis.egg-info/SOURCES.txt +3 -0
  13. orionis-0.28.0/orionis/luminate/app.py +0 -6
  14. {orionis-0.28.0 → orionis-0.32.0}/LICENCE +0 -0
  15. {orionis-0.28.0 → orionis-0.32.0}/MANIFEST.in +0 -0
  16. {orionis-0.28.0 → orionis-0.32.0}/README.md +0 -0
  17. {orionis-0.28.0 → orionis-0.32.0}/orionis/__init__.py +0 -0
  18. {orionis-0.28.0 → orionis-0.32.0}/orionis/cli_manager.py +0 -0
  19. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/__init__.py +0 -0
  20. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/bootstrap/__init__.py +0 -0
  21. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/bootstrap/cli_exception.py +0 -0
  22. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/bootstrap/commands/bootstrapper.py +0 -0
  23. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/bootstrap/commands/register.py +0 -0
  24. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/bootstrap/config/__init__.py +0 -0
  25. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/bootstrap/config/bootstrapper.py +0 -0
  26. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/bootstrap/config/parser.py +0 -0
  27. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/bootstrap/config/register.py +0 -0
  28. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/cache/__init__.py +0 -0
  29. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/cache/app/__init__.py +0 -0
  30. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/cache/app/config.py +0 -0
  31. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/cache/console/__init__.py +0 -0
  32. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/cache/console/commands.py +0 -0
  33. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/__init__.py +0 -0
  34. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/dataclass/__init__.py +0 -0
  35. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/dataclass/app.py +0 -0
  36. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/dataclass/auth.py +0 -0
  37. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/dataclass/cache.py +0 -0
  38. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/dataclass/cors.py +0 -0
  39. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/dataclass/database.py +0 -0
  40. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/dataclass/filesystems.py +0 -0
  41. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/dataclass/logging.py +0 -0
  42. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/dataclass/mail.py +0 -0
  43. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/dataclass/queue.py +0 -0
  44. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/dataclass/session.py +0 -0
  45. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/config/environment.py +0 -0
  46. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/__init__.py +0 -0
  47. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/base/__init__.py +0 -0
  48. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/base/command.py +0 -0
  49. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/cache.py +0 -0
  50. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/command.py +0 -0
  51. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/command_filter.py +0 -0
  52. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/commands/__init__.py +0 -0
  53. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
  54. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/commands/help.py +0 -0
  55. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
  56. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/commands/tests.py +0 -0
  57. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/commands/version.py +0 -0
  58. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/exceptions/__init__.py +0 -0
  59. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
  60. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/kernel.py +0 -0
  61. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/output/__init__.py +0 -0
  62. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/output/executor.py +0 -0
  63. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/output/progress_bar.py +0 -0
  64. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/parser.py +0 -0
  65. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/runner.py +0 -0
  66. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/scripts/__init__.py +0 -0
  67. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/scripts/management.py +0 -0
  68. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/tasks/__init__.py +0 -0
  69. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/console/tasks/scheduler.py +0 -0
  70. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/container/exception.py +0 -0
  71. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/container/types.py +0 -0
  72. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/__init__.py +0 -0
  73. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/bootstrap/commands/bootstrapper_interface.py +0 -0
  74. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/bootstrap/commands/register_interface.py +0 -0
  75. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/bootstrap/config/bootstrapper_interface.py +0 -0
  76. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/bootstrap/config/parser_interface.py +0 -0
  77. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/bootstrap/config/register_interface.py +0 -0
  78. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/cache/__init__.py +0 -0
  79. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/cache/app/config_interface.py +0 -0
  80. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/cache/console/commands_interface.py +0 -0
  81. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/config/__init__.py +0 -0
  82. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/config/config_interface.py +0 -0
  83. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/config/environment_interface.py +0 -0
  84. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/__init__.py +0 -0
  85. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/base/base_command_interface.py +0 -0
  86. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/command_filter_interface.py +0 -0
  87. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/command_interface.py +0 -0
  88. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/kernel_interface.py +0 -0
  89. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/output/executor_interface.py +0 -0
  90. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/output/progress_bar_interface.py +0 -0
  91. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/parser_interface.py +0 -0
  92. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/runner_interface.py +0 -0
  93. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/scripts/management_interface.py +0 -0
  94. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/task_manager_interface.py +0 -0
  95. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/console/tasks/schedule_interface.py +0 -0
  96. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/container/container_interface.py +0 -0
  97. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/container/types_interface.py +0 -0
  98. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/facades/__init__.py +0 -0
  99. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/facades/env_interface.py +0 -0
  100. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/facades/log_interface.py +0 -0
  101. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/facades/paths_interface.py +0 -0
  102. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/facades/tests_interface.py +0 -0
  103. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/files/__init__.py +0 -0
  104. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/files/paths_interface.py +0 -0
  105. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/installer/__init__.py +0 -0
  106. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/installer/output_interface.py +0 -0
  107. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/installer/setup_interface.py +0 -0
  108. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/installer/upgrade_interface.py +0 -0
  109. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/log/__init__.py +0 -0
  110. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/log/logger_interface.py +0 -0
  111. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/pipelines/cli_pipeline_interface.py +0 -0
  112. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/publisher/__init__.py +0 -0
  113. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/publisher/pypi_publisher_interface.py +0 -0
  114. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/test/__init__.py +0 -0
  115. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/test/unit_test_interface.py +0 -0
  116. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/tools/__init__.py +0 -0
  117. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/tools/reflection_interface.py +0 -0
  118. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/contracts/tools/std_interface.py +0 -0
  119. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/facades/__init__.py +0 -0
  120. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/facades/environment.py +0 -0
  121. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/facades/log.py +0 -0
  122. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/facades/paths.py +0 -0
  123. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/facades/tests.py +0 -0
  124. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/files/__init__.py +0 -0
  125. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/files/paths.py +0 -0
  126. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/installer/__init__.py +0 -0
  127. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/installer/icon.ascii +0 -0
  128. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/installer/info.ascii +0 -0
  129. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/installer/output.py +0 -0
  130. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/installer/setup.py +0 -0
  131. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/installer/upgrade.py +0 -0
  132. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/log/__init__.py +0 -0
  133. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/log/logger.py +0 -0
  134. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/pipelines/__init__.py +0 -0
  135. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/pipelines/cli_pipeline.py +0 -0
  136. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/publisher/__init__.py +0 -0
  137. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/publisher/pypi.py +0 -0
  138. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/static/bg/galaxy.jpg +0 -0
  139. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/static/favicon/OrionisFrameworkFavicon.png +0 -0
  140. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/static/logos/OrionisFramework.jpg +0 -0
  141. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/static/logos/OrionisFramework.png +0 -0
  142. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/static/logos/OrionisFramework.psd +0 -0
  143. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/static/logos/OrionisFramework2.png +0 -0
  144. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/static/logos/OrionisFramework3.png +0 -0
  145. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/test/__init__.py +0 -0
  146. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/test/exception.py +0 -0
  147. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/test/unit_test.py +0 -0
  148. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/tools/__init__.py +0 -0
  149. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/tools/dot_dict.py +0 -0
  150. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/tools/reflection.py +0 -0
  151. {orionis-0.28.0 → orionis-0.32.0}/orionis/luminate/tools/std.py +0 -0
  152. {orionis-0.28.0 → orionis-0.32.0}/orionis.egg-info/dependency_links.txt +0 -0
  153. {orionis-0.28.0 → orionis-0.32.0}/orionis.egg-info/entry_points.txt +0 -0
  154. {orionis-0.28.0 → orionis-0.32.0}/orionis.egg-info/requires.txt +0 -0
  155. {orionis-0.28.0 → orionis-0.32.0}/orionis.egg-info/top_level.txt +0 -0
  156. {orionis-0.28.0 → orionis-0.32.0}/setup.cfg +0 -0
  157. {orionis-0.28.0 → orionis-0.32.0}/setup.py +0 -0
  158. {orionis-0.28.0 → orionis-0.32.0}/tests/__init__.py +0 -0
  159. {orionis-0.28.0 → orionis-0.32.0}/tests/tools/__init__.py +0 -0
  160. {orionis-0.28.0 → orionis-0.32.0}/tests/tools/class_example.py +0 -0
  161. {orionis-0.28.0 → orionis-0.32.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.28.0
3
+ Version: 0.32.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.28.0"
8
+ VERSION = "0.32.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,25 @@
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
+
6
+ class App:
7
+
8
+ def __init__(self):
9
+ self.container = Container()
10
+
11
+ def start(self):
12
+ self._register_config_providers()
13
+ self._resolve_config_providers()
14
+
15
+ def finish(self):
16
+ self.container = None
17
+
18
+ def _register_config_providers(self):
19
+ self.container.singleton(CacheConfig)
20
+ self.container.singleton(Register)
21
+ self.container.singleton(Bootstrapper)
22
+
23
+ def _resolve_config_providers(self):
24
+ self.container.make(Register)
25
+ self.container.make(Bootstrapper)
@@ -4,6 +4,7 @@ import getpass
4
4
  import datetime
5
5
  from orionis.luminate.console.output.styles import ANSIColors
6
6
  from orionis.luminate.contracts.console.output.console_interface import IConsole
7
+ from orionis.luminate.tools.exception_to_dict import ExceptionsToDict
7
8
 
8
9
  class Console(IConsole):
9
10
  """
@@ -424,3 +425,43 @@ class Console(IConsole):
424
425
  answer = input("Please select a valid number: ").strip()
425
426
 
426
427
  return choices[int(answer) - 1]
428
+
429
+ @staticmethod
430
+ def exception(e) -> None:
431
+ """
432
+ Prints an exception message with detailed information.
433
+
434
+ Parameters
435
+ ----------
436
+ exception : Exception
437
+ The exception to print.
438
+
439
+ Notes
440
+ -----
441
+ This method prints the exception type, message, and a detailed stack trace.
442
+ """
443
+
444
+ errors = ExceptionsToDict.parse(e)
445
+ error_type = errors.get("error_type").split(".")[-1]
446
+ error_message = errors.get("error_message").replace(error_type, "").replace("[]", "").strip()
447
+ stack_trace = errors.get("stack_trace")
448
+
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}"))
452
+ print(message)
453
+
454
+ real_count = len(stack_trace)
455
+ count_error = real_count
456
+ for frame in stack_trace:
457
+ filename = frame["filename"]
458
+ lineno = frame["lineno"]
459
+ name = frame["name"]
460
+ line = frame["line"]
461
+
462
+ # Print the stack trace with enhanced styling
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
466
+
467
+ print("▬" * len(f" [{error_type}] : {error_message}"))
@@ -93,3 +93,7 @@ class ANSIColors(Enum):
93
93
  TEXT_BOLD = "\033[1m" # Bold text
94
94
  TEXT_STYLE_UNDERLINE = '\033[4m' # Underline text
95
95
  TEXT_RESET = "\033[0m" # Reset styles
96
+ CYAN = "\033[36m"
97
+ DIM = "\033[2m"
98
+ MAGENTA = "\033[35m"
99
+ ITALIC = "\033[3m"
@@ -312,7 +312,17 @@ class Container(IContainer):
312
312
  OrionisContainerException
313
313
  If the service is not found in the container.
314
314
  """
315
- key = self._aliases.get(abstract, abstract)
315
+
316
+ key = abstract
317
+
318
+ if isinstance(abstract, str):
319
+ key = self._aliases.get(key, key)
320
+
321
+ if callable(abstract):
322
+ key = f"{abstract.__module__}.{abstract.__name__}"
323
+
324
+ if isinstance(abstract, object) and abstract.__class__.__module__ not in {'builtins', 'abc'}:
325
+ key = f"{abstract.__class__.__module__}.{abstract.__class__.__name__}"
316
326
 
317
327
  if key in self._instances:
318
328
  return self._instances[key]['instance']
@@ -302,4 +302,20 @@ class IConsole(ABC):
302
302
  one by entering the corresponding number. If an invalid input is provided,
303
303
  the user will be repeatedly prompted until a valid choice is made.
304
304
  """
305
+ pass
306
+
307
+ @abstractmethod
308
+ def exception(e) -> None:
309
+ """
310
+ Prints an exception message with detailed information.
311
+
312
+ Parameters
313
+ ----------
314
+ exception : Exception
315
+ The exception to print.
316
+
317
+ Notes
318
+ -----
319
+ This method prints the exception type, message, and a detailed stack trace.
320
+ """
305
321
  pass
@@ -0,0 +1,35 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+ class IExceptionsToDict(ABC):
4
+ """
5
+ A utility class to parse an exception and convert it into a structured dictionary.
6
+
7
+ Methods
8
+ -------
9
+ parse(exception: Exception) -> dict
10
+ Converts an exception into a dictionary containing the error type, message,
11
+ and stack trace information.
12
+ """
13
+
14
+ @abstractmethod
15
+ def parse(exception):
16
+ """
17
+ Parse the provided exception and serialize it into a dictionary format.
18
+
19
+ Parameters
20
+ ----------
21
+ exception : Exception
22
+ The exception object to be serialized.
23
+
24
+ Returns
25
+ -------
26
+ dict
27
+ A dictionary containing the exception details such as error type, message,
28
+ and the stack trace.
29
+
30
+ Notes
31
+ -----
32
+ - Uses `traceback.TracebackException.from_exception()` to extract detailed traceback information.
33
+ - The stack trace includes filenames, line numbers, function names, and the exact line of code.
34
+ """
35
+ pass
@@ -0,0 +1,111 @@
1
+ import traceback
2
+ from orionis.luminate.app import App
3
+
4
+ class OrionisContext:
5
+ """
6
+ Context manager for the Orionis application that handles startup and cleanup.
7
+
8
+ This class manages the lifecycle of an Orionis application instance.
9
+ It starts the application when entering the context and ensures that the
10
+ application is properly finished when exiting, capturing any exceptions that occur.
11
+
12
+ Attributes
13
+ ----------
14
+ is_started : bool
15
+ Flag indicating whether the application has been successfully started.
16
+ app : App
17
+ Instance of the Orionis application.
18
+ error_info : tuple or None
19
+ Tuple containing the exception instance and its formatted traceback if an error occurs;
20
+ otherwise, None.
21
+ """
22
+
23
+ def __init__(self):
24
+ """
25
+ Initialize the OrionisContext.
26
+
27
+ Sets up the application instance and initializes state variables.
28
+ """
29
+ self.is_started = False
30
+ self.app = App()
31
+ self.error_info = None
32
+
33
+ def __enter__(self):
34
+ """
35
+ Enter the runtime context and start the application.
36
+
37
+ Attempts to start the Orionis application. If successful, sets the active flag
38
+ and returns the context instance. If an exception is raised during startup,
39
+ captures the exception and its traceback before re-raising it.
40
+
41
+ Returns
42
+ -------
43
+ OrionisContext
44
+ The current context instance with the application started.
45
+
46
+ Raises
47
+ ------
48
+ Exception
49
+ Re-raises any exception that occurs during the application startup.
50
+ """
51
+ try:
52
+ self.app.start()
53
+ self.is_started = True
54
+ return self
55
+ except Exception as e:
56
+ self.error_info = (e, traceback.format_exc())
57
+ raise
58
+
59
+ def __exit__(self, exc_type, exc_val, exc_tb):
60
+ """
61
+ Exit the runtime context and finish the application.
62
+
63
+ Calls the application's finish method to perform cleanup regardless of whether
64
+ an exception occurred. If an exception occurred, captures its information and
65
+ returns False to indicate that the exception should not be suppressed.
66
+
67
+ Parameters
68
+ ----------
69
+ exc_type : type
70
+ The type of the exception raised (if any).
71
+ exc_val : Exception
72
+ The exception instance raised (if any).
73
+ exc_tb : traceback
74
+ The traceback associated with the exception (if any).
75
+
76
+ Returns
77
+ -------
78
+ bool
79
+ Always returns False so that any exception is propagated.
80
+ """
81
+ try:
82
+ self.app.finish()
83
+ finally:
84
+ self.is_started = False
85
+
86
+ if exc_type:
87
+ self.error_info = (exc_val, traceback.format_exc())
88
+ return False
89
+
90
+ def is_active(self):
91
+ """
92
+ Check if the application is currently active.
93
+
94
+ Returns
95
+ -------
96
+ bool
97
+ True if the application has been started and is active, False otherwise.
98
+ """
99
+ return self.is_started
100
+
101
+ def get_error(self):
102
+ """
103
+ Retrieve the stored error information.
104
+
105
+ Returns
106
+ -------
107
+ tuple or None
108
+ A tuple containing the exception and its formatted traceback if an error occurred;
109
+ otherwise, None.
110
+ """
111
+ return self.error_info
@@ -0,0 +1,52 @@
1
+ from orionis.luminate.contracts.tools.exception_to_dict_interface import IExceptionsToDict
2
+ import traceback
3
+
4
+ class ExceptionsToDict(IExceptionsToDict):
5
+ """
6
+ A utility class to parse an exception and convert it into a structured dictionary.
7
+
8
+ Methods
9
+ -------
10
+ parse(exception: Exception) -> dict
11
+ Converts an exception into a dictionary containing the error type, message,
12
+ and stack trace information.
13
+ """
14
+
15
+ @staticmethod
16
+ def parse(exception):
17
+ """
18
+ Parse the provided exception and serialize it into a dictionary format.
19
+
20
+ Parameters
21
+ ----------
22
+ exception : Exception
23
+ The exception object to be serialized.
24
+
25
+ Returns
26
+ -------
27
+ dict
28
+ A dictionary containing the exception details such as error type, message,
29
+ and the stack trace.
30
+
31
+ Notes
32
+ -----
33
+ - Uses `traceback.TracebackException.from_exception()` to extract detailed traceback information.
34
+ - The stack trace includes filenames, line numbers, function names, and the exact line of code.
35
+ """
36
+ # Extract the detailed traceback information from the exception
37
+ tb = traceback.TracebackException.from_exception(exception)
38
+
39
+ # Construct and return the dictionary containing all necessary exception details
40
+ return {
41
+ "error_type": tb.exc_type_str, # Using `exc_type_str` to avoid deprecation warnings
42
+ "error_message": str(tb), # A string representation of the entire traceback message
43
+ "stack_trace": [
44
+ {
45
+ "filename": frame.filename, # The source file of the frame
46
+ "lineno": frame.lineno, # The line number where the exception occurred
47
+ "name": frame.name, # The function name
48
+ "line": frame.line # The line of code in the frame
49
+ }
50
+ for frame in tb.stack # Iterating over each frame in the traceback stack
51
+ ]
52
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.28.0
3
+ Version: 0.32.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
@@ -13,6 +13,7 @@ orionis.egg-info/requires.txt
13
13
  orionis.egg-info/top_level.txt
14
14
  orionis/luminate/__init__.py
15
15
  orionis/luminate/app.py
16
+ orionis/luminate/orionis.py
16
17
  orionis/luminate/bootstrap/__init__.py
17
18
  orionis/luminate/bootstrap/cli_exception.py
18
19
  orionis/luminate/bootstrap/commands/bootstrapper.py
@@ -114,6 +115,7 @@ orionis/luminate/contracts/publisher/pypi_publisher_interface.py
114
115
  orionis/luminate/contracts/test/__init__.py
115
116
  orionis/luminate/contracts/test/unit_test_interface.py
116
117
  orionis/luminate/contracts/tools/__init__.py
118
+ orionis/luminate/contracts/tools/exception_to_dict_interface.py
117
119
  orionis/luminate/contracts/tools/reflection_interface.py
118
120
  orionis/luminate/contracts/tools/std_interface.py
119
121
  orionis/luminate/facades/__init__.py
@@ -147,6 +149,7 @@ orionis/luminate/test/exception.py
147
149
  orionis/luminate/test/unit_test.py
148
150
  orionis/luminate/tools/__init__.py
149
151
  orionis/luminate/tools/dot_dict.py
152
+ orionis/luminate/tools/exception_to_dict.py
150
153
  orionis/luminate/tools/reflection.py
151
154
  orionis/luminate/tools/std.py
152
155
  tests/__init__.py
@@ -1,6 +0,0 @@
1
- from orionis.luminate.container.container import Container
2
-
3
- class OrionisApp:
4
-
5
- def __init__(self, config):
6
- self.container = Container()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes