orionis 0.5.0__py3-none-any.whl → 0.6.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 CHANGED
@@ -1,45 +1,35 @@
1
1
  #--------------------------------------------------------------------------
2
- # Name of the project or framework
2
+ # Framework Information
3
3
  #--------------------------------------------------------------------------
4
+ # Name of the framework
4
5
  NAME = "orionis"
5
6
 
6
- #--------------------------------------------------------------------------
7
- # Current version of the project or framework
8
- #--------------------------------------------------------------------------
9
- VERSION = "0.5.0"
7
+ # Current version of the framework
8
+ VERSION = "0.6.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
- # URL to the project's skeleton or template repository
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
- # Minimum Python version required to run the project
32
+ # Python Requirements
44
33
  #--------------------------------------------------------------------------
45
- PYTHON_REQUIRES = ">=3.12"
34
+ # Minimum Python version required to run the project
35
+ PYTHON_REQUIRES = ">=3.12"
@@ -38,9 +38,9 @@ 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.response}"
41
+ return f"[CLIOrionisException]: {self.response}"
42
42
 
43
- class CLIOrionisValueError(Exception):
43
+ class CLIOrionisValueError(ValueError):
44
44
  """
45
45
  Custom exception raised when there is an issue with dumping the Orionis data.
46
46
 
@@ -80,7 +80,7 @@ class CLIOrionisValueError(Exception):
80
80
  str
81
81
  A string containing the exception name and the response message.
82
82
  """
83
- return f"CLIOrionisValueError: {self.response}"
83
+ return f"[CLIOrionisValueError]: {self.response}"
84
84
 
85
85
  class CLIOrionisScheduleException(Exception):
86
86
  """
@@ -104,7 +104,7 @@ class CLIOrionisScheduleException(Exception):
104
104
 
105
105
  def __init__(self, response: str):
106
106
  """
107
- Initializes the CLIOrionisValueError with the given response message.
107
+ Initializes the CLIOrionisScheduleException with the given response message.
108
108
 
109
109
  Parameters
110
110
  ----------
@@ -122,4 +122,4 @@ class CLIOrionisScheduleException(Exception):
122
122
  str
123
123
  A string containing the exception name and the response message.
124
124
  """
125
- return f"CLIOrionisValueError: {self.response}"
125
+ return f"[CLIOrionisScheduleException]: {self.response}"
@@ -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
@@ -45,4 +45,4 @@ class OrionisTestFailureException(Exception):
45
45
  str
46
46
  A formatted string containing the exception name and response message.
47
47
  """
48
- return f"OrionisTestFailureException: {self.response}"
48
+ return f"[OrionisTestFailureException]: {self.response}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.5.0
3
+ Version: 0.6.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
@@ -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=0n9zQQuLK1-M4GHXoUvNDrBbde6M_t1_Bhsou4N6SBg,2292
3
+ orionis/framework.py,sha256=vnb996AFnbGLJdWuFlUMRmhI7iE4ilBmryd0B5utIp4,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=Z5VmvtKpgOfyErNzN0QEy3Ii-88dQBDj7Xy7v-vJs58,3456
45
+ orionis/luminate/console/exceptions/cli_exception.py,sha256=yt6Oisry6f3Tr9RU7ww0unCcMfzi1V2-UJVdEpDvix8,3477
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=L6c7Ij8pt5tpZSJnfUhfdft--Aqo2kLrUvSQymS_3hM,8039
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=5Zyt4luZjtS1tyb6OQLpWmVSL5MP7SC6OY0sAAAz5lU,1437
127
+ orionis/luminate/test/exception.py,sha256=9kztolmQtnl4EHAEyegxpUVJYgnKIruMID08iDiUNH4,1439
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.5.0.dist-info/LICENCE,sha256=-_4cF2EBKuYVS_SQpy1uapq0oJPUU1vl_RUWSy2jJTo,1111
132
- orionis-0.5.0.dist-info/METADATA,sha256=_ZbEIdMIeAtuSum7aq9IrsqYfwG0f3y3kIKdKUz-yFg,2977
133
- orionis-0.5.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
134
- orionis-0.5.0.dist-info/entry_points.txt,sha256=eef1_CVewfokKjrGBynXa06KabSJYo7LlDKKIKvs1cM,53
135
- orionis-0.5.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
136
- orionis-0.5.0.dist-info/RECORD,,
136
+ orionis-0.6.0.dist-info/LICENCE,sha256=-_4cF2EBKuYVS_SQpy1uapq0oJPUU1vl_RUWSy2jJTo,1111
137
+ orionis-0.6.0.dist-info/METADATA,sha256=cAvwz9X1qF1VzjdxQ3hOxd_i7ewIzlZC7C7ma5zcoDI,2977
138
+ orionis-0.6.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
139
+ orionis-0.6.0.dist-info/entry_points.txt,sha256=eef1_CVewfokKjrGBynXa06KabSJYo7LlDKKIKvs1cM,53
140
+ orionis-0.6.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
141
+ orionis-0.6.0.dist-info/RECORD,,