style(project): remove from __future__ import annotations

This commit is contained in:
MingxuanGame
2025-10-03 17:15:41 +00:00
parent 046f894407
commit dfd656f2fb
137 changed files with 94 additions and 362 deletions

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import datetime import datetime
from enum import Enum from enum import Enum
import importlib.util import importlib.util

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from functools import partial from functools import partial
from app.database.daily_challenge import DailyChallengeStats from app.database.daily_challenge import DailyChallengeStats

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import datetime from datetime import datetime
from app.database.beatmap import calculate_beatmap_attributes from app.database.beatmap import calculate_beatmap_attributes

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from functools import partial from functools import partial
from app.database.score import Beatmap, Score from app.database.score import Beatmap, Score

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from functools import partial from functools import partial
from app.database.score import Beatmap, Score from app.database.score import Beatmap, Score

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from functools import partial from functools import partial
from app.database import UserStatistics from app.database import UserStatistics

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from functools import partial from functools import partial
from typing import Literal, cast from typing import Literal, cast

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from functools import partial from functools import partial
from app.database.score import Beatmap, Score from app.database.score import Beatmap, Score

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import timedelta from datetime import timedelta
import hashlib import hashlib
import re import re

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import asyncio import asyncio
from copy import deepcopy from copy import deepcopy
from enum import Enum from enum import Enum

View File

@@ -1,4 +1,3 @@
# ruff: noqa: I002
from enum import Enum from enum import Enum
from typing import Annotated, Any from typing import Annotated, Any

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
BANCHOBOT_ID = 2 BANCHOBOT_ID = 2
BACKUP_CODE_LENGTH = 10 BACKUP_CODE_LENGTH = 10

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from sqlmodel import Field, SQLModel from sqlmodel import Field, SQLModel

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from app.database.beatmapset import Beatmapset from app.database.beatmapset import Beatmapset
from app.database.user import User from app.database.user import User

View File

@@ -2,8 +2,6 @@
密码重置相关数据库模型 密码重置相关数据库模型
""" """
from __future__ import annotations
from datetime import datetime from datetime import datetime
from app.utils import utcnow from app.utils import utcnow

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from typing import Annotated from typing import Annotated
from fastapi import Depends, Header from fastapi import Depends, Header

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from typing import Annotated from typing import Annotated
from app.service.beatmap_download_service import BeatmapDownloadService, download_service from app.service.beatmap_download_service import BeatmapDownloadService, download_service

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from typing import Annotated from typing import Annotated
from app.dependencies.database import Redis from app.dependencies.database import Redis

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from collections.abc import AsyncIterator, Callable from collections.abc import AsyncIterator, Callable
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
from contextvars import ContextVar from contextvars import ContextVar

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from typing import Annotated from typing import Annotated
from app.config import settings from app.config import settings

View File

