orionis 0.401.0__py3-none-any.whl → 0.403.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 (37) hide show
  1. orionis/container/providers/service_provider.py +4 -4
  2. orionis/foundation/application.py +4 -2
  3. orionis/foundation/config/base.py +112 -0
  4. orionis/foundation/config/logging/entities/channels.py +87 -69
  5. orionis/foundation/config/logging/entities/chunked.py +37 -92
  6. orionis/foundation/config/logging/entities/daily.py +43 -81
  7. orionis/foundation/config/logging/entities/hourly.py +16 -71
  8. orionis/foundation/config/logging/entities/logging.py +37 -38
  9. orionis/foundation/config/logging/entities/monthly.py +19 -75
  10. orionis/foundation/config/logging/entities/stack.py +13 -69
  11. orionis/foundation/config/logging/entities/weekly.py +19 -75
  12. orionis/foundation/config/logging/enums/levels.py +6 -7
  13. orionis/foundation/config/logging/validators/__init__.py +7 -0
  14. orionis/foundation/config/logging/validators/level.py +54 -0
  15. orionis/foundation/config/logging/validators/path.py +34 -0
  16. orionis/foundation/providers/console_provider.py +0 -4
  17. orionis/foundation/providers/dumper_provider.py +0 -4
  18. orionis/foundation/providers/logger_provider.py +17 -0
  19. orionis/foundation/providers/path_resolver_provider.py +0 -4
  20. orionis/foundation/providers/progress_bar_provider.py +0 -4
  21. orionis/foundation/providers/workers_provider.py +0 -4
  22. orionis/metadata/framework.py +1 -1
  23. orionis/services/log/contracts/__init__.py +0 -0
  24. orionis/services/log/contracts/log_service.py +23 -0
  25. orionis/services/log/exceptions/__init__.py +5 -0
  26. orionis/services/log/exceptions/runtime.py +19 -0
  27. orionis/services/log/handlers/__init__.py +0 -0
  28. orionis/services/log/handlers/size_rotating.py +52 -0
  29. orionis/services/log/handlers/timed_rotating.py +53 -0
  30. orionis/services/log/log_service.py +188 -143
  31. orionis/support/facades/logger.py +15 -0
  32. {orionis-0.401.0.dist-info → orionis-0.403.0.dist-info}/METADATA +1 -1
  33. {orionis-0.401.0.dist-info → orionis-0.403.0.dist-info}/RECORD +37 -24
  34. {orionis-0.401.0.dist-info → orionis-0.403.0.dist-info}/WHEEL +0 -0
  35. {orionis-0.401.0.dist-info → orionis-0.403.0.dist-info}/licenses/LICENCE +0 -0
  36. {orionis-0.401.0.dist-info → orionis-0.403.0.dist-info}/top_level.txt +0 -0
  37. {orionis-0.401.0.dist-info → orionis-0.403.0.dist-info}/zip-safe +0 -0
@@ -1,54 +1,109 @@
1
- import logging
2
- import os
3
- from pathlib import Path
4
- import re
5
- from datetime import datetime
6
- from logging.handlers import RotatingFileHandler, TimedRotatingFileHandler
7
- from orionis._contracts.services.config.config_service import IConfigService
8
-
9
- class LogguerService:
10
- """
11
- A service class for logging messages with different severity levels.
12
-
13
- This class initializes a logger that can write logs to a file. It supports
14
- various log levels such as INFO, ERROR, SUCCESS, WARNING, and DEBUG.
15
-
16
- Attributes
17
- ----------
18
- logger : logging.Logger
19
- The logger instance used to log messages.
20
-
21
- Methods
22
- -------
23
- __init__(config_service: ConfigService)
24
- Initializes the logger with ConfigService
25
- _initialize_logger(config_service: ConfigService)
26
- Configures the logger with ConfigService settings.
27
- info(message: str) -> None
28
- Logs an informational message.
29
- error(message: str) -> None
30
- Logs an error message.
31
- success(message: str) -> None
32
- Logs a success message (treated as info).
33
- warning(message: str) -> None
34
- Logs a warning message.
35
- debug(message: str) -> None
36
- Logs a debug message.
37
- """
38
-
39
- def __init__(self, config_service : IConfigService):
1
+ from orionis.foundation.config.logging.entities.logging import Logging
2
+ from orionis.foundation.config.logging.enums import Level
3
+ from orionis.services.log.contracts.log_service import ILoggerService
4
+ from orionis.services.log.exceptions import LoggerRuntimeError
5
+ from orionis.services.log.handlers.size_rotating import PrefixedSizeRotatingFileHandler
6
+ from orionis.services.log.handlers.timed_rotating import PrefixedTimedRotatingFileHandler
7
+
8
+ class LoggerService(ILoggerService):
9
+
10
+ def __init__(
11
+ self,
12
+ config: Logging | dict = None,
13
+ **kwargs
14
+ ):
40
15
  """
41
- Initializes the logger with the specified path, log level, and filename.
16
+ Initialize the LoggerService with the provided configuration.
42
17
 
43
18
  Parameters
44
19
  ----------
45
- config_service : ConfigService
46
- The configuration service instance.
20
+ config : Logging or dict, optional
21
+ The logging configuration. Can be an instance of the Logging class,
22
+ a dictionary of configuration parameters, or None. If None, configuration
23
+ is initialized using kwargs.
24
+ **kwargs
25
+ Additional keyword arguments used to initialize the Logging configuration
26
+ if config is None.
27
+
28
+ Raises
29
+ ------
30
+ LoggerRuntimeError
31
+ If the logger configuration cannot be initialized from the provided arguments.
32
+ """
33
+
34
+ # Attributes
35
+ self.__logger = None
36
+ self.__config = None
37
+
38
+ # Initialize the logger configuration using **kwargs if provided
39
+ if config is None:
40
+ try:
41
+ self.__config = Logging(**kwargs)
42
+ except Exception as e:
43
+ raise LoggerRuntimeError(f"Failed to initialize logger configuration: {e}")
44
+
45
+ # If config is a dictionary, convert it to Logging
46
+ elif isinstance(config, dict):
47
+ self.__config = Logging(**config)
48
+
49
+ # If config is already an instance of Logging, use it directly
50
+ elif isinstance(config, Logging):
51
+ self.__config = config
52
+
53
+ # Initialize LoggerService
54
+ self.__initLogger()
55
+
56
+ def __filename(self, original_path:str) -> str:
57
+ """
58
+ Generates a rotated log filename by prefixing the original filename with a timestamp.
59
+ This method takes an original file path, extracts its directory, base name, and extension,
60
+ and returns a new file path where the base name is prefixed with the current timestamp
61
+ in the format 'YYYYMMDD_HHMMSS'. If the target directory does not exist, it is created.
62
+ The original file path to be rotated.
63
+ The new file path with a timestamp prefix added to the base name.
64
+ Notes
65
+ -----
66
+ - The timestamp is based on the current local time.
67
+ - The method ensures that the parent directory for the new file exists.
68
+
69
+ Returns
70
+ -------
71
+ str
72
+ The new filename with a timestamp prefix in the format 'YYYYMMDD_HHMMSS'.
47
73
  """
48
- self.config_service = config_service
49
- self._initialize_logger()
74
+ import os
75
+ from datetime import datetime
76
+ from pathlib import Path
50
77
 
51
- def _initialize_logger(self):
78
+ # Split the original path to extract the base name and extension
79
+ if '/' in original_path:
80
+ parts = original_path.split('/')
81
+ elif '\\' in original_path:
82
+ parts = original_path.split('\\')
83
+ else:
84
+ parts = original_path.split(os.sep)
85
+
86
+ # Get the base name and extension
87
+ filename, ext = os.path.splitext(parts[-1])
88
+
89
+ # Create the path without the last part
90
+ path = os.path.join(*parts[:-1]) if len(parts) > 1 else ''
91
+
92
+ # Prefix the base name with a timestamp
93
+ prefix = datetime.now().strftime("%Y%m%d_%H%M%S")
94
+
95
+ # Join the path, prefix, and filename to create the full path
96
+ full_path = os.path.join(path, f"{prefix}_{filename}{ext}")
97
+
98
+ # Ensure the log directory exists
99
+ log_dir = Path(full_path).parent
100
+ if not log_dir.exists():
101
+ log_dir.mkdir(parents=True, exist_ok=True)
102
+
103
+ # Return the full path as a string
104
+ return full_path
105
+
106
+ def __initLogger(self):
52
107
  """
53
108
  Configures the logger with the specified settings.
54
109
 
@@ -56,30 +111,33 @@ class LogguerService:
56
111
  directory does not exist, it creates it. The log format includes the
57
112
  timestamp and the log message.
58
113
 
59
- Parameters
60
- ----------
61
- config_service : ConfigService
62
- The configuration service instance.
63
-
64
114
  Raises
65
115
  ------
66
- RuntimeError
116
+ LoggerRuntimeError
67
117
  If the logger cannot be initialized due to an error.
68
118
  """
69
- try:
119
+ import logging
120
+ from datetime import datetime
70
121
 
71
- base = Path(self.config_service.get("logging.base_path", os.getcwd()))
72
- default_path = base / "storage" / "logs"
73
- default_path.mkdir(parents=True, exist_ok=True)
74
- default_path = default_path / "orionis.log"
122
+ try:
75
123
 
124
+ # List to hold the handlers
76
125
  handlers = []
77
126
 
78
- channel : str = self.config_service.get("logging.default")
79
- config : dict = self.config_service.get(f"logging.channels.{channel}", {})
80
- path : str = config.get("path", default_path)
81
- app_timezone : str = self.config_service.get("app.timezone", "UTC")
127
+ # Get the channel from the configuration
128
+ channel: str = self.__config.default
129
+
130
+ # Get the configuration for the specified channel
131
+ config_channels = getattr(self.__config.channels, channel)
132
+
133
+ # Get the path from the channel configuration
134
+ path: str = self.__filename(getattr(config_channels, 'path'))
82
135
 
136
+ # Get Level from the channel configuration, defaulting to 10 (DEBUG)
137
+ level: Level | int = getattr(config_channels, 'level', 10)
138
+ level = level if isinstance(level, int) else level.value
139
+
140
+ # Create handlers based on the channel type
83
141
  if channel == "stack":
84
142
 
