orionis 0.102.0__py3-none-any.whl → 0.105.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.
Files changed (40) hide show
  1. orionis/contracts/container/i_container.py +17 -0
  2. orionis/contracts/foundation/config/__init__.py +0 -0
  3. orionis/contracts/foundation/console/__init__.py +0 -0
  4. orionis/contracts/foundation/environment/__init__.py +0 -0
  5. orionis/contracts/foundation/i_bootstraper.py +41 -0
  6. orionis/contracts/foundation/providers/__init__.py +0 -0
  7. orionis/contracts/foundation/providers/i_service_providers_bootstrapper.py +59 -0
  8. orionis/framework.py +1 -1
  9. orionis/luminate/app.py +106 -76
  10. orionis/luminate/container/container.py +16 -0
  11. orionis/luminate/foundation/__init__.py +0 -0
  12. orionis/luminate/foundation/config/__init__.py +0 -0
  13. orionis/luminate/{bootstrap → foundation/config}/config_bootstrapper.py +2 -2
  14. orionis/luminate/foundation/console/__init__.py +0 -0
  15. orionis/luminate/{bootstrap → foundation/console}/command_bootstrapper.py +3 -3
  16. orionis/luminate/foundation/environment/__init__.py +0 -0
  17. orionis/luminate/{bootstrap → foundation/environment}/environment_bootstrapper.py +1 -1
  18. orionis/luminate/foundation/exceptions/__init__.py +0 -0
  19. orionis/luminate/foundation/providers/__init__.py +0 -0
  20. orionis/luminate/foundation/providers/service_providers_bootstrapper.py +98 -0
  21. orionis/luminate/providers/environment/environment__service_provider.py +6 -0
  22. orionis/luminate/providers/files/__init__.py +0 -0
  23. orionis/luminate/providers/files/paths_provider.py +21 -0
  24. orionis/luminate/providers/service_provider.py +4 -0
  25. orionis/luminate/services/commands/reactor_commands_service.py +1 -1
  26. orionis/luminate/services/config/config_service.py +1 -1
  27. orionis/luminate/services/files/path_resolver_service.py +7 -15
  28. orionis/luminate/services/log/log_service.py +7 -2
  29. {orionis-0.102.0.dist-info → orionis-0.105.0.dist-info}/METADATA +1 -1
  30. {orionis-0.102.0.dist-info → orionis-0.105.0.dist-info}/RECORD +39 -25
  31. orionis/luminate/bootstrap/service_providers_bootstrapper.py +0 -10
  32. /orionis/{luminate/bootstrap → contracts/foundation}/__init__.py +0 -0
  33. /orionis/contracts/{bootstrap → foundation/config}/i_config_bootstrapper.py +0 -0
  34. /orionis/contracts/{bootstrap → foundation/console}/i_command_bootstrapper.py +0 -0
  35. /orionis/contracts/{bootstrap → foundation/environment}/i_environment_bootstrapper.py +0 -0
  36. /orionis/luminate/{bootstrap → foundation/exceptions}/exception_bootstrapper.py +0 -0
  37. {orionis-0.102.0.dist-info → orionis-0.105.0.dist-info}/LICENCE +0 -0
  38. {orionis-0.102.0.dist-info → orionis-0.105.0.dist-info}/WHEEL +0 -0
  39. {orionis-0.102.0.dist-info → orionis-0.105.0.dist-info}/entry_points.txt +0 -0
  40. {orionis-0.102.0.dist-info → orionis-0.105.0.dist-info}/top_level.txt +0 -0
@@ -178,6 +178,23 @@ class IContainer(ABC):
178
178
  """
179
179
  pass
180
180
 
181
+ @abstractmethod
182
+ def bound(self, abstract: Any) -> bool:
183
+ """
184
+ Checks if a service is bound in the container.
185
+
186
+ Parameters
187
+ ----------
188
+ abstract : Any
189
+ The service class or alias to check.
190
+
191
+ Returns
192
+ -------
193
+ bool
194
+ True if the service is bound, False otherwise.
195
+ """
196
+ pass
197
+
181
198
  @abstractmethod
182
199
  def make(self, abstract: Any) -> Any:
183
200
  """
File without changes
File without changes
File without changes
@@ -0,0 +1,41 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any
3
+
4
+ class IBootstrapper(ABC):
5
+
6
+ @abstractmethod
7
+ def _autoload(self) -> None:
8
+ """
9
+ Loads environment variables from the `.env` file or creates the file if it does not exist.
10
+
11
+ This method checks if the `.env` file exists in the current working directory.
12
+ If the file does not exist, it creates an empty `.env` file. If the file exists,
13
+ it loads the environment variables into the `_environment_vars` dictionary.
14
+
15
+ Raises
16
+ ------
17
+ PermissionError
18
+ If the `.env` file cannot be created or read due to insufficient permissions.
19
+ """
20
+ pass
21
+
22
+ def get(self, *args, **kwargs) -> Any:
23
+ """
24
+ Retrieves the value of an environment variable.
25
+
26
+ Parameters
27
+ ----------
28
+ key : str
29
+ The name of the environment variable.
30
+
31
+ Returns
32
+ -------
33
+ str
34
+ The value of the environment variable.
35
+
36
+ Raises
37
+ ------
38
+ KeyError
39
+ If the environment variable does not exist.
40
+ """
41
+ pass
File without changes
@@ -0,0 +1,59 @@
1
+ from abc import ABC, abstractmethod
2
+ from orionis.luminate.providers.service_provider import ServiceProvider
3
+
4
+ class IServiceProvidersBootstrapper(ABC):
5
+
6
+ @abstractmethod
7
+ def _autoload(self) -> None:
8
+ """
9
+ Scans the provider directories and loads provider classes.
10
+
11
+ This method searches for Python files in the specified directories, imports them,
12
+ and registers any class that inherits from `ServiceProvider`.
13
+
14
+ Raises
15
+ ------
16
+ BootstrapRuntimeError
17
+ If there is an error loading a module.
18
+ """
19
+ pass
20
+
21
+ @abstractmethod
22
+ def _register(self, concrete: ServiceProvider) -> None:
23
+ """
24
+ Validates and registers a service provider class.
25
+
26
+ This method ensures that the provided class is valid (inherits from `ServiceProvider`,
27
+ has a `register` and `boot` method) and registers it in the
28
+ `_service_providers` dictionary.
29
+
30
+ Parameters
31
+ ----------
32
+ concrete : ServiceProvider
33
+ The service provider class to register
34
+ """
35
+ pass
36
+
37
+ @abstractmethod
38
+ def getBeforeServiceProviders(self) -> list:
39
+ """
40
+ Retrieve the registered service providers.
41
+
42
+ Returns
43
+ -------
44
+ list
45
+ A list of registered service providers
46
+ """
47
+ pass
48
+
49
+ @abstractmethod
50
+ def getAfterServiceProviders(self) -> list:
51
+ """
52
+ Retrieve the registered service providers.
53
+
54
+ Returns
55
+ -------
56
+ list
57
+ A list of registered service providers
58
+ """
59
+ pass
orionis/framework.py CHANGED
@@ -5,7 +5,7 @@
5
5
  NAME = "orionis"
