feat(V2): builder client centralizzato (solo deribit per ora)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
AdrianoDev
2026-04-30 18:27:50 +02:00
parent d3ec2ee588
commit a8d970233e
2 changed files with 59 additions and 0 deletions
+22
View File
@@ -0,0 +1,22 @@
"""Builder centralizzato di client per ClientRegistry."""
from __future__ import annotations
from typing import Literal
from cerbero_mcp.settings import Settings
Environment = Literal["testnet", "mainnet"]
async def build_client(
settings: Settings, exchange: str, env: Environment
):
if exchange == "deribit":
from cerbero_mcp.exchanges.deribit.client import DeribitClient
return DeribitClient(
client_id=settings.deribit.client_id,
client_secret=settings.deribit.client_secret.get_secret_value(),
testnet=(env == "testnet"),
)
raise ValueError(f"unsupported exchange: {exchange}")
+37
View File
@@ -0,0 +1,37 @@
from __future__ import annotations
import pytest
@pytest.mark.asyncio
async def test_build_client_deribit_returns_correct_url(monkeypatch):
from tests.unit.test_settings import _minimal_env
for k, v in _minimal_env().items():
monkeypatch.setenv(k, v)
from cerbero_mcp.settings import Settings
from cerbero_mcp.exchanges import build_client
s = Settings()
c_test = await build_client(s, "deribit", "testnet")
c_live = await build_client(s, "deribit", "mainnet")
# DeribitClient espone base_url come property derivata da self.testnet
assert "test" in c_test.base_url.lower()
assert "test" not in c_live.base_url.lower()
@pytest.mark.asyncio
async def test_build_client_unknown_exchange_raises(monkeypatch):
from tests.unit.test_settings import _minimal_env
for k, v in _minimal_env().items():
monkeypatch.setenv(k, v)
from cerbero_mcp.settings import Settings
from cerbero_mcp.exchanges import build_client
s = Settings()
with pytest.raises(ValueError):
await build_client(s, "ftx", "testnet")