orionis 0.44.0__py3-none-any.whl → 0.47.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (172) hide show
  1. orionis/cli_manager.py +16 -30
  2. orionis/contracts/bootstrap/i_command_bootstrapper.py +59 -0
  3. orionis/contracts/bootstrap/i_config_bootstrapper.py +112 -0
  4. orionis/contracts/bootstrap/i_environment_bootstrapper.py +33 -0
  5. orionis/{luminate/contracts/console/base/base_command_interface.py → contracts/console/base/i_command.py} +0 -1
  6. orionis/contracts/facades/config/i_config_facade.py +37 -0
  7. orionis/contracts/facades/environment/i_environment_facade.py +40 -0
  8. orionis/{luminate/contracts/facades/paths_interface.py → contracts/facades/files/i_path_facade.py} +27 -20
  9. orionis/contracts/facades/log/i_log_facade.py +83 -0
  10. orionis/{luminate/contracts/facades/tests_interface.py → contracts/facades/tests/i_tests_facade.py} +3 -6
  11. orionis/{luminate/contracts/console/scripts/management_interface.py → contracts/installer/i_installer_manager.py} +19 -16
  12. orionis/contracts/installer/i_installer_output.py +101 -0
  13. orionis/contracts/installer/i_installer_setup.py +59 -0
  14. orionis/contracts/providers/i_service_provider.py +27 -0
  15. orionis/contracts/services/config/i_config_service.py +37 -0
  16. orionis/contracts/services/files/i_path_service.py +31 -0
  17. orionis/contracts/services/log/i_log_service.py +89 -0
  18. orionis/{luminate/facades/environment.py → contracts/support/i_environment.py} +25 -32
  19. orionis/{luminate/contracts/tools/exception_to_dict_interface.py → contracts/support/i_exception_to_dict.py} +0 -9
  20. orionis/{luminate/contracts/tools/reflection_interface.py → contracts/support/i_reflection.py} +17 -8
  21. orionis/{luminate/contracts/tools/std_interface.py → contracts/support/i_std.py} +3 -16
  22. orionis/framework.py +1 -1
  23. orionis/{luminate/console/scripts/management.py → installer/installer_manager.py} +22 -16
  24. orionis/{luminate/installer/output.py → installer/installer_output.py} +16 -10
  25. orionis/{luminate/installer/setup.py → installer/installer_setup.py} +13 -25
  26. orionis/luminate/app.py +15 -11
  27. orionis/luminate/bootstrap/command_bootstrapper.py +150 -0
  28. orionis/luminate/bootstrap/config_bootstrapper.py +168 -0
  29. orionis/luminate/bootstrap/environment_bootstrapper.py +67 -0
  30. orionis/luminate/config/helpers.py +20 -0
  31. orionis/luminate/console/base/command.py +1 -3
  32. orionis/luminate/console/command_filter.py +2 -2
  33. orionis/luminate/console/commands/cache_clear.py +17 -5
  34. orionis/luminate/console/commands/help.py +19 -13
  35. orionis/luminate/console/commands/schedule_work.py +6 -3
  36. orionis/luminate/console/commands/tests.py +1 -6
  37. orionis/luminate/console/commands/version.py +0 -5
  38. orionis/luminate/console/exceptions/cli_exception.py +1 -4
  39. orionis/luminate/console/kernel.py +2 -2
  40. orionis/luminate/console/output/console.py +2 -2
  41. orionis/luminate/console/output/executor.py +1 -1
  42. orionis/luminate/console/output/progress_bar.py +1 -1
  43. orionis/luminate/console/parser.py +2 -2
  44. orionis/luminate/console/runner.py +127 -126
  45. orionis/luminate/console/tasks/scheduler.py +8 -7
  46. orionis/luminate/container/container.py +1 -1
  47. orionis/luminate/container/types.py +38 -12
  48. orionis/luminate/facades/config/config_facade.py +43 -0
  49. orionis/luminate/facades/environment/environment_facade.py +68 -0
  50. orionis/luminate/facades/{paths.py → files/path_facade.py} +50 -6
  51. orionis/luminate/facades/log/__init__.py +0 -0
  52. orionis/luminate/facades/log/log_facade.py +95 -0
  53. orionis/luminate/facades/tests/__init__.py +0 -0
  54. orionis/luminate/facades/{tests.py → tests/tests_facade.py} +1 -1
  55. orionis/luminate/patterns/__init__.py +0 -0
  56. orionis/luminate/pipelines/cli_pipeline.py +122 -116
  57. orionis/luminate/providers/__init__.py +0 -0
  58. orionis/luminate/providers/config/__init__.py +0 -0
  59. orionis/luminate/providers/config/config_service_provider.py +26 -0
  60. orionis/luminate/providers/files/__init__.py +0 -0
  61. orionis/luminate/providers/files/path_service_provider.py +26 -0
  62. orionis/luminate/providers/log/__init__.py +0 -0
  63. orionis/luminate/providers/log/log_service_provider.py +26 -0
  64. orionis/luminate/services/__init__.py +0 -0
  65. orionis/luminate/services/config/__init__.py +0 -0
  66. orionis/luminate/services/config/config_service.py +72 -0
  67. orionis/luminate/services/files/__init__.py +0 -0
  68. orionis/luminate/services/files/path_service.py +71 -0
  69. orionis/luminate/services/log/__init__.py +0 -0
  70. orionis/luminate/services/log/log_service.py +159 -0
  71. orionis/luminate/{config → support}/environment.py +21 -32
  72. orionis/luminate/{tools → support}/exception_to_dict.py +1 -1
  73. orionis/luminate/{tools → support}/reflection.py +1 -1
  74. orionis/luminate/{tools → support}/std.py +1 -1
  75. orionis/luminate/test/unit_test.py +1 -2
  76. {orionis-0.44.0.dist-info → orionis-0.47.0.dist-info}/METADATA +1 -1
  77. orionis-0.47.0.dist-info/RECORD +157 -0
  78. tests/tools/test_reflection.py +1 -1
  79. orionis/luminate/bootstrap/commands/bootstrapper.py +0 -101
  80. orionis/luminate/bootstrap/commands/register.py +0 -92
  81. orionis/luminate/bootstrap/config/bootstrapper.py +0 -79
  82. orionis/luminate/bootstrap/config/parser.py +0 -53
  83. orionis/luminate/bootstrap/config/register.py +0 -76
  84. orionis/luminate/cache/app/config.py +0 -91
  85. orionis/luminate/cache/console/commands.py +0 -97
  86. orionis/luminate/console/cache.py +0 -87
  87. orionis/luminate/console/command.py +0 -40
  88. orionis/luminate/contracts/bootstrap/commands/bootstrapper_interface.py +0 -44
  89. orionis/luminate/contracts/bootstrap/commands/register_interface.py +0 -33
  90. orionis/luminate/contracts/bootstrap/config/bootstrapper_interface.py +0 -40
  91. orionis/luminate/contracts/bootstrap/config/parser_interface.py +0 -46
  92. orionis/luminate/contracts/bootstrap/config/register_interface.py +0 -47
  93. orionis/luminate/contracts/cache/app/config_interface.py +0 -76
  94. orionis/luminate/contracts/cache/console/commands_interface.py +0 -78
  95. orionis/luminate/contracts/config/environment_interface.py +0 -64
  96. orionis/luminate/contracts/console/command_interface.py +0 -36
  97. orionis/luminate/contracts/console/runner_interface.py +0 -50
  98. orionis/luminate/contracts/facades/env_interface.py +0 -64
  99. orionis/luminate/contracts/facades/log_interface.py +0 -48
  100. orionis/luminate/contracts/files/paths_interface.py +0 -29
  101. orionis/luminate/contracts/installer/output_interface.py +0 -125
  102. orionis/luminate/contracts/installer/setup_interface.py +0 -29
  103. orionis/luminate/contracts/installer/upgrade_interface.py +0 -24
  104. orionis/luminate/contracts/log/logger_interface.py +0 -33
  105. orionis/luminate/contracts/pipelines/cli_pipeline_interface.py +0 -84
  106. orionis/luminate/contracts/publisher/pypi_publisher_interface.py +0 -36
  107. orionis/luminate/contracts/test/unit_test_interface.py +0 -51
  108. orionis/luminate/facades/config.py +0 -10
  109. orionis/luminate/facades/log.py +0 -56
  110. orionis/luminate/files/paths.py +0 -56
  111. orionis/luminate/installer/upgrade.py +0 -42
  112. orionis/luminate/log/logger.py +0 -116
  113. orionis/luminate/publisher/pypi.py +0 -215
  114. orionis-0.44.0.dist-info/RECORD +0 -156
  115. /orionis/{luminate/bootstrap/config → contracts}/__init__.py +0 -0
  116. /orionis/{luminate/cache → contracts/config}/__init__.py +0 -0
  117. /orionis/{luminate/contracts/config/config_interface.py → contracts/config/i_config.py} +0 -0
  118. /orionis/{luminate/cache/app → contracts/console}/__init__.py +0 -0
  119. /orionis/{luminate/cache/console → contracts/console/base}/__init__.py +0 -0
  120. /orionis/{luminate/contracts/console/command_filter_interface.py → contracts/console/i_command_filter.py} +0 -0
  121. /orionis/{luminate/contracts/console/kernel_interface.py → contracts/console/i_kernel.py} +0 -0
  122. /orionis/{luminate/contracts/console/parser_interface.py → contracts/console/i_parser.py} +0 -0
  123. /orionis/{luminate/contracts/console/task_manager_interface.py → contracts/console/i_task_manager.py} +0 -0
  124. /orionis/{luminate/config/dataclass → contracts/console/output}/__init__.py +0 -0
  125. /orionis/{luminate/contracts/console/output/console_interface.py → contracts/console/output/i_console.py} +0 -0
  126. /orionis/{luminate/contracts/console/output/executor_interface.py → contracts/console/output/i_executor.py} +0 -0
  127. /orionis/{luminate/contracts/console/output/progress_bar_interface.py → contracts/console/output/i_progress_bar.py} +0 -0
  128. /orionis/{luminate/console/scripts → contracts/console/tasks}/__init__.py +0 -0
  129. /orionis/{luminate/contracts/console/tasks/schedule_interface.py → contracts/console/tasks/i_schedule.py} +0 -0
  130. /orionis/{luminate/contracts/container/container_interface.py → contracts/container/i_container.py} +0 -0
  131. /orionis/{luminate/contracts/container/types_interface.py → contracts/container/i_types.py} +0 -0
  132. /orionis/{luminate/contracts → contracts/facades}/__init__.py +0 -0
  133. /orionis/{luminate/contracts/cache → contracts/facades/config}/__init__.py +0 -0
  134. /orionis/{luminate/contracts/config → contracts/facades/environment}/__init__.py +0 -0
  135. /orionis/{luminate/contracts/console → contracts/facades/files}/__init__.py +0 -0
  136. /orionis/{luminate/contracts/facades → contracts/facades/log}/__init__.py +0 -0
  137. /orionis/{luminate/contracts/files → contracts/facades/tests}/__init__.py +0 -0
  138. /orionis/{luminate/contracts → contracts}/installer/__init__.py +0 -0
  139. /orionis/{luminate/contracts/log → contracts/providers}/__init__.py +0 -0
  140. /orionis/{luminate/contracts/publisher → contracts/services}/__init__.py +0 -0
  141. /orionis/{luminate/contracts/test → contracts/services/config}/__init__.py +0 -0
  142. /orionis/{luminate/contracts/tools → contracts/services/files}/__init__.py +0 -0
  143. /orionis/{luminate/files → contracts/services/log}/__init__.py +0 -0
  144. /orionis/{luminate/installer → installer}/__init__.py +0 -0
  145. /orionis/luminate/bootstrap/{cli_exception.py → exception_bootstrapper.py} +0 -0
  146. /orionis/luminate/config/{dataclass/app.py → app.py} +0 -0
  147. /orionis/luminate/config/{dataclass/auth.py → auth.py} +0 -0
  148. /orionis/luminate/config/{dataclass/cache.py → cache.py} +0 -0
  149. /orionis/luminate/config/{dataclass/cors.py → cors.py} +0 -0
  150. /orionis/luminate/config/{dataclass/database.py → database.py} +0 -0
  151. /orionis/luminate/config/{dataclass/filesystems.py → filesystems.py} +0 -0
  152. /orionis/luminate/config/{dataclass/logging.py → logging.py} +0 -0
  153. /orionis/luminate/config/{dataclass/mail.py → mail.py} +0 -0
  154. /orionis/luminate/config/{dataclass/queue.py → queue.py} +0 -0
  155. /orionis/luminate/config/{dataclass/session.py → session.py} +0 -0
  156. /orionis/luminate/{log → facades/config}/__init__.py +0 -0
  157. /orionis/luminate/{publisher → facades/environment}/__init__.py +0 -0
  158. /orionis/luminate/{tools → facades/files}/__init__.py +0 -0
  159. /orionis/luminate/{tools → support}/dot_dict.py +0 -0
  160. /orionis/{luminate/installer → static/ascii}/icon.ascii +0 -0
  161. /orionis/{luminate/installer → static/ascii}/info.ascii +0 -0
  162. /orionis/{luminate/static → static}/bg/galaxy.jpg +0 -0
  163. /orionis/{luminate/static → static}/favicon/OrionisFrameworkFavicon.png +0 -0
  164. /orionis/{luminate/static → static}/logos/OrionisFramework.jpg +0 -0
  165. /orionis/{luminate/static → static}/logos/OrionisFramework.png +0 -0
  166. /orionis/{luminate/static → static}/logos/OrionisFramework.psd +0 -0
  167. /orionis/{luminate/static → static}/logos/OrionisFramework2.png +0 -0
  168. /orionis/{luminate/static → static}/logos/OrionisFramework3.png +0 -0
  169. {orionis-0.44.0.dist-info → orionis-0.47.0.dist-info}/LICENCE +0 -0
  170. {orionis-0.44.0.dist-info → orionis-0.47.0.dist-info}/WHEEL +0 -0
  171. {orionis-0.44.0.dist-info → orionis-0.47.0.dist-info}/entry_points.txt +0 -0
  172. {orionis-0.44.0.dist-info → orionis-0.47.0.dist-info}/top_level.txt +0 -0