6
6
 
7
7
  # Current version of the framework
8
- VERSION = "0.102.0"
8
+ VERSION = "0.105.0"
9
9
 
10
10
  # Full name of the author or maintainer of the project
11
11
  AUTHOR = "Raul Mauricio Uñate Castro"
orionis/luminate/app.py CHANGED
@@ -1,14 +1,19 @@
1
1
  from typing import Any, Callable
2
+ from orionis.contracts.foundation.i_bootstraper import IBootstrapper
3
+ from orionis.luminate.console.base.command import BaseCommand
2
4
  from orionis.luminate.container.container import Container
3
- from orionis.luminate.bootstrap.config_bootstrapper import ConfigBootstrapper
4
- from orionis.luminate.bootstrap.command_bootstrapper import CommandsBootstrapper
5
- from orionis.luminate.bootstrap.environment_bootstrapper import EnvironmentBootstrapper
5
+ from orionis.luminate.foundation.config.config_bootstrapper import ConfigBootstrapper
6
+ from orionis.luminate.foundation.console.command_bootstrapper import CommandsBootstrapper
7
+ from orionis.luminate.foundation.environment.environment_bootstrapper import EnvironmentBootstrapper
8
+ from orionis.luminate.foundation.providers.service_providers_bootstrapper import ServiceProvidersBootstrapper
6
9
  from orionis.luminate.patterns.singleton import SingletonMeta
7
10
  from orionis.luminate.providers.commands.reactor_commands_service_provider import ReactorCommandsServiceProvider
8
11
  from orionis.luminate.providers.commands.scheduler_provider import ScheduleServiceProvider
9
12
  from orionis.luminate.providers.environment.environment__service_provider import EnvironmentServiceProvider
10
13
  from orionis.luminate.providers.config.config_service_provider import ConfigServiceProvider
14
+ from orionis.luminate.providers.files.paths_provider import PathResolverProvider
11
15
  from orionis.luminate.providers.log.log_service_provider import LogServiceProvider
16
+ from orionis.luminate.providers.service_provider import ServiceProvider
12
17
 
13
18
  class Application(metaclass=SingletonMeta):
14
19
  """
@@ -49,6 +54,8 @@ class Application(metaclass=SingletonMeta):
49
54
  The dependency injection container for the application.
50
55
  """
51
56
  # Class attributes
57
+ self._before_boot_service_providers: list = []
58
+ self._after_boot_service_providers: list = []
52
59
  self._config: dict = {}
53
60
  self._commands: dict = {}
54
61
  self._environment_vars: dict = {}
@@ -57,7 +64,7 @@ class Application(metaclass=SingletonMeta):
57
64
  # Initialize the application container
58
65
  self.container = container
59
66
  self.container.instance(container)
60
- self.boot()
67
+ self._boot()
61
68
 
62
69
  def isBooted(self) -> bool:
63
70
  """
@@ -185,95 +192,118 @@ class Application(metaclass=SingletonMeta):
185
192
  """
186
193
  return self.container.forgetScopedInstances()
187
194
 
188
- def boot(self):
195
+ def _boot(self):
189
196
  """
190
- Bootstraps the application.
191
-
192
- This method is responsible for loading the environment, configuration, and core providers.
193
- It ensures the application is ready to handle requests or commands.
197
+ Bootstraps the application by loading environment configuration and core providers.
198
+ Notes
199
+ -----
200
+ The bootstrapping process involves several steps:
201
+ 1. Loading essential services.
202
+ 2. Executing pre-bootstrap provider hooks.
203
+ 3. Initializing core components.
204
+ 4. Executing post-bootstrap provider hooks.
205
+ 5. Loading command-line interface commands.
206
+ After these steps, the application is marked as booted.
194
207
  """
195
- # Load environment server
208
+ self._bootServices()
196
209
  self._beforeBootstrapProviders()
197
-
198
- # Dynamically load application configuration
199
210
  self._bootstraping()
200
-
201
- # Load core providers
202
211
  self._afterBootstrapProviders()
203
-
204
- # Set the booted flag to True
212
+ self._loadCommands()
205
213
  self._booted = True
206
214
 
215
+ def _bootServices(self):
216
+ """
217
+ Bootstraps the application services.
218
+
219
+ This method is responsible for loading the application's services. It reads all the
220
+ ServiceProviders from the Core and those defined by the developer. Then, it stores
221
+ in class dictionaries the services that need to be loaded before and after the Bootstrap.
222
+
223
+ Parameters
224
+ ----------
225
+ None
226
+
227
+ Returns
228
+ -------
229
+ None
230
+ """
231
+ services_bootstrapper_key = self.singleton(ServiceProvidersBootstrapper)
232
+ services_bootstrapper: ServiceProvidersBootstrapper = self.make(services_bootstrapper_key)
233
+ self._before_boot_service_providers = services_bootstrapper.getBeforeServiceProviders()
234
+ self._after_boot_service_providers = services_bootstrapper.getAfterServiceProviders()
235
+
207
236
  def _beforeBootstrapProviders(self):
