python-dependency-injector icon indicating copy to clipboard operation
python-dependency-injector copied to clipboard

Making injections into class attributes can't work with `Resource` in nested container.

Open YogiLiu opened this issue 7 months ago • 2 comments
trafficstars

Reproducible project: https://github.com/YogiLiu/pdi_issue

When I run python -m pdi_issue.main, an error was raised:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/home/yogiliu/Workspace/YogiLiu/pdi_issue/src/pdi_issue/main.py", line 4, in <module>
    container = SrvContainer()
                ^^^^^^^^^^^^^^
  File "src/dependency_injector/containers.pyx", line 727, in dependency_injector.containers.DeclarativeContainer.__new__
  File "src/dependency_injector/providers.pyx", line 4916, in dependency_injector.providers.deepcopy
  File "src/dependency_injector/providers.pyx", line 4923, in dependency_injector.providers.deepcopy
  File "/home/yogiliu/.local/share/uv/python/cpython-3.11.10-linux-x86_64-gnu/lib/python3.11/copy.py", line 146, in deepcopy
    y = copier(x, memo)
        ^^^^^^^^^^^^^^^
  File "/home/yogiliu/.local/share/uv/python/cpython-3.11.10-linux-x86_64-gnu/lib/python3.11/copy.py", line 231, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
                             ^^^^^^^^^^^^^^^^^^^^^
  File "/home/yogiliu/.local/share/uv/python/cpython-3.11.10-linux-x86_64-gnu/lib/python3.11/copy.py", line 153, in deepcopy
    y = copier(memo)
        ^^^^^^^^^^^^
  File "src/dependency_injector/providers.pyx", line 4024, in dependency_injector.providers.Container.__deepcopy__
  File "src/dependency_injector/providers.pyx", line 4923, in dependency_injector.providers.deepcopy
  File "/home/yogiliu/.local/share/uv/python/cpython-3.11.10-linux-x86_64-gnu/lib/python3.11/copy.py", line 153, in deepcopy
    y = copier(memo)
        ^^^^^^^^^^^^
  File "src/dependency_injector/containers.pyx", line 125, in dependency_injector.containers.DynamicContainer.__deepcopy__
  File "src/dependency_injector/providers.pyx", line 4916, in dependency_injector.providers.deepcopy
  File "src/dependency_injector/providers.pyx", line 4923, in dependency_injector.providers.deepcopy
  File "/home/yogiliu/.local/share/uv/python/cpython-3.11.10-linux-x86_64-gnu/lib/python3.11/copy.py", line 146, in deepcopy
    y = copier(x, memo)
        ^^^^^^^^^^^^^^^
  File "/home/yogiliu/.local/share/uv/python/cpython-3.11.10-linux-x86_64-gnu/lib/python3.11/copy.py", line 231, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
                             ^^^^^^^^^^^^^^^^^^^^^
  File "/home/yogiliu/.local/share/uv/python/cpython-3.11.10-linux-x86_64-gnu/lib/python3.11/copy.py", line 153, in deepcopy
    y = copier(memo)
        ^^^^^^^^^^^^
  File "src/dependency_injector/providers.pyx", line 3669, in dependency_injector.providers.Resource.__deepcopy__
dependency_injector.errors.Error: Can not copy initialized resource

YogiLiu avatar Mar 23 '25 12:03 YogiLiu