orionis 0.453.0__py3-none-any.whl → 0.455.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.
@@ -0,0 +1,36 @@
1
+ from orionis.console.base.command import BaseCommand
2
+ from orionis.console.exceptions import CLIOrionisRuntimeError
3
+ from rich.console import Console
4
+ from rich.panel import Panel
5
+
6
+ class HelpCommand(BaseCommand):
7
+ """
8
+ Command class to display usage information for the Orionis CLI.
9
+ """
10
+
11
+ timestamps: bool = False
12
+ signature: str = "help"
13
+ description: str = "Prints help information for the Orionis CLI commands."
14
+
15
+ def handle(self) -> None:
16
+ """
17
+ Executes the command to display usage information for the Orionis CLI.
18
+ """
19
+ try:
20
+ console = Console()
21
+ usage = (
22
+ "[bold cyan]Usage:[/]\n"
23
+ " orionis <command> [options]\n\n"
24
+ "[bold cyan]Available Commands:[/]\n"
25
+ " help Show this help message\n"
26
+ " run Run the application\n"
27
+ " make Generate code scaffolding\n"
28
+ " migrate Run database migrations\n"
29
+ " ... Other available commands\n\n"
30
+ "[bold cyan]Options:[/]\n"
31
+ " -h, --help Show this help message and exit\n"
32
+ )
33
+ panel = Panel(usage, title="[bold green]Orionis CLI Help[/]", expand=False, border_style="bright_blue")
34
+ console.print(panel)
35
+ except Exception as e:
36
+ raise CLIOrionisRuntimeError(f"An unexpected error occurred: {e}") from e
@@ -1,6 +1,8 @@
1
1
  from orionis.console.base.command import BaseCommand
2
2
  from orionis.console.exceptions import CLIOrionisRuntimeError
3
- from orionis.metadata.framework import VERSION
3
+ from rich.console import Console
4
+ from rich.panel import Panel
5
+ from orionis.metadata import framework
4
6
 
5
7
  class VersionCommand(BaseCommand):
6
8
  """
@@ -8,6 +10,7 @@ class VersionCommand(BaseCommand):
8
10
 
9
11
  This command prints the version number of the framework in use.
10
12
  """
13
+ timestamps: bool = False
11
14
 
12
15
  signature: str = "version"
13
16
 
@@ -39,7 +42,32 @@ class VersionCommand(BaseCommand):
39
42
 
40
43
  # Print the Orionis framework version in a bold, success style
41
44
  try:
42
- self.textSuccessBold(f"Orionis Framework v{VERSION}")
45
+
46
+ # Initialize the console for rich output
47
+ console = Console()
48
+
49
+ # Compose the main info
50
+ title = f"[bold yellow]{framework.NAME.capitalize()} Framework[/bold yellow] [white]v{framework.VERSION}[/white]"
51
+ author = f"[bold]Author:[/bold] {framework.AUTHOR} | [bold]Email:[/bold] {framework.AUTHOR_EMAIL}"
52
+ desc = f"[italic]{framework.DESCRIPTION}[/italic]"
53
+ python_req = f"[bold]Python Requires:[/bold] {framework.PYTHON_REQUIRES}"
54
+ docs = f"[bold]Docs:[/bold] [underline blue]{framework.DOCS}[/underline blue]"
55
+ repo = f"[bold]Repo:[/bold] [underline blue]{framework.FRAMEWORK}[/underline blue]"
56
+
57
+ body = "\n".join([desc, "", author, python_req, docs, repo, ""])
58
+
59
+ panel = Panel(
60
+ body,
61
+ title=title,
62
+ border_style="bold yellow",
63
+ padding=(1, 6),
64
+ expand=False,
65
+ subtitle="[bold yellow]Orionis CLI[/bold yellow]",
66
+ subtitle_align="right"
67
+ )
68
+ console.line()
69
+ console.print(panel)
70
+ console.line()
43
71
 
44
72
  # Raise a custom runtime error if any exception occurs
45
73
  except Exception as e:
@@ -0,0 +1,39 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import List, Optional
3
+
4
+ class IReactor(ABC):
5
+
6
+ @abstractmethod
7
+ def call(
8
+ self,
9
+ signature: str,
10
+ args: Optional[List[str]] = None
11
+ ):
12
+ """
13
+ Executes a command by its signature with optional command-line arguments.
14
+
15
+ This method retrieves a registered command by its signature, validates any provided
16
+ arguments against the command's argument parser, and executes the command's handle
17
+ method with the parsed arguments and application context.
18
+
19
+ Parameters
20
+ ----------
21
+ signature : str
22
+ The unique signature identifier of the command to execute.
23
+ args : Optional[List[str]], default None
24
+ Command-line arguments to pass to the command. If None, no arguments are provided.
25
+
26
+ Returns
27
+ -------
28
+ None
29
+ This method does not return any value. The command's handle method is called
30
+ directly for execution.
31
+
32
+ Raises
33
+ ------
34
+ ValueError
35
+ If the command with the specified signature is not found in the registry.
36
+ SystemExit
37
+ If argument parsing fails due to invalid arguments provided.
38
+ """
39
+ pass
@@ -1,21 +1,21 @@
1
1
  import argparse
2
2
  import os
3
- from pathlib import Path
3
+ import re
4
4
  import time
5
+ from pathlib import Path
5
6
  from typing import List, Optional
6
7
  from orionis.app import Orionis
7
8
  from orionis.console.args.argument import CLIArgument
8
9
  from orionis.console.base.command import BaseCommand
9
10
  from orionis.console.base.contracts.command import IBaseCommand
11
+ from orionis.console.contracts.reactor import IReactor
10
12
  from orionis.console.output.contracts.console import IConsole
