[+] improve ticker orm logic
This commit is contained in:
parent
181a9a5ce9
commit
dda9c841fd
25
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/logic.py
vendored
25
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/logic.py
vendored
@ -2,6 +2,8 @@ import datetime
|
||||
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.ext.asyncio import async_sessionmaker
|
||||
from sqlalchemy.orm import selectinload
|
||||
from sqlalchemy.future import select, make_transient
|
||||
|
||||
from .models import Ticker, Market
|
||||
from .utils import get_or_create
|
||||
@ -38,7 +40,26 @@ async def tickers_get_by_period(
|
||||
session: 'async_sessionmaker[AsyncSession]',
|
||||
market_id: int,
|
||||
period: datetime.timedelta,
|
||||
) -> None:
|
||||
) -> list[Ticker]:
|
||||
async with session() as active_session:
|
||||
async with active_session.begin() as transaction:
|
||||
raise NotImplementedError
|
||||
q = select(
|
||||
Ticket
|
||||
).join(Ticket.market).where(
|
||||
Market.id == market_id,
|
||||
Ticker.timestamp >= datetime.datetime.now(
|
||||
tz=datetime.timezone.utc
|
||||
) - period
|
||||
).order_by(Ticker.timestamp.desc()).options(
|
||||
selectinload(Ticker.market)
|
||||
)
|
||||
|
||||
res = await active_session.execute(q)
|
||||
|
||||
rows = list(res)
|
||||
|
||||
for o in rows:
|
||||
active_session.expunge(o)
|
||||
make_transient(o.market)
|
||||
|
||||
return rows
|
||||
|
9
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/models.py
vendored
9
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/models.py
vendored
@ -5,6 +5,7 @@ from sqlalchemy.orm import (
|
||||
mapped_column,
|
||||
Mapped,
|
||||
DeclarativeBase,
|
||||
relationship,
|
||||
)
|
||||
from sqlalchemy import (
|
||||
String,
|
||||
@ -25,6 +26,10 @@ class Market(Base):
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
name: Mapped[str] = mapped_column(String(32))
|
||||
|
||||
tickers: Mapped[list['Ticker']] = relationship(
|
||||
back_populates='market',
|
||||
)
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"Market(id={self.id!r}, name={self.name!r})"
|
||||
|
||||
@ -35,6 +40,10 @@ class Ticker(Base):
|
||||
'tickers_market.id',
|
||||
ondelete='CASCADE',
|
||||
))
|
||||
market: Mapped['Market'] = relationship(
|
||||
back_populates='tickers'
|
||||
)
|
||||
|
||||
timestamp: Mapped[datetime.datetime] = mapped_column(
|
||||
DateTime(timezone=True,)
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user