orionis 0.5.0__py3-none-any.whl → 0.7.0__py3-none-any.whl
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/framework.py +10 -20
- orionis/luminate/console/exceptions/cli_exception.py +24 -22
- orionis/luminate/container/container.py +266 -0
- orionis/luminate/container/exception.py +36 -0
- orionis/luminate/publisher/pypi.py +11 -2
- orionis/luminate/static/bg/galaxy.jpg +0 -0
- orionis/luminate/static/favicon/OrionisFrameworkFavicon.png +0 -0
- orionis/luminate/static/logos/OrionisFramework3.png +0 -0
- orionis/luminate/test/exception.py +2 -4
- {orionis-0.5.0.dist-info → orionis-0.7.0.dist-info}/METADATA +1 -1
- {orionis-0.5.0.dist-info → orionis-0.7.0.dist-info}/RECORD +15 -10
- {orionis-0.5.0.dist-info → orionis-0.7.0.dist-info}/LICENCE +0 -0
- {orionis-0.5.0.dist-info → orionis-0.7.0.dist-info}/WHEEL +0 -0
- {orionis-0.5.0.dist-info → orionis-0.7.0.dist-info}/entry_points.txt +0 -0
- {orionis-0.5.0.dist-info → orionis-0.7.0.dist-info}/top_level.txt +0 -0
orionis/framework.py
CHANGED
@@ -1,45 +1,35 @@
|
|
1
1
|
#--------------------------------------------------------------------------
|
2
|
-
#
|
2
|
+
# Framework Information
|
3
3
|
#--------------------------------------------------------------------------
|
4
|
+
# Name of the framework
|
4
5
|
NAME = "orionis"
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
#--------------------------------------------------------------------------
|
9
|
-
VERSION = "0.5.0"
|
7
|
+
# Current version of the framework
|
8
|
+
VERSION = "0.7.0"
|
10
9
|
|
11
|
-
#--------------------------------------------------------------------------
|
12
10
|
# Full name of the author or maintainer of the project
|
13
|
-
#--------------------------------------------------------------------------
|
14
11
|
AUTHOR = "Raul Mauricio Uñate Castro"
|
15
12
|
|
16
|
-
#--------------------------------------------------------------------------
|
17
13
|
# Email address of the author or maintainer for contact purposes
|
18
|
-
#--------------------------------------------------------------------------
|
19
14
|
AUTHOR_EMAIL = "raulmauriciounate@gmail.com"
|
20
15
|
|
21
|
-
#--------------------------------------------------------------------------
|
22
16
|
# Short description of the project or framework
|
23
|
-
#--------------------------------------------------------------------------
|
24
17
|
DESCRIPTION = "Orionis Framework – Elegant, Fast, and Powerful."
|
25
18
|
|
26
19
|
#--------------------------------------------------------------------------
|
27
|
-
#
|
28
|
-
# This is typically used for initial project setup
|
20
|
+
# Project URLs
|
29
21
|
#--------------------------------------------------------------------------
|
22
|
+
# URL to the project's skeleton or template repository (for initial setup)
|
30
23
|
SKELETON = "https://github.com/orionis-framework/skeleton"
|
31
24
|
|
32
|
-
|
33
|
-
# URL to the project's framework repository
|
34
|
-
#--------------------------------------------------------------------------
|
25
|
+
# URL to the project's main framework repository
|
35
26
|
FRAMEWORK = "https://github.com/orionis-framework/framework"
|
36
27
|
|
37
|
-
#--------------------------------------------------------------------------
|
38
28
|
# URL to the project's documentation
|
39
|
-
#--------------------------------------------------------------------------
|
40
29
|
DOCS = "https://github.com/orionis-framework/docs"
|
41
30
|
|
42
31
|
#--------------------------------------------------------------------------
|
43
|
-
#
|
32
|
+
# Python Requirements
|
44
33
|
#--------------------------------------------------------------------------
|
45
|
-
|
34
|
+
# Minimum Python version required to run the project
|
35
|
+
PYTHON_REQUIRES = ">=3.12"
|
@@ -4,12 +4,12 @@ class CLIOrionisException(Exception):
|
|
4
4
|
|
5
5
|
Parameters
|
6
6
|
----------
|
7
|
-
|
7
|
+
message : str
|
8
8
|
The response message associated with the exception.
|
9
9
|
|
10
10
|
Attributes
|
11
11
|
----------
|
12
|
-
|
12
|
+
message : str
|
13
13
|
Stores the response message passed during initialization.
|
14
14
|
|
15
15
|
Methods
|
@@ -18,16 +18,16 @@ class CLIOrionisException(Exception):
|
|
18
18
|
Returns a string representation of the exception, including the response message.
|
19
19
|
"""
|
20
20
|
|
21
|
-
def __init__(self,
|
21
|
+
def __init__(self, message: str):
|
22
22
|
"""
|
23
23
|
Initializes the CLIOrionisException with the given response message.
|
24
24
|
|
25
25
|
Parameters
|
26
26
|
----------
|
27
|
-
|
27
|
+
message : str
|
28
28
|
The response message associated with the exception.
|
29
29
|
"""
|
30
|
-
|
30
|
+
super().__init__(message)
|
31
31
|
|
32
32
|
def __str__(self):
|
33
33
|
"""
|
@@ -38,20 +38,21 @@ class CLIOrionisException(Exception):
|
|
38
38
|
str
|
39
39
|
A string containing the exception name and the response message.
|
40
40
|
"""
|
41
|
-
return f"CLIOrionisException: {self.
|
41
|
+
return f"[CLIOrionisException]: {self.args[0]}"
|
42
42
|
|
43
|
-
|
43
|
+
|
44
|
+
class CLIOrionisValueError(ValueError):
|
44
45
|
"""
|
45
|
-
Custom exception raised when there is
|
46
|
+
Custom exception raised when there is a value error in Orionis data processing.
|
46
47
|
|
47
48
|
Parameters
|
48
49
|
----------
|
49
|
-
|
50
|
+
message : str
|
50
51
|
The response message associated with the exception.
|
51
52
|
|
52
53
|
Attributes
|
53
54
|
----------
|
54
|
-
|
55
|
+
message : str
|
55
56
|
Stores the response message passed during initialization.
|
56
57
|
|
57
58
|
Methods
|
@@ -60,16 +61,16 @@ class CLIOrionisValueError(Exception):
|
|
60
61
|
Returns a string representation of the exception, including the response message.
|
61
62
|
"""
|
62
63
|
|
63
|
-
def __init__(self,
|
64
|
+
def __init__(self, message: str):
|
64
65
|
"""
|
65
66
|
Initializes the CLIOrionisValueError with the given response message.
|
66
67
|
|
67
68
|
Parameters
|
68
69
|
----------
|
69
|
-
|
70
|
+
message : str
|
70
71
|
The response message associated with the exception.
|
71
72
|
"""
|
72
|
-
|
73
|
+
super().__init__(message)
|
73
74
|
|
74
75
|
def __str__(self):
|
75
76
|
"""
|
@@ -80,20 +81,21 @@ class CLIOrionisValueError(Exception):
|
|
80
81
|
str
|
81
82
|
A string containing the exception name and the response message.
|
82
83
|
"""
|
83
|
-
return f"CLIOrionisValueError: {self.
|
84
|
+
return f"[CLIOrionisValueError]: {self.args[0]}"
|
85
|
+
|
84
86
|
|
85
87
|
class CLIOrionisScheduleException(Exception):
|
86
88
|
"""
|
87
|
-
Custom exception raised when there is an issue with
|
89
|
+
Custom exception raised when there is an issue with the Orionis schedule.
|
88
90
|
|
89
91
|
Parameters
|
90
92
|
----------
|
91
|
-
|
93
|
+
message : str
|
92
94
|
The response message associated with the exception.
|
93
95
|
|
94
96
|
Attributes
|
95
97
|
----------
|
96
|
-
|
98
|
+
message : str
|
97
99
|
Stores the response message passed during initialization.
|
98
100
|
|
99
101
|
Methods
|
@@ -102,16 +104,16 @@ class CLIOrionisScheduleException(Exception):
|
|
102
104
|
Returns a string representation of the exception, including the response message.
|
103
105
|
"""
|
104
106
|
|
105
|
-
def __init__(self,
|
107
|
+
def __init__(self, message: str):
|
106
108
|
"""
|
107
|
-
Initializes the
|
109
|
+
Initializes the CLIOrionisScheduleException with the given response message.
|
108
110
|
|
109
111
|
Parameters
|
110
112
|
----------
|
111
|
-
|
113
|
+
message : str
|
112
114
|
The response message associated with the exception.
|
113
115
|
"""
|
114
|
-
|
116
|
+
super().__init__(message)
|
115
117
|
|
116
118
|
def __str__(self):
|
117
119
|
"""
|
@@ -122,4 +124,4 @@ class CLIOrionisScheduleException(Exception):
|
|
122
124
|
str
|
123
125
|
A string containing the exception name and the response message.
|
124
126
|
"""
|
125
|
-
return f"
|
127
|
+
return f"[CLIOrionisScheduleException]: {self.args[0]}"
|
@@ -0,0 +1,266 @@
|
|
1
|
+
import inspect
|
2
|
+
from typing import Any, Callable
|
3
|
+
from orionis.luminate.container.exception import OrionisContainerException, OrionisContainerValueError
|
4
|
+
|
5
|
+
class Container:
|
6
|
+
"""Service container and dependency injection."""
|
7
|
+
|
8
|
+
_instance = None
|
9
|
+
|
10
|
+
def __new__(cls):
|
11
|
+
if cls._instance is None:
|
12
|
+
cls._instance = super().__new__(cls)
|
13
|
+
cls._instance._bindings = {}
|
14
|
+
cls._instance._transients = {}
|
15
|
+
cls._instance._singletons = {}
|
16
|
+
cls._instance._scoped_services = {}
|
17
|
+
cls._instance._instances = {}
|
18
|
+
cls._instance._aliases = {}
|
19
|
+
cls._instance._scoped_instances = {}
|
20
|
+
cls._instance._conditional_bindings = {}
|
21
|
+
return cls._instance
|
22
|
+
|
23
|
+
def bind(self, abstract: str, concrete: Callable[..., Any]) -> None:
|
24
|
+
"""Registers a service with a specific implementation.
|
25
|
+
|
26
|
+
Args:
|
27
|
+
abstract (str): Name or key of the service to register.
|
28
|
+
concrete (Callable[..., Any]): Concrete implementation of the service.
|
29
|
+
|
30
|
+
Raises:
|
31
|
+
OrionisContainerException: If the service is already registered.
|
32
|
+
TypeError: If the implementation is not a callable or instantiable class.
|
33
|
+
"""
|
34
|
+
if self.has(abstract):
|
35
|
+
raise OrionisContainerException(f"The service '{abstract}' is already registered in the container.")
|
36
|
+
|
37
|
+
if not callable(concrete):
|
38
|
+
raise TypeError(f"The implementation of '{abstract}' must be a callable or instantiable class.")
|
39
|
+
|
40
|
+
self._bindings[abstract] = concrete
|
41
|
+
|
42
|
+
def transient(self, abstract: str, concrete: Callable[..., Any]) -> None:
|
43
|
+
"""Registers a service as Transient, creating a new instance on each request.
|
44
|
+
|
45
|
+
Args:
|
46
|
+
abstract (str): Name or key of the service to register.
|
47
|
+
concrete (Callable[..., Any]): Concrete implementation of the service.
|
48
|
+
|
49
|
+
Raises:
|
50
|
+
OrionisContainerException: If the service is already registered.
|
51
|
+
TypeError: If the implementation is not a callable or instantiable class.
|
52
|
+
"""
|
53
|
+
if self.has(abstract):
|
54
|
+
raise OrionisContainerException(f"The service '{abstract}' is already registered in the container.")
|
55
|
+
|
56
|
+
if not callable(concrete):
|
57
|
+
raise TypeError(f"The implementation of '{abstract}' must be a callable or instantiable class.")
|
58
|
+
|
59
|
+
self._transients[abstract] = concrete
|
60
|
+
|
61
|
+
def singleton(self, abstract: str, concrete: Callable[..., Any]) -> None:
|
62
|
+
"""Registers a service as Singleton, ensuring a single shared instance.
|
63
|
+
|
64
|
+
Args:
|
65
|
+
abstract (str): Name or key of the service to register.
|
66
|
+
concrete (Callable[..., Any]): Concrete implementation of the service.
|
67
|
+
|
68
|
+
Raises:
|
69
|
+
OrionisContainerException: If the service is already registered.
|
70
|
+
TypeError: If the implementation is not a callable or instantiable class.
|
71
|
+
"""
|
72
|
+
if self.has(abstract):
|
73
|
+
raise OrionisContainerException(f"The service '{abstract}' is already registered in the container.")
|
74
|
+
|
75
|
+
if not callable(concrete):
|
76
|
+
raise TypeError(f"The implementation of '{abstract}' must be a callable or instantiable class.")
|
77
|
+
|
78
|
+
self._singletons[abstract] = concrete
|
79
|
+
|
80
|
+
def scoped(self, abstract: str, concrete: Callable[..., Any]) -> None:
|
81
|
+
"""Registers a service as Scoped, shared within the same request.
|
82
|
+
|
83
|
+
Args:
|
84
|
+
abstract (str): Name or key of the service to register.
|
85
|
+
concrete (Callable[..., Any]): Concrete implementation of the service.
|
86
|
+
|
87
|
+
Raises:
|
88
|
+
OrionisContainerException: If the service is already registered.
|
89
|
+
TypeError: If the implementation is not a callable or instantiable class.
|
90
|
+
"""
|
91
|
+
if self.has(abstract):
|
92
|
+
raise OrionisContainerException(f"The service '{abstract}' is already registered in the container.")
|
93
|
+
|
94
|
+
if not callable(concrete):
|
95
|
+
raise TypeError(f"The implementation of '{abstract}' must be a callable or instantiable class.")
|
96
|
+
|
97
|
+
self._scoped_services[abstract] = concrete
|
98
|
+
|
99
|
+
def instance(self, abstract: str, instance: Any) -> None:
|
100
|
+
"""Registers a specific instance in the container, allowing it to be reused.
|
101
|
+
|
102
|
+
Args:
|
103
|
+
abstract (str): Name or key of the service to register.
|
104
|
+
instance (Any): Specific instance of the service to register.
|
105
|
+
|
106
|
+
Raises:
|
107
|
+
OrionisContainerException: If the instance is already registered.
|
108
|
+
ValueError: If the provided instance is of an unexpected or invalid type.
|
109
|
+
"""
|
110
|
+
if abstract in self._instances:
|
111
|
+
raise OrionisContainerException(f"The instance '{abstract}' is already registered in the container.")
|
112
|
+
|
113
|
+
if not isinstance(instance, object):
|
114
|
+
raise ValueError(f"The instance of '{abstract}' must be a valid object.")
|
115
|
+
|
116
|
+
self._instances[abstract] = instance
|
117
|
+
|
118
|
+
def has(self, abstract: str) -> bool:
|
119
|
+
"""Checks if a service is registered in the container.
|
120
|
+
|
121
|
+
Args:
|
122
|
+
abstract (str): Name or key of the service to check.
|
123
|
+
|
124
|
+
Returns:
|
125
|
+
bool: True if the service is registered, False otherwise.
|
126
|
+
|
127
|
+
Raises:
|
128
|
+
ValueError: If the service name (abstract) is not a valid string.
|
129
|
+
"""
|
130
|
+
# Check that 'abstract' is a string
|
131
|
+
if not isinstance(abstract, str):
|
132
|
+
raise ValueError(f"The service name '{abstract}' must be a string.")
|
133
|
+
|
134
|
+
# Efficient check if the service is in any of the containers
|
135
|
+
return any(abstract in container for container in [
|
136
|
+
self._bindings,
|
137
|
+
self._transients,
|
138
|
+
self._singletons,
|
139
|
+
self._scoped_services,
|
140
|
+
self._instances
|
141
|
+
])
|
142
|
+
|
143
|
+
def alias(self, abstract: str, alias: str) -> None:
|
144
|
+
"""Creates an alias for a registered service, allowing access to the service using an alternative name.
|
145
|
+
|
146
|
+
Args:
|
147
|
+
abstract (str): Name or key of the original service.
|
148
|
+
alias (str): The alias to assign to the service.
|
149
|
+
|
150
|
+
Raises:
|
151
|
+
OrionisContainerException: If the original service is not registered.
|
152
|
+
ValueError: If the alias is not a valid string or is already in use.
|
153
|
+
"""
|
154
|
+
# Validate alias type
|
155
|
+
if not isinstance(alias, str) or not alias:
|
156
|
+
raise ValueError("The alias must be a non-empty string.")
|
157
|
+
|
158
|
+
# Check if the original service is registered
|
159
|
+
if not self.has(abstract):
|
160
|
+
raise OrionisContainerException(f"The service '{abstract}' is not registered in the container.")
|
161
|
+
|
162
|
+
# Check if the alias is already in use
|
163
|
+
if alias in self._aliases:
|
164
|
+
raise ValueError(f"The alias '{alias}' is already in use.")
|
165
|
+
|
166
|
+
self._aliases[alias] = abstract
|
167
|
+
|
168
|
+
def make(self, abstract: str):
|
169
|
+
"""Automatically resolves a dependency, handling instances, singletons, scoped, transients, and aliases.
|
170
|
+
|
171
|
+
This method resolves the dependencies of a service and handles the following service types:
|
172
|
+
1. **Instances**: Returns a specific instance.
|
173
|
+
2. **Singletons**: Returns the same unique instance each time.
|
174
|
+
3. **Scoped**: Returns a shared instance within the same request.
|
175
|
+
4. **Transients**: Creates a new instance each time.
|
176
|
+
5. **Aliases**: Resolves an alias to the original service.
|
177
|
+
|
178
|
+
Args:
|
179
|
+
abstract (str): Name or key of the service to resolve.
|
180
|
+
|
181
|
+
Returns:
|
182
|
+
Any: The resolved instance or service.
|
183
|
+
|
184
|
+
Raises:
|
185
|
+
OrionisContainerException: If the service is not found.
|
186
|
+
"""
|
187
|
+
# If the service is a specific instance, return it directly
|
188
|
+
if abstract in self._instances:
|
189
|
+
return self._instances[abstract]
|
190
|
+
|
191
|
+
# If it is a singleton, return the same instance or resolve it if it is not yet resolved
|
192
|
+
if abstract in self._singletons:
|
193
|
+
if abstract not in self._instances:
|
194
|
+
self._instances[abstract] = self._resolve(self._singletons[abstract])
|
195
|
+
return self._instances[abstract]
|
196
|
+
|
197
|
+
# If it is a scoped service, validate that it is in the same request context
|
198
|
+
if abstract in self._scoped_services:
|
199
|
+
if abstract not in self._scoped_instances:
|
200
|
+
self._scoped_instances[abstract] = self._resolve(self._scoped_services[abstract])
|
201
|
+
return self._scoped_instances[abstract]
|
202
|
+
|
203
|
+
# If it is a transient service, create a new instance each time
|
204
|
+
if abstract in self._transients:
|
205
|
+
return self._resolve(self._transients[abstract])
|
206
|
+
|
207
|
+
# If it is a regular binding, resolve it directly
|
208
|
+
if abstract in self._bindings:
|
209
|
+
return self._resolve(self._bindings[abstract])
|
210
|
+
|
211
|
+
# If it is an alias, resolve the alias recursively
|
212
|
+
if abstract in self._aliases:
|
213
|
+
return self.make(self._aliases[abstract])
|
214
|
+
|
215
|
+
raise OrionisContainerValueError(f"No definition found for '{abstract}'. Ensure the service is registered.")
|
216
|
+
|
217
|
+
def _resolve(self, concrete: Callable[..., Any]):
|
218
|
+
"""Automatically resolves the dependencies of a service, handling its constructor dependencies.
|
219
|
+
|
220
|
+
If the service is a class, it recursively resolves its dependencies (constructor parameters).
|
221
|
+
|
222
|
+
Args:
|
223
|
+
concrete (Callable[..., Any]): Concrete implementation of the service.
|
224
|
+
|
225
|
+
Returns:
|
226
|
+
Any: The resolved service instance.
|
227
|
+
|
228
|
+
Raises:
|
229
|
+
ValueError: If there is a constructor parameter whose type cannot be resolved.
|
230
|
+
"""
|
231
|
+
if inspect.isclass(concrete):
|
232
|
+
constructor = inspect.signature(concrete.__init__)
|
233
|
+
parameters = constructor.parameters
|
234
|
+
|
235
|
+
# If the class has no parameters in its constructor, instantiate it directly
|
236
|
+
if len(parameters) == 0 or (len(parameters) == 1 and "self" in parameters):
|
237
|
+
return concrete()
|
238
|
+
|
239
|
+
dependencies = {}
|
240
|
+
for name, param in parameters.items():
|
241
|
+
if name == "self" or param.kind in (param.VAR_POSITIONAL, param.VAR_KEYWORD):
|
242
|
+
continue
|
243
|
+
|
244
|
+
param_type = param.annotation
|
245
|
+
if param_type == param.empty:
|
246
|
+
raise OrionisContainerValueError(f"Parameter type {name} not specified in {concrete.__name__}")
|
247
|
+
|
248
|
+
dep_name = param_type.__name__
|
249
|
+
|
250
|
+
# Conditional resolution of dependencies, if registered
|
251
|
+
if concrete in self._conditional_bindings and dep_name in self._conditional_bindings[concrete]:
|
252
|
+
dependencies[name] = self.make(self._conditional_bindings[concrete][dep_name])
|
253
|
+
else:
|
254
|
+
dependencies[name] = self.make(dep_name)
|
255
|
+
|
256
|
+
return concrete(**dependencies)
|
257
|
+
|
258
|
+
return concrete(self)
|
259
|
+
|
260
|
+
def startRequest(self):
|
261
|
+
"""Starts a new request and clears the Scoped instances.
|
262
|
+
|
263
|
+
This method should be called at the beginning of each request to ensure that
|
264
|
+
scoped services do not persist between requests.
|
265
|
+
"""
|
266
|
+
self._scoped_instances = {}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class OrionisContainerException(Exception):
|
2
|
+
"""
|
3
|
+
Excepción personalizada para errores relacionados con el contenedor de inyección de dependencias Orionis.
|
4
|
+
"""
|
5
|
+
|
6
|
+
def __init__(self, message: str) -> None:
|
7
|
+
"""
|
8
|
+
Inicializa la excepción con un mensaje de error.
|
9
|
+
|
10
|
+
Args:
|
11
|
+
message (str): Mensaje descriptivo del error.
|
12
|
+
"""
|
13
|
+
super().__init__(message)
|
14
|
+
|
15
|
+
def __str__(self) -> str:
|
16
|
+
"""Retorna una representación en cadena de la excepción."""
|
17
|
+
return f"[OrionisContainerException] {self.args[0]}"
|
18
|
+
|
19
|
+
|
20
|
+
class OrionisContainerValueError(ValueError):
|
21
|
+
"""
|
22
|
+
Excepción personalizada para errores de tipo ValueError en el contenedor Orionis.
|
23
|
+
"""
|
24
|
+
|
25
|
+
def __init__(self, message: str) -> None:
|
26
|
+
"""
|
27
|
+
Inicializa la excepción con un mensaje de error.
|
28
|
+
|
29
|
+
Args:
|
30
|
+
message (str): Mensaje descriptivo del error.
|
31
|
+
"""
|
32
|
+
super().__init__(message)
|
33
|
+
|
34
|
+
def __str__(self) -> str:
|
35
|
+
"""Retorna una representación en cadena de la excepción."""
|
36
|
+
return f"[OrionisContainerValueError] {self.args[0]}"
|
@@ -2,6 +2,7 @@ import os
|
|
2
2
|
import sys
|
3
3
|
import shutil
|
4
4
|
import subprocess
|
5
|
+
import time
|
5
6
|
from orionis.framework import VERSION
|
6
7
|
from orionis.luminate.console.output.console import Console
|
7
8
|
from orionis.luminate.contracts.publisher.pypi_publisher_interface import IPypiPublisher
|
@@ -70,10 +71,17 @@ class PypiPublisher(IPypiPublisher):
|
|
70
71
|
subprocess.CalledProcessError
|
71
72
|
If any of the subprocess calls to Git fail.
|
72
73
|
"""
|
73
|
-
subprocess.run(
|
74
|
-
["git", "rm", "-r", "--cached", "."], capture_output=True, text=True, cwd=self.project_root
|
74
|
+
result = subprocess.run(
|
75
|
+
["git", "rm", "-r", "--cached", "."], capture_output=True, text=True, cwd=self.project_root, check=True
|
75
76
|
)
|
76
77
|
|
78
|
+
# Verificamos si el comando fue exitoso
|
79
|
+
if result.returncode == 0:
|
80
|
+
Console.info("✅ Archivos removidos del índice con éxito")
|
81
|
+
|
82
|
+
# Añadimos un pequeño retraso para evitar problemas de sincronización
|
83
|
+
time.sleep(4)
|
84
|
+
|
77
85
|
git_status = subprocess.run(
|
78
86
|
["git", "status", "--short"], capture_output=True, text=True, cwd=self.project_root
|
79
87
|
)
|
@@ -159,6 +167,7 @@ class PypiPublisher(IPypiPublisher):
|
|
159
167
|
check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, cwd=self.project_root
|
160
168
|
)
|
161
169
|
except Exception as e:
|
170
|
+
print(e)
|
162
171
|
Console.fail(f"🔴 Error loading the package. Try changing the version and retry. Error: {e}")
|
163
172
|
Console.warning("⛔ If the issue persists, review the script in detail.")
|
164
173
|
exit()
|
Binary file
|
Binary file
|
Binary file
|
@@ -31,9 +31,7 @@ class OrionisTestFailureException(Exception):
|
|
31
31
|
response : str
|
32
32
|
The message describing the test failure.
|
33
33
|
"""
|
34
|
-
|
35
|
-
|
36
|
-
# Ensures proper initialization of the Exception class
|
34
|
+
# Pass the response to the base Exception class
|
37
35
|
super().__init__(response)
|
38
36
|
|
39
37
|
def __str__(self) -> str:
|
@@ -45,4 +43,4 @@ class OrionisTestFailureException(Exception):
|
|
45
43
|
str
|
46
44
|
A formatted string containing the exception name and response message.
|
47
45
|
"""
|
48
|
-
return f"OrionisTestFailureException: {self.
|
46
|
+
return f"[OrionisTestFailureException]: {self.args[0]}"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
orionis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
2
|
orionis/cli_manager.py,sha256=9wNVJxB0HyqUbNesUvkwlsqTyUbZwK6R46iVLE5WVBQ,1715
|
3
|
-
orionis/framework.py,sha256=
|
3
|
+
orionis/framework.py,sha256=ZiVoL5HQ9nx6oZijIDIPxNNieVtsLT7l2r2Q9zeeBA0,1385
|
4
4
|
orionis/luminate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
orionis/luminate/app.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
6
|
orionis/luminate/bootstrap/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -42,7 +42,7 @@ orionis/luminate/console/commands/schedule_work.py,sha256=J-2SsG2wyN3_F_d5ZzK7Ys
|
|
42
42
|
orionis/luminate/console/commands/tests.py,sha256=eRP5fXIqvn2a7saZI_eHOJRbnG6dgDCJVdNz92Gmmxs,1393
|
43
43
|
orionis/luminate/console/commands/version.py,sha256=Do9_eHxSlegkeUv-uquxd3JcGTTx3tAoNv1lTUZCmPw,1228
|
44
44
|
orionis/luminate/console/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
45
|
-
orionis/luminate/console/exceptions/cli_exception.py,sha256=
|
45
|
+
orionis/luminate/console/exceptions/cli_exception.py,sha256=I0brj4041CCgqtu4knH5NSHZVN3BPg0pxtbUx5cbTdA,3469
|
46
46
|
orionis/luminate/console/output/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
47
47
|
orionis/luminate/console/output/console.py,sha256=zPZJkRCv1cOn1OYNoGrEW6chMVUhkrZ_qTg2MkD2vTA,14474
|
48
48
|
orionis/luminate/console/output/executor.py,sha256=YkgRNGVnSPI5oPrJ2WbFU_1433BMt0PrrjlbppsnqHg,3372
|
@@ -52,6 +52,8 @@ orionis/luminate/console/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
|
|
52
52
|
orionis/luminate/console/scripts/management.py,sha256=KT6Bg8kyuUw63SNAtZo6tLH6syOEkxM9J70tCpKgrUw,2860
|
53
53
|
orionis/luminate/console/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
54
|
orionis/luminate/console/tasks/scheduler.py,sha256=h3fRVTx6TuZVcY7zZ6oOzGDnlDAWaRwkj92pFTGUm6E,22686
|
55
|
+
orionis/luminate/container/container.py,sha256=Tw_Kibld2dKSomXKQCH-_jn_vAHLXWkbBHRjeSgdwC4,11445
|
56
|
+
orionis/luminate/container/exception.py,sha256=Tf7KdfbEtr0YldhZ1WrKfkBlI5W_KvZO61xWAGFdF0A,1156
|
55
57
|
orionis/luminate/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
56
58
|
orionis/luminate/contracts/bootstrap/parser_interface.py,sha256=7DLnp7yB7edayVkSm-piTi8JSf0QKaYYI82qDZudgM0,1641
|
57
59
|
orionis/luminate/contracts/cache/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -113,13 +115,16 @@ orionis/luminate/log/logger.py,sha256=9s_zYIa7b388WRlDl1WdMW_lzIEsBOROA2YlWq_C02
|
|
113
115
|
orionis/luminate/pipelines/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
114
116
|
orionis/luminate/pipelines/cli_pipeline.py,sha256=UpEWClNSxeDnFEpryrBSQZ6z2SFpXrW0GazEQ6ejoEM,3809
|
115
117
|
orionis/luminate/publisher/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
116
|
-
orionis/luminate/publisher/pypi.py,sha256
|
118
|
+
orionis/luminate/publisher/pypi.py,sha256=-dKUrxLY-yB5j8tTuJSXyqd_MXha1xqmcKYIq5OiK70,8364
|
119
|
+
orionis/luminate/static/bg/galaxy.jpg,sha256=_FuPghOe9LBrIWv1eKZ9fiZR72sEz5obvXGDnD7MzTc,172244
|
120
|
+
orionis/luminate/static/favicon/OrionisFrameworkFavicon.png,sha256=bvkLzn0PfYHY9f-AfgRzclt4RNSFaKhMCH_TgwqsMKU,31301
|
117
121
|
orionis/luminate/static/logos/OrionisFramework.jpg,sha256=ezZlrcoknKvtl6YFwSIVfecRFm9fjAMKXHmuabMpImM,716918
|
118
122
|
orionis/luminate/static/logos/OrionisFramework.png,sha256=nmS5HoYu4NwmrcTtVj8gtjutgnW8EstgRkli_Ks1Chs,291370
|
119
123
|
orionis/luminate/static/logos/OrionisFramework.psd,sha256=QFMRe_HENaIgQi9VWMvNV3OHKOFofFGOGwQk6fqebrU,2904849
|
120
124
|
orionis/luminate/static/logos/OrionisFramework2.png,sha256=Z_-yBHNSo33QeSTyi-8GfiFozdRqUomIZ28bGx6Py5c,256425
|
125
|
+
orionis/luminate/static/logos/OrionisFramework3.png,sha256=BPG9ZB58vDALavI9OMmr8Ym0DQa44s5NL_3M4M6dIYs,193734
|
121
126
|
orionis/luminate/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
122
|
-
orionis/luminate/test/exception.py,sha256=
|
127
|
+
orionis/luminate/test/exception.py,sha256=VJaZ7VMZfdKW1ov_GwKp2HAz_NYobujJxDt5RaPHuVQ,1395
|
123
128
|
orionis/luminate/test/unit_test.py,sha256=3zemWa150SfxcXhs1n1TjYvbfLgwqJjhwFPnUlLLtgg,3738
|
124
129
|
orionis/luminate/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
125
130
|
orionis/luminate/tools/reflection.py,sha256=3G4nZIE73LDtGJLlq9U_P9O2FnTi5-wr9s00CVAmjFw,11959
|
@@ -128,9 +133,9 @@ tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
133
|
tests/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
129
134
|
tests/tools/class_example.py,sha256=dIPD997Y15n6WmKhWoOFSwEldRm9MdOHTZZ49eF1p3c,1056
|
130
135
|
tests/tools/test_reflection.py,sha256=dNN5p_xAosyEf0ddAElmmmTfhcTtBd4zBNl7qzgnsc0,5242
|
131
|
-
orionis-0.
|
132
|
-
orionis-0.
|
133
|
-
orionis-0.
|
134
|
-
orionis-0.
|
135
|
-
orionis-0.
|
136
|
-
orionis-0.
|
136
|
+
orionis-0.7.0.dist-info/LICENCE,sha256=-_4cF2EBKuYVS_SQpy1uapq0oJPUU1vl_RUWSy2jJTo,1111
|
137
|
+
orionis-0.7.0.dist-info/METADATA,sha256=-wJ-IuY4pOizRCsgyAqcGYLO_fMqeWzuQJkixy4lI1o,2977
|
138
|
+
orionis-0.7.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
139
|
+
orionis-0.7.0.dist-info/entry_points.txt,sha256=eef1_CVewfokKjrGBynXa06KabSJYo7LlDKKIKvs1cM,53
|
140
|
+
orionis-0.7.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
|
141
|
+
orionis-0.7.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|