11
13
  from orionis.console.output.contracts.executor import IExecutor
12
14
  from orionis.foundation.contracts.application import IApplication
13
15
  from orionis.services.introspection.modules.reflection import ReflectionModule
14
- import re
16
+ from orionis.services.log.contracts.log_service import ILogger
15
17
 
16
- from orionis.services.log.contracts.log_service import ILoggerService
17
-
18
- class Reactor:
18
+ class Reactor(IReactor):
19
19
 
20
20
  def __init__(
21
21
  self,
@@ -65,6 +65,9 @@ class Reactor:
65
65
  # Automatically discover and load command classes from the console commands directory
66
66
  self.__loadCommands(str(self.__app.path('console_commands')), self.__root)
67
67
 
68
+ # Load core command classes provided by the Orionis framework
69
+ self.__loadCoreCommands()
70
+
68
71
  # Initialize the executor for command output management
69
72
  self.__executer: IExecutor = self.__app.make('x-orionis.console.output.executor')
70
73
 
@@ -72,7 +75,57 @@ class Reactor:
72
75
  self.__console: IConsole = self.__app.make('x-orionis.console.output.console')
73
76
 
74
77
  # Initialize the logger service for logging command execution details
75
- self.__logger: ILoggerService = self.__app.make('x-orionis.services.log.log_service')
78
+ self.__logger: ILogger = self.__app.make('x-orionis.services.log.log_service')
79
+
80
+ def __loadCoreCommands(self) -> None:
81
+ """
82
+ Loads and registers core command classes provided by the Orionis framework.
83
+
84
+ This method is responsible for discovering and registering core command classes
85
+ that are bundled with the Orionis framework itself (such as version, help, etc.).
86
+ These commands are essential for the framework's operation and are made available
87
+ to the command registry so they can be executed like any other user-defined command.
88
+
89
+ The method imports the required core command classes, validates their structure,
90
+ and registers them in the internal command registry. Each command is checked for
91
+ required attributes such as `timestamps`, `signature`, `description`, and `arguments`
92
+ to ensure proper integration and discoverability.
93
+
94
+ Returns
95
+ -------
96
+ None
97
+ This method does not return any value. All discovered core commands are
98
+ registered internally in the reactor's command registry for later lookup
99
+ and execution.
100
+ """
101
+
102
+ # Import the core command class for version
103
+ from orionis.console.commands.version import VersionCommand
104
+ from orionis.console.commands.help import HelpCommand
105
+
106
+ # List of core command classes to load (extend this list as more core commands are added)
107
+ core_commands = [
108
+ VersionCommand,
109
+ HelpCommand
110
+ ]
111
+
112
+ # Iterate through the core command classes and register them
113
+ for obj in core_commands:
114
+
115
+ # Validate and extract required command attributes
116
+ timestamp = self.__ensureTimestamps(obj)
117
+ signature = self.__ensureSignature(obj)
118
+ description = self.__ensureDescription(obj)
119
+ args = self.__ensureArguments(obj)
120
+
121
+ # Register the command in the internal registry with all its metadata
122
+ self.__commands[signature] = {
123
+ "class": obj,
124
+ "timestamps": timestamp,
125
+ "signature": signature,
126
+ "description": description,
127
+ "args": args
128
+ }
76
129
 
77
130
  def __loadCommands(self, commands_path: str, root_path: str) -> None:
78
131
  """
@@ -423,8 +476,8 @@ class Reactor:
423
476
  output = self.__app.call(command_instance, 'handle')
424
477
 
425
478
  # Log the command execution completion with DONE state
479
+ elapsed_time = round(time.perf_counter() - start_time, 2)
426
480
  if timestamps:
427
- elapsed_time = round(time.perf_counter() - start_time, 2)
428
481
  self.__executer.done(program=signature, time=f"{elapsed_time}s")
429
482
 
430
483
  # Log the command execution success
@@ -443,6 +496,6 @@ class Reactor:
443
496
  self.__logger.error(f"Command '{signature}' execution failed: {e}")
444
497
 
445
498
  # Log the command execution failure with ERROR state
499
+ elapsed_time = round(time.perf_counter() - start_time, 2)
446
500
  if timestamps:
447
- elapsed_time = round(time.perf_counter() - start_time, 2)
448
- self.__executer.fail(program=signature, time=f"{elapsed_time}s")
501
+ self.__executer.fail(program=signature, time=f"{elapsed_time}s")
orionis/console/kernel.py CHANGED
@@ -1,4 +1,6 @@
1
1
  from orionis.console.contracts.kernel import IKernelCLI
2
+ from orionis.console.contracts.reactor import IReactor
3
+ from orionis.console.output.contracts.console import IConsole
2
4
  from orionis.foundation.contracts.application import IApplication
3
5
  from orionis.console.exceptions import CLIOrionisValueError
4
6
 
@@ -8,6 +10,24 @@ class KernelCLI(IKernelCLI):
8
10
  self,
9
11
  app: IApplication
10
12
  ) -> None:
13
+ """
14
+ Initializes the KernelCLI instance with the provided application container.
15
+
16
+ Parameters
17
+ ----------
18
+ app : IApplication
19
+ The application container instance that provides access to services and dependencies.
20
+
21
+ Returns
22
+ -------
23
+ None
24
+ This constructor does not return a value. It initializes internal dependencies required for CLI operations.
25
+
26
+ Raises
27
+ ------
28
+ CLIOrionisValueError
29
+ If the provided `app` argument is not an instance of `IApplication`.
30
+ """
11
31
 
12
32
  # Validate that the app is an instance of IApplication
13
33
  if not isinstance(app, IApplication):
@@ -15,11 +35,65 @@ class KernelCLI(IKernelCLI):
15
35
  f"Failed to initialize TestKernel: expected IApplication, got {type(app).__module__}.{type(app).__name__}."
16
36
  )
17
37
 
38
+ # Retrieve and initialize the reactor instance from the application container.
39
+ # The reactor is responsible for dispatching CLI commands.
40
+ self.__reactor: IReactor = app.make('x-orionis.console.core.reactor', app)
41
+
42
+ # Retrieve and initialize the console instance for command output and error handling.
43
+ self.__console: IConsole = app.make('x-orionis.console.output.console')
44
+
18
45
  def handle(self, args: list) -> None:
19
46
  """
20
- Handle the command line arguments.
47
+ Processes and dispatches command line arguments to the appropriate command handler.
48
+
49
+ Parameters
50
+ ----------
51
+ args : list
52
+ The list of command line arguments, typically `sys.argv`.
21
53
 
22
- :param args: List of command line arguments (e.g., sys.argv).
54
+ Returns
55
+ -------
56
+ None
57
+ This method does not return a value. It may terminate the process or delegate execution to command handlers.
58
+
59
+ Raises
60
+ ------
61
+ SystemExit
62
+ If invalid arguments are provided or no command is specified, this method may terminate the process with an error message.
23
63
  """
24
- # This method should be implemented in subclasses
25
- print(args)
64
+
65
+ try:
66
+
67
+ # Ensure the arguments are provided as a list
68
+ if not isinstance(args, list):
69
+ raise CLIOrionisValueError(
70
+ f"Failed to handle command line arguments: expected list, got {type(args).__module__}.{type(args).__name__}."
71
+ )
72
+
73
+ # If no arguments or only the script name is provided, show the default help command
74
+ if not args or len(args) <= 1:
75
+ return self.__reactor.call('help')
76
+
77
+ # Remove the first argument (script name) to process only the command and its parameters
78
+ args = args[1:]
79
+
80
+ # If no command is provided after removing the script name, exit with an error
81
+ if len(args) == 0:
82
+ raise CLIOrionisValueError("No command provided to execute.")
83
+
84
+ # If only the command is provided, call it without additional arguments
85
+ if len(args) == 1:
86
+ return self.__reactor.call(args[0])
87
+
88
+ # If command and arguments are provided, call the command with its arguments
89
+ return self.__reactor.call(args[0], args[1:])
90
+
91
+ except SystemExit as e:
92
+
93
+ # Handle SystemExit exceptions gracefully, allowing for clean exits with error messages
94
+ self.__console.exitError(str(e))
95
+
96
+ except Exception as e:
97
+
98
+ # Handle any other exceptions that may occur during command processing
99
+ self.__console.exitError(f"An unexpected error occurred: {str(e)}")
@@ -20,7 +20,7 @@ from orionis.foundation.config.testing.entities.testing import Testing
20
20
  from orionis.foundation.contracts.application import IApplication
21
21
  from orionis.foundation.exceptions import OrionisTypeError, OrionisRuntimeError, OrionisValueError
22
22
  from orionis.foundation.providers.logger_provider import LoggerProvider
23
- from orionis.services.log.contracts.log_service import ILoggerService
23
+ from orionis.services.log.contracts.log_service import ILogger
24
24
 
25
25
  class Application(Container, IApplication):
26
26
  """
@@ -179,6 +179,7 @@ class Application(Container, IApplication):
179
179
  from orionis.foundation.providers.testing_provider import TestingProvider
180
180
  from orionis.foundation.providers.inspirational_provider import InspirationalProvider
181
181
  from orionis.foundation.providers.executor_provider import ConsoleExecuteProvider
182
+ from orionis.foundation.providers.reactor_provider import ReactorProvider
182
183
 
183
184
  # Core framework providers
184
185
  core_providers = [
@@ -189,7 +190,8 @@ class Application(Container, IApplication):
189
190
  LoggerProvider,
190
191
  TestingProvider,
191
192
  InspirationalProvider,
192
- ConsoleExecuteProvider
193
+ ConsoleExecuteProvider,
194
+ ReactorProvider
193
195
  ]
194
196
 
195
197
  # Register each core provider
@@ -1931,7 +1933,7 @@ class Application(Container, IApplication):
1931
1933
  self.__loadFrameworksKernel()
1932
1934
 
1933
1935
  # Retrieve logger and console instances from the container
1934
- logger: ILoggerService = self.make('x-orionis.services.log.log_service')
1936
+ logger: ILogger = self.make('x-orionis.services.log.log_service')
1935
1937
 
1936
1938
  # Calculate elapsed time in milliseconds since application start
1937
1939
  elapsed_ms = (time.time_ns() - self.startAt) // 1_000_000
@@ -1,6 +1,6 @@
1
1
  from orionis.container.providers.service_provider import ServiceProvider
2
- from orionis.services.log.contracts.log_service import ILoggerService
3
- from orionis.services.log.log_service import LoggerService
2
+ from orionis.services.log.contracts.log_service import ILogger
3
+ from orionis.services.log.log_service import Logger
4
4
 
5
5
  class LoggerProvider(ServiceProvider):
6
6
  """
@@ -8,7 +8,7 @@ class LoggerProvider(ServiceProvider):
8
8
 
9
9
  The LoggerProvider is responsible for registering and configuring the logging
10
10
  service implementation in the application's dependency injection container.
11
- It binds the concrete LoggerService to the ILoggerService interface, enabling
11
+ It binds the concrete Logger to the ILogger interface, enabling
12
12
  application-wide access to structured logging capabilities.
13
13
 
14
14
  This provider handles the initialization of the logging service with the
@@ -32,7 +32,7 @@ class LoggerProvider(ServiceProvider):
32
32
  """
33
33
  Register the logging service in the application container.
34
34
 
35
- This method binds the `LoggerService` implementation to the `ILoggerService`
35
+ This method binds the `Logger` implementation to the `ILogger`
36
36
  contract within the application's dependency injection container. The service
37
37
  is initialized with the application's logging configuration and registered
38
38
  with a specific alias for internal framework identification.
@@ -50,12 +50,12 @@ class LoggerProvider(ServiceProvider):
50
50
  # Retrieve logging configuration from application config
51
51
  logging_config = self.app.config('logging')
52
52
 
53
- # Create LoggerService instance with the retrieved configuration
54
- logger_service = LoggerService(logging_config)
53
+ # Create Logger instance with the retrieved configuration
54
+ logger_service = Logger(logging_config)
55
55
 
56
56
  # Register the service instance in the container with interface binding and alias
57
57
  self.app.instance(
58
- ILoggerService, # Interface contract
58
+ ILogger, # Interface contract
59
59
  logger_service, # Concrete implementation instance
60
60
  alias="x-orionis.services.log.log_service" # Internal framework alias
61
61
  )
@@ -0,0 +1,93 @@
1
+ from orionis.console.contracts.reactor import IReactor
2
+ from orionis.console.core.reactor import Reactor
3
+ from orionis.container.providers.service_provider import ServiceProvider
4
+
5
+ class ReactorProvider(ServiceProvider):
6
+ """
7
+ Service provider for worker management functionality within the Orionis framework.
8
+
9
+ This provider is responsible for registering and configuring the worker management
10
+ service implementation in the application's dependency injection container. It
11
+ establishes the binding between the IReactor interface contract and its concrete
12
+ Reactor implementation, enabling consistent reactor operations throughout the
13
+ application lifecycle.
14
+
15
+ The provider follows the standard service provider pattern, offering both
16
+ registration and boot phases for complete service lifecycle management.
17
+
18
+ Attributes
19
+ ----------
20
+ app : Application
21
+ The main application container instance used for service registration
22
+ and dependency injection management.
23
+
24
+ Notes
25
+ -----
26
+ This provider registers the reactor service with a transient lifetime, ensuring
27
+ that each request for reactor functionality receives a fresh instance. This
28
+ approach is optimal for operations that may maintain temporary state or require
29
+ isolation between different execution contexts.
30
+ """
31
+
32
+ def register(self) -> None:
33
+ """
34
+ Register the reactor management service in the application container.
35
+
36
+ This method binds the IReactor interface to a new instance of the Reactor
37
+ implementation within the application's dependency injection container. The
38
+ service is registered with a transient lifetime, ensuring that each resolution
39
+ yields a new Reactor instance. An alias is provided for convenient retrieval.
40
+
41
+ Parameters
42
+ ----------
43
+ None
44
+
45
+ Returns
46
+ -------
47
+ None
48
+ This method does not return any value. It performs registration
49
+ as a side effect on the application container.
50
+
51
+ Notes
52
+ -----
53
+ - Each call to resolve IReactor will produce a new Reactor instance.
54
+ - No singleton or caching behavior is applied.
55
+ - The alias "x-orionis.console.core.reactor" can be used for explicit lookups.
56
+ """
57
+
58
+ # Register the Reactor service with the application container
59
+ # as a singleton, allowing it to be resolved throughout the application lifecycle
60
+ self.app.singleton(
61
+ IReactor,
62
+ Reactor,
63
+ alias="x-orionis.console.core.reactor"
64
+ )
65
+
66
+ def boot(self) -> None:
67
+ """
68
+ Perform post-registration initialization for the reactor management service.
69
+
70
+ This method is invoked after all services have been registered in the container.
71
+ It provides an opportunity for additional setup, configuration, or initialization
72
+ logic that may depend on other services being available. Currently, this method
73
+ does not perform any actions but serves as a placeholder for future enhancements.
74
+
75
+ Parameters
76
+ ----------
77
+ None
78
+
79
+ Returns
80
+ -------
81
+ None
82
+ This method does not return any value. It only performs initialization
83
+ side effects if required.
84
+
85
+ Notes
86
+ -----
87
+ - Called automatically during the application boot sequence.
88
+ - Intended for cross-service configuration or runtime setup.
89
+ - No initialization is currently required for the reactor service.
90
+ """
91
+
92
+ # No additional initialization required at this time
93
+ pass
@@ -5,7 +5,7 @@
5
5
  NAME = "orionis"
6
6
 
7
7
  # Current version of the framework
8
- VERSION = "0.453.0"
8
+ VERSION = "0.455.0"
9
9
 
10
10
  # Full name of the author or maintainer of the project
11
11
  AUTHOR = "Raul Mauricio Uñate Castro"
@@ -1,6 +1,6 @@
1
1
  from abc import ABC, abstractmethod
2
2
 
3
- class ILoggerService(ABC):
3
+ class ILogger(ABC):
4
4
 
5
5
  @abstractmethod
6
6
  def info(self, message: str) -> None:
@@ -1,12 +1,12 @@
1
1
  from orionis.foundation.config.logging.entities.logging import Logging
2
2
  from orionis.foundation.config.logging.enums import Level
3
- from orionis.services.log.contracts.log_service import ILoggerService
3
+ from orionis.services.log.contracts.log_service import ILogger
4
4
  from orionis.services.log.exceptions import LoggerRuntimeError
5
5
  from orionis.services.log.handlers.filename import FileNameLogger
6
6
  from orionis.services.log.handlers.size_rotating import PrefixedSizeRotatingFileHandler
7
7
  from orionis.services.log.handlers.timed_rotating import PrefixedTimedRotatingFileHandler
8
8
 
9
- class LoggerService(ILoggerService):
9
+ class Logger(ILogger):
10
10
 
11
11
  def __init__(
12
12
  self,
@@ -14,7 +14,7 @@ class LoggerService(ILoggerService):
14
14
  **kwargs
15
15
  ):
16
16
  """
17
- Initializes the LoggerService instance with the provided logging configuration.
17
+ Initializes the Logger instance with the provided logging configuration.
18
18
 
19
19
  This constructor sets up the logger configuration using either a `Logging` object,
20
20
  a configuration dictionary, or keyword arguments. It validates the input and
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orionis
3
- Version: 0.453.0
3
+ Version: 0.455.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,7 +1,7 @@
1
1
  orionis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  orionis/app.py,sha256=b69fOzj2J8Aw5g0IldWZXixUDeeTO9vcHc_Njses9HU,603
3
3
  orionis/console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- orionis/console/kernel.py,sha256=1CuBCLR6KItRt0_m50YQXirJUMX6lJf4Z4vvOjBqaUU,856
4
+ orionis/console/kernel.py,sha256=NGiINJzYRpxjQslZeELxxySxI-tL_isRrUL0yn4uz5o,3942
5
5
  orionis/console/args/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  orionis/console/args/argument.py,sha256=Is8Z8_kW4DvcK1nK1UU-sa6Pk0BeOdcRczCayW0ZVHc,20360
7
7
  orionis/console/args/enums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -11,11 +11,13 @@ orionis/console/base/command.py,sha256=nasVPyKEvuv8sDFEWXhHyBCWAmSLfPPm2XlKaYYt_
11
11
  orionis/console/base/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  orionis/console/base/contracts/command.py,sha256=vmAJD0yMQ5-AD_s9_xCFEAl64sKk65z7U2E196dALQM,5760
13
13
  orionis/console/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- orionis/console/commands/version.py,sha256=kR8xzyc-Wisk7AXqg3Do7M9xTg_CxJgAtESPGrbRtpI,1673
14
+ orionis/console/commands/help.py,sha256=EGg5FfWnLasi7I7gCTBLyvau6I0gVpc2ewNefyJlHeE,1494
15
+ orionis/console/commands/version.py,sha256=0neKUq7MulO0hLZyU9LLfIQYEaQtnm3faIjIfeK52V8,2886
15
16
  orionis/console/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
17
  orionis/console/contracts/kernel.py,sha256=mh4LlhEYHh3FuGZZQ0GBhD6ZLa5YQvaNj2r01IIHI5Y,826
18
+ orionis/console/contracts/reactor.py,sha256=fT49-794RI-y0ZhDyXf91VQoFdGx6kF1Kg-monJnj7s,1296
17
19
  orionis/console/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
- orionis/console/core/reactor.py,sha256=nfts3Tuvz5GHhavN3AmFjSM2uxJDV8yh_xQP1JMgd9A,19265
20
+ orionis/console/core/reactor.py,sha256=DoloMbAw7WojH38rSKmrRAArl8rWVb5J_p1YLepUMpc,21619
19
21
  orionis/console/dumper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
22
  orionis/console/dumper/dump.py,sha256=CATERiQ6XuIrKQsDaWcVxzTtlAJI9qLJX44fQxEX8ws,22443
21
23
  orionis/console/dumper/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -69,7 +71,7 @@ orionis/container/validators/is_subclass.py,sha256=4sBaGLoRs8nUhuWjlP0VJqyTwVHYq
69
71
  orionis/container/validators/is_valid_alias.py,sha256=4uAYcq8xov7jZbXnpKpjNkxcZtlTNnL5RRctVPMwJes,1424
70
72
  orionis/container/validators/lifetime.py,sha256=IQ43fDNrxYHMlZH2zlYDJnlkLO_eS4U7Fs3UJgQBidI,1844
71
73
  orionis/foundation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
- orionis/foundation/application.py,sha256=51pEbB7s99-NxEBqXKT-6Wq7-vrN1Or1QUjEWTWRjgI,76927
74
+ orionis/foundation/application.py,sha256=yZ1C92A2bTtWK4RUd9RSACLVQVBPjd6zElTt6_kjV6k,77026
73
75
  orionis/foundation/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
76
  orionis/foundation/config/startup.py,sha256=vbzduprRCNyYeR2nnMaqc1uKXw6PTzAY2jVfXNQKN8I,9691
75
77
  orionis/foundation/config/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -175,12 +177,13 @@ orionis/foundation/providers/console_provider.py,sha256=9oDHOGm79O8OtwTFPCYl4hNQ
175
177
  orionis/foundation/providers/dumper_provider.py,sha256=nKHjLDClCo-KnPloh6EYVySjgzf6SYSvoxVD6IwJt8M,3355
176
178
  orionis/foundation/providers/executor_provider.py,sha256=kwkH8YWEXoEoP51akJXQJ0U25rhlOLxnfE0s9fALr0I,3478
177
179
  orionis/foundation/providers/inspirational_provider.py,sha256=uq2o0uLd5p6PR99uH4cJAcc6NnU6nIOwe0ZIdzZcF4Q,3726
178
- orionis/foundation/providers/logger_provider.py,sha256=Xs7axVCuoOLl8jTMeLlCRPjqfnssViIHyECh90HnL7M,3670
180
+ orionis/foundation/providers/logger_provider.py,sha256=bEJug46TNNxuqfCI8eI-GSp0eyNromvBDszQGK-0roc,3607
179
181
  orionis/foundation/providers/progress_bar_provider.py,sha256=X4Ke7mPr0MgVp6WDNaQ3bI3Z_LOS8qE-wid0MQErKms,3367
182
+ orionis/foundation/providers/reactor_provider.py,sha256=g7X5eyZviQkX2hD7jZof6h1hZmN8rNvODmhGFysfiEY,3712
180
183
  orionis/foundation/providers/testing_provider.py,sha256=YTubcNnWrG3SPx5NM5HgYefvUYoXdlzXcjljnjavUwM,6462
181
184
  orionis/foundation/providers/workers_provider.py,sha256=5CvlUETdIblh7Wx8pT0MswTeTCGhYah-EvFqOrLu8Mo,4113
182
185
  orionis/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
- orionis/metadata/framework.py,sha256=Yydz9pUk2t1eQMGQc4uRQ9sN3Yuqg26Q4mjWpxGSktM,4088
186
+ orionis/metadata/framework.py,sha256=JAfHRLGQ0Og0YGg0c-lw57DmKEKRHHsLbF_MiXSsRyI,4088
184
187
  orionis/metadata/package.py,sha256=k7Yriyp5aUcR-iR8SK2ec_lf0_Cyc-C7JczgXa-I67w,16039
185
188
  orionis/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
186
189
  orionis/services/asynchrony/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -251,9 +254,9 @@ orionis/services/introspection/modules/contracts/reflection.py,sha256=YLqKg5Ehad
251
254
  orionis/services/introspection/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
252
255
  orionis/services/introspection/objects/types.py,sha256=vNKWc2b7K-X7B2X8RCimgAWQqbQlVT-aL24nUB8t_yQ,6343
253
256
  orionis/services/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
254
- orionis/services/log/log_service.py,sha256=DsbU8HVf035HxumFm4Xjo7kYhuXf0D57Xhuz7uzKhGo,11344
257
+ orionis/services/log/log_service.py,sha256=PY8a7DB-kCOlwtG85J_ASQIPRw0_aRGBiqlyQho0Gxw,11316
255
258
  orionis/services/log/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
256
- orionis/services/log/contracts/log_service.py,sha256=M8JLyb0roDfkxkA5y1T3ugs3BTEtalbKV-LbzZ5B5Es,1699
259
+ orionis/services/log/contracts/log_service.py,sha256=YVWkK5z6-3jyJv6aT8fbp53nQBF8jlD-aHGKqFYPdAM,1692
257
260
  orionis/services/log/exceptions/__init__.py,sha256=PPn_LBV3U-0Yi69ZLDQmlkbmlL1iLTleLw-s88Ipg9o,84
258
261
  orionis/services/log/exceptions/runtime.py,sha256=LnaK0w0WlgxtZ9Zjn9RYIgp6fbQZmXZ_1fy9dkuA2jQ,468
259
262
  orionis/services/log/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -345,7 +348,7 @@ orionis/test/validators/web_report.py,sha256=n9BfzOZz6aEiNTypXcwuWbFRG0OdHNSmCNu
345
348
  orionis/test/validators/workers.py,sha256=rWcdRexINNEmGaO7mnc1MKUxkHKxrTsVuHgbnIfJYgc,1206
346
349
  orionis/test/view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
347
350
  orionis/test/view/render.py,sha256=f-zNhtKSg9R5Njqujbg2l2amAs2-mRVESneLIkWOZjU,4082
348
- orionis-0.453.0.dist-info/licenses/LICENCE,sha256=JhC-z_9mbpUrCfPjcl3DhDA8trNDMzb57cvRSam1avc,1463
351
+ orionis-0.455.0.dist-info/licenses/LICENCE,sha256=JhC-z_9mbpUrCfPjcl3DhDA8trNDMzb57cvRSam1avc,1463
349
352
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
350
353
  tests/container/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
351
354
  tests/container/context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -441,21 +444,21 @@ tests/services/environment/test_services_environment.py,sha256=8gbF2vK238lracBip
441
444
  tests/services/introspection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
442
445
  tests/services/introspection/test_reflection.py,sha256=AaBi0zi7GphOqnagV8N48GZHUuoT7743Pw3oc6_As6I,13700
443
446
  tests/services/introspection/dependencies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
444
- tests/services/introspection/dependencies/test_reflect_dependencies.py,sha256=DRbYZC4EBreSS48txlZB_kzka1_NtOXZwI2ell_pOVc,13698
447
+ tests/services/introspection/dependencies/test_reflect_dependencies.py,sha256=UJwASK4ItTehXvWMq75vIMxBWTg2euS105EgRaIkVic,13894
445
448
  tests/services/introspection/dependencies/mocks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
446
449
  tests/services/introspection/dependencies/mocks/mock_user.py,sha256=RxATxe0-Vm4HfX5jKz9Tny42E2fmrdtEN6ZEntbqRL8,912
447
450
  tests/services/introspection/dependencies/mocks/mock_user_controller.py,sha256=Hu4Xys5HENpKaLqsEAjtp_C-M9y6ozmJ_-qmj3ZvK6c,1214
448
451
  tests/services/introspection/dependencies/mocks/mock_users_permissions.py,sha256=oENXbS2qmQUudYSmnhB8fgHBqXZdbplplB-Y2nbx4hw,1388
449
452
  tests/services/introspection/reflection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
450
- tests/services/introspection/reflection/test_reflection_abstract.py,sha256=tL6gvsiZC6LntguAetYv1W1ts7oY8ruHF2iJpqFlFuM,42422
453
+ tests/services/introspection/reflection/test_reflection_abstract.py,sha256=MG243SrYBCaRHI85ifQE2t_Dwuy5LQdVAS4mrS3_n8E,41778
451
454
  tests/services/introspection/reflection/test_reflection_callable.py,sha256=OVu4FmzkfVBbDrjWqrrq-1eqe9myNGygNpmtyCnu9hs,6817
452
- tests/services/introspection/reflection/test_reflection_concrete.py,sha256=HXU5pzfwXEBP614yESqbtfZJiWBnZxHYAHB8FuE2hKs,39083
453
- tests/services/introspection/reflection/test_reflection_instance.py,sha256=C4Aj8AxtTP0buoprdtb96Su3DBj9i-k9lcdf4WSYnQA,58039
455
+ tests/services/introspection/reflection/test_reflection_concrete.py,sha256=7L4QTae1mDCujMZ0vvI4qsoTQxnRkeIuv3cXRdbISuc,38441
456
+ tests/services/introspection/reflection/test_reflection_instance.py,sha256=IpYm45S9kaGXGvkCIrnwAVxN-mtL1QUd7iV9niUpmTQ,57397
454
457
  tests/services/introspection/reflection/test_reflection_module.py,sha256=a4sjSHeKADHUO5FvSDg1wPYNGfO385JZxSCoIqjfuZE,24608
455
458
  tests/services/introspection/reflection/mock/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
456
459
  tests/services/introspection/reflection/mock/fake_reflect_instance.py,sha256=iMf_yKgk0Y91XUHhRcl2qw7Z83QeNspvLi_tl4Dp-rI,28032
457
460
  tests/services/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
458
- tests/services/log/test_log.py,sha256=fCI2gX9-YN1z-xPMwIlggUFHeBlqfUajQoyQu4dmao0,2868
461
+ tests/services/log/test_log.py,sha256=AWaEjBbUxz_1-GNsqEyb36EyD6ZtrHd51DnxA3I5nvE,2798
459
462
  tests/services/system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
460
463
  tests/services/system/test_services_system_imports.py,sha256=jbtIQkw_4DI6x2E-4Lg3evnLAgCgDIBWE63LdJTLkxc,7507
461
464
  tests/services/system/test_services_system_workers.py,sha256=wITbpJHKW_OXqTaFeteNRFuw5Q3_7d9lWNJnFE2r6to,5052
@@ -488,8 +491,8 @@ tests/testing/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
488
491
  tests/testing/validators/test_testing_validators.py,sha256=WPo5GxTP6xE-Dw3X1vZoqOMpb6HhokjNSbgDsDRDvy4,16588
489
492
  tests/testing/view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
490
493
  tests/testing/view/test_render.py,sha256=tnnMBwS0iKUIbogLvu-7Rii50G6Koddp3XT4wgdFEYM,1050
491
- orionis-0.453.0.dist-info/METADATA,sha256=2l6AHDIa0Uv_iDNRBUqX-k7yrNBwlTyuSR3Z8zUp4Mc,4772
492
- orionis-0.453.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
493
- orionis-0.453.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
494
- orionis-0.453.0.dist-info/zip-safe,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
495
- orionis-0.453.0.dist-info/RECORD,,
494
+ orionis-0.455.0.dist-info/METADATA,sha256=SUABH7qF9bf2fsAB7sQBWXsVnnFjfXM5-k4vp6i_u2I,4772
495
+ orionis-0.455.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
496
+ orionis-0.455.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
497
+ orionis-0.455.0.dist-info/zip-safe,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
498
+ orionis-0.455.0.dist-info/RECORD,,
@@ -170,7 +170,7 @@ class TestReflectDependencies(AsyncTestCase):
170
170
  self.assertEqual(dep_user_permissions.type, FakeUserWithPermissions)
171
171
 
172
172
  # Extract and validate the 'permissions' dependency (built-in generic type)
173
- dep_permissions: Argument = method_dependencies.resolved.get('permissions')
173
+ dep_permissions: Argument = method_dependencies.unresolved.get('permissions')
174
174
 
175
175
  # Ensure the built-in type dependency is properly resolved as an Argument instance
176
176
  self.assertIsInstance(dep_permissions, Argument)
@@ -248,10 +248,14 @@ class TestReflectDependencies(AsyncTestCase):
248
248
  dep_x: Argument = callable_dependencies.resolved.get('x')
249
249
 
250
250
  # Verify that the 'x' parameter resolves to its default value of 3
251
- self.assertEqual(dep_x, 3)
251
+ self.assertIsInstance(dep_x, Argument)
252
+ self.assertTrue(dep_x.resolved)
253
+ self.assertEqual(dep_x.default, 3)
252
254
 
253
255
  # Extract and validate the 'y' parameter dependency from resolved dependencies
254
256
  dep_y: Argument = callable_dependencies.resolved.get('y')
255
257
 
256
258
  # Verify that the 'y' parameter resolves to its default value of 4
257
- self.assertEqual(dep_y, 4)
259
+ self.assertIsInstance(dep_y, Argument)
260
+ self.assertTrue(dep_y.resolved)
261
+ self.assertEqual(dep_y.default, 4)
@@ -1007,14 +1007,5 @@ class TestServiceReflectionAbstract(AsyncTestCase):
1007
1007
  """
1008
1008
  reflect = ReflectionAbstract(AbstractFakeClass)
1009
1009
  method_deps: ResolveArguments = reflect.getMethodDependencies('instanceSyncMethod')
1010
- self.assertIn('x', method_deps.resolved)
1011
- self.assertIn('y', method_deps.resolved)
1012
- self.assertEqual(method_deps.resolved['x'].class_name, 'int')
1013
- self.assertEqual(method_deps.resolved['y'].class_name, 'int')
1014
- self.assertEqual(method_deps.resolved['x'].module_name, 'builtins')
1015
- self.assertEqual(method_deps.resolved['y'].module_name, 'builtins')
1016
- self.assertEqual(method_deps.resolved['x'].type, int)
1017
- self.assertEqual(method_deps.resolved['y'].type, int)
1018
- self.assertEqual(method_deps.resolved['x'].full_class_path, 'builtins.int')
1019
- self.assertEqual(method_deps.resolved['y'].full_class_path, 'builtins.int')
1020
- self.assertEqual(method_deps.unresolved, [])
1010
+ self.assertIn('x', method_deps.unresolved)
1011
+ self.assertIn('y', method_deps.unresolved)
@@ -948,14 +948,5 @@ class TestServiceReflectionConcrete(AsyncTestCase):
948
948
  """
949
949
  reflect = ReflectionConcrete(FakeClass)
950
950
  method_deps: ResolveArguments = reflect.getMethodDependencies('instanceSyncMethod')
951
- self.assertIn('x', method_deps.resolved)
952
- self.assertIn('y', method_deps.resolved)
953
- self.assertEqual(method_deps.resolved['x'].class_name, 'int')
954
- self.assertEqual(method_deps.resolved['y'].class_name, 'int')
955
- self.assertEqual(method_deps.resolved['x'].module_name, 'builtins')
956
- self.assertEqual(method_deps.resolved['y'].module_name, 'builtins')
957
- self.assertEqual(method_deps.resolved['x'].type, int)
958
- self.assertEqual(method_deps.resolved['y'].type, int)
959
- self.assertEqual(method_deps.resolved['x'].full_class_path, 'builtins.int')
960
- self.assertEqual(method_deps.resolved['y'].full_class_path, 'builtins.int')
961
- self.assertEqual(method_deps.unresolved, [])
951
+ self.assertIn('x', method_deps.unresolved)
952
+ self.assertIn('y', method_deps.unresolved)
@@ -1229,14 +1229,5 @@ class TestServiceReflectionInstance(AsyncTestCase):
1229
1229
  """
1230
1230
  reflect = ReflectionInstance(FakeClass())
1231
1231
  method_deps: ResolveArguments = reflect.getMethodDependencies('instanceSyncMethod')
1232
- self.assertIn('x', method_deps.resolved)
1233
- self.assertIn('y', method_deps.resolved)
1234
- self.assertEqual(method_deps.resolved['x'].class_name, 'int')
1235
- self.assertEqual(method_deps.resolved['y'].class_name, 'int')
1236
- self.assertEqual(method_deps.resolved['x'].module_name, 'builtins')
1237
- self.assertEqual(method_deps.resolved['y'].module_name, 'builtins')
1238
- self.assertEqual(method_deps.resolved['x'].type, int)
1239
- self.assertEqual(method_deps.resolved['y'].type, int)
1240
- self.assertEqual(method_deps.resolved['x'].full_class_path, 'builtins.int')
1241
- self.assertEqual(method_deps.resolved['y'].full_class_path, 'builtins.int')
1242
- self.assertEqual(method_deps.unresolved, [])
1232
+ self.assertIn('x', method_deps.unresolved)
1233
+ self.assertIn('y', method_deps.unresolved)
@@ -1,52 +1,52 @@
1
- from orionis.services.log.log_service import LoggerService
1
+ from orionis.services.log.log_service import Logger
2
2
  from orionis.support.facades.logger import Log
3
3
  from orionis.test.cases.asynchronous import AsyncTestCase
4
4
 
5
- class TestLoggerService(AsyncTestCase):
5
+ class TestLogger(AsyncTestCase):
6
6
 
7
7
  async def testHasInfoMethod(self):
8
8
  """
9
- Checks if the LoggerService class has an 'info' method.
9
+ Checks if the Logger class has an 'info' method.
10
10
 
11
11
  Returns
12
12
  -------
13
13
  None
14
14
  This test passes if the 'info' method exists, otherwise it fails.
15
15
  """
16
- self.assertTrue(hasattr(LoggerService, "info"))
16
+ self.assertTrue(hasattr(Logger, "info"))
17
17
 
18
18
  async def testHasErrorMethod(self):
19
19
  """
20
- Checks if the LoggerService class has an 'error' method.
20
+ Checks if the Logger class has an 'error' method.
21
21
 
22
22
  Returns
23
23
  -------
24
24
  None
25
25
  This test passes if the 'error' method exists, otherwise it fails.
26
26
  """
27
- self.assertTrue(hasattr(LoggerService, "error"))
27
+ self.assertTrue(hasattr(Logger, "error"))
28
28
 
29
29
  async def testHasWarningMethod(self):
30
30
  """
31
- Checks if the LoggerService class has a 'warning' method.
31
+ Checks if the Logger class has a 'warning' method.
32
32
 
33
33
  Returns
34
34
  -------
35
35
  None
36
36
  This test passes if the 'warning' method exists, otherwise it fails.
37
37
  """
38
- self.assertTrue(hasattr(LoggerService, "warning"))
38
+ self.assertTrue(hasattr(Logger, "warning"))
39
39
 
40
40
  async def testHasDebugMethod(self):
41
41
  """
42
- Checks if the LoggerService class has a 'debug' method.
42
+ Checks if the Logger class has a 'debug' method.
43
43
 
44
44
  Returns
45
45
  -------
46
46
  None
47
47
  This test passes if the 'debug' method exists, otherwise it fails.
48
48
  """
49
- self.assertTrue(hasattr(LoggerService, "debug"))
49
+ self.assertTrue(hasattr(Logger, "debug"))
50
50
 
51
51
  async def testLoggerWritesInfo(self):
52
52
  """