208
237
  """
209
- Registers and boots essential providers required before bootstrapping.
238
+ Loads and registers essential services before bootstrapping.
210
239
 
211
- This method ensures that environment variables are loaded and available
212
- for use during the bootstrapping process.
240
+ This method is responsible for loading and registering the services that are
241
+ required before the main bootstrapping process. It iterates through the list
242
+ of service providers that need to be initialized early, registers them, and
243
+ then boots them to make sure they are ready for use.
213
244
  """
214
- # Load the environment provider, which is responsible for returning values from the .env file.
215
- # This provider is essential as it must be loaded first to resolve environment variables.
216
- # Developers can interact with it through the facade "orionis.luminate.facades.environment.environment_facade.Env".
217
- _environment_provider = EnvironmentServiceProvider(app=self.container)
218
- _environment_provider.register()
219
- _environment_provider.boot()
245
+ for service in self._before_boot_service_providers:
246
+ _environment_provider : ServiceProvider = service(app=self.container)
247
+ _environment_provider.register()
248
+ _environment_provider.boot()
220
249
 
221
250
  def _bootstraping(self):
222
251
  """
223
- Loads user-defined configuration, commands, and environment variables.
252
+ Loads configuration, commands, environment variables, and other bootstrappers.
224
253
 
225
- This method initializes the configuration, commands, and environment variables
226
- required for the application to function.
227
- """
228
- # This initializer loads the user-defined configuration from the "config" folder.
229
- # It extracts configuration values and stores them as class properties for future use.
230
- config_bootstrapper_key = self.singleton(ConfigBootstrapper)
231
- config_bootstrapper: ConfigBootstrapper = self.make(config_bootstrapper_key)
232
- self._config = config_bootstrapper.get()
233
-
234
- # This initializer dynamically searches for all user-defined commands in the "commands" folder,
235
- # both from the framework core and developer-defined commands.
236
- # It stores them in a dictionary and registers them in the container.
237
- commands_bootstrapper_key = self.singleton(CommandsBootstrapper)
238
- commands_bootstrapper: CommandsBootstrapper = self.make(commands_bootstrapper_key)
239
- self._commands = commands_bootstrapper.get()
240
- for command in self._commands.keys():
241
- _key_instance_container = self.bind(self._commands[command].get('concrete'))
242
- self.alias(alias=command, concrete=_key_instance_container)
254
+ This method initializes and updates the class dictionaries with the results
255
+ from various bootstrappers. It ensures that the application has the necessary
256
+ configuration, commands, and environment variables loaded before proceeding
257
+ with the rest of the bootstrapping process.
258
+ """
259
+ singletons_bootstrappers = [
260
+ (self._config, ConfigBootstrapper),
261
+ (self._commands, CommandsBootstrapper),
262
+ (self._environment_vars, EnvironmentBootstrapper)
263
+ ]
264
+ for bootstrapper in singletons_bootstrappers:
265
+ property_cls, bootstrapper_class = bootstrapper
266
+ bootstrapper_key = self.singleton(bootstrapper_class)
267
+ bootstrapper_instance : IBootstrapper = self.make(bootstrapper_key)
268
+ property_cls.update(bootstrapper_instance.get())
269
+
270
+ def _loadCommands(self):
271
+ """
272
+ Loads CLI commands, including both core system commands and those defined by the developer.
273
+
274
+ This method iterates over the commands stored in the `_commands` attribute, binds each command
275
+ to its corresponding concrete implementation, and registers the command alias.
276
+
277
+ Parameters
278
+ ----------
279
+ None
243
280
 
244
- # Load environment variables and store them as class properties.
245
- # This is useful for executing future tasks conditioned on environment values.
246
- environment_bootstrapper_key = self.singleton(EnvironmentBootstrapper)
247
- environment_bootstrapper: EnvironmentBootstrapper = self.make(environment_bootstrapper_key)
248
- self._environment_vars = environment_bootstrapper.get()
281
+ Returns
282
+ -------
283
+ None
284
+ """
285
+ for command in self._commands.keys():
286
+ data_command:dict = self._commands[command]
287
+ id_container_concrete = self.bind(data_command.get('concrete'))
288
+ self.alias(alias=command, concrete=id_container_concrete)
249
289
 
250
290
  def _afterBootstrapProviders(self):
251
291
  """
252
- Registers and boots additional providers after bootstrapping.
292
+ Loads services into the container that depend on the Bootstrap process being completed.
293
+
294
+ This method iterates over the list of service providers that need to be loaded after the
295
+ Bootstrap process. For each service provider, it creates an instance, registers it, and
296
+ then boots it.
297
+
298
+ Parameters
299
+ ----------
300
+ None
253
301
 
254
- This method ensures that configuration and logging providers are loaded
255
- and available for use in the application.
256
- """
257
- # Load the configuration provider, which is responsible for returning configuration values.
258
- # Developers can interact with it through the facade "orionis.luminate.facades.config.config_facade.Config".
259
- _environment_provider = ConfigServiceProvider(app=self.container)
260
- _environment_provider.register()
261
- _environment_provider.boot()
262
-
263
- # Load the log provider based on the application configuration defined by the developer.
264
- # Developers can interact with it through the facade "orionis.luminate.facades.log.log_facade.Log".
265
- _log_provider = LogServiceProvider(app=self.container)
266
- _log_provider.register()
267
- _log_provider.boot()
268
-
269
- # Load the scheduler provider, which is responsible for managing scheduled tasks.
270
- # Developers can interact with it through the facade "orionis.luminate.facades.scheduler.scheduler_facade.Schedule".
271
- _schedule_provider = ScheduleServiceProvider(app=self.container)
272
- _schedule_provider.register()
273
- _schedule_provider.boot()
274
-
275
- # Load the commands provider, which is responsible for executing and managing CLI commands.
276
- # Developers can interact with it through the facade "orionis.luminate.facades.commands.commands_facade.Commands".
277
- _commands_provider = ReactorCommandsServiceProvider(app=self.container)
278
- _commands_provider.register()
279
- _commands_provider.boot()
302
+ Returns
303
+ -------
304
+ None
305
+ """
306
+ for service in self._after_boot_service_providers:
307
+ _environment_provider : ServiceProvider = service(app=self.container)
308
+ _environment_provider.register()
309
+ _environment_provider.boot()
@@ -296,6 +296,22 @@ class Container(IContainer):
296
296
 
