orionis 0.12.0__tar.gz → 0.14.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 (155) hide show
  1. {orionis-0.12.0/orionis.egg-info → orionis-0.14.0}/PKG-INFO +1 -1
  2. {orionis-0.12.0 → orionis-0.14.0}/orionis/framework.py +1 -1
  3. orionis-0.14.0/orionis/luminate/bootstrap/config/bootstrapper.py +110 -0
  4. {orionis-0.12.0/orionis/luminate/bootstrap → orionis-0.14.0/orionis/luminate/bootstrap/config}/parser.py +6 -2
  5. {orionis-0.12.0/orionis/luminate/bootstrap → orionis-0.14.0/orionis/luminate/bootstrap/config}/register.py +9 -18
  6. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/container/container.py +25 -0
  7. orionis-0.14.0/orionis/luminate/contracts/bootstrap/bootstrapper_interface.py +65 -0
  8. orionis-0.14.0/orionis/luminate/contracts/bootstrap/register_interface.py +47 -0
  9. {orionis-0.12.0 → orionis-0.14.0/orionis.egg-info}/PKG-INFO +1 -1
  10. {orionis-0.12.0 → orionis-0.14.0}/orionis.egg-info/SOURCES.txt +6 -2
  11. orionis-0.14.0/tests/tools/__init__.py +0 -0
  12. {orionis-0.12.0 → orionis-0.14.0}/LICENCE +0 -0
  13. {orionis-0.12.0 → orionis-0.14.0}/MANIFEST.in +0 -0
  14. {orionis-0.12.0 → orionis-0.14.0}/README.md +0 -0
  15. {orionis-0.12.0 → orionis-0.14.0}/orionis/__init__.py +0 -0
  16. {orionis-0.12.0 → orionis-0.14.0}/orionis/cli_manager.py +0 -0
  17. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/__init__.py +0 -0
  18. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/app.py +0 -0
  19. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/bootstrap/__init__.py +0 -0
  20. {orionis-0.12.0/orionis/luminate/cache → orionis-0.14.0/orionis/luminate/bootstrap/config}/__init__.py +0 -0
  21. {orionis-0.12.0/orionis/luminate/cache/app → orionis-0.14.0/orionis/luminate/cache}/__init__.py +0 -0
  22. {orionis-0.12.0/orionis/luminate/cache/console → orionis-0.14.0/orionis/luminate/cache/app}/__init__.py +0 -0
  23. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/cache/app/config.py +0 -0
  24. {orionis-0.12.0/orionis/luminate/config → orionis-0.14.0/orionis/luminate/cache/console}/__init__.py +0 -0
  25. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/cache/console/commands.py +0 -0
  26. {orionis-0.12.0/orionis/luminate/config/dataclass → orionis-0.14.0/orionis/luminate/config}/__init__.py +0 -0
  27. {orionis-0.12.0/orionis/luminate/console → orionis-0.14.0/orionis/luminate/config/dataclass}/__init__.py +0 -0
  28. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/dataclass/app.py +0 -0
  29. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/dataclass/auth.py +0 -0
  30. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/dataclass/cache.py +0 -0
  31. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/dataclass/cors.py +0 -0
  32. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/dataclass/database.py +0 -0
  33. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/dataclass/filesystems.py +0 -0
  34. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/dataclass/logging.py +0 -0
  35. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/dataclass/mail.py +0 -0
  36. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/dataclass/queue.py +0 -0
  37. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/dataclass/session.py +0 -0
  38. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/environment.py +0 -0
  39. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/config/sections.py +0 -0
  40. {orionis-0.12.0/orionis/luminate/console/base → orionis-0.14.0/orionis/luminate/console}/__init__.py +0 -0
  41. {orionis-0.12.0/orionis/luminate/console/commands → orionis-0.14.0/orionis/luminate/console/base}/__init__.py +0 -0
  42. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/base/command.py +0 -0
  43. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/cache.py +0 -0
  44. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/command.py +0 -0
  45. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/command_filter.py +0 -0
  46. {orionis-0.12.0/orionis/luminate/console/exceptions → orionis-0.14.0/orionis/luminate/console/commands}/__init__.py +0 -0
  47. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
  48. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/commands/help.py +0 -0
  49. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
  50. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/commands/tests.py +0 -0
  51. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/commands/version.py +0 -0
  52. {orionis-0.12.0/orionis/luminate/console/output → orionis-0.14.0/orionis/luminate/console/exceptions}/__init__.py +0 -0
  53. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
  54. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/kernel.py +0 -0
  55. {orionis-0.12.0/orionis/luminate/console/scripts → orionis-0.14.0/orionis/luminate/console/output}/__init__.py +0 -0
  56. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/output/console.py +0 -0
  57. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/output/executor.py +0 -0
  58. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/output/progress_bar.py +0 -0
  59. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/output/styles.py +0 -0
  60. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/parser.py +0 -0
  61. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/register.py +0 -0
  62. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/runner.py +0 -0
  63. {orionis-0.12.0/orionis/luminate/console/tasks → orionis-0.14.0/orionis/luminate/console/scripts}/__init__.py +0 -0
  64. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/scripts/management.py +0 -0
  65. {orionis-0.12.0/orionis/luminate/contracts → orionis-0.14.0/orionis/luminate/console/tasks}/__init__.py +0 -0
  66. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/console/tasks/scheduler.py +0 -0
  67. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/container/exception.py +0 -0
  68. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/container/types.py +0 -0
  69. {orionis-0.12.0/orionis/luminate/contracts/cache → orionis-0.14.0/orionis/luminate/contracts}/__init__.py +0 -0
  70. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/bootstrap/parser_interface.py +0 -0
  71. {orionis-0.12.0/orionis/luminate/contracts/config → orionis-0.14.0/orionis/luminate/contracts/cache}/__init__.py +0 -0
  72. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/cache/cache_commands_interface.py +0 -0
  73. {orionis-0.12.0/orionis/luminate/contracts/console → orionis-0.14.0/orionis/luminate/contracts/config}/__init__.py +0 -0
  74. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/config/config_interface.py +0 -0
  75. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/config/environment_interface.py +0 -0
  76. {orionis-0.12.0/orionis/luminate/contracts/facades → orionis-0.14.0/orionis/luminate/contracts/console}/__init__.py +0 -0
  77. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/base_command_interface.py +0 -0
  78. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/cli_cache_interface.py +0 -0
  79. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/command_filter_interface.py +0 -0
  80. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/command_interface.py +0 -0
  81. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/console_interface.py +0 -0
  82. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/executor_interface.py +0 -0
  83. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/kernel_interface.py +0 -0
  84. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/management_interface.py +0 -0
  85. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/parser_interface.py +0 -0
  86. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/progress_bar_interface.py +0 -0
  87. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/register_interface.py +0 -0
  88. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/runner_interface.py +0 -0
  89. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/schedule_interface.py +0 -0
  90. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/console/task_manager_interface.py +0 -0
  91. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/container/container_interface.py +0 -0
  92. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/container/types_interface.py +0 -0
  93. {orionis-0.12.0/orionis/luminate/contracts/files → orionis-0.14.0/orionis/luminate/contracts/facades}/__init__.py +0 -0
  94. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/facades/env_interface.py +0 -0
  95. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/facades/log_interface.py +0 -0
  96. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/facades/paths_interface.py +0 -0
  97. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/facades/tests_interface.py +0 -0
  98. {orionis-0.12.0/orionis/luminate/contracts/installer → orionis-0.14.0/orionis/luminate/contracts/files}/__init__.py +0 -0
  99. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/files/paths_interface.py +0 -0
  100. {orionis-0.12.0/orionis/luminate/contracts/log → orionis-0.14.0/orionis/luminate/contracts/installer}/__init__.py +0 -0
  101. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/installer/output_interface.py +0 -0
  102. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/installer/setup_interface.py +0 -0
  103. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/installer/upgrade_interface.py +0 -0
  104. {orionis-0.12.0/orionis/luminate/contracts/publisher → orionis-0.14.0/orionis/luminate/contracts/log}/__init__.py +0 -0
  105. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/log/logger_interface.py +0 -0
  106. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/pipelines/cli_pipeline_interface.py +0 -0
  107. {orionis-0.12.0/orionis/luminate/contracts/test → orionis-0.14.0/orionis/luminate/contracts/publisher}/__init__.py +0 -0
  108. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/publisher/pypi_publisher_interface.py +0 -0
  109. {orionis-0.12.0/orionis/luminate/contracts/tools → orionis-0.14.0/orionis/luminate/contracts/test}/__init__.py +0 -0
  110. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/test/unit_test_interface.py +0 -0
  111. {orionis-0.12.0/orionis/luminate/facades → orionis-0.14.0/orionis/luminate/contracts/tools}/__init__.py +0 -0
  112. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/tools/reflection_interface.py +0 -0
  113. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/contracts/tools/std_interface.py +0 -0
  114. {orionis-0.12.0/orionis/luminate/files → orionis-0.14.0/orionis/luminate/facades}/__init__.py +0 -0
  115. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/facades/environment.py +0 -0
  116. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/facades/log.py +0 -0
  117. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/facades/paths.py +0 -0
  118. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/facades/tests.py +0 -0
  119. {orionis-0.12.0/orionis/luminate/installer → orionis-0.14.0/orionis/luminate/files}/__init__.py +0 -0
  120. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/files/paths.py +0 -0
  121. {orionis-0.12.0/orionis/luminate/log → orionis-0.14.0/orionis/luminate/installer}/__init__.py +0 -0
  122. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/installer/icon.ascii +0 -0
  123. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/installer/info.ascii +0 -0
  124. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/installer/output.py +0 -0
  125. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/installer/setup.py +0 -0
  126. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/installer/upgrade.py +0 -0
  127. {orionis-0.12.0/orionis/luminate/pipelines → orionis-0.14.0/orionis/luminate/log}/__init__.py +0 -0
  128. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/log/logger.py +0 -0
  129. {orionis-0.12.0/orionis/luminate/publisher → orionis-0.14.0/orionis/luminate/pipelines}/__init__.py +0 -0
  130. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/pipelines/cli_pipeline.py +0 -0
  131. {orionis-0.12.0/orionis/luminate/test → orionis-0.14.0/orionis/luminate/publisher}/__init__.py +0 -0
  132. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/publisher/pypi.py +0 -0
  133. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/static/bg/galaxy.jpg +0 -0
  134. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/static/favicon/OrionisFrameworkFavicon.png +0 -0
  135. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/static/logos/OrionisFramework.jpg +0 -0
  136. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/static/logos/OrionisFramework.png +0 -0
  137. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/static/logos/OrionisFramework.psd +0 -0
  138. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/static/logos/OrionisFramework2.png +0 -0
  139. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/static/logos/OrionisFramework3.png +0 -0
  140. {orionis-0.12.0/orionis/luminate/tools → orionis-0.14.0/orionis/luminate/test}/__init__.py +0 -0
  141. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/test/exception.py +0 -0
  142. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/test/unit_test.py +0 -0
  143. {orionis-0.12.0/tests → orionis-0.14.0/orionis/luminate/tools}/__init__.py +0 -0
  144. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/tools/dot_dict.py +0 -0
  145. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/tools/reflection.py +0 -0
  146. {orionis-0.12.0 → orionis-0.14.0}/orionis/luminate/tools/std.py +0 -0
  147. {orionis-0.12.0 → orionis-0.14.0}/orionis.egg-info/dependency_links.txt +0 -0
  148. {orionis-0.12.0 → orionis-0.14.0}/orionis.egg-info/entry_points.txt +0 -0
  149. {orionis-0.12.0 → orionis-0.14.0}/orionis.egg-info/requires.txt +0 -0
  150. {orionis-0.12.0 → orionis-0.14.0}/orionis.egg-info/top_level.txt +0 -0
  151. {orionis-0.12.0 → orionis-0.14.0}/setup.cfg +0 -0
  152. {orionis-0.12.0 → orionis-0.14.0}/setup.py +0 -0
  153. {orionis-0.12.0/tests/tools → orionis-0.14.0/tests}/__init__.py +0 -0
  154. {orionis-0.12.0 → orionis-0.14.0}/tests/tools/class_example.py +0 -0
  155. {orionis-0.12.0 → orionis-0.14.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.12.0
3
+ Version: 0.14.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.12.0"
8
+ VERSION = "0.14.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,110 @@
1
+ import ast
2
+ import importlib
3
+ import os
4
+ from orionis.luminate.bootstrap.config.register import Register
5
+ from orionis.luminate.contracts.bootstrap.bootstrapper_interface import IBootstrapper
6
+
7
+ class Bootstrapper(IBootstrapper):
8
+ """
9
+ Manages the automatic loading and registration of configuration classes
10
+ from Python files located in a specified directory.
11
+
12
+ The `Bootstrapper` class scans directories for Python files and dynamically
13
+ imports them to find configuration classes. Once found, the classes are
14
+ registered using the provided `Register` instance.
15
+
16
+ Attributes
17
+ ----------
18
+ register : Register
19
+ An instance of the `Register` class used to register configuration classes.
20
+
21
+ Methods
22
+ -------
23
+ __init__(register: Register) -> None
24
+ Initializes the `Bootstrapper` with a `Register` instance.
25
+
26
+ findClasses(file_path: str) -> List[str]
27
+ Parses a Python file to extract and return all defined class names.
28
+
29
+ autoload(directory: str) -> None
30
+ Scans a directory for Python files, imports them, finds configuration classes,
31
+ and registers them using the `Register` instance.
32
+ """
33
+
34
+ def __init__(self, register: Register) -> None:
35
+ """
36
+ Initializes the `Bootstrapper` with a `Register` instance.
37
+
38
+ Parameters
39
+ ----------
40
+ register : Register
41
+ An instance of the `Register` class used to register configuration classes.
42
+ """
43
+ self.register = register
44
+
45
+ def findClasses(self, file_path: str):
46
+ """
47
+ Parses a Python file to extract and return all defined class names.
48
+
49
+ This method opens the file at the given path, parses it using the Abstract
50
+ Syntax Tree (AST) module to extract class definitions, and returns a
51
+ list of class names found within the file.
52
+
53
+ Parameters
54
+ ----------
55
+ file_path : str
56
+ The path to the Python file to parse.
57
+
58
+ Returns
59
+ -------
60
+ List[str]
61
+ A list of class names defined in the provided Python file.
62
+ """
63
+ classes = []
64
+ with open(file_path, "r", encoding="utf-8") as file:
65
+ tree = ast.parse(file.read())
66
+
67
+ for node in ast.walk(tree):
68
+ if isinstance(node, ast.ClassDef):
69
+ classes.append(node.name)
70
+
71
+ return classes
72
+
73
+ def autoload(self, directory: str) -> None:
74
+ """
75
+ Automatically registers configuration classes found in a given directory.
76
+
77
+ This method walks through the specified directory, imports all Python files,
78
+ and scans for class definitions. If a class is found, it is registered using
79
+ the `Register` instance. Only classes defined in Python files (excluding
80
+ `__init__.py`) are considered.
81
+
82
+ Parameters
83
+ ----------
84
+ directory : str
85
+ The directory to scan for Python configuration files.
86
+
87
+ Raises
88
+ ------
89
+ FileNotFoundError
90
+ If the provided directory does not exist.
91
+ """
92
+ if not os.path.isdir(directory):
93
+ raise FileNotFoundError(f"Directory '{directory}' not found.")
94
+
95
+ for root, _, files in os.walk(directory):
96
+ for file in files:
97
+ if file.endswith(".py") and file != "__init__.py":
98
+ file_path = os.path.join(root, file)
99
+ # Get the class names defined in the file
100
+ classes = self.findClasses(file_path)
101
+
102
+ if classes:
103
+ for class_name in classes:
104
+ # Construct the module path and import the module
105
+ module_path = root.replace(os.getcwd(), "").replace(os.sep, ".") + "." + file[:-3]
106
+ module = importlib.import_module(module_path)
107
+ class_obj = getattr(module, class_name)
108
+
109
+ # Register the class in the container using the Register instance
110
+ self.register.config(class_obj)
@@ -41,8 +41,12 @@ class Parser(IParser):
41
41
  If the `config` attribute cannot be converted to a dictionary.
42
42
  """
43
43
  try:
44
- # Convert dataclass using asdict()
45
- return asdict(instance.config)
44
+ # Check if instance is a dictionary
45
+ if isinstance(instance.config, dict):
46
+ return instance
47
+ # Check if instance is a dataclass
48
+ elif hasattr(instance.config, '__dataclass_fields__'):
49
+ return asdict(instance.config)
46
50
  except AttributeError as e:
47
51
  raise AttributeError("The provided instance does not have a 'config' attribute.") from e
48
52
  except TypeError as e:
@@ -1,10 +1,11 @@
1
- from orionis.luminate.bootstrap.parser import Parser
1
+ from orionis.luminate.bootstrap.config.parser import Parser
2
2
  from orionis.luminate.config.sections import SECTIONS
3
- from orionis.luminate.tools.reflection import Reflection
4
- from orionis.luminate.cache.app.config import CacheConfig
3
+ from orionis.luminate.container.container import Container
4
+ from orionis.luminate.contracts.bootstrap.register_interface import IRegister
5
5
  from orionis.luminate.contracts.config.config_interface import IConfig
6
+ from orionis.luminate.tools.reflection import Reflection
6
7
 
7
- class Register:
8
+ class Register(IRegister):
8
9
  """
9
10
  Handles the registration of configuration classes within the application.
10
11
 
@@ -22,7 +23,7 @@ class Register:
22
23
  Registers a configuration class and ensures it meets the necessary criteria.
23
24
  """
24
25
 
25
- def __init__(self, cache: CacheConfig = None):
26
+ def __init__(self, container: Container) -> None:
26
27
  """
27
28
  Initializes the Register instance with a cache configuration.
28
29
 
@@ -31,7 +32,7 @@ class Register:
31
32
  cache : CacheConfig, optional
32
33
  The cache configuration instance to be used (default is a new instance of `CacheConfig`).
33
34
  """
34
- self.cache_config = cache or CacheConfig()
35
+ self.container = container
35
36
 
36
37
  def config(self, config_class: type) -> type:
37
38
  """
@@ -78,18 +79,8 @@ class Register:
78
79
  if not issubclass(config_class, IConfig):
79
80
  raise TypeError(f"Class {config_class.__name__} must inherit from 'IConfig'.")
80
81
 
81
- # Check if section is already registered
82
- if section in self.cache_config.config:
83
- raise ValueError(f"Configuration section '{section}' is already registered.")
84
-
85
82
  # Register configuration
86
- self.cache_config.register(
83
+ self.container.config(
87
84
  section=section,
88
85
  data=Parser.toDict(config_class)
89
- )
90
-
91
- # Return the original class
92
- return config_class
93
-
94
- # Create a global Register instance
95
- register = Register()
86
+ )
@@ -1,6 +1,7 @@
1
1
  import inspect
2
2
  from typing import Any, Callable
3
3
  from orionis.luminate.container.types import Types
4
+ from orionis.luminate.tools.dot_dict import DotDict
4
5
  from orionis.luminate.contracts.container.container_interface import IContainer
5
6
  from orionis.luminate.container.exception import OrionisContainerException, OrionisContainerValueError
6
7
 
@@ -12,6 +13,8 @@ class Container(IContainer):
12
13
  def __new__(cls):
13
14
  if cls._instance is None:
14
15
  cls._instance = super().__new__(cls)
16
+ cls._config = {}
17
+
15
18
  cls._instance._bindings = {}
16
19
  cls._instance._transients = {}
17
20
  cls._instance._singletons = {}
@@ -24,6 +27,28 @@ class Container(IContainer):
24
27
  cls._instance._primitive_types_validator = Types()
25
28
  return cls._instance
26
29
 
30
+ def config(self, section: str, data: dict):
31
+ """
32
+ Registers a configuration section in the container.
33
+
34
+ Args:
35
+ section (str): _description_
36
+ data (dict): _description_
37
+ """
38
+
39
+ # Validate that data is a dictionary
40
+ if not isinstance(data, dict):
41
+ raise OrionisContainerValueError("The 'data' parameter must be a dictionary.")
42
+
43
+ # Validate that the section is a string
44
+ if not isinstance(section, str):
45
+ raise OrionisContainerValueError("The 'section' parameter must be a string.")
46
+
47
+ if section not in self._config:
48
+ self._config[section] = data
49
+ else:
50
+ self._config[section].update(data)
51
+
27
52
  def bind(self, abstract: str, concrete: Callable[..., Any]) -> None:
28
53
  """Registers a service with a specific implementation.
29
54
 
@@ -0,0 +1,65 @@
1
+ from abc import ABC, abstractmethod
2
+ from ast import List
3
+
4
+ class IBootstrapper(ABC):
5
+ """
6
+ Interface for managing the automatic loading and registration of configuration
7
+ classes from Python files located in a specified directory.
8
+
9
+ The `IBootstrapper` interface defines methods for scanning directories for
10
+ Python files and dynamically importing them to find configuration classes.
11
+ Implementations of this interface should provide the logic for registering
12
+ the found classes using a `Register` instance.
13
+
14
+ Methods
15
+ -------
16
+ findClasses(file_path: str) -> List[str]
17
+ Parses a Python file to extract and return all defined class names.
18
+
19
+ autoload(directory: str) -> None
20
+ Scans a directory for Python files, imports them, finds configuration classes,
21
+ and registers them using the `Register` instance.
22
+ """
23
+
24
+ @abstractmethod
25
+ def findClasses(self, file_path: str) -> List[str]:
26
+ """
27
+ Parses a Python file to extract and return all defined class names.
28
+
29
+ This method opens the file at the given path, parses it using the Abstract
30
+ Syntax Tree (AST) module to extract class definitions, and returns a
31
+ list of class names found within the file.
32
+
33
+ Parameters
34
+ ----------
35
+ file_path : str
36
+ The path to the Python file to parse.
37
+
38
+ Returns
39
+ -------
40
+ List[str]
41
+ A list of class names defined in the provided Python file.
42
+ """
43
+ pass
44
+
45
+ @abstractmethod
46
+ def autoload(self, directory: str) -> None:
47
+ """
48
+ Automatically registers configuration classes found in a given directory.
49
+
50
+ This method walks through the specified directory, imports all Python files,
51
+ and scans for class definitions. If a class is found, it is registered using
52
+ the `Register` instance. Only classes defined in Python files (excluding
53
+ `__init__.py`) are considered.
54
+
55
+ Parameters
56
+ ----------
57
+ directory : str
58
+ The directory to scan for Python configuration files.
59
+
60
+ Raises
61
+ ------
62
+ FileNotFoundError
63
+ If the provided directory does not exist.
64
+ """
65
+ pass
@@ -0,0 +1,47 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+ class IRegister(ABC):
4
+ """
5
+ Handles the registration of configuration classes within the application.
6
+
7
+ This class ensures that only valid configuration classes are registered
8
+ while enforcing structure and type safety.
9
+
10
+ Attributes
11
+ ----------
12
+ cache_config : CacheConfig
13
+ An instance of `CacheConfig` used to store registered configurations.
14
+
15
+ Methods
16
+ -------
17
+ config(config_class: type) -> type
18
+ Registers a configuration class and ensures it meets the necessary criteria.
19
+ """
20
+
21
+ @abstractmethod
22
+ def config(self, config_class: type) -> type:
23
+ """
24
+ Registers a configuration class and ensures it meets the required structure.
25
+
26
+ This method performs multiple validation steps, including checking if the input
27
+ is a class, verifying the existence of a `config` attribute, and confirming
28
+ inheritance from `IConfig`.
29
+
30
+ Parameters
31
+ ----------
32
+ config_class : type
33
+ The class to be registered as a configuration.
34
+
35
+ Returns
36
+ -------
37
+ type
38
+ The same class passed as an argument, if registration is successful.
39
+
40
+ Raises
41
+ ------
42
+ TypeError
43
+ If `config_class` is not a class or does not inherit from `IConfig`.
44
+ ValueError
45
+ If `config_class` does not have a `config` attribute or is already registered.
46
+ """
47
+ pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.12.0
3
+ Version: 0.14.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
@@ -14,8 +14,10 @@ orionis.egg-info/top_level.txt
14
14
  orionis/luminate/__init__.py
15
15
  orionis/luminate/app.py
16
16
  orionis/luminate/bootstrap/__init__.py
17
- orionis/luminate/bootstrap/parser.py
18
- orionis/luminate/bootstrap/register.py
17
+ orionis/luminate/bootstrap/config/__init__.py
18
+ orionis/luminate/bootstrap/config/bootstrapper.py
19
+ orionis/luminate/bootstrap/config/parser.py
20
+ orionis/luminate/bootstrap/config/register.py
19
21
  orionis/luminate/cache/__init__.py
20
22
  orionis/luminate/cache/app/__init__.py
21
23
  orionis/luminate/cache/app/config.py
@@ -66,7 +68,9 @@ orionis/luminate/container/container.py
66
68
  orionis/luminate/container/exception.py
67
69
  orionis/luminate/container/types.py
68
70
  orionis/luminate/contracts/__init__.py
71
+ orionis/luminate/contracts/bootstrap/bootstrapper_interface.py
69
72
  orionis/luminate/contracts/bootstrap/parser_interface.py
73
+ orionis/luminate/contracts/bootstrap/register_interface.py
70
74
  orionis/luminate/contracts/cache/__init__.py
71
75
  orionis/luminate/contracts/cache/cache_commands_interface.py
72
76
  orionis/luminate/contracts/config/__init__.py
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes