python-injection 0.19.5.post1__py3-none-any.whl → 0.19.7__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.
injection/__init__.pyi CHANGED
@@ -374,7 +374,7 @@ class Module:
374
374
  *,
375
375
  alias: bool = ...,
376
376
  mode: Mode | ModeStr = ...,
377
- ) -> Self:
377
+ ) -> T:
378
378
  """
379
379
  Function for registering a specific instance to be injected. This is useful for
380
380
  registering global variables. The difference with the singleton decorator is
@@ -1,7 +1,11 @@
1
1
  from contextlib import nullcontext
2
+ from os import getenv
2
3
  from threading import RLock
3
- from typing import Any, ContextManager
4
+ from typing import Any, ContextManager, Final
5
+
6
+ _PYTHON_INJECTION_THREADSAFE: Final[bool] = bool(getenv("PYTHON_INJECTION_THREADSAFE"))
4
7
 
5
8
 
6
9
  def get_lock(threadsafe: bool | None = None) -> ContextManager[Any]:
7
- return RLock() if threadsafe else nullcontext()
10
+ cond = _PYTHON_INJECTION_THREADSAFE if threadsafe is None else threadsafe
11
+ return RLock() if cond else nullcontext()
injection/_core/module.py CHANGED
@@ -532,16 +532,21 @@ class Module(Broker, EventListener):
532
532
  *,
533
533
  alias: bool = False,
534
534
  mode: Mode | ModeStr = Mode.get_default(),
535
- ) -> Self:
536
- hints = on if alias else (type(instance), on)
535
+ ) -> T:
536
+ if not alias:
537
+ on = (type(instance), on)
538
+
539
+ elif not on:
540
+ raise ValueError("`on` must be provided when `alias` is `True`.")
541
+
537
542
  self.injectable(
538
543
  lambda: instance,
539
544
  ignore_type_hint=True,
540
545
  inject=False,
541
- on=hints,
546
+ on=on,
542
547
  mode=mode,
543
548
  )
544
- return self
549
+ return instance
545
550
 
546
551
  def reserve_scoped_slot[T](
547
552
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-injection
3
- Version: 0.19.5.post1
3
+ Version: 0.19.7
4
4
  Summary: Fast and easy dependency injection framework.
5
5
  Project-URL: Repository, https://github.com/100nm/python-injection
6
6
  Author: remimd
@@ -92,8 +92,14 @@ if __name__ == "__main__":
92
92
 
93
93
  ## Resources
94
94
 
95
- > ⚠️ The package isn't threadsafe, for better performance in single-threaded applications and those using `asyncio`.
96
- > So remember to use `threading.Lock` if you're writing a multithreaded program.
95
+ > ⚠️ The package isn't threadsafe by default, for better performance in single-threaded applications and those using
96
+ > `asyncio`.
97
+ >
98
+ > Non-threadsafe functions are those that resolve dependencies or define scopes. They all come with an optional
99
+ > parameter `threadsafe`.
100
+ >
101
+ > You can set `PYTHON_INJECTION_THREADSAFE=1` in environment variables to make the package fully threadsafe. The
102
+ > environment variable is resolved at the **Python module level**, so be careful if the variable is defined dynamically.
97
103
 
98
104
  * [**Basic usage**](https://github.com/100nm/python-injection/tree/prod/documentation/basic-usage.md)
99
105
  * [**Scoped dependencies**](https://github.com/100nm/python-injection/tree/prod/documentation/scoped-dependencies.md)
@@ -1,5 +1,5 @@
1
1
  injection/__init__.py,sha256=iJm0BbyGZw-Qr5e8d2C3n8-7FiVD-sy4LU_i_n3AgHY,1318
2
- injection/__init__.pyi,sha256=8uWRfGfkVCfWBx4X4XsRyo1l7vKym6-vmcMklPyVMqg,15672
2
+ injection/__init__.pyi,sha256=l4TChZY33TGkkNXRl0hL82XNkPZHH5TvWed146_82TQ,15669
3
3
  injection/entrypoint.py,sha256=W76YNPNgvT5UGb2lAqMas4GKPl7xb8GW3rRL34jIWzU,5017
4
4
  injection/exceptions.py,sha256=v57yMujiq6H_zwwn30A8UYEZX9R9k-bY8FnsdaimPM4,1025
5
5
  injection/loaders.py,sha256=gKlJfe9nXCuB8r6j0RF9_2FHC6YplM8GQYsgRqyxYw8,7257
@@ -8,7 +8,7 @@ injection/_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  injection/_core/asfunction.py,sha256=fTgAAWsDWUz89kYsoSVDXdqYKIuh6HtUW5MohGp3ov4,1767
9
9
  injection/_core/descriptors.py,sha256=1OX6JnM8Ux14vW1JSW3FzPgKc2VMTKqJUYBGT3Ypafg,800
10
10
  injection/_core/injectables.py,sha256=fxhiGv7qTCbUunhhd6a3ahosFmgznUFsEvqlwxi4gS4,6098
11
- injection/_core/module.py,sha256=ibWfaNNVjQ4ccu7rabvXeog_EDCsjS-TbFBMuRHXS_k,32616
11
+ injection/_core/module.py,sha256=kUOzW7CYf3oGgVBhwJT1-05UI-HLH2N_E4o17Fyw1g4,32721
12
12
  injection/_core/scope.py,sha256=r094k1Vjvwm0hTf7AQGYrxxvqQgb7_CDVUKaHQ8wyeM,8772
13
13
  injection/_core/slots.py,sha256=g9TG6CbqRzCsjg01iPyfRtTTUCJnnJOwcj9mJabH0dc,37
14
14
  injection/_core/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -17,14 +17,14 @@ injection/_core/common/event.py,sha256=XjzV8gxtGlGvzZs_ykvoC60qmdpd3RN08Eiqz5QUw
17
17
  injection/_core/common/invertible.py,sha256=gA_vw5nBjgp_w9MrDK5jMO8lhuOQWON8BbPpKzEuIY0,502
18
18
  injection/_core/common/key.py,sha256=ghkZD-Y8Moz6SEPNgMh3xgsZUjDVq-XYAmXaCu5VuCA,80
19
19
  injection/_core/common/lazy.py,sha256=hZvz9LhlYxVkD_D8VBAvQmy7YuVaaw075jq0XM0w9_Y,1193
20
- injection/_core/common/threading.py,sha256=kwRXNa9ocndIqeZA9kMHjEa8SBpHFcJARj1bgrWCpxE,225
20
+ injection/_core/common/threading.py,sha256=LR5_wiwZ9_YrcOOKg0qtwbe1YqYdYP57-PAFIe4bknM,415
21
21
  injection/_core/common/type.py,sha256=U7PtuH-FuMgw75LB7xy-arJRJXojxsJDQbhnTqA4P-o,2567
22
22
  injection/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  injection/ext/fastapi.py,sha256=fiy3-mZIIwGcql3Y5ekFX8_7hALzqXP5u40qbtNE73o,1441
24
24
  injection/ext/fastapi.pyi,sha256=HLs7mfruIEFRrN_Xf8oCvSa4qwHWfwm6HHU_KMedXkE,185
25
25
  injection/testing/__init__.py,sha256=bJ7WXBXrw4rHc91AFVFnOwFLWOlpvX9Oh2SnRQ_NESo,919
26
26
  injection/testing/__init__.pyi,sha256=raGsGlxwbz3jkzJwA_5oCIE1emWINjT2UuwzbnqRb-0,577
27
- python_injection-0.19.5.post1.dist-info/METADATA,sha256=fQmu5jF3kcYKuP4_asLoWog9iD4w1snv_udc43D_CTc,4307
28
- python_injection-0.19.5.post1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
29
- python_injection-0.19.5.post1.dist-info/licenses/LICENSE,sha256=oC77BOa9kaaQni5rW-Z-ytz3E5h4EVg248BHg9UFgyg,1063
30
- python_injection-0.19.5.post1.dist-info/RECORD,,
27
+ python_injection-0.19.7.dist-info/METADATA,sha256=1ez9nTKcHGa1jqWVzYM2I_NaFi9W0wuwkmHmJuHvhg0,4613
28
+ python_injection-0.19.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
29
+ python_injection-0.19.7.dist-info/licenses/LICENSE,sha256=oC77BOa9kaaQni5rW-Z-ytz3E5h4EVg248BHg9UFgyg,1063
30
+ python_injection-0.19.7.dist-info/RECORD,,