297
297
  return False
298
298
 
299
+ def bound(self, abstract: Any) -> bool:
300
+ """
301
+ Checks if a service is bound in the container.
302
+
303
+ Parameters
304
+ ----------
305
+ abstract : Any
306
+ The service class or alias to check.
307
+
308
+ Returns
309
+ -------
310
+ bool
311
+ True if the service is bound, False otherwise.
312
+ """
313
+ return self.has(abstract)
314
+
299
315
  def make(self, abstract: Any) -> Any:
300
316
  """
301
317
  Create and return an instance of a registered service.
File without changes
File without changes
@@ -2,9 +2,9 @@ import importlib
2
2
  import pathlib
3
3
  from dataclasses import asdict
4
4
  from typing import Any, Dict
5
- from orionis.contracts.bootstrap.i_config_bootstrapper import IConfigBootstrapper
5
+ from orionis.contracts.foundation.config.i_config_bootstrapper import IConfigBootstrapper
6
6
  from orionis.contracts.config.i_config import IConfig
7
- from orionis.luminate.bootstrap.exception_bootstrapper import BootstrapRuntimeError
7
+ from orionis.luminate.foundation.exceptions.exception_bootstrapper import BootstrapRuntimeError
8
8
 
9
9
  class ConfigBootstrapper(IConfigBootstrapper):
10
10
  """
File without changes
@@ -2,8 +2,8 @@ import pathlib
2
2
  import importlib
3
3
  import inspect
4
4
  from typing import Any, Callable, Dict, List
5
- from orionis.contracts.bootstrap.i_command_bootstrapper import ICommandsBootstrapper
6
- from orionis.luminate.bootstrap.exception_bootstrapper import BootstrapRuntimeError
5
+ from orionis.contracts.foundation.console.i_command_bootstrapper import ICommandsBootstrapper
6
+ from orionis.luminate.foundation.exceptions.exception_bootstrapper import BootstrapRuntimeError
7
7
  from orionis.luminate.console.base.command import BaseCommand
8
8
 
9
9
  class CommandsBootstrapper(ICommandsBootstrapper):
@@ -58,7 +58,7 @@ class CommandsBootstrapper(ICommandsBootstrapper):
58
58
  # Define the directories to scan for commands
59
59
  command_dirs = [
60
60
  base_path / "app" / "console" / "commands", # Developer-defined commands
61
- pathlib.Path(__file__).resolve().parent.parent / "console" / "commands" # Core commands
61
+ pathlib.Path(__file__).resolve().parent.parent.parent / "console" / "commands" # Core commands
62
62
  ]
63
63
 
64
64
  for cmd_dir in command_dirs:
File without changes
@@ -1,5 +1,5 @@
1
1
  from typing import Dict
2
- from orionis.contracts.bootstrap.i_environment_bootstrapper import IEnvironmentBootstrapper
2
+ from orionis.contracts.foundation.environment.i_environment_bootstrapper import IEnvironmentBootstrapper
3
3
  from orionis.luminate.facades.app import app
4
4
  from orionis.luminate.services.environment.environment_service import EnvironmentService
5
5
 
File without changes
File without changes
@@ -0,0 +1,98 @@
1
+ import importlib
2
+ import inspect
3
+ import pathlib
4
+ from orionis.contracts.foundation.providers.i_service_providers_bootstrapper import IServiceProvidersBootstrapper
5
+ from orionis.luminate.container.container import Container
6
+ from orionis.luminate.foundation.exceptions.exception_bootstrapper import BootstrapRuntimeError
7
+ from orionis.luminate.providers.service_provider import ServiceProvider
8
+
9
+ class ServiceProvidersBootstrapper(IServiceProvidersBootstrapper):
10
+
11
+ def __init__(self, container : Container) -> None:
12
+ self._container = container
13
+ self._before_providers = []
14
+ self._after_providers = []
15
+ self._autoload()
16
+
17
+ def _autoload(self) -> None:
18
+ """
19
+ Scans the provider directories and loads provider classes.
20
+
21
+ This method searches for Python files in the specified directories, imports them,
22
+ and registers any class that inherits from `ServiceProvider`.
23
+
24
+ Raises
25
+ ------
26
+ BootstrapRuntimeError
27
+ If there is an error loading a module.
28
+ """
29
+
30
+ base_path = pathlib.Path.cwd()
31
+
32
+ command_dirs = [
33
+ pathlib.Path(__file__).resolve().parent.parent.parent / "providers"
34
+ ]
35
+
36
+ for cmd_dir in command_dirs:
37
+ if not cmd_dir.is_dir():
38
+ continue
39
+
40
+ for file_path in cmd_dir.rglob("*.py"):
41
+ if file_path.name == "__init__.py":
42
+ continue
43
+
44
+ module_path = ".".join(file_path.relative_to(base_path).with_suffix("").parts)
45
+
46
+ # Remove 'site-packages.' prefix if present
47
+ if 'site-packages.' in module_path:
48
+ module_path = module_path.split('site-packages.')[1]
49
+
50
+ try:
51
+ module = importlib.import_module(module_path.strip())
52
+
53
+ # Find and register command classes
54
+ for name, concrete in inspect.getmembers(module, inspect.isclass):
55
+ if issubclass(concrete, ServiceProvider) and concrete is not ServiceProvider:
56
+ self._register(concrete)
57
+ except Exception as e:
58
+ raise BootstrapRuntimeError(f"Error loading {module_path}") from e
59
+
60
+ def _register(self, concrete: ServiceProvider) -> None:
61
+ """
62
+ Validates and registers a service provider class.
63
+
64
+ This method ensures that the provided class is valid (inherits from `ServiceProvider`,
65
+ has a `register` and `boot` method) and registers it in the
66
+ `_service_providers` dictionary.
67
+
68
+ Parameters
69
+ ----------
70
+ concrete : ServiceProvider
71
+ The service provider class to register
72
+ """
73
+ if concrete.beferoBootstrapping:
74
+ self._before_providers.append(concrete)
75
+ else:
76
+ self._after_providers.append(concrete)
77
+
78
+ def getBeforeServiceProviders(self) -> list:
79
+ """
80
+ Retrieve the registered service providers.
81
+
82
+ Returns
83
+ -------
84
+ list
85
+ A list of registered service providers
86
+ """
87
+ return self._before_providers
88
+
89
+ def getAfterServiceProviders(self) -> list:
90
+ """
91
+ Retrieve the registered service providers.
92
+
93
+ Returns
94
+ -------
95
+ list
96
+ A list of registered service providers
97
+ """
98
+ return self._after_providers
@@ -1,12 +1,18 @@
1
1
  from orionis.luminate.providers.service_provider import ServiceProvider
