12 fix docs #13
@@ -23,9 +23,9 @@ class MarketAPIsTool(BaseWrapper, Toolkit):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, currency: str = "USD", enable_aggregation: bool = False):
|
def __init__(self, currency: str = "USD", enable_aggregation: bool = False):
|
||||||
self.currency = currency
|
kwargs = {"currency": currency or "USD"}
|
||||||
wrappers = [ BinanceWrapper, CoinBaseWrapper, CryptoCompareWrapper, YFinanceWrapper ]
|
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)
|
# Inizializza l'aggregatore solo se richiesto (lazy initialization)
|
||||||
self._aggregator = None
|
self._aggregator = None
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ class WrapperHandler(Generic[W]):
|
|||||||
return f"{e} [\"{last_frame.filename}\", line {last_frame.lineno}]"
|
return f"{e} [\"{last_frame.filename}\", line {last_frame.lineno}]"
|
||||||
|
|
||||||
@staticmethod
|
@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.
|
Builds a WrapperHandler instance with the given wrapper constructors.
|
||||||
It attempts to initialize each wrapper and logs a warning if any cannot be initialized.
|
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]
|
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.
|
try_per_wrapper (int): Number of retries per wrapper before switching to the next.
|
||||||
retry_delay (int): Delay in seconds between retries.
|
retry_delay (int): Delay in seconds between retries.
|
||||||
|
kwargs (dict | None): Optional dictionary with keyword arguments common to all wrappers.
|
||||||
Returns:
|
Returns:
|
||||||
WrapperHandler[W]: An instance of WrapperHandler with the initialized wrappers.
|
WrapperHandler[W]: An instance of WrapperHandler with the initialized wrappers.
|
||||||
Raises:
|
Raises:
|
||||||
@@ -119,7 +120,7 @@ class WrapperHandler(Generic[W]):
|
|||||||
result = []
|
result = []
|
||||||
for wrapper_class in constructors:
|
for wrapper_class in constructors:
|
||||||
try:
|
try:
|
||||||
wrapper = wrapper_class()
|
wrapper = wrapper_class(**(kwargs or {}))
|
||||||
result.append(wrapper)
|
result.append(wrapper)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
log_warning(f"{wrapper_class} cannot be initialized: {e}")
|
log_warning(f"{wrapper_class} cannot be initialized: {e}")
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import os
|
|
||||||
import pytest
|
import pytest
|
||||||
from app.agents.market_agent import MarketToolkit
|
|
||||||
from app.markets import MarketAPIsTool
|
from app.markets import MarketAPIsTool
|
||||||
|
|
||||||
|
|
||||||
@@ -35,27 +33,6 @@ class TestMarketAPIsTool:
|
|||||||
assert hasattr(btc_product, 'price')
|
assert hasattr(btc_product, 'price')
|
||||||
assert btc_product.price > 0
|
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):
|
def test_error_handling(self):
|
||||||
try:
|
try:
|
||||||
market_wrapper = MarketAPIsTool("USD")
|
market_wrapper = MarketAPIsTool("USD")
|
||||||
@@ -63,9 +40,3 @@ class TestMarketAPIsTool:
|
|||||||
assert fake_product is None or fake_product.price == 0
|
assert fake_product is None or fake_product.price == 0
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
pass
|
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.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user