Files
checkaddy/checkaddy_app/lookup.py
2026-03-06 18:22:02 +01:00

51 lines
1.6 KiB
Python

from __future__ import annotations
from datetime import datetime, timezone
from .api import ApiClient
from .constants import DATA_SOURCE_BY_COIN, EXPLORER_URL_BY_COIN
from .models import LookupResult
from .validators import validate_address
def build_lookup_result(client: ApiClient, coin: str, address: str) -> LookupResult:
explorer_url = EXPLORER_URL_BY_COIN[coin].format(address=address)
data_source = DATA_SOURCE_BY_COIN[coin]
is_valid, reason = validate_address(coin, address)
result = LookupResult(
coin=coin,
address=address,
is_valid_format=is_valid,
validation_reason=reason,
confirmed_balance=None,
unconfirmed_balance=None,
total_received=None,
total_sent=None,
tx_count=None,
explorer_url=explorer_url,
data_source=data_source,
fetched_at_utc=datetime.now(timezone.utc).isoformat(),
api_error=None,
api_skipped=False,
)
if not is_valid:
result.api_skipped = True
return result
try:
payload = client.fetch_coin_info(coin, address)
except RuntimeError as exc:
result.api_error = str(exc)
return result
if isinstance(payload.get("data_source"), str):
result.data_source = payload["data_source"]
result.confirmed_balance = payload["confirmed_balance"]
result.unconfirmed_balance = payload["unconfirmed_balance"]
result.total_received = payload["total_received"]
result.total_sent = payload["total_sent"]
result.tx_count = payload["tx_count"]
return result