[+] partially add storing of tickers
This commit is contained in:
parent
c8370f96ff
commit
731b9d384a
1
deps/test-task-2025-06-30-v1/Makefile
vendored
1
deps/test-task-2025-06-30-v1/Makefile
vendored
@ -22,6 +22,7 @@ venv_compile:
|
|||||||
venv:
|
venv:
|
||||||
uv \
|
uv \
|
||||||
venv \
|
venv \
|
||||||
|
-p 3.13 \
|
||||||
$(UV_ARGS) \
|
$(UV_ARGS) \
|
||||||
--seed \
|
--seed \
|
||||||
$(ENV_PATH)
|
$(ENV_PATH)
|
||||||
|
31
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/app.py
vendored
31
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/app.py
vendored
@ -1,12 +1,19 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
|
import datetime
|
||||||
|
import logging
|
||||||
# import os
|
# import os
|
||||||
from ..tickers_retrieval.emcont import Emcont
|
from ..tickers_retrieval.emcont import Emcont
|
||||||
from ..tickers.models import Ticker
|
from ..tickers.models import Ticker
|
||||||
from ..tickers.settings import Settings as ModelsSettings
|
from ..tickers.settings import Settings as ModelsSettings
|
||||||
|
from ..tickers.logic import ticker_store_multiple
|
||||||
import sqlalchemy.ext.asyncio
|
import sqlalchemy.ext.asyncio
|
||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from sqlalchemy.ext.asyncio import async_sessionmaker
|
||||||
|
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
async def run() -> None:
|
async def run() -> None:
|
||||||
engine = sqlalchemy.ext.asyncio.create_async_engine(
|
engine = sqlalchemy.ext.asyncio.create_async_engine(
|
||||||
ModelsSettings.singleton().db_url
|
ModelsSettings.singleton().db_url
|
||||||
@ -15,8 +22,27 @@ async def run() -> None:
|
|||||||
engine
|
engine
|
||||||
)
|
)
|
||||||
|
|
||||||
async def store_cb(rates: Any, timestamp: Any, session: Any) -> None:
|
async def store_cb(
|
||||||
print(rates, timestamp.isoformat())
|
rates: list[Emcont.rates_get_t.data_t.rate_t],
|
||||||
|
timestamp: datetime.datetime,
|
||||||
|
session: 'async_sessionmaker[AsyncSession]',
|
||||||
|
) -> None:
|
||||||
|
await ticker_store_multiple(
|
||||||
|
session,
|
||||||
|
[
|
||||||
|
Ticker(
|
||||||
|
id=-1,
|
||||||
|
timestamp=timestamp,
|
||||||
|
value=rate.value,
|
||||||
|
)
|
||||||
|
for rate in rates
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
logger.info(dict(
|
||||||
|
rates=rates,
|
||||||
|
timestamp=timestamp.isoformat()
|
||||||
|
))
|
||||||
|
|
||||||
await Emcont.worker(
|
await Emcont.worker(
|
||||||
only_symbols={'EURUSD', 'USDJPY', 'GBPUSD', 'AUDUSD', 'USDCAD'},
|
only_symbols={'EURUSD', 'USDJPY', 'GBPUSD', 'AUDUSD', 'USDCAD'},
|
||||||
@ -25,4 +51,5 @@ async def run() -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
asyncio.run(run())
|
asyncio.run(run())
|
||||||
|
14
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/logic.py
vendored
Normal file
14
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/logic.py
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from sqlalchemy.ext.asyncio import async_sessionmaker
|
||||||
|
|
||||||
|
from .models import Ticker
|
||||||
|
|
||||||
|
async def ticker_store_multiple(
|
||||||
|
session: 'async_sessionmaker[AsyncSession]',
|
||||||
|
tickers: list[Ticker],
|
||||||
|
) -> None:
|
||||||
|
async with session() as active_session:
|
||||||
|
async with active_session.begin():
|
||||||
|
active_session.add_all(
|
||||||
|
tickers,
|
||||||
|
)
|
@ -38,12 +38,18 @@ class Emcont:
|
|||||||
alias='Ask',
|
alias='Ask',
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@pydantic.computed_field
|
||||||
|
def value(self) -> decimal.Decimal:
|
||||||
|
return (self.ask + self.bid) / 2
|
||||||
|
|
||||||
product_type: Annotated[
|
product_type: Annotated[
|
||||||
str,
|
str,
|
||||||
pydantic.Field(
|
pydantic.Field(
|
||||||
alias='ProductType',
|
alias='ProductType',
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
rates: Annotated[
|
rates: Annotated[
|
||||||
list[rate_t],
|
list[rate_t],
|
||||||
pydantic.Field(
|
pydantic.Field(
|
||||||
|
Loading…
Reference in New Issue
Block a user