2
2
  from orionis.luminate.services.environment.environment_service import EnvironmentService
3
+ from orionis.luminate.services.files.path_resolver_service import PathResolverService
3
4
 
4
5
  class EnvironmentServiceProvider(ServiceProvider):
5
6
 
7
+ beferoBootstrapping = True
8
+
6
9
  def register(self) -> None:
7
10
  """
8
11
  Registers services or bindings into the given container.
9
12
  """
13
+ if not self.app.bound(PathResolverService):
14
+ self.app.singleton(PathResolverService)
15
+
10
16
  self._container_id = self.app.singleton(EnvironmentService)
11
17
 
12
18
  def boot(self) -> None:
File without changes
@@ -0,0 +1,21 @@
1
+ from orionis.luminate.providers.service_provider import ServiceProvider
2
+ from orionis.luminate.services.files.path_resolver_service import PathResolverService
3
+
4
+ class PathResolverProvider(ServiceProvider):
5
+
6
+ beferoBootstrapping = True
7
+
8
+ def register(self) -> None:
9
+ """
10
+ Registers services or bindings into the given container.
11
+ """
12
+ self._container_id = self.app.singleton(PathResolverService)
13
+
14
+ def boot(self) -> None:
15
+ """
16
+ Boot the service provider.
17
+
18
+ This method is intended to be overridden by subclasses to perform
19
+ any necessary bootstrapping or initialization tasks.
20
+ """
21
+ self.app.make(self._container_id)
@@ -11,6 +11,10 @@ class ServiceProvider(IServiceProvider):
11
11
  The container instance to be used by the service provider.
12
12
  """
13
13
 
14
+ # Indicates whether the service provider is a bootstrapper.
15
+ beferoBootstrapping = False
16
+
17
+
14
18
  def __init__(self, app : Container) -> None:
15
19
  """
16
20
  Initialize the service provider with the given container.
@@ -1,7 +1,7 @@
1
1
  import time
2
2
  from typing import Any, Dict, Optional
3
3
  from orionis.contracts.services.commands.i_reactor_commands_service import IReactorCommandsService
4
- from orionis.luminate.bootstrap.command_bootstrapper import CommandsBootstrapper
4
+ from orionis.luminate.foundation.console.command_bootstrapper import CommandsBootstrapper
5
5
  from orionis.luminate.console.base.command import BaseCommand
6
6
  from orionis.luminate.console.command_filter import CommandFilter
7
7
  from orionis.luminate.console.exceptions.cli_exception import CLIOrionisException
@@ -1,7 +1,7 @@
1
1
  import copy
2
2
  from typing import Any, Optional
3
3
  from orionis.contracts.services.config.i_config_service import IConfigService
4
- from orionis.luminate.bootstrap.config_bootstrapper import ConfigBootstrapper
4
+ from orionis.luminate.foundation.config.config_bootstrapper import ConfigBootstrapper
5
5
 
6
6
  class ConfigService(IConfigService):
7
7
 
@@ -1,14 +1,10 @@
1
1
  import os
2
- import threading
3
2
  from pathlib import Path
4
3
  from orionis.contracts.services.files.i_path_resolver_service import IPathResolverService
5
4
 
6
5
  class PathResolverService(IPathResolverService):
7
6
 
8
- _lock = threading.Lock()
9
- _instance = None
10
-
11
- def __new__(cls):
7
+ def __init__(self):
12
8
  """
13
9
  Override the __new__ method to ensure only one instance of the class is created.
14
10
 
@@ -17,12 +13,7 @@ class PathResolverService(IPathResolverService):
17
13
  PathResolverService
18
14
  The singleton instance of the PathResolverService class.
19
15
  """
20
- # Use the lock to ensure thread-safe instantiation
21
- with cls._lock:
22
- if cls._instance is None:
23
- cls._instance = super().__new__(cls)
24
- cls._instance.base_path = Path(os.getcwd())
25
- return cls._instance
16
+ self.base_path = Path(os.getcwd())
26
17
 
27
18
  def resolve(self, route: str) -> str:
28
19
  """
@@ -51,9 +42,10 @@ class PathResolverService(IPathResolverService):
51
42
  real_path = (self.base_path / route).resolve()
52
43
 
53
44
  # Validate that the path exists and is either a directory or a file
54
- if not real_path.exists():
55
- raise Exception(f"The requested path does not exist or is invalid: {real_path}")
56
- if not (real_path.is_dir() or real_path.is_file()):
57
- raise Exception(f"The requested path does not exist or is invalid: {real_path}")
45
+ if not str(real_path).endswith('.log'):
46
+ if not real_path.exists():
47
+ raise Exception(f"The requested path does not exist or is invalid: {real_path}")
48
+ if not (real_path.is_dir() or real_path.is_file()):
49
+ raise Exception(f"The requested path does not exist or is invalid: {real_path}")
58
50
 
59
51
  return str(real_path)
@@ -1,9 +1,9 @@
1
1
  import logging
2
2
  import os
3
+ from pathlib import Path
3
4
  import re
4
5
  from datetime import datetime
5
6
  from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler
6
- from pathlib import Path
7
7
  from orionis.contracts.services.log.i_log_service import ILogguerService
8
8
  from orionis.luminate.services.config.config_service import ConfigService
9
9
 
@@ -69,11 +69,16 @@ class LogguerService(ILogguerService):
69
69
  """
