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.
- orionis/metadata/framework.py +1 -1
- orionis/services/asynchrony/contracts/coroutines.py +13 -5
- orionis/services/asynchrony/coroutines.py +33 -29
- orionis/services/asynchrony/exceptions/exception.py +9 -1
- orionis/services/environment/core/dot_env.py +46 -34
- orionis/services/environment/enums/__init__.py +0 -0
- orionis/services/environment/enums/cast_type.py +42 -0
- orionis/services/environment/serializer/__init__.py +0 -0
- orionis/services/environment/serializer/values.py +21 -0
- orionis/services/environment/validators/__init__.py +0 -0
- orionis/services/environment/validators/key_name.py +46 -0
- orionis/services/environment/validators/types.py +45 -0
- orionis/services/system/contracts/imports.py +38 -18
- orionis/services/system/contracts/workers.py +29 -12
- orionis/services/system/imports.py +65 -25
- orionis/services/system/runtime/imports.py +18 -9
- orionis/services/system/workers.py +49 -16
- orionis/test/output/dumper.py +1 -0
- {orionis-0.406.0.dist-info → orionis-0.407.0.dist-info}/METADATA +1 -1
- {orionis-0.406.0.dist-info → orionis-0.407.0.dist-info}/RECORD +30 -23
- tests/example/test_example.py +2 -2
- tests/metadata/test_metadata_framework.py +71 -6
- tests/metadata/test_metadata_package.py +55 -10
- tests/services/asynchrony/test_services_asynchrony_coroutine.py +52 -7
- tests/services/system/test_services_system_imports.py +119 -16
- tests/services/system/test_services_system_workers.py +71 -30
- {orionis-0.406.0.dist-info → orionis-0.407.0.dist-info}/WHEEL +0 -0
- {orionis-0.406.0.dist-info → orionis-0.407.0.dist-info}/licenses/LICENCE +0 -0
- {orionis-0.406.0.dist-info → orionis-0.407.0.dist-info}/top_level.txt +0 -0
- {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
|
|
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
|
-
|
|
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
|
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
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
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
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
|
|
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
|
-
|
|
91
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
|
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
|
-
#
|
|
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
|
|
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
|
-
|
|
43
|
+
Update the RAM allocation per worker.
|
|
44
44
|
|
|
45
45
|
Parameters
|
|
46
46
|
----------
|
|
47
47
|
ram_per_worker : float
|
|
48
|
-
|
|
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
|
|
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
|
|
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)
|
orionis/test/output/dumper.py
CHANGED
|
@@ -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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
342
|
-
orionis/services/system/workers.py,sha256=
|
|
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=
|
|
345
|
-
orionis/services/system/contracts/workers.py,sha256=
|
|
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=
|
|
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=
|
|
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.
|
|
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=
|
|
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=
|
|
513
|
-
tests/metadata/test_metadata_package.py,sha256=
|
|
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=
|
|
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=
|
|
539
|
-
tests/services/system/test_services_system_workers.py,sha256=
|
|
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.
|
|
556
|
-
orionis-0.
|
|
557
|
-
orionis-0.
|
|
558
|
-
orionis-0.
|
|
559
|
-
orionis-0.
|
|
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,,
|
tests/example/test_example.py
CHANGED
|
@@ -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
|