[+] 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_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
|
from ..tickers.logic import ticker_store_multiple, markets_get_by_symbol
|
||||||
import sqlalchemy.ext.asyncio
|
import sqlalchemy.ext.asyncio
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
from sqlalchemy.ext.asyncio import async_sessionmaker
|
from sqlalchemy.ext.asyncio import async_sessionmaker
|
||||||
@ -27,11 +27,19 @@ async def run() -> None:
|
|||||||
timestamp: datetime.datetime,
|
timestamp: datetime.datetime,
|
||||||
session: 'async_sessionmaker[AsyncSession]',
|
session: 'async_sessionmaker[AsyncSession]',
|
||||||
) -> None:
|
) -> None:
|
||||||
|
markets = await markets_get_by_symbol(
|
||||||
|
session,
|
||||||
|
set([
|
||||||
|
rate.symbol
|
||||||
|
for rate in rates
|
||||||
|
]),
|
||||||
|
)
|
||||||
|
|
||||||
await ticker_store_multiple(
|
await ticker_store_multiple(
|
||||||
session,
|
session,
|
||||||
[
|
[
|
||||||
Ticker(
|
Ticker(
|
||||||
id=-1,
|
id=markets[rate.symbol].id,
|
||||||
timestamp=timestamp,
|
timestamp=timestamp,
|
||||||
value=rate.value,
|
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 AsyncSession
|
||||||
from sqlalchemy.ext.asyncio import async_sessionmaker
|
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(
|
async def ticker_store_multiple(
|
||||||
session: 'async_sessionmaker[AsyncSession]',
|
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)
|
assert isinstance(row, model)
|
||||||
|
|
||||||
return row
|
return row
|
||||||
|
Loading…
Reference in New Issue
Block a user