orionis/cli_manager.py CHANGED
@@ -1,47 +1,33 @@
1
1
  import argparse
2
- from orionis.luminate.console.scripts.management import Management
2
+ from orionis.installer.installer_manager import InstallerManager
3
+ from orionis.installer.installer_output import InstallerOutput
3
4
 
5
+ # Main entry point for the Orionis CLI tool.
4
6
  def main():
5
- """
6
- Main entry point for the Orionis CLI tool.
7
- """
8
7
 
9
- # Create the argument parser for CLI commands
8
+ # Initialize the argument parser
10
9
  parser = argparse.ArgumentParser(description="Orionis Command Line Tool")
11
-
12
- # Optional argument for displaying the current Orionis version
13
10
  parser.add_argument('--version', action='store_true', help="Show Orionis version.")
14
-
15
- # Optional argument for upgrading Orionis to the latest version
16
11
  parser.add_argument('--upgrade', action='store_true', help="Upgrade Orionis to the latest version.")
17
-
18
- # Command to create a new Orionis app (requires an app name)
19
12
  parser.add_argument('command', nargs='?', choices=['new'], help="Available command: 'new'.")
20
-
21
- # Name of the application to be created (defaults to 'example-app')
22
13
  parser.add_argument('name', nargs='?', help="The name of the Orionis application to create.", default="example-app")
