[+] improve tickers storage in DB
This commit is contained in:
parent
027475e4b3
commit
070a63222c
12
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/app.py
vendored
12
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/app.py
vendored
@ -5,7 +5,7 @@ import logging
|
||||
from ..tickers_retrieval.emcont import Emcont
|
||||
from ..tickers.models import Ticker
|
||||
from ..tickers.settings import Settings as ModelsSettings
|
||||
from ..tickers.logic import ticker_store_multiple
|
||||
from ..tickers.logic import ticker_store_multiple, markets_get_by_symbol
|
||||
import sqlalchemy.ext.asyncio
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.ext.asyncio import async_sessionmaker
|
||||
@ -27,11 +27,19 @@ async def run() -> None:
|
||||
timestamp: datetime.datetime,
|
||||
session: 'async_sessionmaker[AsyncSession]',
|
||||
) -> None:
|
||||
markets = await markets_get_by_symbol(
|
||||
session,
|
||||
set([
|
||||
rate.symbol
|
||||
for rate in rates
|
||||
]),
|
||||
)
|
||||
|
||||
await ticker_store_multiple(
|
||||
session,
|
||||
[
|
||||
Ticker(
|
||||
id=-1,
|
||||
id=markets[rate.symbol].id,
|
||||
timestamp=timestamp,
|
||||
value=rate.value,
|
||||
)
|
||||
|
21
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/logic.py
vendored
21
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/logic.py
vendored
@ -1,7 +1,26 @@
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.ext.asyncio import async_sessionmaker
|
||||
|
||||
from .models import Ticker
|
||||
from .models import Ticker, Market
|
||||
from .utils import get_or_create
|
||||
|
||||
async def markets_get_by_symbol(
|
||||
session: 'async_sessionmaker[AsyncSession]',
|
||||
symbols: set[str],
|
||||
) -> dict[str, Market]:
|
||||
res : dict[str, Market] = dict()
|
||||
|
||||
async with session() as active_session:
|
||||
async with active_session.begin() as transaction:
|
||||
for o in symbols:
|
||||
m = (await get_or_create(
|
||||
active_session,
|
||||
Market,
|
||||
name=o,
|
||||
))[0]
|
||||
res[o] = m
|
||||
|
||||
return res
|
||||
|
||||
async def ticker_store_multiple(
|
||||
session: 'async_sessionmaker[AsyncSession]',
|
||||
|
3
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/utils.py
vendored
3
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/utils.py
vendored
@ -23,7 +23,8 @@ async def get_or_create(
|
||||
)
|
||||
)
|
||||
|
||||
row = res.one()
|
||||
row = res.one()[0]
|
||||
|
||||
assert isinstance(row, model)
|
||||
|
||||
return row
|
||||
|
Loading…
Reference in New Issue
Block a user