70
70
  try:
71
71
 
72
+ base = Path(self.config_service.get("logging.base_path", os.getcwd()))
73
+ default_path = base / "storage" / "logs"
74
+ default_path.mkdir(parents=True, exist_ok=True)
75
+ default_path = default_path / "orionis.log"
76
+
72
77
  handlers = []
73
78
 
74
79
  channel : str = self.config_service.get("logging.default")
75
80
  config : dict = self.config_service.get(f"logging.channels.{channel}", {})
76
- path : str = config.get("path", 'logs/orionis.log')
81
+ path : str = config.get("path", default_path)
77
82
  app_timezone : str = self.config_service.get("app.timezone", "UTC")
78
83
 
79
84
  if channel == "stack":
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: orionis
3
- Version: 0.102.0
3
+ Version: 0.105.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,10 +1,7 @@
1
1
  orionis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  orionis/cli_manager.py,sha256=0bM-hABXJSoPGuvEgnqeaj9qcLP8VjTQ3z9Mb0TSEUI,1381
3
- orionis/framework.py,sha256=YWZ3TMbObSI7tTh0sQ_8GdPE5iuISw0Owq21D0nUWBQ,1387
3
+ orionis/framework.py,sha256=bk-HxUFwZ8MRaZjsxSEi-aWil4sP52EFlHTRKODFQ30,1387
4
4
  orionis/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- orionis/contracts/bootstrap/i_command_bootstrapper.py,sha256=cfpYWSlNhOY1q_C9o0H7F381OoM0Oh0qaeqP-c85nzk,2457
6
- orionis/contracts/bootstrap/i_config_bootstrapper.py,sha256=d2TXT74H2fCBbzWgrt9-ZG11S_H_YPQOEcJoIOrsgb0,4462
7
- orionis/contracts/bootstrap/i_environment_bootstrapper.py,sha256=MEeZmh0XWvzvWHFB5ZOp5SKY89F1IHsIXJvdjmEncJU,1076
8
5
  orionis/contracts/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
6
  orionis/contracts/config/i_config.py,sha256=rbeojO2gm8XhSXIPY8EnUt4e0wO633OKF9Nx_tN5y60,785
10
7
  orionis/contracts/console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -18,7 +15,7 @@ orionis/contracts/console/output/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRk
18
15
  orionis/contracts/console/output/i_console.py,sha256=bkYTT5oIK3NP-p7XONgi1z_SO50ZvJu31Nv7cjs4t7s,8902
19
16
  orionis/contracts/console/output/i_executor.py,sha256=MGMTTPSwF8dgCjHD3A4CKtYDaCcD-KU28dorC61Q04k,1411
20
17
  orionis/contracts/console/output/i_progress_bar.py,sha256=sOkQzQsliFemqZHMyzs4fWhNJfXDTk5KH3aExReetSE,1760
21
- orionis/contracts/container/i_container.py,sha256=MSJkVNawcovxSUAG-nrEctMYLT8H0OJq15pL5UwJeqA,6932
18
+ orionis/contracts/container/i_container.py,sha256=B2gsvuHU8IyeVkAOVUlY2T_1VPzBb3uWRQUfdP4ak_c,7322
22
19
  orionis/contracts/container/i_types.py,sha256=GCH7x3PjpXKPET3l84GcXbcM8cpne8AGrmTw-uFaT24,526
23
20
  orionis/contracts/facades/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
21
  orionis/contracts/facades/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -34,6 +31,16 @@ orionis/contracts/facades/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
34
31
  orionis/contracts/facades/log/i_log_facade.py,sha256=xkdR6nMAENv9NLOFUAnk1WRh9bYuisSAhnlkdlD5O7g,1894
35
32
  orionis/contracts/facades/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
33
  orionis/contracts/facades/tests/i_tests_facade.py,sha256=GM6d9skPZwynx1lu_abfuJ_L5GvG9b12vI-KX7phYJc,890
34
+ orionis/contracts/foundation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
+ orionis/contracts/foundation/i_bootstraper.py,sha256=9IFxjUW5akHTUb_BLwxiy88OIJkl0bptUOBVdfnk2PU,1165
36
+ orionis/contracts/foundation/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
+ orionis/contracts/foundation/config/i_config_bootstrapper.py,sha256=d2TXT74H2fCBbzWgrt9-ZG11S_H_YPQOEcJoIOrsgb0,4462
38
+ orionis/contracts/foundation/console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
39
+ orionis/contracts/foundation/console/i_command_bootstrapper.py,sha256=cfpYWSlNhOY1q_C9o0H7F381OoM0Oh0qaeqP-c85nzk,2457
40
+ orionis/contracts/foundation/environment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
+ orionis/contracts/foundation/environment/i_environment_bootstrapper.py,sha256=MEeZmh0XWvzvWHFB5ZOp5SKY89F1IHsIXJvdjmEncJU,1076
42
+ orionis/contracts/foundation/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
+ orionis/contracts/foundation/providers/i_service_providers_bootstrapper.py,sha256=iwILmTiDQBENOjJprCeAnZb-1YNeW_5PQUXDU_P6vog,1654
37
44
  orionis/contracts/installer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
45
  orionis/contracts/installer/i_installer_manager.py,sha256=Zfndhuyu0JaTKo3PsGsKmVsvotQMw8Pmt4KQp97elY8,1567
39
46
  orionis/contracts/installer/i_installer_output.py,sha256=SQZeXg5HRu-x1697HCdoU1-RVJWEqCWY-zNboWnc_vs,2897
@@ -60,14 +67,8 @@ orionis/installer/installer_manager.py,sha256=Hb6T0bmSl39T30maY-nUWkrLhG77JdrKe4
60
67
  orionis/installer/installer_output.py,sha256=LeKxzuXpnHOKbKpUtx3tMGkCi2bGcPV1VNnfBxwfxUU,7161