23
14
 
24
15
  # Parse the provided arguments
25
16
  args = parser.parse_args()
26
17
 
27
18
  # Initialize the Orionis tools for handling operations
28
- cli_manager = Management()
29
-
30
- # Handle the version command
31
- if args.version:
32
- cli_manager.displayVersion()
33
-
34
- # Handle the upgrade command
35
- elif args.upgrade:
36
- cli_manager.executeUpgrade()
37
-
38
- # Handle the 'new' command to create a new app
39
- elif args.command == 'new':
40
- cli_manager.createNewApp(args.name or 'example-app')
41
-
42
- # If no valid command is provided, show the help message
43
- else:
44
- cli_manager.displayInfo()
19
+ try:
20
+ installer = InstallerManager()
21
+ if args.version:
22
+ installer.handleVersion()
23
+ elif args.upgrade:
24
+ installer.handleUpgrade()
25
+ elif args.command == 'new':
26
+ installer.handleNewApp(args.name)
27
+ else:
28
+ installer.handleInfo()
29
+ except Exception as e:
30
+ InstallerOutput.error(f"An error occurred: {e}", e)
45
31
 
46
32
  # Execute the main function if the script is run directly
47
33
  if __name__ == "__main__":
@@ -0,0 +1,59 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any, Callable, Dict
3
+
4
+ class ICommandsBootstrapper(ABC):
5
+ """
6
+ Attributes
7
+ ----------
8
+ _commands : Dict[str, Dict[str, Any]]
9
+ A dictionary to store registered commands, where the key is the command signature
10
+ and the value is a dictionary containing the command class, arguments, description,
11
+ and signature.
12
+
13
+ Methods
14
+ -------
15
+ __init__()
16
+ Initializes the `CommandsBootstrapper` and triggers the autoload process.
17
+ _autoload()
18
+ Scans the command directories and loads command classes.
19
+ _register(concrete: Callable[..., Any])
20
+ Validates and registers a command class.
21
+ """
22
+
23
+ @abstractmethod
24
+ def _autoload(self) -> None:
25
+ """
26
+ Scans the command directories and loads command classes.
27
+
28
+ This method searches for Python files in the specified directories, imports them,
29
+ and registers any class that inherits from `BaseCommand`.
30
+
31
+ Raises
32
+ ------
33
+ BootstrapRuntimeError
34
+ If there is an error loading a module.
35
+ """
36
+ pass
37
+
38
+ @abstractmethod
39
+ def _register(self, concrete: Callable[..., Any]) -> None:
40
+ """
41
+ Validates and registers a command class.
42
+
43
+ This method ensures that the provided class is valid (inherits from `BaseCommand`,
44
+ has a `signature`, `description`, and `handle` method) and registers it in the
45
+ `_commands` dictionary.
46
+
47
+ Parameters
48
+ ----------
49
+ concrete : Callable[..., Any]
50
+ The command class to register.
51
+
52
+ Raises
53
+ ------
54
+ TypeError
55
+ If the input is not a class or does not inherit from `BaseCommand`.
56
+ ValueError
57
+ If the class does not have required attributes or methods.
58
+ """
59
+ pass
@@ -0,0 +1,112 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any, Dict, Optional
3
+
4
+ class IConfigBootstrapper(ABC):
5
+ """
6
+ Attributes
7
+ ----------
8
+ _config : Dict[str, Any]
9
+ A dictionary to store registered configuration sections and their data.
10
+
11
+ Methods
12
+ -------
13
+ __init__()
14
+ Initializes the `ConfigBootstrapper` and triggers the autoload process.
15
+ _autoload()
16
+ Scans the configuration directory and loads configuration classes.
17
+ _set(concrete: Any, section: str)
18
+ Validates and registers a configuration class.
19
+ _parse(data: Any) -> Dict[str, Any]
20
+ Converts the 'config' attribute of a class into a dictionary.
21
+ _register(section: str, data: Dict[str, Any])
22
+ Registers a configuration section.
23
+ set(key: str, value: Any)
24
+ Dynamically sets a configuration value using dot notation.
25
+ get(key: str, default: Optional[Any] = None) -> Any
26
+ Retrieves a configuration value using dot notation.
27
+ """
28
+
29
+ @abstractmethod
30
+ def _autoload(self) -> None:
31
+ """
32
+ Scans the configuration directory and loads configuration classes.
33
+
34
+ This method searches for Python files in the specified directory, imports them,
35
+ and registers any class named `Config` that inherits from `IConfig`.
36
+
37
+ Raises
38
+ ------
39
+ FileNotFoundError
40
+ If the configuration directory does not exist.
41
+ BootstrapRuntimeError
42
+ If there is an error loading a module.
43
+ """
44
+ pass
45
+
46
+ @abstractmethod
47
+ def _set(self, concrete: Any, section: str) -> None:
48
+ """
49
+ Validates and registers a configuration class.
50
+
51
+ This method ensures that the provided class is valid (inherits from `IConfig`
52
+ and has a `config` attribute) and registers it in the `_config` dictionary.
53
+
54
+ Parameters
55
+ ----------
56
+ concrete : Any
57
+ The configuration class to register.
58
+ section : str
59
+ The section name under which the configuration will be registered.
60
+
61
+ Raises
62
+ ------
63
+ TypeError
64
+ If the input is not a class or does not inherit from `IConfig`.
65
+ ValueError
66
+ If the class does not have a `config` attribute.
67
+ """
68
+ pass
69
+
70
+ @abstractmethod
71
+ def _parse(data: Any) -> Dict[str, Any]:
72
+ """
73
+ Converts the 'config' attribute of a class into a dictionary.
74
+
75
+ If the input is already a dictionary, it is returned as-is. If the input is a
76
+ dataclass, it is converted to a dictionary using `asdict`.
77
+
78
+ Parameters
79
+ ----------
80
+ data : Any
81
+ The data to convert into a dictionary.
82
+
83
+ Returns
84
+ -------
85
+ Dict[str, Any]
86
+ The converted dictionary.
87
+
88
+ Raises
89
+ ------
90
+ TypeError
91
+ If the data cannot be converted to a dictionary.
92
+ """
93
+ pass
94
+
95
+ @abstractmethod
96
+ def _register(self, section: str, data: Dict[str, Any]) -> None:
97
+ """
98
+ Registers a configuration section.
99
+
100
+ Parameters
101
+ ----------
102
+ section : str
103
+ The name of the configuration section.
104
+ data : Dict[str, Any]
105
+ The configuration data to register.
106
+
107
+ Raises
108
+ ------
109
+ ValueError
110
+ If the section is already registered.
111
+ """
112
+ pass
@@ -0,0 +1,33 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any, Optional
3
+
4
+ class IEnvironmentBootstrapper(ABC):
5
+ """
6
+ Attributes
7
+ ----------
8
+ _environment_vars : Dict[str, str]
9
+ A dictionary to store the loaded environment variables.
10
+ path : Path
11
+ The path to the `.env` file.
12
+
13
+ Methods
14
+ -------
15
+ _autoload()
16
+ Loads environment variables from the `.env` file or creates the file if it does not exist.
17
+ """
18
+
19
+ @abstractmethod
20
+ def _autoload(self) -> None:
21
+ """
22
+ Loads environment variables from the `.env` file or creates the file if it does not exist.
23
+
24
+ This method checks if the `.env` file exists in the current working directory.
25
+ If the file does not exist, it creates an empty `.env` file. If the file exists,
26
+ it loads the environment variables into the `_environment_vars` dictionary.
27
+
28
+ Raises
29
+ ------
30
+ PermissionError
31
+ If the `.env` file cannot be created or read due to insufficient permissions.
32
+ """
33
+ pass
@@ -1,6 +1,5 @@
1
1
  from abc import ABC, abstractmethod