@@ -2,8 +2,6 @@
GeoIP dependency for FastAPI GeoIP dependency for FastAPI
""" """
from __future__ import annotations
from functools import lru_cache from functools import lru_cache
import ipaddress import ipaddress
from typing import Annotated from typing import Annotated

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from typing import Any from typing import Any
from fastapi import Request from fastapi import Request

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from app.config import settings from app.config import settings
from fastapi import Depends from fastapi import Depends

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import UTC from datetime import UTC
from typing import cast from typing import cast

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from typing import Annotated, cast from typing import Annotated, cast
from app.config import ( from app.config import (

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from typing import Annotated from typing import Annotated
from app.auth import get_token_by_access_token from app.auth import get_token_by_access_token

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from typing import Annotated from typing import Annotated
from app.models.model import UserAgentInfo as UserAgentInfoModel from app.models.model import UserAgentInfo as UserAgentInfoModel

View File

@@ -2,8 +2,6 @@
用户页面相关的异常类 用户页面相关的异常类
""" """
from __future__ import annotations
class UserpageError(Exception): class UserpageError(Exception):
"""用户页面处理错误基类""" """用户页面处理错误基类"""

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from .beatmap import BeatmapFetcher from .beatmap import BeatmapFetcher
from .beatmap_raw import BeatmapRawFetcher from .beatmap_raw import BeatmapRawFetcher
from .beatmapset import BeatmapsetFetcher from .beatmapset import BeatmapsetFetcher

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import asyncio import asyncio
import time import time
from urllib.parse import quote from urllib.parse import quote

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from app.database.beatmap import BeatmapResp from app.database.beatmap import BeatmapResp
from app.log import fetcher_logger from app.log import fetcher_logger

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from app.log import fetcher_logger from app.log import fetcher_logger
from ._base import BaseFetcher from ._base import BaseFetcher

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import asyncio import asyncio
import base64 import base64
import hashlib import hashlib

View File

@@ -1,7 +1,5 @@
"""资源代理辅助方法与路由装饰器。""" """资源代理辅助方法与路由装饰器。"""
from __future__ import annotations
from collections.abc import Awaitable, Callable from collections.abc import Awaitable, Callable
from functools import wraps from functools import wraps
import re import re

View File

@@ -2,8 +2,6 @@
GeoLite2 Helper Class (asynchronous) GeoLite2 Helper Class (asynchronous)
""" """
from __future__ import annotations
import asyncio import asyncio
from contextlib import suppress from contextlib import suppress
import os import os

View File

@@ -6,8 +6,6 @@ Rate limiter for osu! API requests to avoid abuse detection.
- 建议:每分钟不超过 60 次请求以避免滥用检测 - 建议:每分钟不超过 60 次请求以避免滥用检测
""" """
from __future__ import annotations
import asyncio import asyncio
from collections import deque from collections import deque
import time import time

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import http import http
import inspect import inspect
import logging import logging

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from .verify_session import SessionState, VerifySessionMiddleware from .verify_session import SessionState, VerifySessionMiddleware
__all__ = ["SessionState", "VerifySessionMiddleware"] __all__ = ["SessionState", "VerifySessionMiddleware"]

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from app.config import settings from app.config import settings
from app.middleware.verify_session import VerifySessionMiddleware from app.middleware.verify_session import VerifySessionMiddleware

View File

@@ -4,8 +4,6 @@ FastAPI会话验证中间件
基于osu-web的会话验证系统适配FastAPI框架 基于osu-web的会话验证系统适配FastAPI框架
""" """
from __future__ import annotations
from collections.abc import Callable from collections.abc import Callable
from typing import ClassVar from typing import ClassVar
@@ -28,6 +26,96 @@ from starlette.middleware.base import BaseHTTPMiddleware
logger = log("Middleware") logger = log("Middleware")
class SessionState:
"""会话状态类
简化版本的会话状态管理
"""
def __init__(self, session: LoginSession, user: User, redis: Redis, db: AsyncSession, api_version: int = 0) -> None:
self.session = session
self.user = user
self.redis = redis
self.db = db
self.api_version = api_version
self._verification_method: str | None = None
def is_verified(self) -> bool:
"""检查会话是否已验证"""
return self.session.is_verified
async def get_method(self) -> str:
"""获取验证方法"""
if self._verification_method is None:
# 从Redis获取已设置的方法
token_id = self.session.token_id
if token_id is not None:
self._verification_method = await LoginSessionService.get_login_method(
self.user.id, token_id, self.redis
)
if self._verification_method is None:
if self.api_version < SUPPORT_TOTP_VERIFICATION_VER:
self._verification_method = "mail"
return self._verification_method
await self.user.awaitable_attrs.totp_key
totp_key = self.user.totp_key
self._verification_method = "totp" if totp_key else "mail"
token_id = self.session.token_id
if token_id is not None:
await LoginSessionService.set_login_method(
self.user.id, token_id, self._verification_method, self.redis
)
return self._verification_method
async def mark_verified(self) -> None:
"""标记会话为已验证"""
try:
token_id = self.session.token_id
if token_id is not None:
await LoginSessionService.mark_session_verified(
self.db,
self.redis,
self.user.id,
token_id,
self.session.ip_address,
extract_user_agent(self.session.user_agent),
self.session.web_uuid,
)
except Exception as e:
logger.error(f"Error marking verified: {e}")
async def issue_mail_if_needed(self) -> None:
"""如果需要,发送验证邮件"""
try:
if await self.get_method() == "mail":
from app.service.verification_service import EmailVerificationService
# 这里可以触发邮件发送
await EmailVerificationService.send_verification_email(
self.db, self.redis, self.user.id, self.user.username, self.user.email, None, None
)
except Exception as e:
logger.error(f"Error issuing mail: {e}")
def get_key(self) -> str:
"""获取会话密钥"""
return str(self.session.id) if self.session.id else ""
@property
def key_for_event(self) -> str:
"""获取用于事件广播的会话密钥"""
return LoginSessionService.get_key_for_event(self.get_key())
@property
def user_id(self) -> int:
"""获取用户ID"""
return self.user.id
class VerifySessionMiddleware(BaseHTTPMiddleware): class VerifySessionMiddleware(BaseHTTPMiddleware):
"""会话验证中间件 """会话验证中间件
@@ -192,93 +280,3 @@ class VerifySessionMiddleware(BaseHTTPMiddleware):
return JSONResponse( return JSONResponse(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, content={"error": "Verification initiation failed"} status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, content={"error": "Verification initiation failed"}
) )
class SessionState:
"""会话状态类
简化版本的会话状态管理
"""
def __init__(self, session: LoginSession, user: User, redis: Redis, db: AsyncSession, api_version: int = 0) -> None:
self.session = session
self.user = user
self.redis = redis
self.db = db
self.api_version = api_version
self._verification_method: str | None = None
def is_verified(self) -> bool:
"""检查会话是否已验证"""
return self.session.is_verified
async def get_method(self) -> str:
"""获取验证方法"""
if self._verification_method is None:
# 从Redis获取已设置的方法
token_id = self.session.token_id
if token_id is not None:
self._verification_method = await LoginSessionService.get_login_method(
self.user.id, token_id, self.redis
)
if self._verification_method is None:
if self.api_version < SUPPORT_TOTP_VERIFICATION_VER:
self._verification_method = "mail"
return self._verification_method
await self.user.awaitable_attrs.totp_key
totp_key = self.user.totp_key
self._verification_method = "totp" if totp_key else "mail"
token_id = self.session.token_id
if token_id is not None:
await LoginSessionService.set_login_method(
self.user.id, token_id, self._verification_method, self.redis
)
return self._verification_method
async def mark_verified(self) -> None:
"""标记会话为已验证"""
try:
token_id = self.session.token_id
if token_id is not None:
await LoginSessionService.mark_session_verified(
self.db,
self.redis,
self.user.id,
token_id,
self.session.ip_address,
extract_user_agent(self.session.user_agent),
self.session.web_uuid,
)
except Exception as e:
logger.error(f"Error marking verified: {e}")
async def issue_mail_if_needed(self) -> None:
"""如果需要,发送验证邮件"""
try:
if await self.get_method() == "mail":
from app.service.verification_service import EmailVerificationService
# 这里可以触发邮件发送
await EmailVerificationService.send_verification_email(
self.db, self.redis, self.user.id, self.user.username, self.user.email, None, None
)
except Exception as e:
logger.error(f"Error issuing mail: {e}")
def get_key(self) -> str:
"""获取会话密钥"""
return str(self.session.id) if self.session.id else ""
@property
def key_for_event(self) -> str:
"""获取用于事件广播的会话密钥"""
return LoginSessionService.get_key_for_event(self.get_key())
@property
def user_id(self) -> int:
"""获取用户ID"""
return self.user.id

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from collections.abc import Awaitable, Callable from collections.abc import Awaitable, Callable
from typing import TYPE_CHECKING, NamedTuple from typing import TYPE_CHECKING, NamedTuple

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from enum import IntEnum from enum import IntEnum
from typing import Annotated, Any, Literal from typing import Annotated, Any, Literal

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from typing import Any from typing import Any
from pydantic import BaseModel from pydantic import BaseModel

View File

@@ -2,8 +2,6 @@
扩展的 OAuth 响应模型,支持二次验证 扩展的 OAuth 响应模型,支持二次验证
""" """
from __future__ import annotations
from pydantic import BaseModel from pydantic import BaseModel

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from dataclasses import dataclass from dataclasses import dataclass
from datetime import UTC, datetime from datetime import UTC, datetime

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import hashlib import hashlib
import json import json
from typing import Any, Literal, NotRequired, TypedDict from typing import Any, Literal, NotRequired, TypedDict

View File

@@ -1,5 +1,4 @@
# ruff: noqa: ARG002 # ruff: noqa: ARG002
from __future__ import annotations
from abc import abstractmethod from abc import abstractmethod
from enum import Enum from enum import Enum
@@ -161,7 +160,7 @@ class ChannelMessageTeam(ChannelMessageBase):
cls, cls,
message: "ChatMessage", message: "ChatMessage",
user: "User", user: "User",
) -> ChannelMessageTeam: ) -> Self:
from app.database import ChannelType from app.database import ChannelType
return super().init(message, user, [], ChannelType.TEAM) return super().init(message, user, [], ChannelType.TEAM)

