orionis 0.325.0__py3-none-any.whl → 0.327.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/container/exceptions/attribute_error.py +19 -0
- orionis/container/facades/facade.py +22 -10
- orionis/container/providers/__init__.py +0 -0
- orionis/container/providers/service_provider.py +56 -0
- orionis/metadata/framework.py +1 -1
- {orionis-0.325.0.dist-info → orionis-0.327.0.dist-info}/METADATA +1 -1
- {orionis-0.325.0.dist-info → orionis-0.327.0.dist-info}/RECORD +11 -8
- {orionis-0.325.0.dist-info → orionis-0.327.0.dist-info}/WHEEL +0 -0
- {orionis-0.325.0.dist-info → orionis-0.327.0.dist-info}/licenses/LICENCE +0 -0
- {orionis-0.325.0.dist-info → orionis-0.327.0.dist-info}/top_level.txt +0 -0
- {orionis-0.325.0.dist-info → orionis-0.327.0.dist-info}/zip-safe +0 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
class OrionisContainerAttributeError(AttributeError):
|
2
|
+
|
3
|
+
def __init__(self, msg: str):
|
4
|
+
"""
|
5
|
+
Parameters
|
6
|
+
----------
|
7
|
+
msg : str
|
8
|
+
Descriptive error message explaining the cause of the exception.
|
9
|
+
"""
|
10
|
+
super().__init__(msg)
|
11
|
+
|
12
|
+
def __str__(self) -> str:
|
13
|
+
"""
|
14
|
+
Returns
|
15
|
+
-------
|
16
|
+
str
|
17
|
+
Formatted string describing the exception.
|
18
|
+
"""
|
19
|
+
return str(self.args[0])
|
@@ -1,25 +1,34 @@
|
|
1
1
|
from typing import Any
|
2
2
|
from orionis.container.container import Container
|
3
|
+
from orionis.container.exceptions.attribute_error import OrionisContainerAttributeError
|
4
|
+
from orionis.container.exceptions.container_exception import OrionisContainerException
|
3
5
|
|
4
6
|
class FacadeMeta(type):
|
5
7
|
|
6
8
|
def __getattr__(cls, name: str) -> Any:
|
7
9
|
"""
|
8
10
|
When an undefined attribute is accessed, this method resolves the service and delegates the call.
|
9
|
-
It's like having a genie in a bottle, but for services.
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
Parameters
|
13
|
+
----------
|
14
|
+
name : str
|
15
|
+
The name of the attribute to access
|
13
16
|
|
14
|
-
Returns
|
17
|
+
Returns
|
18
|
+
-------
|
19
|
+
Any
|
15
20
|
The requested attribute from the underlying service
|
21
|
+
|
22
|
+
Raises
|
23
|
+
------
|
24
|
+
OrionisContainerAttributeError
|
25
|
+
If the resolved service does not have the requested attribute
|
16
26
|
"""
|
17
27
|
service = cls.resolve()
|
18
28
|
if not hasattr(service, name):
|
19
|
-
raise
|
29
|
+
raise OrionisContainerAttributeError(f"'{cls.__name__}' facade's service has no attribute '{name}'")
|
20
30
|
return getattr(service, name)
|
21
31
|
|
22
|
-
|
23
32
|
class Facade(metaclass=FacadeMeta):
|
24
33
|
|
25
34
|
# Container instance to resolve services
|
@@ -53,13 +62,15 @@ class Facade(metaclass=FacadeMeta):
|
|
53
62
|
Positional arguments to pass to the service constructor.
|
54
63
|
**kwargs
|
55
64
|
Keyword arguments to pass to the service constructor.
|
65
|
+
|
56
66
|
Returns
|
57
67
|
-------
|
58
68
|
Any
|
59
69
|
The resolved service instance.
|
70
|
+
|
60
71
|
Raises
|
61
72
|
------
|
62
|
-
|
73
|
+
OrionisContainerException
|
63
74
|
If the service is not bound in the container.
|
64
75
|
Notes
|
65
76
|
-----
|
@@ -70,9 +81,10 @@ class Facade(metaclass=FacadeMeta):
|
|
70
81
|
|
71
82
|
# Check if the service is bound in the container
|
72
83
|
if not cls._container.bound(service_name):
|
73
|
-
raise
|
74
|
-
f"
|
75
|
-
"
|
84
|
+
raise OrionisContainerException(
|
85
|
+
f"Service '{service_name}' not bound in the container. "
|
86
|
+
f"Please ensure '{service_name}' is registered in the container before using the {cls.__name__} facade. "
|
87
|
+
"You can register services in a service provider using the 'register' method."
|
76
88
|
)
|
77
89
|
|
78
90
|
# Resolve the service instance from the container
|
File without changes
|
@@ -0,0 +1,56 @@
|
|
1
|
+
from orionis.container.contracts.container import IContainer
|
2
|
+
|
3
|
+
class ServiceProvider:
|
4
|
+
"""
|
5
|
+
Base service provider class for the Orionis framework.
|
6
|
+
|
7
|
+
This class serves as a base for all service providers in the application.
|
8
|
+
Service providers are responsible for registering components and services
|
9
|
+
into the application container, and initializing them when needed.
|
10
|
+
|
11
|
+
Parameters
|
12
|
+
----------
|
13
|
+
app : IContainer
|
14
|
+
The application container instance to which services will be registered.
|
15
|
+
|
16
|
+
Notes
|
17
|
+
-----
|
18
|
+
All concrete service providers should inherit from this class and implement
|
19
|
+
the `register` method at minimum.
|
20
|
+
"""
|
21
|
+
|
22
|
+
def __init__(self, app: IContainer) -> None:
|
23
|
+
"""
|
24
|
+
Initialize the service provider with the application container.
|
25
|
+
|
26
|
+
Parameters
|
27
|
+
----------
|
28
|
+
app : IContainer
|
29
|
+
The application container instance.
|
30
|
+
"""
|
31
|
+
self.app = app
|
32
|
+
|
33
|
+
def register(self) -> None:
|
34
|
+
"""
|
35
|
+
Register services into the application container.
|
36
|
+
|
37
|
+
This method must be implemented by all concrete service providers.
|
38
|
+
It should bind services, configurations, or other components
|
39
|
+
to the application container.
|
40
|
+
|
41
|
+
Raises
|
42
|
+
------
|
43
|
+
NotImplementedError
|
44
|
+
If the method is not overridden in a subclass.
|
45
|
+
"""
|
46
|
+
raise NotImplementedError("This method should be overridden in the subclass")
|
47
|
+
|
48
|
+
def boot(self) -> None:
|
49
|
+
"""
|
50
|
+
Perform any post-registration bootstrapping or initialization.
|
51
|
+
|
52
|
+
This method is called after all services have been registered.
|
53
|
+
Override this method to initialize services, set up event listeners,
|
54
|
+
or perform other boot-time operations.
|
55
|
+
"""
|
56
|
+
pass
|
orionis/metadata/framework.py
CHANGED
@@ -137,11 +137,14 @@ orionis/container/context/scope.py,sha256=CWFiLLTAC_IdmeFKWX-jrphdxB0_TMEVBlz6lQ
|
|
137
137
|
orionis/container/contracts/container.py,sha256=hOO3w2yqVhp2nPTeS1uJEYgXSTbM3xwezDCOSNMC_a0,7603
|
138
138
|
orionis/container/entities/binding.py,sha256=Qp6Lf4XUDp2NjqXDAC2lzvhOFQWiBDKiGFcKfwb4axw,4342
|
139
139
|
orionis/container/enums/lifetimes.py,sha256=RqQmugMIB1Ev_j_vFLcWorndm-to7xg4stQ7yKFDdDw,190
|
140
|
+
orionis/container/exceptions/attribute_error.py,sha256=ysYKvXfunH-bywK_e02inY94s8aZ3vUZA6jATbDcQmk,480
|
140
141
|
orionis/container/exceptions/container_exception.py,sha256=goTDEwC70xTMD2qppN8KV-xyR0Nps218OD4D1LZ2-3s,470
|
141
142
|
orionis/container/exceptions/type_error_exception.py,sha256=cYuvoXVOgRYj3tZPfK341aUERkf33-buOiI2eXxcrAw,470
|
142
143
|
orionis/container/exceptions/value_exception.py,sha256=hjY0YEusoL3DurME1ornxvIv1wyGaf6tBggLFlGHblo,472
|
143
144
|
orionis/container/facades/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
144
|
-
orionis/container/facades/facade.py,sha256=
|
145
|
+
orionis/container/facades/facade.py,sha256=vu71_uqXnSpCFyeswPgKIhTPmIBLEK3bsy5sk4vTOEk,3306
|
146
|
+
orionis/container/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
147
|
+
orionis/container/providers/service_provider.py,sha256=rkrSxdNEi357aNs6MalOIy7-bNnb8E98fGhnBmE8GDs,1830
|
145
148
|
orionis/container/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
146
149
|
orionis/container/validators/implements.py,sha256=iSoDxxTalQKhyKjvsojFlkROhBFvAjvJxRvPJlmGrSg,2843
|
147
150
|
orionis/container/validators/is_abstract_class.py,sha256=Q-Lqyrrps6oj2XWI0KFRp-hDZf4_sgbZlEbfBXj5XT4,1169
|
@@ -243,7 +246,7 @@ orionis/foundation/contracts/config.py,sha256=Rpz6U6t8OXHO9JJKSTnCimytXE-tfCB-1i
|
|
243
246
|
orionis/foundation/exceptions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
244
247
|
orionis/foundation/exceptions/integrity.py,sha256=mc4pL1UMoYRHEmphnpW2oGk5URhu7DJRREyzHaV-cs8,472
|
245
248
|
orionis/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
246
|
-
orionis/metadata/framework.py,sha256=
|
249
|
+
orionis/metadata/framework.py,sha256=3pSdy6bnr8_6wagciqStvz0g2gtRfgoH6E-JRTI5p-8,4960
|
247
250
|
orionis/metadata/package.py,sha256=tqLfBRo-w1j_GN4xvzUNFyweWYFS-qhSgAEc-AmCH1M,5452
|
248
251
|
orionis/patterns/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
249
252
|
orionis/patterns/singleton/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -355,7 +358,7 @@ orionis/test/suite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
355
358
|
orionis/test/suite/test_unit.py,sha256=MWgW8dRCRyT1XZ5LsbXQ7-KVPReasoXwzEEL1EWWfE4,52190
|
356
359
|
orionis/test/view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
357
360
|
orionis/test/view/render.py,sha256=jXZkbITBknbUwm_mD8bcTiwLDvsFkrO9qrf0ZgPwqxc,4903
|
358
|
-
orionis-0.
|
361
|
+
orionis-0.327.0.dist-info/licenses/LICENCE,sha256=-_4cF2EBKuYVS_SQpy1uapq0oJPUU1vl_RUWSy2jJTo,1111
|
359
362
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
360
363
|
tests/example/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
361
364
|
tests/example/test_example.py,sha256=kvWgiW3ADEZf718dGsMPtDh_rmOSx1ypEInKm7_6ZPQ,601
|
@@ -456,8 +459,8 @@ tests/support/wrapper/test_services_wrapper_docdict.py,sha256=yeVwl-VcwkWSQYyxZu
|
|
456
459
|
tests/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
457
460
|
tests/testing/test_testing_result.py,sha256=MrGK3ZimedL0b5Ydu69Dg8Iul017AzLTm7VPxpXlpfU,4315
|
458
461
|
tests/testing/test_testing_unit.py,sha256=DjLBtvVn8B1KlVJNNkstBT8_csA1yeaMqnGrbanN_J4,7438
|
459
|
-
orionis-0.
|
460
|
-
orionis-0.
|
461
|
-
orionis-0.
|
462
|
-
orionis-0.
|
463
|
-
orionis-0.
|
462
|
+
orionis-0.327.0.dist-info/METADATA,sha256=GPE066gZMY-Rwse4II2FCF2LFnDbQQX81nenlgnP3DU,4772
|
463
|
+
orionis-0.327.0.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
|
464
|
+
orionis-0.327.0.dist-info/top_level.txt,sha256=2bdoHgyGZhOtLAXS6Om8OCTmL24dUMC_L1quMe_ETbk,14
|
465
|
+
orionis-0.327.0.dist-info/zip-safe,sha256=frcCV1k9oG9oKj3dpUqdJg1PxRT2RSN_XKdLCPjaYaY,2
|
466
|
+
orionis-0.327.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|