2
2
  from typing import List
3
-
4
3
  from orionis.luminate.console.output.progress_bar import ProgressBar
5
4
 
6
5
  class IBaseCommand(ABC):
@@ -0,0 +1,37 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Any, Optional
3
+
4
+ class IConfig(ABC):
5
+
6
+ @abstractmethod
7
+ def set(key: str, value: Any) -> None:
8
+ """
9
+ Dynamically sets a configuration value using dot notation.
10
+
11
+ Parameters
12
+ ----------
13
+ key : str
14
+ The configuration key (e.g., 'app.debug').
15
+ value : Any
16
+ The value to set.
17
+ """
18
+ pass
19
+
20
+ @abstractmethod
21
+ def get(key: str, default: Optional[Any] = None) -> Any:
22
+ """
23
+ Retrieves a configuration value using dot notation.
24
+
25
+ Parameters
26
+ ----------
27
+ key : str
28
+ The configuration key (e.g., 'app.debug').
29
+ default : Optional[Any]
30
+ The default value to return if the key is not found.
31
+
32
+ Returns
33
+ -------
34
+ Any
35
+ The configuration value or the default value if the key is not found.
36
+ """
37
+ pass
@@ -0,0 +1,40 @@
1
+
2
+ from abc import ABC, abstractmethod
3
+
4
+ class IEnv(ABC):
5
+ """
6
+ A facade class for accessing environment variables.
7
+
8
+ This class provides a static method to retrieve environment variables
9
+ stored in the application context. It implements the `IEnv` interface.
10
+
11
+ Methods
12
+ -------
13
+ get(key: str, default=None) -> str
14
+ Retrieves the value of an environment variable.
15
+ """
16
+
17
+ @abstractmethod
18
+ def get(key: str, default=None) -> str:
19
+ """
20
+ Retrieves the value of an environment variable.
21
+
22
+ This method provides a convenient way to access environment variables
23
+ stored in the application context. If the variable does not exist, it
24
+ returns the specified default value.
25
+
26
+ Parameters
27
+ ----------
28
+ key : str
29
+ The name of the environment variable to retrieve.
30
+ default : Any, optional
31
+ The default value to return if the environment variable does not exist.
32
+ Defaults to None.
33
+
34
+ Returns
35
+ -------
36
+ str
37
+ The value of the environment variable, or the default value if the variable
38
+ does not exist.
39
+ """
40
+ pass
@@ -1,25 +1,32 @@
1
1
  from abc import ABC, abstractmethod
