|
1 | | -from datetime import UTC, datetime, timedelta |
2 | 1 | from pathlib import Path |
3 | | -from typing import TYPE_CHECKING, ClassVar, Self |
| 2 | +from typing import ClassVar, Self |
4 | 3 |
|
5 | 4 | import aiofiles |
6 | 5 | from aiocache import Cache, cached |
7 | | -from sqlalchemy import Select, select |
8 | 6 | from sqlalchemy.ext.asyncio import AsyncSession |
9 | 7 | from starlette.requests import Request |
10 | 8 |
|
11 | 9 | from futuramaapi.core import settings |
12 | 10 | from futuramaapi.helpers import render_markdown |
13 | | -from futuramaapi.helpers.pydantic import BaseModel, Field |
| 11 | +from futuramaapi.helpers.pydantic import BaseModel |
14 | 12 | from futuramaapi.mixins.pydantic import BaseModelTemplateMixin, ProjectContext |
15 | | -from futuramaapi.repositories import FilterStatementKwargs |
16 | | -from futuramaapi.repositories.models import CharacterModel, RequestsCounterModel, SystemMessage |
17 | | -from futuramaapi.routers.rest.users.schemas import User |
18 | | -from futuramaapi.routers.services.characters.get_character import GetCharacterResponse |
19 | | - |
20 | | -if TYPE_CHECKING: |
21 | | - from collections.abc import Sequence |
22 | | - |
23 | | - |
24 | | -class Root(BaseModel, BaseModelTemplateMixin): |
25 | | - characters: list[GetCharacterResponse] |
26 | | - user_count: int = Field(alias="user_count") |
27 | | - total_api_requests: int |
28 | | - last_day_api_requests: int |
29 | | - system_messages: list[str] |
30 | | - |
31 | | - template_name: ClassVar[str] = "index.html" |
32 | | - |
33 | | - @classmethod |
34 | | - async def from_request(cls, session: AsyncSession, request: Request, /) -> Self: |
35 | | - user_count: int = await User.count(session) |
36 | | - statement: Select[tuple[CharacterModel]] = select(CharacterModel).limit(12).order_by(CharacterModel.id.asc()) |
37 | | - characters: Sequence[CharacterModel] = (await session.execute(statement)).scalars().all() |
38 | | - total_requests: int = await RequestsCounterModel.get_total_requests() |
39 | | - system_messages: Sequence[SystemMessage] = await SystemMessage.filter(session, FilterStatementKwargs()) |
40 | | - last_day_api_requests: int = await RequestsCounterModel.get_requests_since( |
41 | | - datetime.now(tz=UTC) - timedelta(days=1), |
42 | | - ) |
43 | | - |
44 | | - return cls( |
45 | | - characters=characters, |
46 | | - user_count=user_count, |
47 | | - total_api_requests=total_requests, |
48 | | - last_day_api_requests=last_day_api_requests, |
49 | | - system_messages=[system_message.message for system_message in system_messages], |
50 | | - ) |
51 | 13 |
|
52 | 14 |
|
53 | 15 | class About(BaseModel, BaseModelTemplateMixin): |
|
0 commit comments