61
68
  orionis/installer/installer_setup.py,sha256=c2HtVklSa-2_-YVonc7fwtoK-RTDqBS2Ybvbekgfqtc,6970
62
69
  orionis/luminate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- orionis/luminate/app.py,sha256=cQZdnPOKZ7Sm4OWvR55U-DwKGPFnDfWgXQM4sB2AG4s,12088
70
+ orionis/luminate/app.py,sha256=iLTVHV0NYHLKgpttka4I4pGclCnlKPFjAiyP6zFqk8I,12517
64
71
  orionis/luminate/app_context.py,sha256=se2xpsGoy_drcuOROC7OHaIAN5Yd0kbm5V1zzsxxyQc,996
65
- orionis/luminate/bootstrap/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
66
- orionis/luminate/bootstrap/command_bootstrapper.py,sha256=lWlrgE7rWYRS7w6TlTHd0lrXDJxwHKqXH06vL7-sDvw,7029
67
- orionis/luminate/bootstrap/config_bootstrapper.py,sha256=Gw83UtPAOggwzqmz062JfJcpIfmZvmIQyZJfgVFiIcQ,7474
68
- orionis/luminate/bootstrap/environment_bootstrapper.py,sha256=GTZ-mBumoNlxYcqsQksw4XyH3TRfPkWAU62mB3wFKLk,2777
69
- orionis/luminate/bootstrap/exception_bootstrapper.py,sha256=wDKfEW295c7-bavr7YUHK2CLYcTSZgjT9ZRSBne6GOE,1356
70
- orionis/luminate/bootstrap/service_providers_bootstrapper.py,sha256=bQK1yDLP9dqks3TQhTaJDnrnla_79Tw8wTOY2AsLuDQ,268
71
72
  orionis/luminate/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
73
  orionis/luminate/config/app.py,sha256=7teuVPuaV2ao0M5Bv-jhSgjEwb9DtVwde2saTRmYru4,1737
73
74
  orionis/luminate/config/auth.py,sha256=CG8F0pfVjKz4DY3d1Wi7gscdhnp4TT-Q8SJ2sdsHh18,523
@@ -98,7 +99,7 @@ orionis/luminate/console/output/console.py,sha256=khlnCmhGW3Iu2YYO8GG7YLtnLeqysy
98
99
  orionis/luminate/console/output/executor.py,sha256=0_6AGM1vE5umdpVVogQUE5eW9cu5UUQwc-ZvuccTI8E,3362
99
100
  orionis/luminate/console/output/progress_bar.py,sha256=ssi8Drryr-shl7OxweTgGOhvRvAlCVxjBGm1L1qyO84,3089
100
101
  orionis/luminate/console/output/styles.py,sha256=2e1_FJdNpKaVqmdlCx-udzTleH_6uEFE9_TjH7T1ZUk,3696
101
- orionis/luminate/container/container.py,sha256=AHVf0cWDcDmDTPLxDMErq9TvExRzZB0gzPlHBmFu9Cc,16602
102
+ orionis/luminate/container/container.py,sha256=FFviW62whQwXVsvFCGnA6KJ1ynYckZUw3MGrizxYXLI,16992
102
103
  orionis/luminate/container/exception.py,sha256=ap1SqYEjQEEHXJJTNmL7V1jrmRjgT5_7geZ95MYkhMA,1691
103
104
  orionis/luminate/container/types.py,sha256=BDcXN0__voRNHZ5Gr5dF0sWIYAQyNk4TxAwILBWyDAA,1735
104
105
  orionis/luminate/facades/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -116,31 +117,44 @@ orionis/luminate/facades/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
116
117
  orionis/luminate/facades/log/log_facade.py,sha256=_F5-Vnon6hZKefrTwurvraW8lfoG99VmLql_prMdKm8,2482
117
118
  orionis/luminate/facades/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
118
119
  orionis/luminate/facades/tests/tests_facade.py,sha256=eH_fyXjzEVw8aqEwxAgSujFUItz2woau6hc2Mf4VlkE,1660
120
+ orionis/luminate/foundation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
121
+ orionis/luminate/foundation/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
+ orionis/luminate/foundation/config/config_bootstrapper.py,sha256=42OIgBLX0R2hW0wSkDqqKmZl4aKBjYCcH52nuEBgy9M,7494
123
+ orionis/luminate/foundation/console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
+ orionis/luminate/foundation/console/command_bootstrapper.py,sha256=7m_lME1qou9fpy3U7OGArO6KhU448qA-oTB4tVxosTs,7057
125
+ orionis/luminate/foundation/environment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
+ orionis/luminate/foundation/environment/environment_bootstrapper.py,sha256=15xpmzUjnFfFlo-zg7w-WbJiQPlEjVr-i2VufMsnZhs,2790
127
+ orionis/luminate/foundation/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
+ orionis/luminate/foundation/exceptions/exception_bootstrapper.py,sha256=wDKfEW295c7-bavr7YUHK2CLYcTSZgjT9ZRSBne6GOE,1356
129
+ orionis/luminate/foundation/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
+ orionis/luminate/foundation/providers/service_providers_bootstrapper.py,sha256=YS_fBrwc-2qcVq_W1Y5sblOHpFuz67xLXmhhhPNrHNI,3480
119
131
  orionis/luminate/patterns/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
132
  orionis/luminate/patterns/singleton.py,sha256=b3U0nubKSQWyal5wTXADVPtOztkaTk-M8Zwy-bje1L0,1425
121
133
  orionis/luminate/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
122
- orionis/luminate/providers/service_provider.py,sha256=Ave9V10KPVCI6bt3HwJ51322P-_RnQuHXkC-ltlAOOA,1537
134
+ orionis/luminate/providers/service_provider.py,sha256=7Hz33bMmSZ11H_4x8-h4IAVqlTByPr_l8tfZEYe8gIM,1639
123
135
  orionis/luminate/providers/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
136
  orionis/luminate/providers/commands/reactor_commands_service_provider.py,sha256=3HX3wwPCH_Y9OsoTyfC4_LrNlPW_-UaffDcz3Wehuvk,701