2
2
 
3
3
  class IPath(ABC):
4
-
5
- @abstractmethod
6
- def _resolve_directory(directory: str, file: str = None):
7
- """
8
- Internal helper function to resolve an absolute path for a given directory.
9
-
10
- Parameters
11
- ----------
12
- directory : str
13
- The base directory to resolve the path from.
14
- file : str, optional
15
- The relative file path inside the directory (default is an empty string).
16
-
17
- Returns
18
- -------
19
- SkeletonPath
20
- The resolved absolute path wrapped in a SkeletonPath object.
21
- """
22
- pass
4
+ """
5
+ A facade class for resolving absolute paths to various application directories.
6
+
7
+ This class provides static methods to resolve paths to common directories such as
8
+ 'app', 'config', 'database', 'resources', 'routes', 'storage', and 'tests'.
9
+ It uses the `PathService` to resolve and validate paths.
10
+
11
+ Methods
12
+ -------
13
+ _resolve_directory(directory: str, file: str = None) -> SkeletonPath
14
+ Resolves the absolute path for a given directory and optional file.
15
+ app(file: str = None) -> SkeletonPath
16
+ Returns the absolute path for a file inside the 'app' directory.
17
+ config(file: str = None) -> SkeletonPath
18
+ Returns the absolute path for a file inside the 'config' directory.
19
+ database(file: str = None) -> SkeletonPath
20
+ Returns the absolute path for a file inside the 'database' directory.
21
+ resource(file: str = None) -> SkeletonPath
22
+ Returns the absolute path for a file inside the 'resource' directory.
23
+ routes(file: str = None) -> SkeletonPath
24
+ Returns the absolute path for a file inside the 'routes' directory.
25
+ storage(file: str = None) -> SkeletonPath
26
+ Returns the absolute path for a file inside the 'storage' directory.
27
+ tests(file: str = None) -> SkeletonPath
28
+ Returns the absolute path for a file inside the 'tests' directory.
29
+ """
23
30
 