View File

@@ -1,4 +1,4 @@
# OAuth 相关模型 # noqa: I002 # OAuth 相关模型
from typing import Annotated, Any, cast from typing import Annotated, Any, cast
from typing_extensions import Doc from typing_extensions import Doc

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import datetime from datetime import datetime
from app.models.mods import APIMod from app.models.mods import APIMod

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from enum import Enum from enum import Enum
from pydantic import BaseModel from pydantic import BaseModel

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from enum import Enum from enum import Enum
from typing import TYPE_CHECKING, Literal, TypedDict, cast from typing import TYPE_CHECKING, Literal, TypedDict, cast

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import datetime from datetime import datetime
from pydantic import BaseModel from pydantic import BaseModel

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import json import json
from app.log import log from app.log import log

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from enum import Enum from enum import Enum
from typing import TypedDict from typing import TypedDict

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import datetime from datetime import datetime
from enum import Enum from enum import Enum
from typing import NotRequired, TypedDict from typing import NotRequired, TypedDict

View File

@@ -2,8 +2,6 @@
用户页面编辑相关的API模型 用户页面编辑相关的API模型
""" """
from __future__ import annotations
from pydantic import BaseModel, Field, field_validator from pydantic import BaseModel, Field, field_validator

View File

@@ -1,7 +1,5 @@
"""V1 API 用户相关模型""" """V1 API 用户相关模型"""
from __future__ import annotations
from pydantic import BaseModel, Field from pydantic import BaseModel, Field

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from pathlib import Path from pathlib import Path
STATIC_DIR = Path(__file__).parent.parent / "static" STATIC_DIR = Path(__file__).parent.parent / "static"

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from .room import create_playlist_room, create_playlist_room_from_api from .room import create_playlist_room, create_playlist_room_from_api
__all__ = [ __all__ = [

View File

@@ -3,8 +3,6 @@
提供从osu!官方获取beatmapset音频预览并缓存的功能 提供从osu!官方获取beatmapset音频预览并缓存的功能
""" """
from __future__ import annotations
from app.log import logger from app.log import logger
from fastapi import HTTPException from fastapi import HTTPException

View File

@@ -4,8 +4,6 @@ BBCode处理服务
支持所有 osu! 官方 BBCode 标签 支持所有 osu! 官方 BBCode 标签
""" """
from __future__ import annotations
import html import html
import re import re
from typing import ClassVar from typing import ClassVar

View File

@@ -3,8 +3,6 @@ Beatmap缓存预取服务
用于提前缓存热门beatmap减少成绩计算时的获取延迟 用于提前缓存热门beatmap减少成绩计算时的获取延迟
""" """
from __future__ import annotations
import asyncio import asyncio
from datetime import timedelta from datetime import timedelta
from typing import TYPE_CHECKING from typing import TYPE_CHECKING

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import asyncio import asyncio
from dataclasses import dataclass from dataclasses import dataclass
from datetime import datetime from datetime import datetime

View File

@@ -3,8 +3,6 @@ Beatmapset缓存服务
用于缓存beatmapset数据减少数据库查询频率 用于缓存beatmapset数据减少数据库查询频率
""" """
from __future__ import annotations
from datetime import datetime from datetime import datetime
import hashlib import hashlib
import json import json

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import timedelta from datetime import timedelta
from enum import Enum from enum import Enum
import math import math

View File

@@ -2,8 +2,6 @@
数据库清理服务 - 清理过期的验证码和会话 数据库清理服务 - 清理过期的验证码和会话
""" """
from __future__ import annotations
from datetime import timedelta from datetime import timedelta
from app.database.auth import OAuthToken from app.database.auth import OAuthToken

View File

@@ -3,8 +3,6 @@
用于异步发送邮件 用于异步发送邮件
""" """
from __future__ import annotations
import asyncio import asyncio
import concurrent.futures import concurrent.futures
from datetime import datetime from datetime import datetime

View File

@@ -2,8 +2,6 @@
邮件验证服务 邮件验证服务
""" """
from __future__ import annotations
from email.mime.multipart import MIMEMultipart from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText from email.mime.text import MIMEText
import secrets import secrets

View File

@@ -2,8 +2,6 @@
用户登录记录服务 用户登录记录服务
""" """
from __future__ import annotations
import asyncio import asyncio
from app.database.user_login_log import UserLoginLog from app.database.user_login_log import UserLoginLog

View File

@@ -2,8 +2,6 @@
密码重置服务 密码重置服务
""" """
from __future__ import annotations
from datetime import datetime from datetime import datetime
import json import json
import secrets import secrets

View File

@@ -3,8 +3,6 @@
用于缓存用户排行榜数据,减轻数据库压力 用于缓存用户排行榜数据,减轻数据库压力
""" """
from __future__ import annotations
import asyncio import asyncio
from datetime import datetime from datetime import datetime
import json import json

View File

@@ -5,8 +5,6 @@
- 支持消息状态同步和故障恢复 - 支持消息状态同步和故障恢复
""" """
from __future__ import annotations
import asyncio import asyncio
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
from datetime import datetime from datetime import datetime

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import timedelta from datetime import timedelta
from app.database.beatmap import Beatmap from app.database.beatmap import Beatmap

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import asyncio import asyncio
from collections.abc import Awaitable, Callable from collections.abc import Awaitable, Callable
from fnmatch import fnmatch from fnmatch import fnmatch

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from app.log import log from app.log import log

View File

@@ -3,8 +3,6 @@
用于缓存用户信息,提供热缓存和实时刷新功能 用于缓存用户信息,提供热缓存和实时刷新功能
""" """
from __future__ import annotations
from datetime import datetime from datetime import datetime
import json import json
from typing import TYPE_CHECKING, Any from typing import TYPE_CHECKING, Any

View File

@@ -2,8 +2,6 @@
邮件验证管理服务 邮件验证管理服务
""" """
from __future__ import annotations
from datetime import timedelta from datetime import timedelta
import secrets import secrets
import string import string

View File

@@ -1,5 +1,5 @@
# ruff: noqa: F401 # ruff: noqa: F401
from __future__ import annotations
from . import ( from . import (
beatmapset_update, beatmapset_update,

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import datetime, timedelta from datetime import datetime, timedelta
from app.dependencies.scheduler import get_scheduler from app.dependencies.scheduler import get_scheduler

View File

@@ -1,7 +1,5 @@
"""缓存相关的 APScheduler 任务入口。""" """缓存相关的 APScheduler 任务入口。"""
from __future__ import annotations
import asyncio import asyncio
from datetime import UTC, timedelta from datetime import UTC, timedelta
from typing import Final from typing import Final

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import timedelta from datetime import timedelta
from app.database import RankHistory, UserStatistics from app.database import RankHistory, UserStatistics

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from app.const import BANCHOBOT_ID from app.const import BANCHOBOT_ID
from app.database.statistics import UserStatistics from app.database.statistics import UserStatistics
from app.database.user import User from app.database.user import User

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from datetime import UTC, timedelta from datetime import UTC, timedelta
import json import json
from math import ceil from math import ceil

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from app.dependencies.database import with_db from app.dependencies.database import with_db
from app.dependencies.scheduler import get_scheduler from app.dependencies.scheduler import get_scheduler
from app.log import logger from app.log import logger

View File

@@ -3,8 +3,6 @@ Scheduled Update Service
Periodically update the MaxMind GeoIP database Periodically update the MaxMind GeoIP database
""" """
from __future__ import annotations
from app.config import settings from app.config import settings
from app.dependencies.geoip import get_geoip_helper from app.dependencies.geoip import get_geoip_helper
from app.dependencies.scheduler import get_scheduler from app.dependencies.scheduler import get_scheduler

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import importlib import importlib
from app.log import logger from app.log import logger

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from app.config import settings from app.config import settings
from app.const import BANCHOBOT_ID from app.const import BANCHOBOT_ID
from app.database.statistics import UserStatistics from app.database.statistics import UserStatistics

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import asyncio import asyncio
import json import json

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from app.calculator import pre_fetch_and_calculate_pp from app.calculator import pre_fetch_and_calculate_pp
from app.database.score import Score, calculate_user_pp from app.database.score import Score, calculate_user_pp
from app.database.statistics import UserStatistics from app.database.statistics import UserStatistics

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import asyncio import asyncio
from collections.abc import Awaitable, Callable, Sequence from collections.abc import Awaitable, Callable, Sequence
from datetime import UTC, datetime from datetime import UTC, datetime

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
from contextlib import asynccontextmanager from contextlib import asynccontextmanager
import json import json
from pathlib import Path from pathlib import Path

View File

@@ -1,5 +1,3 @@
from __future__ import annotations
import asyncio import asyncio
from logging.config import fileConfig from logging.config import fileConfig

View File

@@ -6,8 +6,6 @@ Create Date: 2025-08-10 06:10:08.093591
""" """
from __future__ import annotations
from collections.abc import Sequence from collections.abc import Sequence
from alembic import op from alembic import op

View File

@@ -6,8 +6,6 @@ Create Date: 2025-08-10 14:07:51.749025
""" """
from __future__ import annotations
from collections.abc import Sequence from collections.abc import Sequence
from alembic import op from alembic import op

View File

@@ -6,8 +6,6 @@ Create Date: 2025-08-10 04:30:58.443568
""" """
from __future__ import annotations
from collections.abc import Sequence from collections.abc import Sequence
from alembic import op from alembic import op

View File

@@ -6,8 +6,6 @@ Create Date: 2025-08-11 11:47:11.004301
""" """
from __future__ import annotations
from collections.abc import Sequence from collections.abc import Sequence
from alembic import op from alembic import op

View File

@@ -6,8 +6,6 @@ Create Date: 2025-08-11 08:03:33.739398
""" """
from __future__ import annotations
from collections.abc import Sequence from collections.abc import Sequence
from alembic import op from alembic import op

View File

@@ -6,8 +6,6 @@ Create Date: 2025-08-12 15:12:49.860825
""" """
from __future__ import annotations
from collections.abc import Sequence from collections.abc import Sequence
from alembic import op from alembic import op

View File

@@ -6,8 +6,6 @@ Create Date: 2025-08-12 09:29:12.085060
""" """
from __future__ import annotations
from collections.abc import Sequence from collections.abc import Sequence
from alembic import op from alembic import op

View File

@@ -6,8 +6,6 @@ Create Date: 2025-08-12 13:31:45.315844
""" """
from __future__ import annotations
from collections.abc import Sequence from collections.abc import Sequence
from alembic import op from alembic import op

Some files were not shown because too many files have changed in this diff Show More