From 34391e257950f59dae1654e4656f7446adfc2fd4 Mon Sep 17 00:00:00 2001 From: Dmitrii Abramov Date: Wed, 22 Apr 2026 14:55:26 +0100 Subject: [PATCH] Assembler no longer modifies multiprovider supplied list --- src/engin/_assembler.py | 7 +++---- tests/test_assembler.py | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/engin/_assembler.py b/src/engin/_assembler.py index 6e7a6ad..ebf7eb0 100644 --- a/src/engin/_assembler.py +++ b/src/engin/_assembler.py @@ -424,10 +424,9 @@ async def _satisfy(self, target: TypeId) -> None: ) from err if provider.is_multiprovider: - if type_id in self._root_node.cache: - self._root_node.cache[type_id].extend(value) - else: - self._root_node.cache[type_id] = value + if type_id not in self._root_node.cache: + self._root_node.cache[type_id] = [] + self._root_node.cache[type_id].extend(value) elif provider.scope: scope.cache[type_id] = value else: diff --git a/tests/test_assembler.py b/tests/test_assembler.py index 20f6d1d..eb871c1 100644 --- a/tests/test_assembler.py +++ b/tests/test_assembler.py @@ -4,7 +4,7 @@ import pytest -from engin import Assembler, Entrypoint, Invoke, Provide +from engin import Assembler, Entrypoint, Invoke, Provide, Supply from engin.exceptions import NotInScopeError, ProviderError, TypeNotProvidedError from tests.deps import int_provider, make_many_int, make_many_int_alt, make_str @@ -135,6 +135,22 @@ def make_str() -> list[str]: assert not assembler.has(str) +async def test_assembler_does_not_modify_multiprovider_values(): + def multidependency_user(values: list[int]) -> int: + return 42 + + provider = Provide(multidependency_user) + providers = [Supply([1]), Supply([2]), provider] + + assembler1 = Assembler(providers) + assembler2 = Assembler(providers) + await assembler1.assemble(providers[2]) + await assembler2.assemble(providers[2]) + + assert providers[0]._value == [1] + assert providers[1]._value == [2] + + async def test_assembler_add(): assembler = Assembler([]) assembler.add(int_provider())