24
31
  @abstractmethod
25
32
  def app(file: str = None):
@@ -138,4 +145,4 @@ class IPath(ABC):
138
145
  SkeletonPath
139
146
  The resolved path wrapped in a SkeletonPath object.
140
147
  """
141
- pass
148
+ pass
@@ -0,0 +1,83 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+ class ILog(ABC):
4
+ """
5
+ A facade class for logging messages with different severity levels.
6
+
7
+ This class provides static methods to log messages using the `LogguerService`.
8
+ It simplifies the process of logging by abstracting the service resolution
9
+ and providing a clean interface for logging.
10
+
11
+ Methods
12
+ -------
13
+ info(message: str) -> None
14
+ Logs an informational message.
15
+ error(message: str) -> None
16
+ Logs an error message.
17
+ success(message: str) -> None
18
+ Logs a success message.
19
+ warning(message: str) -> None
20
+ Logs a warning message.
21
+ debug(message: str) -> None
22
+ Logs a debug message.
23
+ """
24
+
25
+ @abstractmethod
26
+ def info(message: str) -> None:
27
+ """
28
+ Logs an informational message.
29
+
30
+ Parameters
31
+ ----------
32
+ message : str
33
+ The message to log.
34
+ """
35
+ pass
36
+
37
+ @abstractmethod
38
+ def error(message: str) -> None:
39
+ """
40
+ Logs an error message.
41
+
42
+ Parameters
43
+ ----------
44
+ message : str
45
+ The message to log.
46
+ """
47
+ pass
48
+
49
+ @abstractmethod
50
+ def success(message: str) -> None:
51
+ """
52
+ Logs a success message.
53
+
54
+ Parameters
55
+ ----------
56
+ message : str
57
+ The message to log.
58
+ """
59
+ pass
60
+
61
+ @abstractmethod
62
+ def warning(message: str) -> None:
63
+ """
64
+ Logs a warning message.
65
+
66
+ Parameters
67
+ ----------
68
+ message : str
69
+ The message to log.
70
+ """
71
+ pass
72
+
73
+ @abstractmethod
74
+ def debug(message: str) -> None:
75
+ """
76
+ Logs a debug message.
77
+
78
+ Parameters
79
+ ----------
80
+ message : str
81
+ The message to log.
82
+ """
83
+ pass
@@ -2,16 +2,13 @@ from abc import ABC, abstractmethod
2
2
 
3
3
  class IUnitTests(ABC):
4
4
  """
