orionis 0.24.0__tar.gz → 0.25.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 (156) hide show
  1. {orionis-0.24.0/orionis.egg-info → orionis-0.25.0}/PKG-INFO +1 -1
  2. {orionis-0.24.0 → orionis-0.25.0}/orionis/framework.py +1 -1
  3. orionis-0.25.0/orionis/luminate/app.py +6 -0
  4. orionis-0.25.0/orionis/luminate/bootstrap/config/bootstrapper.py +78 -0
  5. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/bootstrap/config/bootstrapper_interface.py +0 -24
  6. {orionis-0.24.0 → orionis-0.25.0/orionis.egg-info}/PKG-INFO +1 -1
  7. orionis-0.24.0/orionis/luminate/app.py +0 -0
  8. orionis-0.24.0/orionis/luminate/bootstrap/config/bootstrapper.py +0 -111
  9. {orionis-0.24.0 → orionis-0.25.0}/LICENCE +0 -0
  10. {orionis-0.24.0 → orionis-0.25.0}/MANIFEST.in +0 -0
  11. {orionis-0.24.0 → orionis-0.25.0}/README.md +0 -0
  12. {orionis-0.24.0 → orionis-0.25.0}/orionis/__init__.py +0 -0
  13. {orionis-0.24.0 → orionis-0.25.0}/orionis/cli_manager.py +0 -0
  14. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/__init__.py +0 -0
  15. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/bootstrap/__init__.py +0 -0
  16. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/bootstrap/config/__init__.py +0 -0
  17. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/bootstrap/config/parser.py +0 -0
  18. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/bootstrap/config/register.py +0 -0
  19. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/cache/__init__.py +0 -0
  20. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/cache/app/__init__.py +0 -0
  21. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/cache/app/config.py +0 -0
  22. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/cache/console/__init__.py +0 -0
  23. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/cache/console/commands.py +0 -0
  24. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/__init__.py +0 -0
  25. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/dataclass/__init__.py +0 -0
  26. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/dataclass/app.py +0 -0
  27. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/dataclass/auth.py +0 -0
  28. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/dataclass/cache.py +0 -0
  29. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/dataclass/cors.py +0 -0
  30. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/dataclass/database.py +0 -0
  31. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/dataclass/filesystems.py +0 -0
  32. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/dataclass/logging.py +0 -0
  33. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/dataclass/mail.py +0 -0
  34. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/dataclass/queue.py +0 -0
  35. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/dataclass/session.py +0 -0
  36. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/config/environment.py +0 -0
  37. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/__init__.py +0 -0
  38. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/base/__init__.py +0 -0
  39. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/base/command.py +0 -0
  40. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/cache.py +0 -0
  41. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/command.py +0 -0
  42. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/command_filter.py +0 -0
  43. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/commands/__init__.py +0 -0
  44. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
  45. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/commands/help.py +0 -0
  46. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
  47. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/commands/tests.py +0 -0
  48. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/commands/version.py +0 -0
  49. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/exceptions/__init__.py +0 -0
  50. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
  51. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/kernel.py +0 -0
  52. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/output/__init__.py +0 -0
  53. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/output/console.py +0 -0
  54. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/output/executor.py +0 -0
  55. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/output/progress_bar.py +0 -0
  56. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/output/styles.py +0 -0
  57. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/parser.py +0 -0
  58. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/register.py +0 -0
  59. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/runner.py +0 -0
  60. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/scripts/__init__.py +0 -0
  61. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/scripts/management.py +0 -0
  62. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/tasks/__init__.py +0 -0
  63. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/console/tasks/scheduler.py +0 -0
  64. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/container/container.py +0 -0
  65. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/container/exception.py +0 -0
  66. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/container/types.py +0 -0
  67. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/__init__.py +0 -0
  68. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/bootstrap/config/parser_interface.py +0 -0
  69. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/bootstrap/config/register_interface.py +0 -0
  70. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/cache/__init__.py +0 -0
  71. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/cache/cache_commands_interface.py +0 -0
  72. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/config/__init__.py +0 -0
  73. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/config/config_interface.py +0 -0
  74. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/config/environment_interface.py +0 -0
  75. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/__init__.py +0 -0
  76. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/base_command_interface.py +0 -0
  77. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/cli_cache_interface.py +0 -0
  78. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/command_filter_interface.py +0 -0
  79. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/command_interface.py +0 -0
  80. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/console_interface.py +0 -0
  81. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/executor_interface.py +0 -0
  82. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/kernel_interface.py +0 -0
  83. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/management_interface.py +0 -0
  84. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/parser_interface.py +0 -0
  85. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/progress_bar_interface.py +0 -0
  86. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/register_interface.py +0 -0
  87. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/runner_interface.py +0 -0
  88. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/schedule_interface.py +0 -0
  89. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/console/task_manager_interface.py +0 -0
  90. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/container/container_interface.py +0 -0
  91. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/container/types_interface.py +0 -0
  92. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/facades/__init__.py +0 -0
  93. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/facades/env_interface.py +0 -0
  94. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/facades/log_interface.py +0 -0
  95. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/facades/paths_interface.py +0 -0
  96. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/facades/tests_interface.py +0 -0
  97. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/files/__init__.py +0 -0
  98. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/files/paths_interface.py +0 -0
  99. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/installer/__init__.py +0 -0
  100. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/installer/output_interface.py +0 -0
  101. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/installer/setup_interface.py +0 -0
  102. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/installer/upgrade_interface.py +0 -0
  103. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/log/__init__.py +0 -0
  104. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/log/logger_interface.py +0 -0
  105. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/pipelines/cli_pipeline_interface.py +0 -0
  106. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/publisher/__init__.py +0 -0
  107. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/publisher/pypi_publisher_interface.py +0 -0
  108. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/test/__init__.py +0 -0
  109. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/test/unit_test_interface.py +0 -0
  110. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/tools/__init__.py +0 -0
  111. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/tools/reflection_interface.py +0 -0
  112. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/contracts/tools/std_interface.py +0 -0
  113. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/facades/__init__.py +0 -0
  114. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/facades/environment.py +0 -0
  115. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/facades/log.py +0 -0
  116. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/facades/paths.py +0 -0
  117. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/facades/tests.py +0 -0
  118. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/files/__init__.py +0 -0
  119. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/files/paths.py +0 -0
  120. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/installer/__init__.py +0 -0
  121. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/installer/icon.ascii +0 -0
  122. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/installer/info.ascii +0 -0
  123. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/installer/output.py +0 -0
  124. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/installer/setup.py +0 -0
  125. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/installer/upgrade.py +0 -0
  126. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/log/__init__.py +0 -0
  127. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/log/logger.py +0 -0
  128. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/pipelines/__init__.py +0 -0
  129. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/pipelines/cli_pipeline.py +0 -0
  130. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/publisher/__init__.py +0 -0
  131. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/publisher/pypi.py +0 -0
  132. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/static/bg/galaxy.jpg +0 -0
  133. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/static/favicon/OrionisFrameworkFavicon.png +0 -0
  134. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/static/logos/OrionisFramework.jpg +0 -0
  135. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/static/logos/OrionisFramework.png +0 -0
  136. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/static/logos/OrionisFramework.psd +0 -0
  137. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/static/logos/OrionisFramework2.png +0 -0
  138. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/static/logos/OrionisFramework3.png +0 -0
  139. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/test/__init__.py +0 -0
  140. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/test/exception.py +0 -0
  141. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/test/unit_test.py +0 -0
  142. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/tools/__init__.py +0 -0
  143. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/tools/dot_dict.py +0 -0
  144. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/tools/reflection.py +0 -0
  145. {orionis-0.24.0 → orionis-0.25.0}/orionis/luminate/tools/std.py +0 -0
  146. {orionis-0.24.0 → orionis-0.25.0}/orionis.egg-info/SOURCES.txt +0 -0
  147. {orionis-0.24.0 → orionis-0.25.0}/orionis.egg-info/dependency_links.txt +0 -0
  148. {orionis-0.24.0 → orionis-0.25.0}/orionis.egg-info/entry_points.txt +0 -0
  149. {orionis-0.24.0 → orionis-0.25.0}/orionis.egg-info/requires.txt +0 -0
  150. {orionis-0.24.0 → orionis-0.25.0}/orionis.egg-info/top_level.txt +0 -0
  151. {orionis-0.24.0 → orionis-0.25.0}/setup.cfg +0 -0
  152. {orionis-0.24.0 → orionis-0.25.0}/setup.py +0 -0
  153. {orionis-0.24.0 → orionis-0.25.0}/tests/__init__.py +0 -0
  154. {orionis-0.24.0 → orionis-0.25.0}/tests/tools/__init__.py +0 -0
  155. {orionis-0.24.0 → orionis-0.25.0}/tests/tools/class_example.py +0 -0
  156. {orionis-0.24.0 → orionis-0.25.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.24.0
3
+ Version: 0.25.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.24.0"
8
+ VERSION = "0.25.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,6 @@
1
+ from orionis.luminate.container.container import Container
2
+
3
+ class OrionisApp:
4
+
5
+ def __init__(self, config):
6
+ self.container = Container()
@@ -0,0 +1,78 @@
1
+ import importlib
2
+ import pathlib
3
+ from orionis.luminate.bootstrap.config.register import Register
4
+ from orionis.luminate.contracts.bootstrap.config.bootstrapper_interface import IBootstrapper
5
+
6
+ class Bootstrapper(IBootstrapper):
7
+ """
8
+ Manages the automatic loading and registration of configuration classes
9
+ from Python files located in a specified directory.
10
+
11
+ The `Bootstrapper` class scans directories for Python files and dynamically
12
+ imports them to find configuration classes. Once found, the classes are
13
+ registered using the provided `Register` instance.
14
+
15
+ Attributes
16
+ ----------
17
+ register : Register
18
+ An instance of the `Register` class used to register configuration classes.
19
+
20
+ Methods
21
+ -------
22
+ __init__(register: Register) -> None
23
+ Initializes the `Bootstrapper` with a `Register` instance.
24
+
25
+ _autoload(directory: str) -> None
26
+ Scans a directory for Python files, imports them, finds configuration classes,
27
+ and registers them using the `Register` instance.
28
+ """
29
+
30
+ def __init__(self, register: Register) -> None:
31
+ """
32
+ Initializes the `Bootstrapper` with a `Register` instance.
33
+
34
+ Parameters
35
+ ----------
36
+ register : Register
37
+ An instance of the `Register` class used to register configuration classes.
38
+ """
39
+ self.register = register
40
+ self._autoload()
41
+
42
+ def _autoload(self, directory: str = 'config') -> None:
43
+ """
44
+ Automatically registers configuration classes found in a given directory.
45
+
46
+ This method walks through the specified directory, imports all Python files,
47
+ and scans for class definitions. If a class is found, it is registered using
48
+ the `Register` instance. Only classes defined in Python files (excluding
49
+ `__init__.py`) are considered.
50
+
51
+ Parameters
52
+ ----------
53
+ directory : str
54
+ The directory to scan for Python configuration files.
55
+
56
+ Raises
57
+ ------
58
+ FileNotFoundError
59
+ If the provided directory does not exist.
60
+ """
61
+ base_path = pathlib.Path(directory).resolve()
62
+
63
+ if not base_path.exists():
64
+ raise FileNotFoundError(f"Directory {directory} does not exist.")
65
+
66
+ for file_path in base_path.rglob("*.py"):
67
+ if file_path.name == "__init__.py":
68
+ continue
69
+
70
+ module_path = ".".join(file_path.relative_to(base_path).with_suffix("").parts)
71
+
72
+ try:
73
+ module = importlib.import_module(f"{directory}.{module_path}")
74
+ if hasattr(module, "Config"):
75
+ self.register.config(getattr(module, "Config"))
76
+ except Exception as e:
77
+ raise RuntimeError(f"Error loading module {module_path}") from e
78
+
@@ -12,35 +12,11 @@ class IBootstrapper(ABC):
12
12
 
13
13
  Methods
14
14
  -------
15
- findClasses(file_path: str) -> List[str]
16
- Parses a Python file to extract and return all defined class names.
17
-
18
15
  autoload(directory: str) -> None
19
16
  Scans a directory for Python files, imports them, finds configuration classes,
20
17
  and registers them using the `Register` instance.
21
18
  """
22
19
 
23
- @abstractmethod
24
- def _definitions(self, file_path: str):
25
- """
26
- Parses a Python file to extract and return all defined class names.
27
-
28
- This method opens the file at the given path, parses it using the Abstract
29
- Syntax Tree (AST) module to extract class definitions, and returns a
30
- list of class names found within the file.
31
-
32
- Parameters
33
- ----------
34
- file_path : str
35
- The path to the Python file to parse.
36
-
37
- Returns
38
- -------
39
- List[str]
40
- A list of class names defined in the provided Python file.
41
- """
42
- pass
43
-
44
20
  @abstractmethod
45
21
  def _autoload(self, directory: str) -> None:
46
22
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.24.0
3
+ Version: 0.25.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
File without changes
@@ -1,111 +0,0 @@
1
- import ast
2
- import importlib
3
- import os
4
- from orionis.luminate.bootstrap.config.register import Register
5
- from orionis.luminate.contracts.bootstrap.config.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
- self._autoload()
45
-
46
- def _definitions(self, file_path: str):
47
- """
48
- Parses a Python file to extract and return all defined class names.
49
-
50
- This method opens the file at the given path, parses it using the Abstract
51
- Syntax Tree (AST) module to extract class definitions, and returns a
52
- list of class names found within the file.
53
-
54
- Parameters
55
- ----------
56
- file_path : str
57
- The path to the Python file to parse.
58
-
59
- Returns
60
- -------
61
- List[str]
62
- A list of class names defined in the provided Python file.
63
- """
64
- classes = []
65
- with open(file_path, "r", encoding="utf-8") as file:
66
- tree = ast.parse(file.read())
67
-
68
- for node in ast.walk(tree):
69
- if isinstance(node, ast.ClassDef):
70
- classes.append(node.name)
71
-
72
- return classes
73
-
74
- def _autoload(self, directory: str = 'config') -> None:
75
- """
76
- Automatically registers configuration classes found in a given directory.
77
-
78
- This method walks through the specified directory, imports all Python files,
79
- and scans for class definitions. If a class is found, it is registered using
80
- the `Register` instance. Only classes defined in Python files (excluding
81
- `__init__.py`) are considered.
82
-
83
- Parameters
84
- ----------
85
- directory : str
86
- The directory to scan for Python configuration files.
87
-
88
- Raises
89
- ------
90
- FileNotFoundError
91
- If the provided directory does not exist.
92
- """
93
- if not os.path.isdir(directory):
94
- raise FileNotFoundError(f"Directory '{directory}' not found.")
95
-
96
- for root, _, files in os.walk(directory):
97
- for file in files:
98
- if file.endswith(".py") and file != "__init__.py":
99
- file_path = os.path.join(root, file)
100
- # Get the class names defined in the file
101
- classes = self._definitions(file_path)
102
-
103
- if classes:
104
- for class_name in classes:
105
- # Construct the module path and import the module
106
- module_path = root.replace(os.getcwd(), "").replace(os.sep, ".") + "." + file[:-3]
107
- module = importlib.import_module(module_path)
108
- class_obj = getattr(module, class_name)
109
-
110
- # Register the class in the container using the Register instance
111
- self.register.config(class_obj)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes