orionis 0.406.0__py3-none-any.whl → 0.407.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 (30) hide show
  1. orionis/metadata/framework.py +1 -1
  2. orionis/services/asynchrony/contracts/coroutines.py +13 -5
  3. orionis/services/asynchrony/coroutines.py +33 -29
  4. orionis/services/asynchrony/exceptions/exception.py +9 -1
  5. orionis/services/environment/core/dot_env.py +46 -34
  6. orionis/services/environment/enums/__init__.py +0 -0
  7. orionis/services/environment/enums/cast_type.py +42 -0
  8. orionis/services/environment/serializer/__init__.py +0 -0
  9. orionis/services/environment/serializer/values.py +21 -0
  10. orionis/services/environment/validators/__init__.py +0 -0
  11. orionis/services/environment/validators/key_name.py +46 -0
  12. orionis/services/environment/validators/types.py +45 -0
  13. orionis/services/system/contracts/imports.py +38 -18
  14. orionis/services/system/contracts/workers.py +29 -12
  15. orionis/services/system/imports.py +65 -25
  16. orionis/services/system/runtime/imports.py +18 -9
  17. orionis/services/system/workers.py +49 -16
  18. orionis/test/output/dumper.py +1 -0
  19. {orionis-0.406.0.dist-info → orionis-0.407.0.dist-info}/METADATA +1 -1
  20. {orionis-0.406.0.dist-info → orionis-0.407.0.dist-info}/RECORD +30 -23
  21. tests/example/test_example.py +2 -2
  22. tests/metadata/test_metadata_framework.py +71 -6
  23. tests/metadata/test_metadata_package.py +55 -10
  24. tests/services/asynchrony/test_services_asynchrony_coroutine.py +52 -7
  25. tests/services/system/test_services_system_imports.py +119 -16
  26. tests/services/system/test_services_system_workers.py +71 -30
  27. {orionis-0.406.0.dist-info → orionis-0.407.0.dist-info}/WHEEL +0 -0
  28. {orionis-0.406.0.dist-info → orionis-0.407.0.dist-info}/licenses/LICENCE +0 -0
  29. {orionis-0.406.0.dist-info → orionis-0.407.0.dist-info}/top_level.txt +0 -0
  30. {orionis-0.406.0.dist-info → orionis-0.407.0.dist-info}/zip-safe +0 -0
@@ -2,58 +2,68 @@ from typing import List, Dict, Any
2
2
  from orionis.services.system.contracts.imports import IImports
3
3
 
4
4
  class Imports(IImports):
5
- """
6
- Utility class to collect and display information about currently loaded Python modules.
7
-
8
- This class provides methods to gather details about user-defined Python modules
9
- currently loaded in `sys.modules`, excluding standard library and virtual environment modules.
10
- It can display the collected information in a formatted table using the Rich library.
11
- """
12
5
 
13
6
  def __init__(self):
14
7
  """
15
- Initialize the Imports object.
8
+ Initialize the Imports instance.
9
+
10
+ This constructor sets up the Imports object by initializing an empty list
11
+ to store information about user-defined Python modules. The list will
12
+ contain dictionaries, each representing a module with its name, file path,
13
+ and defined symbols.
16
14
 
17
- Initializes an empty list to store module information.
15
+ Returns
16
+ -------
17
+ None
18
+ This method does not return any value.
18
19
  """
20
+
21
+ # List to hold information about imported modules
19
22
  self.imports: List[Dict[str, Any]] = []
20
23
 
21
24
  def collect(self) -> 'Imports':
22
25
  """
23
26
  Collect information about user-defined Python modules currently loaded.
24
27
 
25
- For each qualifying module, gathers:
26
- - The module's name.
27
- - The relative file path to the module from the current working directory.
28
- - A list of symbols (functions, classes, or submodules) defined in the module.
28
+ Iterates through all modules in `sys.modules` and gathers details for each qualifying module:
29
+ - Module name.
30
+ - Relative file path from the current working directory.
31
+ - List of symbols (functions, classes, or submodules) defined in the module.
29
32
 
30
- Excludes:
31
- - Modules from the standard library.
32
- - Modules from the active virtual environment (if any).
33
- - Binary extension modules (.pyd, .dll, .so).
34
- - Special modules like "__main__", "__mp_main__", and modules starting with "_distutils".
33
+ Excludes modules that:
34
+ - Are part of the standard library.
35
+ - Reside in the active virtual environment (if any).
36
+ - Are binary extension modules (e.g., `.pyd`, `.dll`, `.so`).
37
+ - Are special modules such as `"__main__"`, `"__mp_main__"`, or those starting with `"_distutils"`.
35
38
 
36
- The collected information is stored in `self.imports` as a list of dictionaries.
39
+ The collected information is stored in `self.imports` as a list of dictionaries, each containing the module's name, file path, and symbols.
37
40
 
38
41
  Returns
39
42
  -------
40
43
  Imports
41
- The current instance with updated imports information.
44
+ The current instance of `Imports` with the `imports` attribute updated to include information about the collected modules.
42
45
  """
43
46
 
44
47
  import sys
45
48
  import os
46
49
  import types
47
50
 
51
+ # Clear any previously collected imports
48
52
  self.imports.clear()
53
+
54
+ # Get standard library paths to exclude standard modules
49
55
  stdlib_paths = [os.path.dirname(os.__file__)]
56
+
57
+ # Get virtual environment path if active
50
58
  venv_path = os.environ.get("VIRTUAL_ENV")
51
59
  if venv_path:
52
60
  venv_path = os.path.abspath(venv_path)
53
61
 
62
+ # Iterate over all loaded modules
54
63
  for name, module in list(sys.modules.items()):
55
- file:str = getattr(module, '__file__', None)
64
+ file: str = getattr(module, '__file__', None)
56
65
 
66
+ # Filter out unwanted modules based on path, type, and name
57
67
  if (
58
68
  file
59
69
  and not any(file.startswith(stdlib_path) for stdlib_path in stdlib_paths)
@@ -62,18 +72,25 @@ class Imports(IImports):
62
72
  and name not in ("__main__", "__mp_main__")
63
73
  and not name.startswith("_distutils")
64
74
  ):
75
+
76
+ # Get relative file path from current working directory
65
77
  rel_file = os.path.relpath(file, os.getcwd())
66
78
  symbols = []
67
79
 
80
+ # Collect symbols defined in the module (functions, classes, submodules)
68
81
  try:
69
82
  for attr in dir(module):
70
83
  value = getattr(module, attr)
71
84
  if isinstance(value, (types.FunctionType, type, types.ModuleType)):
85
+
86
+ # Ensure symbol is defined in this module
72
87
  if getattr(value, '__module__', None) == name:
73
88
  symbols.append(attr)
74
89
  except Exception:
90
+ # Ignore errors during symbol collection
75
91
  pass
76
92
 
93
+ # Only add modules that are not __init__.py and have symbols
77
94
  if not rel_file.endswith('__init__.py') and symbols:
78
95
  self.imports.append({
79
96
  "name": name,
@@ -81,32 +98,45 @@ class Imports(IImports):
81
98
  "symbols": symbols,
82
99
  })
83
100
 
101
+ # Return the current instance with updated imports
84
102
  return self
85
103
 
86
104
  def display(self) -> None:
87
105
  """
88
106
  Display a formatted table of collected import statements using the Rich library.
89
107
 
90
- If the imports have not been collected yet, it calls `self.collect()` to gather them.
91
- The table includes columns for the import name, file, and imported symbols, and is
92
- rendered inside a styled panel in the console.
108
+ This method presents a visual summary of all collected user-defined Python modules.
109
+ If the imports have not been collected yet, it automatically calls `self.collect()` to gather them.
110
+ The output is rendered as a table inside a styled panel in the console, showing each module's name,
111
+ relative file path, and its defined symbols.
112
+
113
+ Parameters
114
+ ----------
115
+ None
93
116
 
94
117
  Returns
95
118
  -------
96
119
  None
120
+ This method does not return any value. It outputs the formatted table to the console.
97
121
  """
98
122
 
123
+ # Collect imports if not already done
99
124
  if not self.imports:
100
125
  self.collect()
101
126
 
127
+ # Import Rich components for console output
102
128
  from rich.console import Console
103
129
  from rich.table import Table
104
130
  from rich.box import MINIMAL
105
131
  from rich.panel import Panel
106
132
 
133
+ # Create a console instance for output
107
134
  console = Console()