5
- Interface for executing unit tests in a specified directory.
6
-
7
- This class defines the abstract structure for any unit test executor,
8
- enforcing the implementation of the 'execute' method in any subclass.
5
+ Interface for executing unit tests based on a specified pattern.
9
6
 
10
7
  Methods
11
8
  -------
12
9
  execute(pattern: str) -> dict
13
- Executes the unit tests in the 'tests' directory and subdirectories,
14
- using a file pattern for filtering test files.
10
+ Executes unit tests by iterating over the 'tests' directory and its subdirectories,
11
+ matching test files based on the provided pattern.
15
12
  """
16
13
 
17
14
  @abstractmethod
@@ -1,28 +1,30 @@
1
+
1
2
  from abc import ABC, abstractmethod
2
3
 
3
- class IManagement(ABC):
4
+ class IInstallerManager(ABC):
4
5
  """
5
- Interface defining the contract for the Management class.
6
-
7
- This interface ensures that any implementing class provides methods for
8
- displaying the framework version, upgrading the framework, creating a new
9
- application, and displaying additional information.
6
+ Interface for the InstallerManager class.
10
7
  """
11
8
 
12
9
  @abstractmethod
13
- def displayVersion(self) -> str:
10
+ def handleVersion(self) -> str:
14
11
  """
