orionis 0.12.0__tar.gz → 0.13.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.
- {orionis-0.12.0/orionis.egg-info → orionis-0.13.0}/PKG-INFO +1 -1
- {orionis-0.12.0 → orionis-0.13.0}/orionis/framework.py +1 -1
- orionis-0.13.0/orionis/luminate/bootstrap/config/bootstrapper.py +111 -0
- {orionis-0.12.0/orionis/luminate/bootstrap → orionis-0.13.0/orionis/luminate/bootstrap/config}/parser.py +6 -2
- {orionis-0.12.0/orionis/luminate/bootstrap → orionis-0.13.0/orionis/luminate/bootstrap/config}/register.py +9 -18
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/container/container.py +25 -0
- orionis-0.13.0/orionis/luminate/contracts/bootstrap/bootstrapper_interface.py +65 -0
- orionis-0.13.0/orionis/luminate/contracts/bootstrap/register_interface.py +47 -0
- {orionis-0.12.0 → orionis-0.13.0/orionis.egg-info}/PKG-INFO +1 -1
- {orionis-0.12.0 → orionis-0.13.0}/orionis.egg-info/SOURCES.txt +6 -2
- orionis-0.13.0/tests/tools/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/LICENCE +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/MANIFEST.in +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/README.md +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/cli_manager.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/app.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/bootstrap/__init__.py +0 -0
- {orionis-0.12.0/orionis/luminate/cache → orionis-0.13.0/orionis/luminate/bootstrap/config}/__init__.py +0 -0
- {orionis-0.12.0/orionis/luminate/cache/app → orionis-0.13.0/orionis/luminate/cache}/__init__.py +0 -0
- {orionis-0.12.0/orionis/luminate/cache/console → orionis-0.13.0/orionis/luminate/cache/app}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/cache/app/config.py +0 -0
- {orionis-0.12.0/orionis/luminate/config → orionis-0.13.0/orionis/luminate/cache/console}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/cache/console/commands.py +0 -0
- {orionis-0.12.0/orionis/luminate/config/dataclass → orionis-0.13.0/orionis/luminate/config}/__init__.py +0 -0
- {orionis-0.12.0/orionis/luminate/console → orionis-0.13.0/orionis/luminate/config/dataclass}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/dataclass/app.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/dataclass/auth.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/dataclass/cache.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/dataclass/cors.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/dataclass/database.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/dataclass/filesystems.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/dataclass/logging.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/dataclass/mail.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/dataclass/queue.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/dataclass/session.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/environment.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/config/sections.py +0 -0
- {orionis-0.12.0/orionis/luminate/console/base → orionis-0.13.0/orionis/luminate/console}/__init__.py +0 -0
- {orionis-0.12.0/orionis/luminate/console/commands → orionis-0.13.0/orionis/luminate/console/base}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/base/command.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/cache.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/command.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/command_filter.py +0 -0
- {orionis-0.12.0/orionis/luminate/console/exceptions → orionis-0.13.0/orionis/luminate/console/commands}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/commands/cache_clear.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/commands/help.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/commands/schedule_work.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/commands/tests.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/commands/version.py +0 -0
- {orionis-0.12.0/orionis/luminate/console/output → orionis-0.13.0/orionis/luminate/console/exceptions}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/exceptions/cli_exception.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/kernel.py +0 -0
- {orionis-0.12.0/orionis/luminate/console/scripts → orionis-0.13.0/orionis/luminate/console/output}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/output/console.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/output/executor.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/output/progress_bar.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/output/styles.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/parser.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/register.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/runner.py +0 -0
- {orionis-0.12.0/orionis/luminate/console/tasks → orionis-0.13.0/orionis/luminate/console/scripts}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/scripts/management.py +0 -0
- {orionis-0.12.0/orionis/luminate/contracts → orionis-0.13.0/orionis/luminate/console/tasks}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/console/tasks/scheduler.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/container/exception.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/container/types.py +0 -0
- {orionis-0.12.0/orionis/luminate/contracts/cache → orionis-0.13.0/orionis/luminate/contracts}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/bootstrap/parser_interface.py +0 -0
- {orionis-0.12.0/orionis/luminate/contracts/config → orionis-0.13.0/orionis/luminate/contracts/cache}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/cache/cache_commands_interface.py +0 -0
- {orionis-0.12.0/orionis/luminate/contracts/console → orionis-0.13.0/orionis/luminate/contracts/config}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/config/config_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/config/environment_interface.py +0 -0
- {orionis-0.12.0/orionis/luminate/contracts/facades → orionis-0.13.0/orionis/luminate/contracts/console}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/base_command_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/cli_cache_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/command_filter_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/command_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/console_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/executor_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/kernel_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/management_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/parser_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/progress_bar_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/register_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/runner_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/schedule_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/task_manager_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/container/container_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/container/types_interface.py +0 -0
- {orionis-0.12.0/orionis/luminate/contracts/files → orionis-0.13.0/orionis/luminate/contracts/facades}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/facades/env_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/facades/log_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/facades/paths_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/facades/tests_interface.py +0 -0
- {orionis-0.12.0/orionis/luminate/contracts/installer → orionis-0.13.0/orionis/luminate/contracts/files}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/files/paths_interface.py +0 -0
- {orionis-0.12.0/orionis/luminate/contracts/log → orionis-0.13.0/orionis/luminate/contracts/installer}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/installer/output_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/installer/setup_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/installer/upgrade_interface.py +0 -0
- {orionis-0.12.0/orionis/luminate/contracts/publisher → orionis-0.13.0/orionis/luminate/contracts/log}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/log/logger_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/pipelines/cli_pipeline_interface.py +0 -0
- {orionis-0.12.0/orionis/luminate/contracts/test → orionis-0.13.0/orionis/luminate/contracts/publisher}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/publisher/pypi_publisher_interface.py +0 -0
- {orionis-0.12.0/orionis/luminate/contracts/tools → orionis-0.13.0/orionis/luminate/contracts/test}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/test/unit_test_interface.py +0 -0
- {orionis-0.12.0/orionis/luminate/facades → orionis-0.13.0/orionis/luminate/contracts/tools}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/tools/reflection_interface.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/tools/std_interface.py +0 -0
- {orionis-0.12.0/orionis/luminate/files → orionis-0.13.0/orionis/luminate/facades}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/facades/environment.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/facades/log.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/facades/paths.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/facades/tests.py +0 -0
- {orionis-0.12.0/orionis/luminate/installer → orionis-0.13.0/orionis/luminate/files}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/files/paths.py +0 -0
- {orionis-0.12.0/orionis/luminate/log → orionis-0.13.0/orionis/luminate/installer}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/installer/icon.ascii +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/installer/info.ascii +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/installer/output.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/installer/setup.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/installer/upgrade.py +0 -0
- {orionis-0.12.0/orionis/luminate/pipelines → orionis-0.13.0/orionis/luminate/log}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/log/logger.py +0 -0
- {orionis-0.12.0/orionis/luminate/publisher → orionis-0.13.0/orionis/luminate/pipelines}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/pipelines/cli_pipeline.py +0 -0
- {orionis-0.12.0/orionis/luminate/test → orionis-0.13.0/orionis/luminate/publisher}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/publisher/pypi.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/static/bg/galaxy.jpg +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/static/favicon/OrionisFrameworkFavicon.png +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/static/logos/OrionisFramework.jpg +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/static/logos/OrionisFramework.png +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/static/logos/OrionisFramework.psd +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/static/logos/OrionisFramework2.png +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/static/logos/OrionisFramework3.png +0 -0
- {orionis-0.12.0/orionis/luminate/tools → orionis-0.13.0/orionis/luminate/test}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/test/exception.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/test/unit_test.py +0 -0
- {orionis-0.12.0/tests → orionis-0.13.0/orionis/luminate/tools}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/tools/dot_dict.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/tools/reflection.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/tools/std.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis.egg-info/dependency_links.txt +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis.egg-info/entry_points.txt +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis.egg-info/requires.txt +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/orionis.egg-info/top_level.txt +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/setup.cfg +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/setup.py +0 -0
- {orionis-0.12.0/tests/tools → orionis-0.13.0/tests}/__init__.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/tests/tools/class_example.py +0 -0
- {orionis-0.12.0 → orionis-0.13.0}/tests/tools/test_reflection.py +0 -0
@@ -0,0 +1,111 @@
|
|
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
|
+
from typing import List
|
7
|
+
|
8
|
+
class Bootstrapper(IBootstrapper):
|
9
|
+
"""
|
10
|
+
Manages the automatic loading and registration of configuration classes
|
11
|
+
from Python files located in a specified directory.
|
12
|
+
|
13
|
+
The `Bootstrapper` class scans directories for Python files and dynamically
|
14
|
+
imports them to find configuration classes. Once found, the classes are
|
15
|
+
registered using the provided `Register` instance.
|
16
|
+
|
17
|
+
Attributes
|
18
|
+
----------
|
19
|
+
register : Register
|
20
|
+
An instance of the `Register` class used to register configuration classes.
|
21
|
+
|
22
|
+
Methods
|
23
|
+
-------
|
24
|
+
__init__(register: Register) -> None
|
25
|
+
Initializes the `Bootstrapper` with a `Register` instance.
|
26
|
+
|
27
|
+
findClasses(file_path: str) -> List[str]
|
28
|
+
Parses a Python file to extract and return all defined class names.
|
29
|
+
|
30
|
+
autoload(directory: str) -> None
|
31
|
+
Scans a directory for Python files, imports them, finds configuration classes,
|
32
|
+
and registers them using the `Register` instance.
|
33
|
+
"""
|
34
|
+
|
35
|
+
def __init__(self, register: Register) -> None:
|
36
|
+
"""
|
37
|
+
Initializes the `Bootstrapper` with a `Register` instance.
|
38
|
+
|
39
|
+
Parameters
|
40
|
+
----------
|
41
|
+
register : Register
|
42
|
+
An instance of the `Register` class used to register configuration classes.
|
43
|
+
"""
|
44
|
+
self.register = register
|
45
|
+
|
46
|
+
def findClasses(self, file_path: str) -> List[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) -> 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.findClasses(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, ".")[1:] + "." + 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)
|
@@ -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
|
-
#
|
45
|
-
|
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.
|
4
|
-
from orionis.luminate.
|
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,
|
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.
|
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.
|
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
|
@@ -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/
|
18
|
-
orionis/luminate/bootstrap/
|
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
|
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0/orionis/luminate/cache/app → orionis-0.13.0/orionis/luminate/cache}/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0/orionis/luminate/config → orionis-0.13.0/orionis/luminate/cache/console}/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0/orionis/luminate/console/base → orionis-0.13.0/orionis/luminate/console}/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/cache/cache_commands_interface.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/config/environment_interface.py
RENAMED
File without changes
|
File without changes
|
{orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/base_command_interface.py
RENAMED
File without changes
|
File without changes
|
{orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/command_filter_interface.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/management_interface.py
RENAMED
File without changes
|
File without changes
|
{orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/progress_bar_interface.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/console/task_manager_interface.py
RENAMED
File without changes
|
{orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/container/container_interface.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/pipelines/cli_pipeline_interface.py
RENAMED
File without changes
|
File without changes
|
{orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/contracts/publisher/pypi_publisher_interface.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0/orionis/luminate/files → orionis-0.13.0/orionis/luminate/facades}/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0/orionis/luminate/installer → orionis-0.13.0/orionis/luminate/files}/__init__.py
RENAMED
File without changes
|
File without changes
|
{orionis-0.12.0/orionis/luminate/log → orionis-0.13.0/orionis/luminate/installer}/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0/orionis/luminate/pipelines → orionis-0.13.0/orionis/luminate/log}/__init__.py
RENAMED
File without changes
|
File without changes
|
{orionis-0.12.0/orionis/luminate/publisher → orionis-0.13.0/orionis/luminate/pipelines}/__init__.py
RENAMED
File without changes
|
File without changes
|
{orionis-0.12.0/orionis/luminate/test → orionis-0.13.0/orionis/luminate/publisher}/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{orionis-0.12.0 → orionis-0.13.0}/orionis/luminate/static/favicon/OrionisFrameworkFavicon.png
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|