[+] improve emcont wrapper

This commit is contained in:
Siarhei Siniak 2025-07-08 10:44:47 +03:00
parent eb32f27bad
commit acd34f2ca5

@ -1,14 +1,62 @@
import aiohttp import aiohttp
import decimal
import pydantic
import json import json
from typing import (Any,) from typing import (Any, Annotated, Optional,)
class Emcont: class Emcont:
class rates_get_t:
class data_t(pydantic.BaseModel):
class rate_t(pydantic.BaseModel):
symbol: Annotated[
str,
pydantic.Field(
alias='Symbol',
)
]
bid: Annotated[
decimal.Decimal,
pydantic.Field(
alias='Bid',
)
]
ask: Annotated[
decimal.Decimal,
pydantic.Field(
alias='Ask',
)
]
product_type: Annotated[
str,
pydantic.Field(
alias='ProductType',
)
]
rates: Annotated[
list[rate_t],
pydantic.Field(
alias='Rates',
)
]
@classmethod @classmethod
async def rates_get( async def rates_get(
cls, cls,
only_symbols: Optional[set[str]] = None,
) -> Any: ) -> Any:
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession() as session:
async with session.get('https://rates.emcont.com') as response: async with session.get('https://rates.emcont.com') as response:
data = await response.text() data_json = await response.text()
return json.loads(data[5:-3]) data = cls.rates_get_t.data_t.model_validate_json(
data_json[5:-3],
)
if only_symbols:
data.rates = [
o
for o in data.rates
if o.symbol in only_symbols
]
return data