85
143
  handlers = [
@@ -92,153 +150,140 @@ class LogguerService:
92
150
  elif channel == "hourly":
93
151
 
94
152
  handlers = [
95
- TimedRotatingFileHandler(
96
- filename=path,
97
- when="h",
98
- interval=1,
99
- backupCount=config.get('retention_hours', 24),
100
- encoding="utf-8",
101
- utc= True if app_timezone == "UTC" else False
153
+ PrefixedTimedRotatingFileHandler(
154
+ filename = path,
155
+ when = "h",
156
+ interval = 1,
157
+ backupCount = getattr(config_channels, 'retention_hours', 24),
158
+ encoding = "utf-8",
159
+ utc = False
102
160
  )
103
161
  ]
104
162
 
105
163
  elif channel == "daily":
106
164
 
107
- backup_count = config.get('retention_days', 30)
108
- hour_at:str = config.get('at', "00:00")
109
- if backup_count < 1:
110
- raise ValueError("The 'retention_days' value must be an integer greater than 0.")
111
- if not bool(re.match(r"^(?:[01]?\d|2[0-3]):[0-5]?\d$", hour_at)):
112
- raise ValueError("The 'at' value must be a valid time in the format HH:MM.")
113
-
114
165
  handlers = [
115
- TimedRotatingFileHandler(
116
- filename=path,
117
- when="d",
118
- interval=1,
119
- backupCount=backup_count,
120
- encoding="utf-8",
121
- atTime=datetime.strptime(hour_at, "%H:%M").time(),
122
- utc= True if app_timezone == "UTC" else False
166
+ PrefixedTimedRotatingFileHandler(
167
+ filename = path,
168
+ when = "d",
169
+ interval = 1,
170
+ backupCount = getattr(config_channels, 'retention_days', 7),
171
+ encoding = "utf-8",
172
+ atTime = datetime.strptime(getattr(config_channels, 'at', "00:00"), "%H:%M").time(),
173
+ utc = False
123
174
  )
124
175
  ]
125
176
 
126
177
  elif channel == "weekly":
127
178
 
128
- backup_count = config.get('retention_weeks', 4)
129
- if backup_count < 1:
130
- raise ValueError("The 'retention_weeks' value must be an integer greater than 0.")
131
179
  handlers = [
132
- TimedRotatingFileHandler(
133
- filename=path,
134
- when="w0",
135
- interval=1,
136
- backupCount=backup_count,
137
- encoding="utf-8",
138
- utc= True if app_timezone == "UTC" else False
180
+ PrefixedTimedRotatingFileHandler(
181
+ filename = path,
182
+ when = "w0",
183
+ interval = 1,
184
+ backupCount = getattr(config_channels, 'retention_weeks', 4),
185
+ encoding = "utf-8",
186
+ utc = False
139
187
  )
140
188
  ]
141
189
 
142
190
  elif channel == "monthly":
143
191
 
144
- backup_count = config.get('retention_months', 2)
145
- if backup_count < 1:
146
- raise ValueError("The 'retention_months' value must be an integer greater than 0.")
147
192
  handlers = [
148
- TimedRotatingFileHandler(
149
- filename=path,
150
- when="midnight",
151
- interval=30,
152
- backupCount=backup_count,
153
- encoding="utf-8",
154
- utc= True if app_timezone == "UTC" else False
193
+ PrefixedTimedRotatingFileHandler(
194
+ filename = path,
195
+ when = "midnight",
196
+ interval = 30,
197
+ backupCount = getattr(config_channels, 'retention_months', 4),
198
+ encoding = "utf-8",
199
+ utc = False
155
200
  )
156
201
  ]
157
202
 
158
203
  elif channel == "chunked":
159
204
 
160
- max_bytes = config.get('mb_size', 5)
161
- if max_bytes < 1:
162
- raise ValueError("The 'mb_size' value must be an integer greater than 0.")
163
- backup_count = config.get('max_files', 5)
164
- if backup_count < 1:
165
- raise ValueError("The 'max_files' value must be an integer greater than 0.")
166
205
  handlers = [
167
- RotatingFileHandler(
168
- filename=path,
169
- maxBytes= max_bytes * 1024 * 1024,
170
- backupCount=backup_count,
171
- encoding="utf-8"
206
+ PrefixedSizeRotatingFileHandler(
207
+ filename = path,
208
+ maxBytes = getattr(config_channels, 'mb_size', 10) * 1024 * 1024,
209
+ backupCount =getattr(config_channels, 'files', 5),
210
+ encoding ="utf-8"
172
211
  )
173
212
  ]
174
213
 
175
-
176
214
  # Configure the logger
177
215
  logging.basicConfig(
178
- level=config.get("level", "INFO").upper(),
179
- format="%(asctime)s - %(message)s",
180
- datefmt="%Y-%m-%d %H:%M:%S",
181
- encoding="utf-8",
182
- handlers=handlers
216
+ level = level,
217
+ format = "%(asctime)s [%(levelname)s] - %(message)s",
218
+ datefmt = "%Y-%m-%d %H:%M:%S",
219
+ encoding = "utf-8",
220
+ handlers = handlers
183
221
  )
184
222
 
185
223
  # Get the logger instance
186
- self.logger = logging.getLogger(__name__)
224
+ self.__logger = logging.getLogger(__name__)
187
225
 
188
226
  except Exception as e:
189
- raise RuntimeError(f"Failed to initialize logger: {e}")
227
+
228
+ # Raise a runtime error if logger initialization fails
229
+ raise LoggerRuntimeError(f"Failed to initialize logger: {e}")
190
230
 
191
231
  def info(self, message: str) -> None:
192
232
  """
193
- Logs an informational message.
233
+ Log an informational message.
194
234
 
195
235
  Parameters
196
236
  ----------
197
237
  message : str
198
- The message to log.
238
+ The informational message to log.
239
+
240
+ Returns
241
+ -------
242
+ None
199
243
  """
200
- self.logger.info(f"[INFO] - {message}")
244
+ self.__logger.info(message.strip())
201
245
 
202
246
  def error(self, message: str) -> None:
203
247
  """
204
- Logs an error message.
248
+ Log an error message.
205
249
 
206
250
  Parameters
207
251
  ----------
208
252
  message : str
209
- The message to log.
210
- """
211
- self.logger.error(f"[ERROR] - {message}")
253
+ The error message to log.
212
254
 
213
- def success(self, message: str) -> None:
255
+ Returns
256
+ -------
257
+ None
214
258
  """
215
- Logs a success message (treated as info).
216
-
217
- Parameters
218
- ----------
219
- message : str
220
- The message to log.
221
- """
222
- self.logger.info(f"[SUCCESS] - {message}")
259
+ self.__logger.error(message.strip())
223
260
 
224
261
  def warning(self, message: str) -> None:
225
262
  """
226
- Logs a warning message.
263
+ Log a warning message.
227
264
 
228
265
  Parameters
229
266
  ----------
230
267
  message : str
231
- The message to log.
268
+ The warning message to log.
269
+
270
+ Returns
271
+ -------
272
+ None
232
273
  """
233
- self.logger.warning(f"[WARNING] - {message}")
274
+ self.__logger.warning(message.strip())
234
275
 
235
276
  def debug(self, message: str) -> None:
236
277
  """
237
- Logs a debug message.
278
+ Log a debug message.
238
279
 
239
280
  Parameters
240
281
  ----------
241
282
  message : str
242
- The message to log.
283
+ The debug message to log.
284
+
285
+ Returns
286
+ -------
287
+ None
243
288
  """
244
- self.logger.debug(f"[DEBUG] - {message}")
289
+ self.__logger.debug(message.strip())
@@ -0,0 +1,15 @@
1
+ from orionis.container.facades.facade import Facade
2
+
3
+ class Log(Facade):
4
+
5
+ @classmethod
6
+ def getFacadeAccessor(cls) -> str:
7
+ """
8
+ Get the service container binding key for the dumper component.
9
+
10
+ Returns
11
+ -------
12
+ str
13
+ The service container binding key.
14
+ """
15
+ return "core.orionis.logger"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orionis
3
- Version: 0.401.0
3
+ Version: 0.403.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
@@ -132,7 +132,7 @@ orionis/container/exceptions/value.py,sha256=hjY0YEusoL3DurME1ornxvIv1wyGaf6tBgg
132
132
  orionis/container/facades/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
133
133
  orionis/container/facades/facade.py,sha256=wIjcQKxQa0xlTGGd6UIakenHMv0mM1BVPI7kt2Hk6uw,3724
134
134
  orionis/container/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
135
- orionis/container/providers/service_provider.py,sha256=9SHDzeuJbktRhrLq0zo2fZhRR4xOaYGOb2wKl7iBR4k,1923
135
+ orionis/container/providers/service_provider.py,sha256=rAvo32CBPqCSXns4d6IzM7AB9bEPzTCQe-3e5BAUrv8,1934
136
136
  orionis/container/resolver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
137
  orionis/container/resolver/resolver.py,sha256=8mTouPo9hhMwz1CxZcqmzZlg3vHoLCs5HEWtreZ-KWk,23523
138
138
  orionis/container/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -146,8 +146,9 @@ orionis/container/validators/is_subclass.py,sha256=4sBaGLoRs8nUhuWjlP0VJqyTwVHYq
146
146
  orionis/container/validators/is_valid_alias.py,sha256=4uAYcq8xov7jZbXnpKpjNkxcZtlTNnL5RRctVPMwJes,1424
147
147
  orionis/container/validators/lifetime.py,sha256=IQ43fDNrxYHMlZH2zlYDJnlkLO_eS4U7Fs3UJgQBidI,1844
148
148
  orionis/foundation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
- orionis/foundation/application.py,sha256=iR8wCicowPy4Rfn-teOlLgN3ILWCPC9TuiCPX7dvyCM,34992
149
+ orionis/foundation/application.py,sha256=IpzpEHFOks8SGvh_vqA02DND2KE2SwcqY1PrgRi2bCs,35094
150
150
  orionis/foundation/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
+ orionis/foundation/config/base.py,sha256=E_wKMdaXLN3tNTDKDeE40xiU7wpT1Hvg821_p6mttMc,3972
151
152
  orionis/foundation/config/startup.py,sha256=zutF-34DkW68bpiTxH9xrmIe1iJdXCF9Y6wueXS6qys,8265
152
153
  orionis/foundation/config/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
153
154
  orionis/foundation/config/app/entities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -197,16 +198,19 @@ orionis/foundation/config/filesystems/entitites/local.py,sha256=joREyccRBj243Ign
197
198
  orionis/foundation/config/filesystems/entitites/public.py,sha256=wB3zjoVzgAdGZw8sX8r8CobKBK7AzjCD-muBmMPg9-Y,2818
198
199
  orionis/foundation/config/logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
199
200
  orionis/foundation/config/logging/entities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
200
- orionis/foundation/config/logging/entities/channels.py,sha256=0Q-EVIiGyDxkIXHyEq00-vlTfzdE0ZhztLQ1xhY84g4,5025
201
- orionis/foundation/config/logging/entities/chunked.py,sha256=QqH2OfsymhPnpQUhC8qmctAr1vTktPXvz7Jnlf1rHWs,6142
202
- orionis/foundation/config/logging/entities/daily.py,sha256=jizdvCLKjCULRsbm0O05_TH5YEU5PnvGFKd98RFOUAM,5447
203
- orionis/foundation/config/logging/entities/hourly.py,sha256=JKPJ28ZNqX3ou-7wpYJll4BPeaAtOUhri44Fcxi78NY,5169
204
- orionis/foundation/config/logging/entities/logging.py,sha256=Zmfx9xw-TJDcL0VoQ2UOnvH_QYI_BQ7jLjEGRUg8jlk,2775
205
- orionis/foundation/config/logging/entities/monthly.py,sha256=WtZIzyWIgnwDDThu-yYfRcopFocnjMjcochhqZ-gfvo,5229
206
- orionis/foundation/config/logging/entities/stack.py,sha256=JolLbCP0TaglFWrrcfVW4MdRrvJfulAY4UCJ2VhCDt0,4019
207
- orionis/foundation/config/logging/entities/weekly.py,sha256=snCO4hDRXanHe6eP7jcArnK4vA8kAImsofoninqzJb8,5143
201
+ orionis/foundation/config/logging/entities/channels.py,sha256=ep4yRP7N84ZCzy3uV0jW7dJdZMG7g1jN8X9TAto2fl0,6077
202
+ orionis/foundation/config/logging/entities/chunked.py,sha256=kPG_AXmtedCGEcwKc90JbnWeGT2_FVqXola1aJkRNbI,3512
203
+ orionis/foundation/config/logging/entities/daily.py,sha256=tfZa4OpyljysAcYRDppTyxKYL8bR-KecPm8m9QDKNv4,3669
204
+ orionis/foundation/config/logging/entities/hourly.py,sha256=EgjV4iV-yKSj5Y6SQQlKhd2pn68zF-zJ94xAUme3zG4,2617
205
+ orionis/foundation/config/logging/entities/logging.py,sha256=Uo937rlOGKKI_7QHPRT5-egfHOf4D6q41j5i8Vkgreo,2781
206
+ orionis/foundation/config/logging/entities/monthly.py,sha256=TuaMkJcbyxXu2M4e4j2JsMA6c_7kYILMc6kQ6PBh1ew,2604
207
+ orionis/foundation/config/logging/entities/stack.py,sha256=cVxHNeHjn6x0NW8XxepUJYni4-sHcDjA1D86XXu3jxw,1402
208
+ orionis/foundation/config/logging/entities/weekly.py,sha256=uniGZ62ysb1SyQYNs4pWmqf-yHxsY0u54RsoB_-IMpQ,2552
208
209
  orionis/foundation/config/logging/enums/__init__.py,sha256=QUTGa3iIds08ycR7d-Oqa11P07G-djFLGco9ziJjg0E,57
209
- orionis/foundation/config/logging/enums/levels.py,sha256=sXHT3ZsGM40pi3wJ9XVbcONVvHLuMZzNn-GI5exWqBo,879
210
+ orionis/foundation/config/logging/enums/levels.py,sha256=9ELSmWnlaB14uqp5OsKXltsF5aVbxwdLQxYp8pjQAbk,872
211
+ orionis/foundation/config/logging/validators/__init__.py,sha256=ZJmPiObyJgbGCgFFz20Ryu4CX5z-cPW9ZWxirQrJoZ0,121
212
+ orionis/foundation/config/logging/validators/level.py,sha256=FOO_c-EKcIBoCexIT98YMyrs8jDFEYj8eDY5kW3b184,1994
213
+ orionis/foundation/config/logging/validators/path.py,sha256=UXjF86HxF6kWCi-Oyx42s9CkbxuewKTmQTiibCqFJ_Q,1094
210
214
  orionis/foundation/config/mail/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
211
215
  orionis/foundation/config/mail/entities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
212
216
  orionis/foundation/config/mail/entities/file.py,sha256=EL9RCFAEJGbdYB-ynXt6wSWVkyuITAJCmTHsknOeuCI,2525
@@ -243,13 +247,14 @@ orionis/foundation/exceptions/runtime.py,sha256=QS9Wjy79UFoM_lA-JR907p4l4Z8ae5E8
243
247
  orionis/foundation/exceptions/type.py,sha256=Ug51YdaUKUlbngR0KeWnJNqIwS9StP4ScVobFY1eI18,463
244
248
  orionis/foundation/exceptions/value.py,sha256=hQhXybXEnaa59ba7JxG65jceHt3mnql9MyekF-TChpM,465
245
249
  orionis/foundation/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
246
- orionis/foundation/providers/console_provider.py,sha256=pAIklY1QKx2HKjTp7YyJT6KbJPlEEyzWSr79RTFkEK0,700
247
- orionis/foundation/providers/dumper_provider.py,sha256=_CjIZoa1EkITkJqFFWQuLeVpagSnb6TuSwcpvqdM-Bc,684
248
- orionis/foundation/providers/path_resolver_provider.py,sha256=rXvaVc5sSqmDgRzWJoattAW0ikO_SF3H7WBddVxwmhw,717
249
- orionis/foundation/providers/progress_bar_provider.py,sha256=75Jr4iEgUOUGl8Di1DioeP5_HRQlR-1lVzPmS96sWjA,737
250
- orionis/foundation/providers/workers_provider.py,sha256=WWlji3C69_-Y0c42aZDbR_bmcE_qZEh2SaA_cNkCivI,702
250
+ orionis/foundation/providers/console_provider.py,sha256=yXw-Y_JH1o9fGN2JDbrJuGO3RoRrOdXpU27weIU14R0,570
251
+ orionis/foundation/providers/dumper_provider.py,sha256=gKkhjkA5BieDcTNDJX05ZlQ5EmLSOnFrcgUkKJhP4ro,554
252
+ orionis/foundation/providers/logger_provider.py,sha256=C-n5a4CV5Fxll4aM1ZJWU1Gf9ihQyRevBoRhXmZKXjA,623
253
+ orionis/foundation/providers/path_resolver_provider.py,sha256=pJE9HJ4hdsUTZ4TXHLfZkyXiwvqwH131CsOqkEnbWWs,587
254
+ orionis/foundation/providers/progress_bar_provider.py,sha256=budmwU2N8WE74x7Vq3xDAFHyjtWq0cbrIGbclqw00Mg,607
255
+ orionis/foundation/providers/workers_provider.py,sha256=KZ_c8Rpf0-JhpkVYr8BvhQtXMAc1t_LFh0frHRz_h30,572
251
256
  orionis/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
252
- orionis/metadata/framework.py,sha256=MLtGTsXjWHcB5c3RgU7UBQwFK4J8P7LcyvlGs6KMKkc,4960
257
+ orionis/metadata/framework.py,sha256=PXt85XjOGF5TFTQ0w6zBCT7ScLA8qItXOOvCGUdurCM,4960
253
258
  orionis/metadata/package.py,sha256=tqLfBRo-w1j_GN4xvzUNFyweWYFS-qhSgAEc-AmCH1M,5452
254
259
  orionis/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
255
260
  orionis/services/asynchrony/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -310,7 +315,14 @@ orionis/services/introspection/modules/contracts/reflection.py,sha256=YLqKg5Ehad
310
315
  orionis/services/introspection/objects/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
311
316
  orionis/services/introspection/objects/types.py,sha256=vNKWc2b7K-X7B2X8RCimgAWQqbQlVT-aL24nUB8t_yQ,6343
312
317
  orionis/services/log/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
313
- orionis/services/log/log_service.py,sha256=jnKIeTxy4p16SfKYYLpJ1p1CqAqpF1BIp7IBSOdSuJY,8295
318
+ orionis/services/log/log_service.py,sha256=x5I47hwGUeWS4BLN3OMwHvahitOwas6tLpKco_E8WPA,9731
319
+ orionis/services/log/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
320
+ orionis/services/log/contracts/log_service.py,sha256=ky7T2EIvJQMV0tKMSwFsUxDBoA24xYro8ChC6-7iUtY,546
321
+ orionis/services/log/exceptions/__init__.py,sha256=PPn_LBV3U-0Yi69ZLDQmlkbmlL1iLTleLw-s88Ipg9o,84
322
+ orionis/services/log/exceptions/runtime.py,sha256=LnaK0w0WlgxtZ9Zjn9RYIgp6fbQZmXZ_1fy9dkuA2jQ,468
323
+ orionis/services/log/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
324
+ orionis/services/log/handlers/size_rotating.py,sha256=hEOBE2W_bqAS_kAna23jcbduJWskeHhnQqdcio9iiys,2096
325
+ orionis/services/log/handlers/timed_rotating.py,sha256=KXmJ6mQR9365CR_xlhUiFVIHvBs2zSfL3eWAhLGQx-o,2109
314
326
  orionis/services/paths/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
315
327
  orionis/services/paths/resolver.py,sha256=9PXTawN3QV142Fhe7C2EqXyAlf984Hc05A_M2cqXAps,3217
316
328
  orionis/services/paths/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -330,6 +342,7 @@ orionis/support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
330
342
  orionis/support/facades/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
331
343
  orionis/support/facades/console.py,sha256=Hx_VGZazpdPDkg1LgcCTzgASq7blzazGHXVNp2uN5w8,372
332
344
  orionis/support/facades/dumper.py,sha256=JD0xT11ReLlzTH1O5wdIG1-r9sg1nriJnhtqkLsavW8,370
345
+ orionis/support/facades/logger.py,sha256=TWJP2OKiGIECnPqbCbxxNpgbhSFeqVaQkYOIVclYPdk,367
333
346
  orionis/support/facades/path_resolver.py,sha256=-ro3-yxmjKHngf6aOy2dzyeNulsiSJuxu__vJWsRuUA,376
334
347
  orionis/support/facades/progress_bar.py,sha256=ZmU7hojRP88PM39BX1fN0_2pTCUhOXdIqyKaQwPoQ-A,374
335
348
  orionis/support/facades/workers.py,sha256=P-ppMQOzexbkcLDiGPdIPVA41LRlgNZcW-aB890ujk8,369
@@ -386,7 +399,7 @@ orionis/test/records/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
386
399
  orionis/test/records/logs.py,sha256=EOQcloMVdhlNl2lU9igQz8H4b-OtKtiwh2pgr_QZWOI,13186
387
400
  orionis/test/view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
388
401
  orionis/test/view/render.py,sha256=zd7xDvVfmQ2HxZamDTzL2-z2PpyL99EaolbbM7wTah4,5014
389
- orionis-0.401.0.dist-info/licenses/LICENCE,sha256=-_4cF2EBKuYVS_SQpy1uapq0oJPUU1vl_RUWSy2jJTo,1111
402
+ orionis-0.403.0.dist-info/licenses/LICENCE,sha256=-_4cF2EBKuYVS_SQpy1uapq0oJPUU1vl_RUWSy2jJTo,1111
390
403
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
391
404
  tests/example/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
392
405
  tests/example/test_example.py,sha256=yctjQT5ocYEu__kNvJxmQJ-l5yxRMkohwcfYWSjWDVo,25566
@@ -487,8 +500,8 @@ tests/support/wrapper/test_services_wrapper_docdict.py,sha256=nTNrvJkMSPx_aopEQ9
487
500
  tests/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
488
501
  tests/testing/test_testing_result.py,sha256=fnH7hjumNSErAFGITJgq2LHxSzvPF2tdtmHL9kyAv-Y,4409
489
502
  tests/testing/test_testing_unit.py,sha256=d3CRGo6608fMzYcZKIKapjx_af2aigqWiKSiuK9euIY,7600
490
- orionis-0.401.0.dist-info/METADATA,sha256=zemxSu70wMLycOtdjYYtp5aW6MjkdPBBhBEkC8yWLg4,4772
491
- orionis-0.401.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
492
- orionis-0.401.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
493
- orionis-0.401.0.dist-info/zip-safe,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
494
- orionis-0.401.0.dist-info/RECORD,,
503
+ orionis-0.403.0.dist-info/METADATA,sha256=sAx254Pfbwdz4i_vXEyQeKmws88FTutkZMqarwnVh1w,4772
504
+ orionis-0.403.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
505
+ orionis-0.403.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
506
+ orionis-0.403.0.dist-info/zip-safe,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
507
+ orionis-0.403.0.dist-info/RECORD,,