Skip to content

Commit

Permalink
style: 使用更多 Ruff 静态检查规则优化代码风格
Browse files Browse the repository at this point in the history
  • Loading branch information
FHU-yezi committed Dec 2, 2024
1 parent dbba657 commit fb6d437
Show file tree
Hide file tree
Showing 16 changed files with 162 additions and 120 deletions.
22 changes: 12 additions & 10 deletions backend/api/v1/articles.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from __future__ import annotations

from collections import Counter
from datetime import date, datetime, timedelta
from typing import Annotated, Optional
from typing import Annotated

from jkit.article import Article
from jkit.constants import ARTICLE_SLUG_REGEX
Expand Down Expand Up @@ -31,7 +33,7 @@
)


async def get_earliest_can_recommend_date(author_slug: str) -> Optional[date]:
async def get_earliest_can_recommend_date(author_slug: str) -> date | None:
counted_article_slugs = set()

latest_onrank_record = await ArticleEarningRankingRecord.get_latest_record(
Expand All @@ -40,7 +42,7 @@ async def get_earliest_can_recommend_date(author_slug: str) -> Optional[date]:
if not latest_onrank_record:
return None

interval_days = 10 if latest_onrank_record.ranking <= 30 else 7
interval_days = 10 if latest_onrank_record.ranking <= 30 else 7 # noqa: PLR2004
counted_article_slugs.add(latest_onrank_record.slug)

now_record = latest_onrank_record
Expand All @@ -57,15 +59,15 @@ async def get_earliest_can_recommend_date(author_slug: str) -> Optional[date]:
counted_article_slugs.add(pervious_record.slug)

if (
now_record.ranking <= 30
and (now_record.date - pervious_record.date).days + 1 >= 10
now_record.ranking <= 30 # noqa: PLR2004
and (now_record.date - pervious_record.date).days + 1 >= 10 # noqa: PLR2004
) or (
now_record.ranking > 30
and (now_record.date - pervious_record.date).days + 1 >= 7
now_record.ranking > 30 # noqa: PLR2004
and (now_record.date - pervious_record.date).days + 1 >= 7 # noqa: PLR2004
):
return latest_onrank_record.date + timedelta(days=interval_days)

if pervious_record.ranking <= 30:
if pervious_record.ranking <= 30: # noqa: PLR2004
interval_days += 10
else:
interval_days += 7
Expand Down Expand Up @@ -135,7 +137,7 @@ class GetLPRecommendCheckResponse(Struct, **RESPONSE_STRUCT_CONFIG):
article_title: str
can_recommend_now: bool
FP_reward: float = field(name="FPReward")
next_can_recommend_date: Optional[datetime]
next_can_recommend_date: datetime | None


@get(
Expand Down Expand Up @@ -184,7 +186,7 @@ async def get_LP_recommend_check_handler( # noqa: N802
article_fp_reward = article_info.earned_fp_amount
article_next_can_recommend_date = await get_earliest_can_recommend_date(author_slug)

can_recommend_now = article_fp_reward < 35 and (
can_recommend_now = article_fp_reward < 35 and ( # noqa: PLR2004
not article_next_can_recommend_date
or article_next_can_recommend_date <= datetime.now().date()
)
Expand Down
12 changes: 7 additions & 5 deletions backend/api/v1/jpep/ftn_macket.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from __future__ import annotations

from asyncio import gather
from datetime import datetime
from typing import Annotated, Literal, Optional
from typing import Annotated, Literal

from jkit.jpep.platform_settings import PlatformSettings
from litestar import Response, Router, get
Expand Down Expand Up @@ -55,8 +57,8 @@ async def get_rules_handler() -> Response:


class GetCurrentPriceResponse(Struct, **RESPONSE_STRUCT_CONFIG):
buy_price: Optional[float]
sell_price: Optional[float]
buy_price: float | None
sell_price: float | None


@get(
Expand All @@ -81,8 +83,8 @@ async def get_current_price_handler() -> Response:


class GetCurrentAmountResponse(Struct, **RESPONSE_STRUCT_CONFIG):
buy_amount: Optional[int]
sell_amount: Optional[int]
buy_amount: int | None
sell_amount: int | None


@get(
Expand Down
20 changes: 9 additions & 11 deletions backend/api/v1/lottery.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from __future__ import annotations

from asyncio import gather
from datetime import datetime, timedelta
from typing import Annotated, Literal, Optional
from typing import Annotated, Literal

from jkit.identifier_convert import user_slug_to_url
from litestar import Response, Router, get
Expand All @@ -25,7 +27,7 @@
"锦鲤头像框1年",
]

RANGE_TO_TIMEDELTA: dict[str, Optional[timedelta]] = {
RANGE_TO_TIMEDELTA: dict[str, timedelta | None] = {
"1d": timedelta(days=1),
"7d": timedelta(days=7),
"30d": timedelta(days=30),
Expand All @@ -37,17 +39,13 @@
def get_summary_average_wins_count_per_winner(
wins_count: dict[str, int], winners_count: dict[str, int]
) -> dict[str, float]:
result: dict[str, float] = {}
result: dict[str, float] = dict.fromkeys(wins_count.keys(), 0.0)

for reward_name in wins_count:
# 该奖项无人中奖
if wins_count[reward_name] == 0:
result[reward_name] = 0
for reward_name, wins in wins_count.items():
if winners_count[reward_name] == 0:
continue

result[reward_name] = round(
wins_count[reward_name] / winners_count[reward_name], 3
)
result[reward_name] = round(wins / winners_count[reward_name], 3)

return result

Expand Down Expand Up @@ -115,7 +113,7 @@ async def get_records_handler(
offset: Annotated[int, Parameter(description="分页偏移", ge=0)] = 0,
limit: Annotated[int, Parameter(description="结果数量", gt=0, lt=100)] = 20,
excluded_awards: Annotated[
Optional[list[str]], Parameter(description="排除奖项列表", max_items=10)
list[str] | None, Parameter(description="排除奖项列表", max_items=10)
] = None,
) -> Response:
records: list[GetRecordsItem] = []
Expand Down
14 changes: 8 additions & 6 deletions backend/api/v1/status.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from datetime import datetime
from typing import Annotated, Optional
from typing import Annotated

from litestar import Response, Router, get
from litestar.params import Parameter
Expand Down Expand Up @@ -51,11 +53,11 @@ async def get_handler() -> Response:

class GetToolStatusResponse(Struct, **RESPONSE_STRUCT_CONFIG):
status: StatusEnum
reason: Optional[str]
last_update_time: Optional[datetime]
data_update_freq: Optional[str]
data_count: Optional[int]
data_source: Optional[dict[str, str]]
reason: str | None
last_update_time: datetime | None
data_update_freq: str | None
data_count: int | None
data_source: dict[str, str] | None


@get(
Expand Down
6 changes: 4 additions & 2 deletions backend/api/v1/thanks.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from datetime import datetime
from typing import Annotated, Literal, Optional
from typing import Annotated, Literal

from litestar import Response, Router, get
from litestar.params import Parameter
Expand Down Expand Up @@ -78,7 +80,7 @@ class GetTechStacksResponse(Struct, **RESPONSE_STRUCT_CONFIG):
)
async def get_tech_stacks_handler(
scope_: Annotated[
Optional[Literal["frontend", "backend", "toolchain"]],
Literal["frontend", "backend", "toolchain"] | None,
Parameter(description="技术栈范围"),
] = None,
) -> Response:
Expand Down
24 changes: 13 additions & 11 deletions backend/api/v1/users.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from __future__ import annotations

from datetime import datetime
from typing import Annotated, Literal, Optional
from typing import Annotated, Literal

from jkit.constants import USER_SLUG_REGEX
from jkit.exceptions import ResourceUnavailableError
Expand Down Expand Up @@ -28,8 +30,8 @@
class GetVipInfoResponse(Struct, **RESPONSE_STRUCT_CONFIG):
user_name: str
is_vip: bool = field(name="isVIP")
type: Optional[Literal["铜牌", "银牌", "金牌", "白金"]]
expire_date: Optional[datetime]
type: Literal["铜牌", "银牌", "金牌", "白金"] | None
expire_date: datetime | None


@get(
Expand Down Expand Up @@ -103,7 +105,7 @@ async def get_lottery_win_records(
offset: Annotated[int, Parameter(description="分页偏移", ge=0)] = 0,
limit: Annotated[int, Parameter(description="结果数量", gt=0, lt=100)] = 20,
excluded_awards: Annotated[
Optional[list[str]], Parameter(description="排除奖项列表", max_items=10)
list[str] | None, Parameter(description="排除奖项列表", max_items=10)
] = None,
) -> Response:
if not is_user_slug(user_slug):
Expand Down Expand Up @@ -288,11 +290,11 @@ async def get_on_article_rank_summary_handler(
limit=100000, # TODO
):
total += 1
if item.ranking <= 10:
if item.ranking <= 10: # noqa: PLR2004
top10 += 1
if item.ranking <= 30:
if item.ranking <= 30: # noqa: PLR2004
top30 += 1
if item.ranking <= 50:
if item.ranking <= 50: # noqa: PLR2004
top50 += 1

return success(
Expand Down Expand Up @@ -334,11 +336,11 @@ async def get_on_article_rank_summary_by_user_name_handler(
limit=100000, # TODO
):
total += 1
if item.ranking <= 10:
if item.ranking <= 10: # noqa: PLR2004
top10 += 1
if item.ranking <= 30:
if item.ranking <= 30: # noqa: PLR2004
top30 += 1
if item.ranking <= 50:
if item.ranking <= 50: # noqa: PLR2004
top50 += 1

return success(
Expand Down Expand Up @@ -377,7 +379,7 @@ async def get_name_autocomplete_handler(

class GetHistoryNamesOnArticleRankSummaryResponse(Struct, **RESPONSE_STRUCT_CONFIG):
history_names_onrank_summary: dict[str, int]
user_url: Optional[str] = None
user_url: str | None = None


@get(
Expand Down
22 changes: 12 additions & 10 deletions backend/models/jianshu/article_earning_ranking_record.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from __future__ import annotations

from collections.abc import AsyncGenerator
from datetime import date
from typing import Literal, Optional
from typing import Literal

from psycopg import sql
from sshared.postgres import Table
Expand All @@ -12,9 +14,9 @@
class ArticleEarningRankingRecord(Table, frozen=True):
date: date
ranking: PositiveInt
slug: Optional[NonEmptyStr]
title: Optional[NonEmptyStr]
author_slug: Optional[NonEmptyStr]
slug: NonEmptyStr | None
title: NonEmptyStr | None
author_slug: NonEmptyStr | None

author_earning: PositiveFloat
voter_earning: PositiveFloat
Expand All @@ -27,7 +29,7 @@ async def iter_by_author_slug(
order_direction: Literal["ASC", "DESC"],
offset: int,
limit: int,
) -> AsyncGenerator["ArticleEarningRankingRecord"]:
) -> AsyncGenerator[ArticleEarningRankingRecord]:
async with jianshu_pool.get_conn() as conn:
if order_direction == "ASC":
cursor = await conn.execute(
Expand Down Expand Up @@ -61,8 +63,8 @@ async def iter_by_author_slug(

@classmethod
async def get_latest_record(
cls, author_slug: str, minimum_ranking: Optional[int] = None
) -> Optional["ArticleEarningRankingRecord"]:
cls, author_slug: str, minimum_ranking: int | None = None
) -> ArticleEarningRankingRecord | None:
async with jianshu_pool.get_conn() as conn:
cursor = await conn.execute(
"SELECT date, ranking, slug, title, author_earning, voter_earning "
Expand All @@ -88,9 +90,9 @@ async def get_latest_record(
@classmethod
async def get_pervious_record(
cls,
base_record: "ArticleEarningRankingRecord",
minimum_ranking: Optional[int] = None,
) -> Optional["ArticleEarningRankingRecord"]:
base_record: ArticleEarningRankingRecord,
minimum_ranking: int | None = None,
) -> ArticleEarningRankingRecord | None:
async with jianshu_pool.get_conn() as conn:
cursor = await conn.execute(
"SELECT date, ranking, slug, title, author_earning, voter_earning "
Expand Down
11 changes: 6 additions & 5 deletions backend/models/jianshu/lottery_win_record.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import annotations

from collections.abc import AsyncGenerator
from datetime import datetime, timedelta
from typing import Optional

from sshared.postgres import Table
from sshared.strict_struct import NonEmptyStr, PositiveInt
Expand All @@ -25,7 +26,7 @@ class LotteryWinRecord(Table, frozen=True):
@classmethod
async def iter_by_excluded_awards(
cls, excluded_awards: list[str], offset: int, limit: int
) -> AsyncGenerator["LotteryWinRecord"]:
) -> AsyncGenerator[LotteryWinRecord]:
async with jianshu_pool.get_conn() as conn:
cursor = await conn.execute(
"SELECT id, time, user_slug, award_name FROM lottery_win_records "
Expand All @@ -44,7 +45,7 @@ async def iter_by_excluded_awards(
@classmethod
async def iter_by_slug_and_excluded_awards(
cls, slug: str, excluded_awards: list[str], offset: int, limit: int
) -> AsyncGenerator["LotteryWinRecord"]:
) -> AsyncGenerator[LotteryWinRecord]:
async with jianshu_pool.get_conn() as conn:
cursor = await conn.execute(
"SELECT id, time, award_name FROM lottery_win_records "
Expand All @@ -62,7 +63,7 @@ async def iter_by_slug_and_excluded_awards(
)

@classmethod
async def get_summary_wins_count(cls, td: Optional[timedelta]) -> dict[str, int]:
async def get_summary_wins_count(cls, td: timedelta | None) -> dict[str, int]:
async with jianshu_pool.get_conn() as conn:
if td:
cursor = await conn.execute(
Expand All @@ -81,7 +82,7 @@ async def get_summary_wins_count(cls, td: Optional[timedelta]) -> dict[str, int]
return result

@classmethod
async def get_summary_winners_count(cls, td: Optional[timedelta]) -> dict[str, int]:
async def get_summary_winners_count(cls, td: timedelta | None) -> dict[str, int]:
async with jianshu_pool.get_conn() as conn:
if td:
cursor = await conn.execute(
Expand Down
Loading

0 comments on commit fb6d437

Please sign in to comment.