135
+
136
+ # Set table width to 75% of console width
108
137
  width = int(console.size.width * 0.75)
109
138
 
139
+ # Create a table with minimal box style and custom formatting
110
140
  table = Table(
111
141
  box=MINIMAL,
112
142
  show_header=True,
@@ -117,14 +147,17 @@ class Imports(IImports):
117
147
  collapse_padding=True,
118
148
  )
119
149
 
150
+ # Add columns for module name, file path, and symbols
120
151
  table.add_column("Name", style="cyan", no_wrap=True)
121
152
  table.add_column("File", style="white")
122
153
  table.add_column("Symbols", style="magenta")
123
154
 
155
+ # Populate the table with sorted import data
124
156
  for imp in sorted(self.imports, key=lambda x: x["name"].lower()):
125
157
  symbols_str = ", ".join(imp["symbols"])
126
158
  table.add_row(imp["name"], imp["file"], symbols_str)
127
159
 
160
+ # Render the table inside a styled panel in the console
128
161
  console.print(Panel(
129
162
  table,
130
163
  title="[bold blue]🔎 Loaded Python Modules (Orionis Imports Trace)[/bold blue]",
@@ -134,10 +167,17 @@ class Imports(IImports):
134
167
 
135
168
  def clear(self) -> None:
136
169
  """
137
- Clear the collected imports list.
170
+ Remove all entries from the collected imports list.
171
+
172
+ This method resets the `imports` attribute by removing all currently stored
173
+ module information. It is useful for discarding previously collected data
174
+ before performing a new collection or when a fresh state is required.
138
175
 
139
176
  Returns
140
177
  -------
141
178
  None
179
+ This method does not return any value. The `imports` list is emptied in place.
142
180
  """
181
+
182
+ # Remove all items from the imports list to reset its state
143
183
  self.imports.clear()
@@ -25,6 +25,7 @@ Notes
25
25
  - Thread safety is provided via a threading.Lock.
26
26
 
27
27
  """
28
+
28
29
  import builtins
29
30
  from collections import defaultdict
30
31
  from threading import Lock
@@ -40,40 +41,48 @@ _import_lock = Lock()
40
41
 
41
42
  def custom_import(name, globals=None, locals=None, fromlist=(), level=0):
42
43
  """
43
- Custom import function that tracks imports of 'orionis' modules.
44
+ Tracks and logs imports of modules whose names start with 'orionis'.
45
+
46
+ This function overrides Python's built-in import mechanism to monitor
47
+ how many times modules from the 'orionis' package are imported. It
48
+ increments an internal counter for each such import and prints a log
49
+ message with the module name, import count, and fromlist. Thread safety
50
+ is ensured using a lock.
44
51
 
45
52
  Parameters
46
53
  ----------
47
54
  name : str
48
55
  The name of the module to import.
49
56
  globals : dict, optional
50
- The global namespace.
57
+ The global namespace in which the import is performed.
51
58
  locals : dict, optional
52
- The local namespace.
59
+ The local namespace in which the import is performed.
53
60
  fromlist : tuple, optional
54
61
  Names to import from the module.
55
62
  level : int, optional
56
- Relative import level.
63
+ Relative import level (0 for absolute, >0 for relative).
57
64
 
58
65
  Returns
59
66
  -------
60
- module
61
- The imported module.
67
+ module : ModuleType
68
+ The imported module object as returned by the original import function.
62
69
  """
63
- # Check if the module name starts with 'orionis'
70
+ # Only track imports for modules starting with 'orionis'
64
71
  if str(name).startswith("orionis"):
65
72
  with _import_lock:
73
+
74
+ # Increment the import count for this module
66
75
  _import_count[name] += 1
67
76
  count = _import_count[name]
68
77
 
69
- # Print the import details
78
+ # Print import details to the console
70
79
  print(
71
80
  f"\033[1;37mModule\033[0m: \033[90m{name}\033[0m | "
72
81
  f"\033[1;37mImported\033[0m: \033[90m{count}\033[0m | "
73
82
  f"\033[1;37mFromList\033[0m: \033[90m{fromlist}\033[0m"
74
83
  )
75
84
 
76
- # Call the original import function
85
+ # Delegate the actual import to the original __import__ function
77
86
  return _original_import(name, globals, locals, fromlist, level)
78
87
 
79
88
  # Override the built-in __import__ function
@@ -4,21 +4,10 @@ import psutil
4
4
  from orionis.services.system.contracts.workers import IWorkers
5
5
 
6
6
  class Workers(IWorkers):
7
- """
8
- Estimate the optimal number of worker processes based on system CPU and memory resources.
9
-
10
- This class calculates the recommended number of Uvicorn (or similar) workers by considering:
11
- the number of available CPU cores, total system memory (RAM), and the estimated memory usage per worker.
12
-
13
- Parameters
14
- ----------
15
- ram_per_worker : float, optional
16
- Estimated amount of RAM in gigabytes (GB) that each worker will consume. Default is 0.5.
17
- """
18
7
 
19
8
  def __init__(self, ram_per_worker: float = 0.5):
20
9
  """
21
- Initialize the worker system with resource constraints.
10
+ Initialize the Workers system with resource constraints.
22
11
 
23
12
  Parameters
24
13
  ----------
@@ -33,31 +22,75 @@ class Workers(IWorkers):
33
22
  Total system RAM in gigabytes.
34
23
  _ram_per_worker : float
35
24
  RAM allocated per worker in gigabytes.
25
+
26
+ Returns
27
+ -------
28
+ None
29
+ This constructor does not return a value.
36
30
  """
31
+
32
+ # Get the number of CPU cores available
37
33
  self._cpu_count = multiprocessing.cpu_count()
34
+
35
+ # Get the total system RAM in gigabytes
38
36
  self._ram_total_gb = psutil.virtual_memory().total / (1024 ** 3)
37
+
38
+ # Set the RAM allocated per worker
39
39
  self._ram_per_worker = ram_per_worker
40
40
 
41
41
  def setRamPerWorker(self, ram_per_worker: float) -> None:
42
42
  """
43
- Set the amount of RAM allocated per worker.
43
+ Update the RAM allocation per worker.
44
44
 
45
45
  Parameters
46
46
  ----------
47
47
  ram_per_worker : float
48
- Amount of RAM (in GB) allocated per worker.
48
+ The new amount of RAM (in GB) to allocate for each worker.
49
+
50
+ Returns
51
+ -------
52
+ None
53
+ This method does not return a value. It updates the internal RAM allocation setting.
54
+
55
+ Notes
56
+ -----
57
+ Changing the RAM allocation per worker may affect the recommended number of workers
58
+ calculated by the system. This method only updates the internal configuration and does
59
+ not trigger any recalculation automatically.
49
60
  """
61
+
62
+ # Update the RAM allocated per worker
50
63
  self._ram_per_worker = ram_per_worker
51
64
 
52
65
  def calculate(self) -> int:
53
66
  """
54
- Compute the maximum number of workers supported by the current machine.
67
+ Compute the recommended maximum number of worker processes for the current machine,
68
+ considering both CPU and memory constraints.
69
+
70
+ Parameters
71
+ ----------
72
+ None
55
73
 
56
74
  Returns
57
75
  -------
58
76
  int
59
- The recommended number of worker processes based on CPU and memory constraints.
77
+ The maximum number of worker processes that can be safely run in parallel,
78
+ determined by the lesser of available CPU cores and memory capacity.
79
+
80
+ Notes
81
+ -----
82
+ The calculation is based on:
83
+ - The total number of CPU cores available.
84
+ - The total system RAM divided by the RAM allocated per worker.
85
+ The method ensures that neither CPU nor memory resources are overcommitted.
86
+
60
87
  """
88
+
89
+ # Calculate the maximum workers allowed by CPU core count
61
90
  max_workers_by_cpu = self._cpu_count
91
+
92
+ # Calculate the maximum workers allowed by available RAM
62
93
  max_workers_by_ram = math.floor(self._ram_total_gb / self._ram_per_worker)
94
+
95
+ # Return the minimum of the two to avoid overcommitting resources
63
96
  return min(max_workers_by_cpu, max_workers_by_ram)
@@ -65,6 +65,7 @@ class TestDumper(ITestDumper):
65
65
  AsyncTestCase,
66
66
  SyncTestCase,
67
67
  unittest.TestCase,
68
+ unittest.IsolatedAsyncioTestCase
68
69
  ),
69
70
  )
70
71
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orionis
3
- Version: 0.406.0
3
+ Version: 0.407.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
@@ -258,24 +258,26 @@ orionis/foundation/providers/progress_bar_provider.py,sha256=WW3grNgH-yV2meSSTeO
258
258
  orionis/foundation/providers/testing_provider.py,sha256=iJSN2RIChbYIL-1ue6vmPmDMCSrvERDkti4Er9MPiLA,1102
259
259
  orionis/foundation/providers/workers_provider.py,sha256=kiQjQRyUEyiBX2zcbF_KmqRgvc7Bvxsvg5oMtIvYniM,1075
260
260
  orionis/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
261
- orionis/metadata/framework.py,sha256=7tsbyNrZzvwa53bbYPFKynkVczIn2llFfSswwTIClaM,4960
261
+ orionis/metadata/framework.py,sha256=sxmczNtZqJR0Rs5IYehyU1JvfxRfRsuHwLo1m8wI70g,4960
262
262
  orionis/metadata/package.py,sha256=tqLfBRo-w1j_GN4xvzUNFyweWYFS-qhSgAEc-AmCH1M,5452
263
263
  orionis/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
264
264
  orionis/services/asynchrony/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
265
- orionis/services/asynchrony/coroutines.py,sha256=GkTyv-uHo-MOzwo8akwIS2HDSkTaL3CpnaRPG-4iXUY,2365
265
+ orionis/services/asynchrony/coroutines.py,sha256=Aj5a1LTosnGUA0meSHivC1OJBYOQ7xq3US_PzWTc91w,3113
266
266
  orionis/services/asynchrony/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
267
- orionis/services/asynchrony/contracts/coroutines.py,sha256=Wuwp2k4HXAX-tQ3waVIT8AmzX_HeIbjliRchKIqy2k0,688
267
+ orionis/services/asynchrony/contracts/coroutines.py,sha256=BOMDd84mZB2IndaTbGdQOAvil-KAsO6YcX5tv0A1FKo,1145
268
268
  orionis/services/asynchrony/exceptions/__init__.py,sha256=COm6RhSiuwWqy3YcJ_0gVu6XHjn5P3zVaiUp5Pw_h48,99
269
- orionis/services/asynchrony/exceptions/exception.py,sha256=eopQpl-2chut-iN1drBy-53EDKava1icwtcWUF4S1Cc,472
269
+ orionis/services/asynchrony/exceptions/exception.py,sha256=yAVsjZ2lLAoFgNIiMcOtCYnwGI1y8GoYdUAxTQwLtTY,820
270
270
  orionis/services/environment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
271
271
  orionis/services/environment/env.py,sha256=vKx9zO2DpUK089fL17qxQ4X4tLYzN3exGAKg3d-rp3c,2272
272
272
  orionis/services/environment/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
273
273
  orionis/services/environment/contracts/env.py,sha256=7lezGxABAG63pEEvzAmHXgr9izBI6TCp05Trx_SRvc4,2054
274
274
  orionis/services/environment/contracts/types.py,sha256=n0USxUblz0Ofbo1ef0hnGHGkuGjSiWk-SBWVPXv33mE,1994
275
275
  orionis/services/environment/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
276
- orionis/services/environment/core/dot_env.py,sha256=EZZTI-SuwCXgEXXmGOKhAARQIWxUSjYVIhWsMbE3TMI,10157
276
+ orionis/services/environment/core/dot_env.py,sha256=Dgkmy0juaFKZPEkv7nN7VvdYryX8fDs0JgRGOIHj7PM,10090
277
277
  orionis/services/environment/dynamic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
278
278
  orionis/services/environment/dynamic/types.py,sha256=nf7HJjm-1S-BH2YnuBQNNWvb3Aqu-QYPUTfJRgVYZ1Y,18336
279
+ orionis/services/environment/enums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
280
+ orionis/services/environment/enums/cast_type.py,sha256=hoZhljXHNn03VYbg6VTauGyppmcoRjaepylrOKSBvu8,1217
279
281
  orionis/services/environment/exceptions/__init__.py,sha256=YwLc8GsB0swlwu9T9Qt2vevaCoq5V2vmPUSlEUAqg2Q,199
280
282
  orionis/services/environment/exceptions/exception.py,sha256=NnxWmgoSca7LXi7GLDa95HSBPKotFfy8u729d1OAmCc,479
281
283
  orionis/services/environment/exceptions/value.py,sha256=Pe1qNHRrM9T0AzESN284CzA3GQYxzokfXPMOVqOTlyQ,475
@@ -283,6 +285,11 @@ orionis/services/environment/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeu
283
285
  orionis/services/environment/helpers/functions.py,sha256=MtlDTA1W8KVJu0cohh4TsuPg8CPcnySf36cp9E9tpJI,595
284
286
  orionis/services/environment/key/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
285
287
  orionis/services/environment/key/key_generator.py,sha256=BHvcFiPOmJHQotstMNkUdoEwb0mNxQk5iyvQU3JlJ94,1134
288
+ orionis/services/environment/serializer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
289
+ orionis/services/environment/serializer/values.py,sha256=ERnQWgCAljhJ9pRSd-knnGD5i6ne5Ho-4bh93pgDtwY,364
290
+ orionis/services/environment/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
291
+ orionis/services/environment/validators/key_name.py,sha256=heMQoMY4vF9sIYAlET7noTQz383daGPvJnJOb62nxFo,1577
292
+ orionis/services/environment/validators/types.py,sha256=AQvIZzBWxZ6-iJhzRkroim5CKBvWq2lTttRyXzc-6GU,1922
286
293
  orionis/services/introspection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
287
294
  orionis/services/introspection/reflection.py,sha256=_Wdy8Wtt3RKXAqg9o5rvYa_Hyu-Z4674LKnNVg7u7pU,11467
288
295
  orionis/services/introspection/abstract/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -338,13 +345,13 @@ orionis/services/paths/exceptions/__init__.py,sha256=r5b4D4XWNK07zLtqaXBk_PNYszS
338
345
  orionis/services/paths/exceptions/exception.py,sha256=cK-TbUT02X2lvbAP4yFdfHx4S45wBOcYl3_tiWd67UM,472
339
346
  orionis/services/paths/exceptions/file.py,sha256=bsK0QoXwRFyDeHvITxwmgaBuwiO2eoRUhRzNizmX1No,475
340
347
  orionis/services/system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
341
- orionis/services/system/imports.py,sha256=5j2Rkf6vMLnCQjqcox4-0y0tZoxgPfv7EP8eruG7vnA,4990
342
- orionis/services/system/workers.py,sha256=QO5IXjH8BXWUlHzH1TiRKt3vn4LZklRI02nSL17hWPo,2199
348
+ orionis/services/system/imports.py,sha256=aSXG9879ur91d6OsqV2DUYWmmwbwFHX8CHb99cPfFcU,7057
349
+ orionis/services/system/workers.py,sha256=EfGxU_w42xRnZ1yslsui3wVG8pfe__V3GYGEIyo8JxQ,3144
343
350
  orionis/services/system/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
344
- orionis/services/system/contracts/imports.py,sha256=nE2fDS2bDbwltHCmzOsEMhUymYy092zoGX-NOXLE4J4,1167
345
- orionis/services/system/contracts/workers.py,sha256=plst9CcYqwkEcy-LPdfJbdKPKaeq8hmtWk0B5mlH2wo,1017
351
+ orionis/services/system/contracts/imports.py,sha256=wTlr0ck1vcrAoBU91_rgu8cN4dCRnWixsq-ovwXQOn0,2767
352
+ orionis/services/system/contracts/workers.py,sha256=T7P48btql90IaPugMVUmR0Gl2-r9DnuOwTpJZkRvg0Q,1837
346
353
  orionis/services/system/runtime/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
347
- orionis/services/system/runtime/imports.py,sha256=eWp_MmrvxWHl-lsNO0M5FC9OsCcY1BXsiJTlPk0cfRU,2550
354
+ orionis/services/system/runtime/imports.py,sha256=iIwIx8RjBHaiveCdj_WPiMMbWsKGbIs02qpAzL_L3Z0,3158
348
355
  orionis/support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
349
356
  orionis/support/entities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
350
357
  orionis/support/entities/base.py,sha256=4WuAzrk_sfWp8Wv5Yl9IUF6kTctlAXlSxHGh5mdu3MQ,3982
@@ -399,7 +406,7 @@ orionis/test/exceptions/persistence.py,sha256=GbNwpUfrtZ-VstX_Amflg8OwQ3WEWOnDmn
399
406
  orionis/test/exceptions/runtime.py,sha256=yLLBtDR61k53OIAwi5wVLxap79Agh2khXrhRb4bTe9k,778
400
407
  orionis/test/exceptions/value.py,sha256=P9SD64EWATKneV-QP-yhfJ2GxyypKxqgmk5MqiguxV0,1001
401
408
  orionis/test/output/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
402
- orionis/test/output/dumper.py,sha256=GSWWAWIW_OfN9HOORhn_AsEzYEJFgGstfwBp14hudDg,7094
409
+ orionis/test/output/dumper.py,sha256=vagHHjTaRdffCBO7pjylsYqSSoh11MnavZcCmr8RLPs,7148
403
410
  orionis/test/output/printer.py,sha256=cpElVLaK94JtQeHpgN-HTSuE8dJhPhZMt51L7Lramz8,29080
404
411
  orionis/test/records/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
405
412
  orionis/test/records/logs.py,sha256=WhOmRJhQck76vx8l_c_7M-H8_RS9p3yB_jJ39Rnx-Lc,19050
@@ -421,7 +428,7 @@ orionis/test/validators/web_report.py,sha256=-h3Fe9jY93_kzUhd2NBIqEfCcBpu-8Ei9x3
421
428
  orionis/test/validators/workers.py,sha256=LGffDKtK6SKixFKzIYPQpI5aFeQPAGXpv_LUtmEu6g4,1102
422
429
  orionis/test/view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
423
430
  orionis/test/view/render.py,sha256=3ICz68l-WF3BtnYqH5m-ktN9UD00MELMbmMnyJDV74A,4768
424
- orionis-0.406.0.dist-info/licenses/LICENCE,sha256=-_4cF2EBKuYVS_SQpy1uapq0oJPUU1vl_RUWSy2jJTo,1111
431
+ orionis-0.407.0.dist-info/licenses/LICENCE,sha256=-_4cF2EBKuYVS_SQpy1uapq0oJPUU1vl_RUWSy2jJTo,1111
425
432
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
426
433
  tests/container/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
427
434
  tests/container/test_container.py,sha256=INLMHbcQzB7SQi6W0xO_nKCMUw50VK7NQMPRDuYnU5Q,10781
@@ -454,7 +461,7 @@ tests/container/validators/test_is_subclass.py,sha256=iid5n1B6GDYqwtSlmRG0lJBH6g
454
461
  tests/container/validators/test_is_valid_alias.py,sha256=mRkdDLHZuM0ogJn38lV35gwnxXP3J-a-1EWaoij-qUM,3957
455
462
  tests/container/validators/test_lifetime.py,sha256=2iOO8Leo7VHb9ZrbiwaTptFC4hHv3QStomcFMO3qSH0,3191
456
463
  tests/example/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
457
- tests/example/test_example.py,sha256=yctjQT5ocYEu__kNvJxmQJ-l5yxRMkohwcfYWSjWDVo,25566
464
+ tests/example/test_example.py,sha256=XJEcsro3vCO5m4zvMiWUGphvd0C7oIkBtUfQgTDsdUU,25568
458
465
  tests/foundation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
459
466
  tests/foundation/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
460
467
  tests/foundation/config/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -509,11 +516,11 @@ tests/foundation/config/testing/test_foundation_config_testing.py,sha256=BQsQVGm
509
516
  tests/foundation/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
510
517
  tests/foundation/exceptions/test_foundation_config_exceptions.py,sha256=tiXKxGSP8majXpLPyoGR0WGvDE1LoLXQK6NpcQNqz_A,4091
511
518
  tests/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
512
- tests/metadata/test_metadata_framework.py,sha256=S0eujj2Z3PWpPBzpoqShs4rkfD4Frna4geUoS_uZfTE,3380
513
- tests/metadata/test_metadata_package.py,sha256=WaBnp0ufj9NKbLzMOCBdt5OAWr-WCA_j8Y05vgC_8Ek,2870
519
+ tests/metadata/test_metadata_framework.py,sha256=1tCNciuPVgZPK-V8PzENJCXN-1bTktWPN9u03N4Eelw,5499
520
+ tests/metadata/test_metadata_package.py,sha256=gXIX-N9toEHJsmFkdhAvJRnz2T5e6pbgK37I1eFYTGM,4770
514
521
  tests/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
515
522
  tests/services/asynchrony/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
516
- tests/services/asynchrony/test_services_asynchrony_coroutine.py,sha256=KijsHjPiia1w5_yJJWjJrFocjQEfbMT9kj1F4nY-Kbs,1659
523
+ tests/services/asynchrony/test_services_asynchrony_coroutine.py,sha256=34Y0D6w2bVo_dm3oj0wzedMIJuSYieUG9Y2J1EQmZeo,3439
517
524
  tests/services/environment/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
518
525
  tests/services/environment/test_services_environment.py,sha256=6UH3g2Z2DQYtGnyySCRnT35VCENlL-PQWHIdH6zA9rw,3767
519
526
  tests/services/inspection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -535,8 +542,8 @@ tests/services/inspection/reflection/mock/fake_reflect_instance.py,sha256=iqWoT6
535
542
  tests/services/path/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
536
543
  tests/services/path/test_services_resolver.py,sha256=aWSSFgV_D10t3llUeCWEBB1mF3dWrZbFn5XbJy2sQME,3903
537
544
  tests/services/system/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
538
- tests/services/system/test_services_system_imports.py,sha256=RI7DHZUJSbtlL7xDSmbUtCMrIdE417qaMCJlL5H9IHQ,2967
539
- tests/services/system/test_services_system_workers.py,sha256=7WFs3u52kXs3FTWsqT7V3US4fqdQ6Cmd2pb8W_Mn7wk,3050
545
+ tests/services/system/test_services_system_imports.py,sha256=jbtIQkw_4DI6x2E-4Lg3evnLAgCgDIBWE63LdJTLkxc,7507
546
+ tests/services/system/test_services_system_workers.py,sha256=wITbpJHKW_OXqTaFeteNRFuw5Q3_7d9lWNJnFE2r6to,5052
540
547
  tests/support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
541
548
  tests/support/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
542
549
  tests/support/parsers/test_services_parser_exceptions.py,sha256=3q2koa73YRaQXDUWp7GAX1e-rgeazwP7mSNhMkJLoQA,2672
@@ -552,8 +559,8 @@ tests/support/wrapper/test_services_wrapper_docdict.py,sha256=nTNrvJkMSPx_aopEQ9
552
559
  tests/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
553
560
  tests/testing/test_testing_result.py,sha256=aWOOJiHji_U7gcJHbDukgMmfBEEQCLQdyqpXJD5q4BE,4643
554
561
  tests/testing/test_testing_unit.py,sha256=Krz0Bw1toI9qvLtKtYe_slNvi7fYmZbHK1i4DRPMfUM,7952
555
- orionis-0.406.0.dist-info/METADATA,sha256=rmI1fb0IoWTgG06IaCrA7FP5_1RSTPE6HfE034kJfc0,4772
556
- orionis-0.406.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
557
- orionis-0.406.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
558
- orionis-0.406.0.dist-info/zip-safe,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
559
- orionis-0.406.0.dist-info/RECORD,,
562
+ orionis-0.407.0.dist-info/METADATA,sha256=x5LuteMx1-CBNPvZWGQE24vZVBlrwoXIfo-QOGJDJFw,4772
563
+ orionis-0.407.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
564
+ orionis-0.407.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
565
+ orionis-0.407.0.dist-info/zip-safe,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
566
+ orionis-0.407.0.dist-info/RECORD,,
@@ -6,7 +6,7 @@ This module contains comprehensive test examples demonstrating the capabilities
6
6
  of the Orionis testing framework, including both synchronous and asynchronous
7
7
  testing patterns with dependency injection.
8
8
 
9
- Examples
9
+ Examples:
10
10
  --------
11
11
  Run synchronous tests:
12
12
  >>> from tests.example.test_example import TestSynchronousExample
@@ -20,7 +20,7 @@ Examples
20
20
  >>> await test.asyncSetUp()
21
21
  >>> await test.testAsyncBasicOperations()
22
22
 
23
- Notes
23
+ Notes:
24
24
  -----
25
25
  These examples showcase:
26
26
  - Dependency injection patterns