Skip to content

Commit

Permalink
feat: 使用 Literal 替代 Enum
Browse files Browse the repository at this point in the history
  • Loading branch information
FHU-yezi committed Jan 31, 2025
1 parent f9dd90a commit 4ad311a
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 41 deletions.
16 changes: 6 additions & 10 deletions backend/api/v1/status.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
success,
)

from models.tool import StatusEnum, Tool
from models.tool import StatusType, Tool
from utils.config import CONFIG
from utils.tools_status import (
get_data_count,
Expand All @@ -41,18 +41,14 @@ async def get_handler() -> Response:
return success(
data=GetResponse(
version=VERSION,
downgraded_tools=list(
await Tool.get_tools_slugs_by_status(StatusEnum.DOWNGRADED)
),
unavailable_tools=list(
await Tool.get_tools_slugs_by_status(StatusEnum.UNAVAILABLE)
),
downgraded_tools=list(await Tool.get_tools_slugs_by_status("DOWNGRADED")),
unavailable_tools=list(await Tool.get_tools_slugs_by_status("UNAVAILABLE")),
)
)


class GetToolStatusResponse(Struct, **RESPONSE_STRUCT_CONFIG):
status: StatusEnum
status: StatusType
reason: str | None
last_update_time: datetime | None
data_update_freq: str | None
Expand Down Expand Up @@ -85,15 +81,15 @@ async def get_tool_status_handler(
# 处理未填写 word_split_access_key 配置项的情况
if (
tool_name == "article-wordcloud-generator"
and tool.status == StatusEnum.NORMAL.value
and tool.status == "NORMAL"
and not (
CONFIG.word_split_access_key.access_key_id
and CONFIG.word_split_access_key.access_key_secret
)
):
return success(
data=GetToolStatusResponse(
status=StatusEnum.UNAVAILABLE,
status="UNAVAILABLE",
reason="后端未设置分词服务凭据",
last_update_time=last_update_time,
data_update_freq=tool.data_update_freq,
Expand Down
8 changes: 4 additions & 4 deletions backend/api/v1/thanks.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
)

from models.debug_project_record import DebugProjectRecord
from models.tech_stack import ScopeEnum, TechStack, TypeEnum
from models.tech_stack import ScopeType, TechStack, TechType


class GetDebugProjectRecordsResponseRecordsItem(Struct, **RESPONSE_STRUCT_CONFIG):
Expand Down Expand Up @@ -62,8 +62,8 @@ async def get_debug_project_records_handler() -> Response:

class GetTechStacksResponseRecordsItem(Struct, **RESPONSE_STRUCT_CONFIG):
name: str
type: TypeEnum
scope: ScopeEnum
type: TechType
scope: ScopeType
is_self_developed: bool
description: str
url: str
Expand Down Expand Up @@ -96,7 +96,7 @@ async def get_tech_stacks_handler(
url=item.url,
)
async for item in TechStack.iter(
scope=ScopeEnum(scope_.upper()) if scope_ else None
scope=scope_.upper() if scope_ else None # type: ignore
)
]
)
Expand Down
9 changes: 3 additions & 6 deletions backend/models/jianshu/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,19 @@

from collections.abc import AsyncGenerator
from datetime import datetime
from enum import Enum
from typing import Literal

from sshared.postgres import Table
from sshared.strict_struct import NonEmptyStr, PositiveInt

from utils.db import jianshu_pool


class StatusEnum(Enum):
NORMAL = "NORMAL"
INACCESSIBLE = "INACCESSIBLE"
StatusType = Literal["NORMAL", "INACCESSIBLE"]


class User(Table, frozen=True):
slug: NonEmptyStr
status: StatusEnum
status: StatusType
update_time: datetime
id: PositiveInt
name: NonEmptyStr
Expand Down
18 changes: 6 additions & 12 deletions backend/models/tech_stack.py
Original file line number Diff line number Diff line change
@@ -1,36 +1,30 @@
from __future__ import annotations

from collections.abc import AsyncGenerator
from enum import Enum
from typing import Literal

from sshared.postgres import Table
from sshared.strict_struct import NonEmptyStr

from utils.db import jtools_pool

TechType = Literal["LIBRARY", "EXTERNAL_SERVICE"]
ScopeType = Literal["FRONTEND", "BACKEND", "TOOLCHAIN"]

class TypeEnum(Enum):
LIBRARY = "LIBRARY"
EXTERNAL_SERVICE = "EXTERNAL_SERVICE"


class ScopeEnum(Enum):
FRONTEND = "FRONTEND"
BACKEND = "BACKEND"
TOOLCHAIN = "TOOLCHAIN"


class TechStack(Table, frozen=True):
name: NonEmptyStr
type: TypeEnum
scope: ScopeEnum
type: TechType
scope: ScopeType
is_self_developed: bool
description: NonEmptyStr
url: NonEmptyStr

@classmethod
async def iter(
cls, scope: ScopeEnum | None = None
cls, scope: ScopeType | None = None
) -> AsyncGenerator[TechStack, None]:
async with jtools_pool.get_conn() as conn:
if scope:
Expand Down
14 changes: 5 additions & 9 deletions backend/models/tool.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from enum import Enum
from typing import Literal

from psycopg.types.json import Jsonb
from sshared.postgres import Table
Expand All @@ -9,16 +9,12 @@
from utils.db import jtools_pool
from utils.log import logger


class StatusEnum(Enum):
NORMAL = "NORMAL"
DOWNGRADED = "DOWNGRADED"
UNAVAILABLE = "UNAVAILABLE"
StatusType = Literal["NORMAL", "DOWNGRADED", "UNAVAILABLE"]


class Tool(Table, frozen=True):
slug: NonEmptyStr
status: StatusEnum
status: StatusType
status_description: NonEmptyStr | None
data_update_freq: NonEmptyStr
last_update_time_table: NonEmptyStr | None
Expand All @@ -36,7 +32,7 @@ async def init(cls) -> None:
for tool_slug in TOOL_SLUGS:
await cls(
slug=tool_slug,
status=StatusEnum.NORMAL,
status="NORMAL",
status_description=None,
data_update_freq="未知",
last_update_time_table=None,
Expand Down Expand Up @@ -96,7 +92,7 @@ async def get_by_slug(cls, slug: str) -> Tool | None:
)

@classmethod
async def get_tools_slugs_by_status(cls, status: StatusEnum) -> tuple[str, ...]:
async def get_tools_slugs_by_status(cls, status: StatusType) -> tuple[str, ...]:
async with jtools_pool.get_conn() as conn:
cursor = await conn.execute(
"SELECT slug FROM tools WHERE status = %s", (status,)
Expand Down

0 comments on commit 4ad311a

Please sign in to comment.