15
- Display the current version of the framework.
12
+ Display the current version of the framework in ASCII format.
16
13
 
17
14
  Returns
18
15
  -------
19
16
  str
20
17
  The ASCII representation of the framework version.
18
+
19
+ Raises
20
+ ------
21
+ Exception
22
+ If an error occurs while generating the ASCII version output.
21
23
  """
22
24
  pass
23
25
 
24
26
  @abstractmethod
25
- def executeUpgrade(self) -> None:
27
+ def handleUpgrade(self) -> None:
26
28
  """
27
29
  Execute the framework upgrade process to the latest version.
28
30
 
@@ -33,15 +35,16 @@ class IManagement(ABC):
33
35
  """
34
36
  pass
35
37
 
38
+
36
39
  @abstractmethod
37
- def createNewApp(self, name_app: str) -> None:
40
+ def handleNewApp(self, name_app: str = "example-app") -> None:
38
41
  """
39
- Create a new application with the given name.
42
+ Create a new application with the specified name.
40
43
 
41
44
  Parameters
42
45
  ----------
43
- name_app : str
44
- The name of the new application.
46
+ name_app : str, optional
47
+ The name of the new application (default is "example-app").
45
48
 
46
49
  Raises
47
50
  ------
@@ -51,13 +54,13 @@ class IManagement(ABC):
51
54
  pass
52
55
 
53
56
  @abstractmethod
54
- def displayInfo(self) -> None:
57
+ def handleInfo(self) -> None:
55
58
  """
56
- Display additional information about the framework.
59
+ Display additional framework information in ASCII format.
57
60
 
58
61
  Raises
59
62
  ------
60
63
  Exception
61
64
  If an error occurs while displaying information.
62
65
  """
63
- pass
66
+ pass