125
137
  orionis/luminate/providers/commands/scheduler_provider.py,sha256=owOzdGIZmkeTFJQ3yyG8Hk2Kb8l-jXmaJHAo7v3_uAk,670
126
138
  orionis/luminate/providers/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
139
  orionis/luminate/providers/config/config_service_provider.py,sha256=NLKB3Vcu4kqZ0WyeImMG3CsclSu_P4aWs6yXitcv474,659
128
140
  orionis/luminate/providers/environment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
- orionis/luminate/providers/environment/environment__service_provider.py,sha256=Ljqcz7P8K6wYwigUnkzMMQZvBtZrPDKP3HHO-xSaoVg,686
141
+ orionis/luminate/providers/environment/environment__service_provider.py,sha256=-A9QlyD-mlQJsRfDr0IEudOVp0CgTgir9y1Dw8ERY6I,915
142
+ orionis/luminate/providers/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
143
+ orionis/luminate/providers/files/paths_provider.py,sha256=bZVuOVn44ysE_NPupxe9xZPP0D3ay5Ztdnsbi-Fv43o,712
130
144
  orionis/luminate/providers/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
131
145
  orionis/luminate/providers/log/log_service_provider.py,sha256=tcWDEI-fubi1mWSS-IKiRReuc0pRMHpxvbvuDgs2Uy0,654
132
146
  orionis/luminate/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
147
  orionis/luminate/services/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
- orionis/luminate/services/commands/reactor_commands_service.py,sha256=2kydqQak61enzzoBxQOghWSco1hv2ZFwANJf7d_p9zQ,6441
148
+ orionis/luminate/services/commands/reactor_commands_service.py,sha256=7rWGrBmg7JL8WexJjLhKXXZgfWAnghENBm9Tp5yqY8w,6450
135
149
  orionis/luminate/services/commands/scheduler_service.py,sha256=JB0f-yOyb7Uz6NLVM4QH2q9_wC-81Mhek-OSKpfOS0o,22577
136
150
  orionis/luminate/services/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
- orionis/luminate/services/config/config_service.py,sha256=sVqX3UBxZA5whjiVFgfo5fzAb8QxD0NT0OYYlgZUK0g,2223
151
+ orionis/luminate/services/config/config_service.py,sha256=X6ExWZfMlG6TJ2j6vWR1YnxQhnbm8TfY6vyFP2tIHzU,2231
138
152
  orionis/luminate/services/environment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
153
  orionis/luminate/services/environment/environment_service.py,sha256=IgrfzLELNhnEuz9rn2lYBvv3JQrgiNCGLA34pQ__nxY,4136
140
154
  orionis/luminate/services/files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
- orionis/luminate/services/files/path_resolver_service.py,sha256=E-G_E2H5QAZyxeMssARp7l1OBSxQurxkUPoKdSOCKEE,2041
155
+ orionis/luminate/services/files/path_resolver_service.py,sha256=Xsxrp-WIQLwKldW98p1dggb_BvDV9MDo-9MWNxiWCD0,1811
142
156
  orionis/luminate/services/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
143
- orionis/luminate/services/log/log_service.py,sha256=gYbjDV4Lh2f4qFbDItWtZ68pywTITyNkLyv2jyzbZz0,8130
157
+ orionis/luminate/services/log/log_service.py,sha256=vaGw2VXCIiaUcPD90BFNtmB2O2pKm9MZdUs5xg9rxEE,8382
144
158
  orionis/luminate/support/dot_dict.py,sha256=FVHfBuAGTTVMjNG01Fix645fRNKKUMmNx61pYkxPL5c,1253
145
159
  orionis/luminate/support/exception_to_dict.py,sha256=jpQ-c7ud1JLm8dTWbvMT1dI-rL3yTB2P8VxNscAX71k,2098
146
160
  orionis/luminate/support/reflection.py,sha256=VYpluTQJ0W_m6jYQ9_L02sYFrk2wlLYtLY2yp9rZMKA,11944
@@ -161,9 +175,9 @@ tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
161
175
  tests/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
162
176
  tests/tools/class_example.py,sha256=dIPD997Y15n6WmKhWoOFSwEldRm9MdOHTZZ49eF1p3c,1056
163
177
  tests/tools/test_reflection.py,sha256=bhLQ7VGVod4B8sv-rW9AjnOumvaBVsoxieA3sdoM2yM,5244
164
- orionis-0.102.0.dist-info/LICENCE,sha256=-_4cF2EBKuYVS_SQpy1uapq0oJPUU1vl_RUWSy2jJTo,1111
165
- orionis-0.102.0.dist-info/METADATA,sha256=-BMs41KkD-8nawh232ge2P4r9dg9Rbc8MmZhnUpazxk,2979
166
- orionis-0.102.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
167
- orionis-0.102.0.dist-info/entry_points.txt,sha256=eef1_CVewfokKjrGBynXa06KabSJYo7LlDKKIKvs1cM,53
168
- orionis-0.102.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
169
- orionis-0.102.0.dist-info/RECORD,,
178
+ orionis-0.105.0.dist-info/LICENCE,sha256=-_4cF2EBKuYVS_SQpy1uapq0oJPUU1vl_RUWSy2jJTo,1111
179
+ orionis-0.105.0.dist-info/METADATA,sha256=_QXOAmotcAZJFwT9Kvie4EQhymh1ja8S_bCrzfZS2wg,2979
180
+ orionis-0.105.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
181
+ orionis-0.105.0.dist-info/entry_points.txt,sha256=eef1_CVewfokKjrGBynXa06KabSJYo7LlDKKIKvs1cM,53
182
+ orionis-0.105.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
183
+ orionis-0.105.0.dist-info/RECORD,,
@@ -1,10 +0,0 @@
1
- from orionis.luminate.container.container import Container
2
-
3
- class ServiceProvidersBootstrapper:
4
-
5
- def __init__(self, container : Container) -> None:
6
- self._container = container
7
- self._autoload()
8
-
9
- def _autoload(self) -> None:
10
- pass