diff --git a/src/app/markets/__init__.py b/src/app/markets/__init__.py index 30a24fb..a2efa16 100644 --- a/src/app/markets/__init__.py +++ b/src/app/markets/__init__.py @@ -23,9 +23,9 @@ class MarketAPIsTool(BaseWrapper, Toolkit): """ def __init__(self, currency: str = "USD", enable_aggregation: bool = False): - self.currency = currency + kwargs = {"currency": currency or "USD"} wrappers = [ BinanceWrapper, CoinBaseWrapper, CryptoCompareWrapper, YFinanceWrapper ] - self.wrappers: WrapperHandler[BaseWrapper] = WrapperHandler.build_wrappers(wrappers) + self.wrappers: WrapperHandler[BaseWrapper] = WrapperHandler.build_wrappers(wrappers, kwargs=kwargs) # Inizializza l'aggregatore solo se richiesto (lazy initialization) self._aggregator = None diff --git a/src/app/utils/wrapper_handler.py b/src/app/utils/wrapper_handler.py index 19181ea..3429c13 100644 --- a/src/app/utils/wrapper_handler.py +++ b/src/app/utils/wrapper_handler.py @@ -100,7 +100,7 @@ class WrapperHandler(Generic[W]): return f"{e} [\"{last_frame.filename}\", line {last_frame.lineno}]" @staticmethod - def build_wrappers(constructors: Iterable[Type[W]], try_per_wrapper: int = 3, retry_delay: int = 2) -> 'WrapperHandler[W]': + def build_wrappers(constructors: Iterable[Type[W]], try_per_wrapper: int = 3, retry_delay: int = 2, kwargs: dict | None = None) -> 'WrapperHandler[W]': """ Builds a WrapperHandler instance with the given wrapper constructors. It attempts to initialize each wrapper and logs a warning if any cannot be initialized. @@ -109,6 +109,7 @@ class WrapperHandler(Generic[W]): constructors (Iterable[Type[W]]): An iterable of wrapper classes to instantiate. e.g. [WrapperA, WrapperB] try_per_wrapper (int): Number of retries per wrapper before switching to the next. retry_delay (int): Delay in seconds between retries. + kwargs (dict | None): Optional dictionary with keyword arguments common to all wrappers. Returns: WrapperHandler[W]: An instance of WrapperHandler with the initialized wrappers. Raises: @@ -119,7 +120,7 @@ class WrapperHandler(Generic[W]): result = [] for wrapper_class in constructors: try: - wrapper = wrapper_class() + wrapper = wrapper_class(**(kwargs or {})) result.append(wrapper) except Exception as e: log_warning(f"{wrapper_class} cannot be initialized: {e}") diff --git a/tests/tools/test_market_tool.py b/tests/tools/test_market_tool.py index e4eff8a..7513585 100644 --- a/tests/tools/test_market_tool.py +++ b/tests/tools/test_market_tool.py @@ -1,6 +1,4 @@ -import os import pytest -from app.agents.market_agent import MarketToolkit from app.markets import MarketAPIsTool @@ -35,27 +33,6 @@ class TestMarketAPIsTool: assert hasattr(btc_product, 'price') assert btc_product.price > 0 - def test_market_toolkit_integration(self): - try: - toolkit = MarketToolkit() - assert toolkit is not None - assert hasattr(toolkit, 'market_agent') - assert toolkit.market_api is not None - - tools = toolkit.tools - assert len(tools) > 0 - - except Exception as e: - print(f"MarketToolkit test failed: {e}") - # Non fail completamente - il toolkit potrebbe avere dipendenze specifiche - - def test_provider_selection_mechanism(self): - potential_providers = 0 - if os.getenv('CDP_API_KEY_NAME') and os.getenv('CDP_API_PRIVATE_KEY'): - potential_providers += 1 - if os.getenv('CRYPTOCOMPARE_API_KEY'): - potential_providers += 1 - def test_error_handling(self): try: market_wrapper = MarketAPIsTool("USD") @@ -63,9 +40,3 @@ class TestMarketAPIsTool: assert fake_product is None or fake_product.price == 0 except Exception as e: pass - - def test_wrapper_currency_support(self): - market_wrapper = MarketAPIsTool("USD") - assert hasattr(market_wrapper, 'currency') - assert isinstance(market_wrapper.currency, str) - assert len(market_wrapper.currency) >= 3 # USD, EUR, etc.