diff --git a/.github/scripts/generate_config_doc.py b/.github/scripts/generate_config_doc.py index 0ec74c4..5c53867 100644 --- a/.github/scripts/generate_config_doc.py +++ b/.github/scripts/generate_config_doc.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import datetime from enum import Enum import importlib.util diff --git a/app/achievements/daily_challenge.py b/app/achievements/daily_challenge.py index fcca594..846c1e2 100644 --- a/app/achievements/daily_challenge.py +++ b/app/achievements/daily_challenge.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from functools import partial from app.database.daily_challenge import DailyChallengeStats diff --git a/app/achievements/hush_hush.py b/app/achievements/hush_hush.py index bc9c53f..178b033 100644 --- a/app/achievements/hush_hush.py +++ b/app/achievements/hush_hush.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from datetime import datetime from app.database.beatmap import calculate_beatmap_attributes diff --git a/app/achievements/mods.py b/app/achievements/mods.py index 0f3c728..b6a565c 100644 --- a/app/achievements/mods.py +++ b/app/achievements/mods.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from functools import partial from app.database.score import Beatmap, Score diff --git a/app/achievements/osu_combo.py b/app/achievements/osu_combo.py index 7039bae..a99b48f 100644 --- a/app/achievements/osu_combo.py +++ b/app/achievements/osu_combo.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from functools import partial from app.database.score import Beatmap, Score diff --git a/app/achievements/osu_playcount.py b/app/achievements/osu_playcount.py index b5e1e9b..8d5a250 100644 --- a/app/achievements/osu_playcount.py +++ b/app/achievements/osu_playcount.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from functools import partial from app.database import UserStatistics diff --git a/app/achievements/skill.py b/app/achievements/skill.py index 43993d8..b169541 100644 --- a/app/achievements/skill.py +++ b/app/achievements/skill.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from functools import partial from typing import Literal, cast diff --git a/app/achievements/total_hits.py b/app/achievements/total_hits.py index 93fb2c5..a2214bc 100644 --- a/app/achievements/total_hits.py +++ b/app/achievements/total_hits.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from functools import partial from app.database.score import Beatmap, Score diff --git a/app/auth.py b/app/auth.py index 8bef0a8..7ebc3a2 100644 --- a/app/auth.py +++ b/app/auth.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from datetime import timedelta import hashlib import re diff --git a/app/calculator.py b/app/calculator.py index 7c9eb7c..ffcabec 100644 --- a/app/calculator.py +++ b/app/calculator.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import asyncio from copy import deepcopy from enum import Enum diff --git a/app/config.py b/app/config.py index b09c233..53949aa 100644 --- a/app/config.py +++ b/app/config.py @@ -1,4 +1,3 @@ -# ruff: noqa: I002 from enum import Enum from typing import Annotated, Any diff --git a/app/const.py b/app/const.py index 439bc83..fd5f421 100644 --- a/app/const.py +++ b/app/const.py @@ -1,5 +1,3 @@ -from __future__ import annotations - BANCHOBOT_ID = 2 BACKUP_CODE_LENGTH = 10 diff --git a/app/database/beatmap_tags.py b/app/database/beatmap_tags.py index 69d5a31..f2b97de 100644 --- a/app/database/beatmap_tags.py +++ b/app/database/beatmap_tags.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from sqlmodel import Field, SQLModel diff --git a/app/database/beatmapset_ratings.py b/app/database/beatmapset_ratings.py index 48ab0c1..8b63d88 100644 --- a/app/database/beatmapset_ratings.py +++ b/app/database/beatmapset_ratings.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from app.database.beatmapset import Beatmapset from app.database.user import User diff --git a/app/database/password_reset.py b/app/database/password_reset.py index 2e92f0a..2aa40eb 100644 --- a/app/database/password_reset.py +++ b/app/database/password_reset.py @@ -2,8 +2,6 @@ 密码重置相关数据库模型 """ -from __future__ import annotations - from datetime import datetime from app.utils import utcnow diff --git a/app/dependencies/api_version.py b/app/dependencies/api_version.py index af8489a..75102fb 100644 --- a/app/dependencies/api_version.py +++ b/app/dependencies/api_version.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import Annotated from fastapi import Depends, Header diff --git a/app/dependencies/beatmap_download.py b/app/dependencies/beatmap_download.py index 818dc7e..b395181 100644 --- a/app/dependencies/beatmap_download.py +++ b/app/dependencies/beatmap_download.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import Annotated from app.service.beatmap_download_service import BeatmapDownloadService, download_service diff --git a/app/dependencies/beatmapset_cache.py b/app/dependencies/beatmapset_cache.py index df177e2..3c6af72 100644 --- a/app/dependencies/beatmapset_cache.py +++ b/app/dependencies/beatmapset_cache.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import Annotated from app.dependencies.database import Redis diff --git a/app/dependencies/database.py b/app/dependencies/database.py index 1e0a29a..49c377c 100644 --- a/app/dependencies/database.py +++ b/app/dependencies/database.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from collections.abc import AsyncIterator, Callable from contextlib import asynccontextmanager from contextvars import ContextVar diff --git a/app/dependencies/fetcher.py b/app/dependencies/fetcher.py index be75cc3..9aecbb4 100644 --- a/app/dependencies/fetcher.py +++ b/app/dependencies/fetcher.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import Annotated from app.config import settings diff --git a/app/dependencies/geoip.py b/app/dependencies/geoip.py index 089b90c..c3fd887 100644 --- a/app/dependencies/geoip.py +++ b/app/dependencies/geoip.py @@ -2,8 +2,6 @@ GeoIP dependency for FastAPI """ -from __future__ import annotations - from functools import lru_cache import ipaddress from typing import Annotated diff --git a/app/dependencies/param.py b/app/dependencies/param.py index 9e640bd..4e44f10 100644 --- a/app/dependencies/param.py +++ b/app/dependencies/param.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import Any from fastapi import Request diff --git a/app/dependencies/rate_limit.py b/app/dependencies/rate_limit.py index 45e374e..4733c5a 100644 --- a/app/dependencies/rate_limit.py +++ b/app/dependencies/rate_limit.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from app.config import settings from fastapi import Depends diff --git a/app/dependencies/scheduler.py b/app/dependencies/scheduler.py index 2bcee52..7f6d0a2 100644 --- a/app/dependencies/scheduler.py +++ b/app/dependencies/scheduler.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from datetime import UTC from typing import cast diff --git a/app/dependencies/storage.py b/app/dependencies/storage.py index 413e5b0..bcbe3e4 100644 --- a/app/dependencies/storage.py +++ b/app/dependencies/storage.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import Annotated, cast from app.config import ( diff --git a/app/dependencies/user.py b/app/dependencies/user.py index 7061bcb..fe8aa01 100644 --- a/app/dependencies/user.py +++ b/app/dependencies/user.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import Annotated from app.auth import get_token_by_access_token diff --git a/app/dependencies/user_agent.py b/app/dependencies/user_agent.py index 6f776b1..763807b 100644 --- a/app/dependencies/user_agent.py +++ b/app/dependencies/user_agent.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import Annotated from app.models.model import UserAgentInfo as UserAgentInfoModel diff --git a/app/exceptions/userpage.py b/app/exceptions/userpage.py index f7ee16d..a448673 100644 --- a/app/exceptions/userpage.py +++ b/app/exceptions/userpage.py @@ -2,8 +2,6 @@ 用户页面相关的异常类 """ -from __future__ import annotations - class UserpageError(Exception): """用户页面处理错误基类""" diff --git a/app/fetcher/__init__.py b/app/fetcher/__init__.py index a2390f8..a059473 100644 --- a/app/fetcher/__init__.py +++ b/app/fetcher/__init__.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from .beatmap import BeatmapFetcher from .beatmap_raw import BeatmapRawFetcher from .beatmapset import BeatmapsetFetcher diff --git a/app/fetcher/_base.py b/app/fetcher/_base.py index cf41be0..4f9f7e5 100644 --- a/app/fetcher/_base.py +++ b/app/fetcher/_base.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import asyncio import time from urllib.parse import quote diff --git a/app/fetcher/beatmap.py b/app/fetcher/beatmap.py index 3909572..272f41f 100644 --- a/app/fetcher/beatmap.py +++ b/app/fetcher/beatmap.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from app.database.beatmap import BeatmapResp from app.log import fetcher_logger diff --git a/app/fetcher/beatmap_raw.py b/app/fetcher/beatmap_raw.py index bdf1f90..382f778 100644 --- a/app/fetcher/beatmap_raw.py +++ b/app/fetcher/beatmap_raw.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from app.log import fetcher_logger from ._base import BaseFetcher diff --git a/app/fetcher/beatmapset.py b/app/fetcher/beatmapset.py index a67c6f6..b228930 100644 --- a/app/fetcher/beatmapset.py +++ b/app/fetcher/beatmapset.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import asyncio import base64 import hashlib diff --git a/app/helpers/asset_proxy_helper.py b/app/helpers/asset_proxy_helper.py index 87c68ab..13673ad 100644 --- a/app/helpers/asset_proxy_helper.py +++ b/app/helpers/asset_proxy_helper.py @@ -1,7 +1,5 @@ """资源代理辅助方法与路由装饰器。""" -from __future__ import annotations - from collections.abc import Awaitable, Callable from functools import wraps import re diff --git a/app/helpers/geoip_helper.py b/app/helpers/geoip_helper.py index 12c7c3c..741e4af 100644 --- a/app/helpers/geoip_helper.py +++ b/app/helpers/geoip_helper.py @@ -2,8 +2,6 @@ GeoLite2 Helper Class (asynchronous) """ -from __future__ import annotations - import asyncio from contextlib import suppress import os diff --git a/app/helpers/rate_limiter.py b/app/helpers/rate_limiter.py index 0002e5c..c80088a 100644 --- a/app/helpers/rate_limiter.py +++ b/app/helpers/rate_limiter.py @@ -6,8 +6,6 @@ Rate limiter for osu! API requests to avoid abuse detection. - 建议:每分钟不超过 60 次请求以避免滥用检测 """ -from __future__ import annotations - import asyncio from collections import deque import time diff --git a/app/log.py b/app/log.py index d2c5060..981c154 100644 --- a/app/log.py +++ b/app/log.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import http import inspect import logging diff --git a/app/middleware/__init__.py b/app/middleware/__init__.py index d24fa14..98b7ca2 100644 --- a/app/middleware/__init__.py +++ b/app/middleware/__init__.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from .verify_session import SessionState, VerifySessionMiddleware __all__ = ["SessionState", "VerifySessionMiddleware"] diff --git a/app/middleware/setup.py b/app/middleware/setup.py index 978ccf3..f822ece 100644 --- a/app/middleware/setup.py +++ b/app/middleware/setup.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from app.config import settings from app.middleware.verify_session import VerifySessionMiddleware diff --git a/app/middleware/verify_session.py b/app/middleware/verify_session.py index dee6332..626a5e5 100644 --- a/app/middleware/verify_session.py +++ b/app/middleware/verify_session.py @@ -4,8 +4,6 @@ FastAPI会话验证中间件 基于osu-web的会话验证系统,适配FastAPI框架 """ -from __future__ import annotations - from collections.abc import Callable from typing import ClassVar @@ -28,6 +26,96 @@ from starlette.middleware.base import BaseHTTPMiddleware 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): """会话验证中间件 @@ -192,93 +280,3 @@ class VerifySessionMiddleware(BaseHTTPMiddleware): return JSONResponse( 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 diff --git a/app/models/achievement.py b/app/models/achievement.py index 7b37155..98ee6d6 100644 --- a/app/models/achievement.py +++ b/app/models/achievement.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from collections.abc import Awaitable, Callable from typing import TYPE_CHECKING, NamedTuple diff --git a/app/models/beatmap.py b/app/models/beatmap.py index c4e71b1..068a97f 100644 --- a/app/models/beatmap.py +++ b/app/models/beatmap.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from enum import IntEnum from typing import Annotated, Any, Literal diff --git a/app/models/chat.py b/app/models/chat.py index 116342f..0e2b9da 100644 --- a/app/models/chat.py +++ b/app/models/chat.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import Any from pydantic import BaseModel diff --git a/app/models/extended_auth.py b/app/models/extended_auth.py index 35a3752..c1b9d56 100644 --- a/app/models/extended_auth.py +++ b/app/models/extended_auth.py @@ -2,8 +2,6 @@ 扩展的 OAuth 响应模型,支持二次验证 """ -from __future__ import annotations - from pydantic import BaseModel diff --git a/app/models/model.py b/app/models/model.py index 3224c99..4c28048 100644 --- a/app/models/model.py +++ b/app/models/model.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from dataclasses import dataclass from datetime import UTC, datetime diff --git a/app/models/mods.py b/app/models/mods.py index a928cab..7bc5848 100644 --- a/app/models/mods.py +++ b/app/models/mods.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import hashlib import json from typing import Any, Literal, NotRequired, TypedDict diff --git a/app/models/notification.py b/app/models/notification.py index ceef3b0..96c1929 100644 --- a/app/models/notification.py +++ b/app/models/notification.py @@ -1,5 +1,4 @@ # ruff: noqa: ARG002 -from __future__ import annotations from abc import abstractmethod from enum import Enum @@ -161,7 +160,7 @@ class ChannelMessageTeam(ChannelMessageBase): cls, message: "ChatMessage", user: "User", - ) -> ChannelMessageTeam: + ) -> Self: from app.database import ChannelType return super().init(message, user, [], ChannelType.TEAM) diff --git a/app/models/oauth.py b/app/models/oauth.py index ce4cabf..a2bffaf 100644 --- a/app/models/oauth.py +++ b/app/models/oauth.py @@ -1,4 +1,4 @@ -# OAuth 相关模型 # noqa: I002 +# OAuth 相关模型 from typing import Annotated, Any, cast from typing_extensions import Doc diff --git a/app/models/playlist.py b/app/models/playlist.py index d938f4b..d6432a9 100644 --- a/app/models/playlist.py +++ b/app/models/playlist.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from datetime import datetime from app.models.mods import APIMod diff --git a/app/models/room.py b/app/models/room.py index 3cba32f..9b332a2 100644 --- a/app/models/room.py +++ b/app/models/room.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from enum import Enum from pydantic import BaseModel diff --git a/app/models/score.py b/app/models/score.py index 410e3a1..ed8811e 100644 --- a/app/models/score.py +++ b/app/models/score.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from enum import Enum from typing import TYPE_CHECKING, Literal, TypedDict, cast diff --git a/app/models/stats.py b/app/models/stats.py index ee79ba2..bad20e0 100644 --- a/app/models/stats.py +++ b/app/models/stats.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from datetime import datetime from pydantic import BaseModel diff --git a/app/models/tags.py b/app/models/tags.py index abe728f..ad99687 100644 --- a/app/models/tags.py +++ b/app/models/tags.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import json from app.log import log diff --git a/app/models/totp.py b/app/models/totp.py index d07ec29..318b820 100644 --- a/app/models/totp.py +++ b/app/models/totp.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from enum import Enum from typing import TypedDict diff --git a/app/models/user.py b/app/models/user.py index a564238..a12f7b6 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from datetime import datetime from enum import Enum from typing import NotRequired, TypedDict diff --git a/app/models/userpage.py b/app/models/userpage.py index d7815a1..aeaca94 100644 --- a/app/models/userpage.py +++ b/app/models/userpage.py @@ -2,8 +2,6 @@ 用户页面编辑相关的API模型 """ -from __future__ import annotations - from pydantic import BaseModel, Field, field_validator diff --git a/app/models/v1_user.py b/app/models/v1_user.py index ea7d177..193e8b1 100644 --- a/app/models/v1_user.py +++ b/app/models/v1_user.py @@ -1,7 +1,5 @@ """V1 API 用户相关模型""" -from __future__ import annotations - from pydantic import BaseModel, Field diff --git a/app/path.py b/app/path.py index 63793b2..d21d382 100644 --- a/app/path.py +++ b/app/path.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from pathlib import Path STATIC_DIR = Path(__file__).parent.parent / "static" diff --git a/app/service/__init__.py b/app/service/__init__.py index 8ddddd9..66da036 100644 --- a/app/service/__init__.py +++ b/app/service/__init__.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from .room import create_playlist_room, create_playlist_room_from_api __all__ = [ diff --git a/app/service/audio_proxy_service.py b/app/service/audio_proxy_service.py index 5ff77d9..7018287 100644 --- a/app/service/audio_proxy_service.py +++ b/app/service/audio_proxy_service.py @@ -3,8 +3,6 @@ 提供从osu!官方获取beatmapset音频预览并缓存的功能 """ -from __future__ import annotations - from app.log import logger from fastapi import HTTPException diff --git a/app/service/bbcode_service.py b/app/service/bbcode_service.py index 4e6a9dc..bbacd1e 100644 --- a/app/service/bbcode_service.py +++ b/app/service/bbcode_service.py @@ -4,8 +4,6 @@ BBCode处理服务 支持所有 osu! 官方 BBCode 标签 """ -from __future__ import annotations - import html import re from typing import ClassVar diff --git a/app/service/beatmap_cache_service.py b/app/service/beatmap_cache_service.py index 1a76195..04f3ac2 100644 --- a/app/service/beatmap_cache_service.py +++ b/app/service/beatmap_cache_service.py @@ -3,8 +3,6 @@ Beatmap缓存预取服务 用于提前缓存热门beatmap,减少成绩计算时的获取延迟 """ -from __future__ import annotations - import asyncio from datetime import timedelta from typing import TYPE_CHECKING diff --git a/app/service/beatmap_download_service.py b/app/service/beatmap_download_service.py index 4d82244..5dca318 100644 --- a/app/service/beatmap_download_service.py +++ b/app/service/beatmap_download_service.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import asyncio from dataclasses import dataclass from datetime import datetime diff --git a/app/service/beatmapset_cache_service.py b/app/service/beatmapset_cache_service.py index f255c8c..75fe3fe 100644 --- a/app/service/beatmapset_cache_service.py +++ b/app/service/beatmapset_cache_service.py @@ -3,8 +3,6 @@ Beatmapset缓存服务 用于缓存beatmapset数据,减少数据库查询频率 """ -from __future__ import annotations - from datetime import datetime import hashlib import json diff --git a/app/service/beatmapset_update_service.py b/app/service/beatmapset_update_service.py index 0cc8704..555919f 100644 --- a/app/service/beatmapset_update_service.py +++ b/app/service/beatmapset_update_service.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from datetime import timedelta from enum import Enum import math diff --git a/app/service/database_cleanup_service.py b/app/service/database_cleanup_service.py index 6d80819..01aa1e8 100644 --- a/app/service/database_cleanup_service.py +++ b/app/service/database_cleanup_service.py @@ -2,8 +2,6 @@ 数据库清理服务 - 清理过期的验证码和会话 """ -from __future__ import annotations - from datetime import timedelta from app.database.auth import OAuthToken diff --git a/app/service/email_queue.py b/app/service/email_queue.py index be946fa..93f002b 100644 --- a/app/service/email_queue.py +++ b/app/service/email_queue.py @@ -3,8 +3,6 @@ 用于异步发送邮件 """ -from __future__ import annotations - import asyncio import concurrent.futures from datetime import datetime diff --git a/app/service/email_service.py b/app/service/email_service.py index 8e8314f..6215767 100644 --- a/app/service/email_service.py +++ b/app/service/email_service.py @@ -2,8 +2,6 @@ 邮件验证服务 """ -from __future__ import annotations - from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import secrets diff --git a/app/service/login_log_service.py b/app/service/login_log_service.py index 0570493..f6b3d14 100644 --- a/app/service/login_log_service.py +++ b/app/service/login_log_service.py @@ -2,8 +2,6 @@ 用户登录记录服务 """ -from __future__ import annotations - import asyncio from app.database.user_login_log import UserLoginLog diff --git a/app/service/password_reset_service.py b/app/service/password_reset_service.py index 429840f..5a62bcd 100644 --- a/app/service/password_reset_service.py +++ b/app/service/password_reset_service.py @@ -2,8 +2,6 @@ 密码重置服务 """ -from __future__ import annotations - from datetime import datetime import json import secrets diff --git a/app/service/ranking_cache_service.py b/app/service/ranking_cache_service.py index 149fdab..11dd9da 100644 --- a/app/service/ranking_cache_service.py +++ b/app/service/ranking_cache_service.py @@ -3,8 +3,6 @@ 用于缓存用户排行榜数据,减轻数据库压力 """ -from __future__ import annotations - import asyncio from datetime import datetime import json diff --git a/app/service/redis_message_system.py b/app/service/redis_message_system.py index 2ca6d99..6bf4540 100644 --- a/app/service/redis_message_system.py +++ b/app/service/redis_message_system.py @@ -5,8 +5,6 @@ - 支持消息状态同步和故障恢复 """ -from __future__ import annotations - import asyncio from concurrent.futures import ThreadPoolExecutor from datetime import datetime diff --git a/app/service/room.py b/app/service/room.py index 03320ef..cec7029 100644 --- a/app/service/room.py +++ b/app/service/room.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from datetime import timedelta from app.database.beatmap import Beatmap diff --git a/app/service/subscribers/base.py b/app/service/subscribers/base.py index 89a9e9a..080fa87 100644 --- a/app/service/subscribers/base.py +++ b/app/service/subscribers/base.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import asyncio from collections.abc import Awaitable, Callable from fnmatch import fnmatch diff --git a/app/service/subscribers/chat.py b/app/service/subscribers/chat.py index 9241a7f..449d65e 100644 --- a/app/service/subscribers/chat.py +++ b/app/service/subscribers/chat.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from typing import TYPE_CHECKING from app.log import log diff --git a/app/service/user_cache_service.py b/app/service/user_cache_service.py index 4aef7e6..72ea979 100644 --- a/app/service/user_cache_service.py +++ b/app/service/user_cache_service.py @@ -3,8 +3,6 @@ 用于缓存用户信息,提供热缓存和实时刷新功能 """ -from __future__ import annotations - from datetime import datetime import json from typing import TYPE_CHECKING, Any diff --git a/app/service/verification_service.py b/app/service/verification_service.py index f7cc0ea..134f8e5 100644 --- a/app/service/verification_service.py +++ b/app/service/verification_service.py @@ -2,8 +2,6 @@ 邮件验证管理服务 """ -from __future__ import annotations - from datetime import timedelta import secrets import string diff --git a/app/tasks/__init__.py b/app/tasks/__init__.py index 6b3332a..0d520ae 100644 --- a/app/tasks/__init__.py +++ b/app/tasks/__init__.py @@ -1,5 +1,5 @@ # ruff: noqa: F401 -from __future__ import annotations + from . import ( beatmapset_update, diff --git a/app/tasks/beatmapset_update.py b/app/tasks/beatmapset_update.py index e04e860..ebda7bb 100644 --- a/app/tasks/beatmapset_update.py +++ b/app/tasks/beatmapset_update.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from datetime import datetime, timedelta from app.dependencies.scheduler import get_scheduler diff --git a/app/tasks/cache.py b/app/tasks/cache.py index 21934c9..955a686 100644 --- a/app/tasks/cache.py +++ b/app/tasks/cache.py @@ -1,7 +1,5 @@ """缓存相关的 APScheduler 任务入口。""" -from __future__ import annotations - import asyncio from datetime import UTC, timedelta from typing import Final diff --git a/app/tasks/calculate_all_user_rank.py b/app/tasks/calculate_all_user_rank.py index f742d25..31f2029 100644 --- a/app/tasks/calculate_all_user_rank.py +++ b/app/tasks/calculate_all_user_rank.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from datetime import timedelta from app.database import RankHistory, UserStatistics diff --git a/app/tasks/create_banchobot.py b/app/tasks/create_banchobot.py index 6148ff1..8adfc29 100644 --- a/app/tasks/create_banchobot.py +++ b/app/tasks/create_banchobot.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from app.const import BANCHOBOT_ID from app.database.statistics import UserStatistics from app.database.user import User diff --git a/app/tasks/daily_challenge.py b/app/tasks/daily_challenge.py index 8dd5e1c..cab2da5 100644 --- a/app/tasks/daily_challenge.py +++ b/app/tasks/daily_challenge.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from datetime import UTC, timedelta import json from math import ceil diff --git a/app/tasks/database_cleanup.py b/app/tasks/database_cleanup.py index 264e5c1..9cb7a0d 100644 --- a/app/tasks/database_cleanup.py +++ b/app/tasks/database_cleanup.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from app.dependencies.database import with_db from app.dependencies.scheduler import get_scheduler from app.log import logger diff --git a/app/tasks/geoip.py b/app/tasks/geoip.py index 2868346..e422592 100644 --- a/app/tasks/geoip.py +++ b/app/tasks/geoip.py @@ -3,8 +3,6 @@ Scheduled Update Service Periodically update the MaxMind GeoIP database """ -from __future__ import annotations - from app.config import settings from app.dependencies.geoip import get_geoip_helper from app.dependencies.scheduler import get_scheduler diff --git a/app/tasks/load_achievements.py b/app/tasks/load_achievements.py index e491274..718d912 100644 --- a/app/tasks/load_achievements.py +++ b/app/tasks/load_achievements.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import importlib from app.log import logger diff --git a/app/tasks/osu_rx_statistics.py b/app/tasks/osu_rx_statistics.py index 9b2a796..e21a345 100644 --- a/app/tasks/osu_rx_statistics.py +++ b/app/tasks/osu_rx_statistics.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from app.config import settings from app.const import BANCHOBOT_ID from app.database.statistics import UserStatistics diff --git a/app/tasks/recalculate_banned_beatmap.py b/app/tasks/recalculate_banned_beatmap.py index 0ed4d78..b88e6df 100644 --- a/app/tasks/recalculate_banned_beatmap.py +++ b/app/tasks/recalculate_banned_beatmap.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import asyncio import json diff --git a/app/tasks/recalculate_failed_score.py b/app/tasks/recalculate_failed_score.py index 13b59a2..4da2966 100644 --- a/app/tasks/recalculate_failed_score.py +++ b/app/tasks/recalculate_failed_score.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from app.calculator import pre_fetch_and_calculate_pp from app.database.score import Score, calculate_user_pp from app.database.statistics import UserStatistics diff --git a/app/utils.py b/app/utils.py index 69b3dd7..fce1e87 100644 --- a/app/utils.py +++ b/app/utils.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import asyncio from collections.abc import Awaitable, Callable, Sequence from datetime import UTC, datetime diff --git a/main.py b/main.py index 27089b1..f9f8af7 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,3 @@ -from __future__ import annotations - from contextlib import asynccontextmanager import json from pathlib import Path diff --git a/migrations/env.py b/migrations/env.py index 7fbcb1b..0b5f62f 100644 --- a/migrations/env.py +++ b/migrations/env.py @@ -1,5 +1,3 @@ -from __future__ import annotations - import asyncio from logging.config import fileConfig diff --git a/migrations/versions/2025-08-10_19cdc9ce4dcb_gamemode_add_osurx_osupp.py b/migrations/versions/2025-08-10_19cdc9ce4dcb_gamemode_add_osurx_osupp.py index e06d44b..8b23910 100644 --- a/migrations/versions/2025-08-10_19cdc9ce4dcb_gamemode_add_osurx_osupp.py +++ b/migrations/versions/2025-08-10_19cdc9ce4dcb_gamemode_add_osurx_osupp.py @@ -6,8 +6,6 @@ Create Date: 2025-08-10 06:10:08.093591 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-10_319e5f841dcf_score_support_pin_score.py b/migrations/versions/2025-08-10_319e5f841dcf_score_support_pin_score.py index ceacdec..54ce106 100644 --- a/migrations/versions/2025-08-10_319e5f841dcf_score_support_pin_score.py +++ b/migrations/versions/2025-08-10_319e5f841dcf_score_support_pin_score.py @@ -6,8 +6,6 @@ Create Date: 2025-08-10 14:07:51.749025 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-10_fdb3822a30ba_init.py b/migrations/versions/2025-08-10_fdb3822a30ba_init.py index e15b293..8f026e5 100644 --- a/migrations/versions/2025-08-10_fdb3822a30ba_init.py +++ b/migrations/versions/2025-08-10_fdb3822a30ba_init.py @@ -6,8 +6,6 @@ Create Date: 2025-08-10 04:30:58.443568 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-11_a8669ba11e96_auth_support_custom_client.py b/migrations/versions/2025-08-11_a8669ba11e96_auth_support_custom_client.py index 91b0367..a1efc47 100644 --- a/migrations/versions/2025-08-11_a8669ba11e96_auth_support_custom_client.py +++ b/migrations/versions/2025-08-11_a8669ba11e96_auth_support_custom_client.py @@ -6,8 +6,6 @@ Create Date: 2025-08-11 11:47:11.004301 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-11_aa582c13f905_count_add_replays_watched_counts.py b/migrations/versions/2025-08-11_aa582c13f905_count_add_replays_watched_counts.py index 33c727c..d741b8c 100644 --- a/migrations/versions/2025-08-11_aa582c13f905_count_add_replays_watched_counts.py +++ b/migrations/versions/2025-08-11_aa582c13f905_count_add_replays_watched_counts.py @@ -6,8 +6,6 @@ Create Date: 2025-08-11 08:03:33.739398 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-12_198227d190b8_user_add_events.py b/migrations/versions/2025-08-12_198227d190b8_user_add_events.py index 6f3d619..fc470f8 100644 --- a/migrations/versions/2025-08-12_198227d190b8_user_add_events.py +++ b/migrations/versions/2025-08-12_198227d190b8_user_add_events.py @@ -6,8 +6,6 @@ Create Date: 2025-08-12 15:12:49.860825 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-12_749bb2c2c33a_auth_add_name_description_for_oauth_.py b/migrations/versions/2025-08-12_749bb2c2c33a_auth_add_name_description_for_oauth_.py index ecb6d54..4855e21 100644 --- a/migrations/versions/2025-08-12_749bb2c2c33a_auth_add_name_description_for_oauth_.py +++ b/migrations/versions/2025-08-12_749bb2c2c33a_auth_add_name_description_for_oauth_.py @@ -6,8 +6,6 @@ Create Date: 2025-08-12 09:29:12.085060 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-12_b6a304d96a2d_user_support_rank.py b/migrations/versions/2025-08-12_b6a304d96a2d_user_support_rank.py index 347e238..20c20c8 100644 --- a/migrations/versions/2025-08-12_b6a304d96a2d_user_support_rank.py +++ b/migrations/versions/2025-08-12_b6a304d96a2d_user_support_rank.py @@ -6,8 +6,6 @@ Create Date: 2025-08-12 13:31:45.315844 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-13_59c9a0827de0_beatmap_add_indexes.py b/migrations/versions/2025-08-13_59c9a0827de0_beatmap_add_indexes.py index 9fab9c4..a98d7a6 100644 --- a/migrations/versions/2025-08-13_59c9a0827de0_beatmap_add_indexes.py +++ b/migrations/versions/2025-08-13_59c9a0827de0_beatmap_add_indexes.py @@ -6,8 +6,6 @@ Create Date: 2025-08-13 07:07:52.506510 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-13_881ac7ca01d5_score_add_maximum_statistics.py b/migrations/versions/2025-08-13_881ac7ca01d5_score_add_maximum_statistics.py index 125c6da..b71d240 100644 --- a/migrations/versions/2025-08-13_881ac7ca01d5_score_add_maximum_statistics.py +++ b/migrations/versions/2025-08-13_881ac7ca01d5_score_add_maximum_statistics.py @@ -6,8 +6,6 @@ Create Date: 2025-08-13 03:54:12.283468 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-13_8bab62d764a5_statistics_remove_level_progress.py b/migrations/versions/2025-08-13_8bab62d764a5_statistics_remove_level_progress.py index d799722..0fae42c 100644 --- a/migrations/versions/2025-08-13_8bab62d764a5_statistics_remove_level_progress.py +++ b/migrations/versions/2025-08-13_8bab62d764a5_statistics_remove_level_progress.py @@ -6,8 +6,6 @@ Create Date: 2025-08-13 10:34:03.430039 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-13_9aa4f7c06824_playlist_best_scores_remove_foreign_key_.py b/migrations/versions/2025-08-13_9aa4f7c06824_playlist_best_scores_remove_foreign_key_.py index 37cb1e0..d8abaf0 100644 --- a/migrations/versions/2025-08-13_9aa4f7c06824_playlist_best_scores_remove_foreign_key_.py +++ b/migrations/versions/2025-08-13_9aa4f7c06824_playlist_best_scores_remove_foreign_key_.py @@ -6,8 +6,6 @@ Create Date: 2025-08-13 15:17:53.921545 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-13_ce29ef0a5674_beatmap_make_max_combo_nullable.py b/migrations/versions/2025-08-13_ce29ef0a5674_beatmap_make_max_combo_nullable.py index 87b6613..823dbb5 100644 --- a/migrations/versions/2025-08-13_ce29ef0a5674_beatmap_make_max_combo_nullable.py +++ b/migrations/versions/2025-08-13_ce29ef0a5674_beatmap_make_max_combo_nullable.py @@ -6,8 +6,6 @@ Create Date: 2025-08-13 15:38:59.797780 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-13_f785165a5c0b_convert_event_event_payload_from_str_to_.py b/migrations/versions/2025-08-13_f785165a5c0b_convert_event_event_payload_from_str_to_.py index a70efbb..0520fae 100644 --- a/migrations/versions/2025-08-13_f785165a5c0b_convert_event_event_payload_from_str_to_.py +++ b/migrations/versions/2025-08-13_f785165a5c0b_convert_event_event_payload_from_str_to_.py @@ -6,8 +6,6 @@ Create Date: 2025-08-13 06:02:11.911557 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-14_7e9d5e012d37_auth_add_v1_keys_table.py b/migrations/versions/2025-08-14_7e9d5e012d37_auth_add_v1_keys_table.py index e5bdc88..4e4b25d 100644 --- a/migrations/versions/2025-08-14_7e9d5e012d37_auth_add_v1_keys_table.py +++ b/migrations/versions/2025-08-14_7e9d5e012d37_auth_add_v1_keys_table.py @@ -6,8 +6,6 @@ Create Date: 2025-08-14 08:39:51.725121 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-15_951a2188e691_score_add_rx_for_taiko_catch.py b/migrations/versions/2025-08-15_951a2188e691_score_add_rx_for_taiko_catch.py index e165b0f..bf5d140 100644 --- a/migrations/versions/2025-08-15_951a2188e691_score_add_rx_for_taiko_catch.py +++ b/migrations/versions/2025-08-15_951a2188e691_score_add_rx_for_taiko_catch.py @@ -6,8 +6,6 @@ Create Date: 2025-08-15 04:38:07.595003 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-15_9f6b27e8ea51_add_table_banned_beatmaps.py b/migrations/versions/2025-08-15_9f6b27e8ea51_add_table_banned_beatmaps.py index 9568433..a7277dc 100644 --- a/migrations/versions/2025-08-15_9f6b27e8ea51_add_table_banned_beatmaps.py +++ b/migrations/versions/2025-08-15_9f6b27e8ea51_add_table_banned_beatmaps.py @@ -6,8 +6,6 @@ Create Date: 2025-08-15 07:23:25.645360 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-15_dd33d89aa2c2_chat_add_chat.py b/migrations/versions/2025-08-15_dd33d89aa2c2_chat_add_chat.py index 973c380..ee44fe1 100644 --- a/migrations/versions/2025-08-15_dd33d89aa2c2_chat_add_chat.py +++ b/migrations/versions/2025-08-15_dd33d89aa2c2_chat_add_chat.py @@ -6,8 +6,6 @@ Create Date: 2025-08-15 14:22:34.775877 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-16_df9f725a077c_room_add_channel_id.py b/migrations/versions/2025-08-16_df9f725a077c_room_add_channel_id.py index 1125cba..b3a4bf0 100644 --- a/migrations/versions/2025-08-16_df9f725a077c_room_add_channel_id.py +++ b/migrations/versions/2025-08-16_df9f725a077c_room_add_channel_id.py @@ -6,8 +6,6 @@ Create Date: 2025-08-16 08:05:28.748265 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-18_2dcd04d3f4dc_fix_user_login_log_table_name.py b/migrations/versions/2025-08-18_2dcd04d3f4dc_fix_user_login_log_table_name.py index 52cc20e..9802aae 100644 --- a/migrations/versions/2025-08-18_2dcd04d3f4dc_fix_user_login_log_table_name.py +++ b/migrations/versions/2025-08-18_2dcd04d3f4dc_fix_user_login_log_table_name.py @@ -6,8 +6,6 @@ Create Date: 2025-08-18 00:07:06.886879 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-18_2fcfc28846c1_beatmap_add_failtime.py b/migrations/versions/2025-08-18_2fcfc28846c1_beatmap_add_failtime.py index 112d93d..3936d34 100644 --- a/migrations/versions/2025-08-18_2fcfc28846c1_beatmap_add_failtime.py +++ b/migrations/versions/2025-08-18_2fcfc28846c1_beatmap_add_failtime.py @@ -6,8 +6,6 @@ Create Date: 2025-08-18 06:06:30.929740 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-18_3eef4794ded1_add_user_login_log_table.py b/migrations/versions/2025-08-18_3eef4794ded1_add_user_login_log_table.py index 2228548..bd901b8 100644 --- a/migrations/versions/2025-08-18_3eef4794ded1_add_user_login_log_table.py +++ b/migrations/versions/2025-08-18_3eef4794ded1_add_user_login_log_table.py @@ -6,8 +6,6 @@ Create Date: 2025-08-18 00:00:11.369944 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-21_4f46c43d8601_notification_add_notification.py b/migrations/versions/2025-08-21_4f46c43d8601_notification_add_notification.py index f718c47..07f9a78 100644 --- a/migrations/versions/2025-08-21_4f46c43d8601_notification_add_notification.py +++ b/migrations/versions/2025-08-21_4f46c43d8601_notification_add_notification.py @@ -6,8 +6,6 @@ Create Date: 2025-08-21 07:03:45.813547 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-21_e96a649e18ca_achievement_remove_primary_key_.py b/migrations/versions/2025-08-21_e96a649e18ca_achievement_remove_primary_key_.py index bd02c7e..cba69ba 100644 --- a/migrations/versions/2025-08-21_e96a649e18ca_achievement_remove_primary_key_.py +++ b/migrations/versions/2025-08-21_e96a649e18ca_achievement_remove_primary_key_.py @@ -6,8 +6,6 @@ Create Date: 2025-08-21 08:03:00.670670 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-22_0f96348cdfd2_add_email_verification_tables.py b/migrations/versions/2025-08-22_0f96348cdfd2_add_email_verification_tables.py index c71f03a..daeb861 100644 --- a/migrations/versions/2025-08-22_0f96348cdfd2_add_email_verification_tables.py +++ b/migrations/versions/2025-08-22_0f96348cdfd2_add_email_verification_tables.py @@ -6,8 +6,6 @@ Create Date: 2025-08-22 07:26:59.129564 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-22_178873984b22_daily_challenge_add_last_day_streak.py b/migrations/versions/2025-08-22_178873984b22_daily_challenge_add_last_day_streak.py index f488ded..9ad8caf 100644 --- a/migrations/versions/2025-08-22_178873984b22_daily_challenge_add_last_day_streak.py +++ b/migrations/versions/2025-08-22_178873984b22_daily_challenge_add_last_day_streak.py @@ -6,8 +6,6 @@ Create Date: 2025-08-22 13:34:31.282236 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-22_5b76689f6e4b_increase_the_length_limit_of_the_user_.py b/migrations/versions/2025-08-22_5b76689f6e4b_increase_the_length_limit_of_the_user_.py index fdcec41..f520ff6 100644 --- a/migrations/versions/2025-08-22_5b76689f6e4b_increase_the_length_limit_of_the_user_.py +++ b/migrations/versions/2025-08-22_5b76689f6e4b_increase_the_length_limit_of_the_user_.py @@ -6,8 +6,6 @@ Create Date: 2025-08-22 15:14:59.242274 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-22_65e7dc8d5905_team_add_team_request_table.py b/migrations/versions/2025-08-22_65e7dc8d5905_team_add_team_request_table.py index fda8536..0beee51 100644 --- a/migrations/versions/2025-08-22_65e7dc8d5905_team_add_team_request_table.py +++ b/migrations/versions/2025-08-22_65e7dc8d5905_team_add_team_request_table.py @@ -6,8 +6,6 @@ Create Date: 2025-08-22 03:47:57.870398 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-22_d103d442dc24_add_password_reset_table.py b/migrations/versions/2025-08-22_d103d442dc24_add_password_reset_table.py index aeba732..e2ffa5b 100644 --- a/migrations/versions/2025-08-22_d103d442dc24_add_password_reset_table.py +++ b/migrations/versions/2025-08-22_d103d442dc24_add_password_reset_table.py @@ -7,8 +7,6 @@ Create Date: 2025-08-22 08:27:58.468119 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-23_57bacf936413_feat_db_add_password_column_to_rooms_.py b/migrations/versions/2025-08-23_57bacf936413_feat_db_add_password_column_to_rooms_.py index d778ab8..d235d9b 100644 --- a/migrations/versions/2025-08-23_57bacf936413_feat_db_add_password_column_to_rooms_.py +++ b/migrations/versions/2025-08-23_57bacf936413_feat_db_add_password_column_to_rooms_.py @@ -6,8 +6,6 @@ Create Date: 2025-08-23 18:45:03.009632 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-24_34a563187e47_score_add_processed.py b/migrations/versions/2025-08-24_34a563187e47_score_add_processed.py index cf7e961..ef3cf4d 100644 --- a/migrations/versions/2025-08-24_34a563187e47_score_add_processed.py +++ b/migrations/versions/2025-08-24_34a563187e47_score_add_processed.py @@ -6,8 +6,6 @@ Create Date: 2025-08-24 15:06:37.226068 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-24_3f890a76f036_add_id_data.py b/migrations/versions/2025-08-24_3f890a76f036_add_id_data.py index 614039d..6fe74ee 100644 --- a/migrations/versions/2025-08-24_3f890a76f036_add_id_data.py +++ b/migrations/versions/2025-08-24_3f890a76f036_add_id_data.py @@ -6,8 +6,6 @@ Create Date: 2025-08-24 04:00:02.063347 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-26_af88493881eb_user_change_collation_for_username_and_.py b/migrations/versions/2025-08-26_af88493881eb_user_change_collation_for_username_and_.py index 6bdaece..7d0c8bf 100644 --- a/migrations/versions/2025-08-26_af88493881eb_user_change_collation_for_username_and_.py +++ b/migrations/versions/2025-08-26_af88493881eb_user_change_collation_for_username_and_.py @@ -6,8 +6,6 @@ Create Date: 2025-08-26 11:31:07.183273 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-28_24a32515292d_add_beatmap_ratings.py b/migrations/versions/2025-08-28_24a32515292d_add_beatmap_ratings.py index e47e9a8..efa5753 100644 --- a/migrations/versions/2025-08-28_24a32515292d_add_beatmap_ratings.py +++ b/migrations/versions/2025-08-28_24a32515292d_add_beatmap_ratings.py @@ -6,8 +6,6 @@ Create Date: 2025-08-28 11:36:17.874090 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-08-29_ebaa317ad928_add_beatmap_tag.py b/migrations/versions/2025-08-29_ebaa317ad928_add_beatmap_tag.py index 4d0d5bb..489b981 100644 --- a/migrations/versions/2025-08-29_ebaa317ad928_add_beatmap_tag.py +++ b/migrations/versions/2025-08-29_ebaa317ad928_add_beatmap_tag.py @@ -7,8 +7,6 @@ Create Date: 2025-08-29 12:29:23.267557 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-09-20_15e3a9a05b67_auth_add_totp_keys.py b/migrations/versions/2025-09-20_15e3a9a05b67_auth_add_totp_keys.py index 1eb0eee..2860b53 100644 --- a/migrations/versions/2025-09-20_15e3a9a05b67_auth_add_totp_keys.py +++ b/migrations/versions/2025-09-20_15e3a9a05b67_auth_add_totp_keys.py @@ -6,8 +6,6 @@ Create Date: 2025-09-20 11:27:58.485299 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-09-21_fe8e9f3da298_login_sessions_remove_session_token_add_.py b/migrations/versions/2025-09-21_fe8e9f3da298_login_sessions_remove_session_token_add_.py index 4f4d0c9..16f6c1c 100644 --- a/migrations/versions/2025-09-21_fe8e9f3da298_login_sessions_remove_session_token_add_.py +++ b/migrations/versions/2025-09-21_fe8e9f3da298_login_sessions_remove_session_token_add_.py @@ -6,8 +6,6 @@ Create Date: 2025-09-21 02:30:58.233846 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-09-24_9419272e4c85_feat_db_add_session_verification_fields_.py b/migrations/versions/2025-09-24_9419272e4c85_feat_db_add_session_verification_fields_.py index c1f06f0..ca0a7e1 100644 --- a/migrations/versions/2025-09-24_9419272e4c85_feat_db_add_session_verification_fields_.py +++ b/migrations/versions/2025-09-24_9419272e4c85_feat_db_add_session_verification_fields_.py @@ -6,8 +6,6 @@ Create Date: 2025-09-24 00:46:57.367742 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-09-30_dc2087561edf_score_save_ranked_into_database.py b/migrations/versions/2025-09-30_dc2087561edf_score_save_ranked_into_database.py index cba3022..f2eec69 100644 --- a/migrations/versions/2025-09-30_dc2087561edf_score_save_ranked_into_database.py +++ b/migrations/versions/2025-09-30_dc2087561edf_score_save_ranked_into_database.py @@ -6,8 +6,6 @@ Create Date: 2025-09-30 10:44:25.286498 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-10-01_2885978490dc_sync_add_beatmap_sync_table.py b/migrations/versions/2025-10-01_2885978490dc_sync_add_beatmap_sync_table.py index 3e0ea13..9327e64 100644 --- a/migrations/versions/2025-10-01_2885978490dc_sync_add_beatmap_sync_table.py +++ b/migrations/versions/2025-10-01_2885978490dc_sync_add_beatmap_sync_table.py @@ -6,8 +6,6 @@ Create Date: 2025-10-01 12:19:50.485318 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-10-01_b1ac2154bd0d_sync_add_updated_at.py b/migrations/versions/2025-10-01_b1ac2154bd0d_sync_add_updated_at.py index 679a8bb..6bbdff9 100644 --- a/migrations/versions/2025-10-01_b1ac2154bd0d_sync_add_updated_at.py +++ b/migrations/versions/2025-10-01_b1ac2154bd0d_sync_add_updated_at.py @@ -6,8 +6,6 @@ Create Date: 2025-10-01 14:56:08.539694 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-10-02_72a9b8f3f863_session_support_multi_session.py b/migrations/versions/2025-10-02_72a9b8f3f863_session_support_multi_session.py index 6e47be4..b7e33e1 100644 --- a/migrations/versions/2025-10-02_72a9b8f3f863_session_support_multi_session.py +++ b/migrations/versions/2025-10-02_72a9b8f3f863_session_support_multi_session.py @@ -6,8 +6,6 @@ Create Date: 2025-10-02 07:17:19.297498 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-10-02_7fe1319250c5_auth_add_refresh_token_expires_at.py b/migrations/versions/2025-10-02_7fe1319250c5_auth_add_refresh_token_expires_at.py index 07f8bc9..0304981 100644 --- a/migrations/versions/2025-10-02_7fe1319250c5_auth_add_refresh_token_expires_at.py +++ b/migrations/versions/2025-10-02_7fe1319250c5_auth_add_refresh_token_expires_at.py @@ -6,8 +6,6 @@ Create Date: 2025-10-02 10:50:21.169065 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/migrations/versions/2025-10-02_9556cd2ec11f_session_add_device_id_to_loginsession.py b/migrations/versions/2025-10-02_9556cd2ec11f_session_add_device_id_to_loginsession.py index bb258a7..04ee5f3 100644 --- a/migrations/versions/2025-10-02_9556cd2ec11f_session_add_device_id_to_loginsession.py +++ b/migrations/versions/2025-10-02_9556cd2ec11f_session_add_device_id_to_loginsession.py @@ -6,8 +6,6 @@ Create Date: 2025-10-02 11:03:09.803140 """ -from __future__ import annotations - from collections.abc import Sequence from alembic import op diff --git a/pyproject.toml b/pyproject.toml index 4170f81..57a8b41 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -81,12 +81,11 @@ ignore = [ ] [tool.ruff.lint.extend-per-file-ignores] -"app/database/**/*.py" = ["I002"] "tools/*.py" = ["PTH", "INP001"] "migrations/**/*.py" = ["INP001"] ".github/**/*.py" = ["INP001"] "app/achievements/*.py" = ["INP001", "ARG"] -"app/router/**/*.py" = ["ARG001", "I002"] +"app/router/**/*.py" = ["ARG001"] [tool.ruff.lint.isort] force-sort-within-sections = true @@ -94,7 +93,6 @@ force-wrap-aliases = true combine-as-imports = true order-by-type = true relative-imports-order = "closest-to-furthest" -required-imports = ["from __future__ import annotations"] extra-standard-library = ["typing_extensions"] section-order = ["future", "standard-library", "first-party", "local-folder", "third-party"]