Initial commit

This commit is contained in:
2026-02-25 15:22:23 +08:00
commit c7138dab9e
84 changed files with 14690 additions and 0 deletions

93
utils/start.py Normal file
View File

@@ -0,0 +1,93 @@
import re
import pinyin
import pyfiglet
import toml
from fastapi import FastAPI
from pydantic.types import Callable
def extract_brand_name(input_str):
"""
提取品牌名称,规则如下:
- 中文:返回拼音首字母(大写)
- 英文:根据单词数量决定,少量单词返回大驼峰,大量单词返回纯大写
- 支持多种英文命名法(驼峰、中划线、下划线等)的解析
参数:
input_str: 输入的字符串(中英文均可)
返回:
处理后的品牌名称字符串
"""
# 判断是否为中文(包含中文字符)
if re.search(r"[\u4e00-\u9fff]", input_str):
# 提取中文并转换为拼音首字母
chinese_chars = re.findall(r"[\u4e00-\u9fff]", input_str)
pinyin_initials = "".join(
[
pinyin.get(c, format="strip", delimiter="")[0].upper()
for c in chinese_chars
]
)
return pinyin_initials
# 处理英文情况:拆分不同命名法的单词
# 处理驼峰命名(大小写转换处拆分)
s = re.sub(r"(?<=[a-z])(?=[A-Z])", " ", input_str)
# 处理中划线、下划线和其他非字母字符,统一替换为空格
s = re.sub(r"[-_^&%$#@!~`]", " ", s)
# 提取所有单词(忽略非字母字符)
words = re.findall(r"[A-Za-z]+", s)
# 统一转为小写后再处理(避免大小写影响)
words = [word.lower() for word in words if word]
if not words:
return "" # 空输入处理
# 定义少量单词与大量单词的阈值这里使用3个作为分界
threshold = 3
if len(words) <= threshold:
# 少量单词:返回大驼峰格式
return "".join([word.capitalize() for word in words])
else:
# 大量单词:返回纯大写字母(取每个单词首字母)
return "".join([word[0].upper() for word in words])
# Load the TOML file
config = toml.load("pyproject.toml")
# Access specific values
project_name = config.get("project", {}).get("name", None)
project_description = config.get("project", {}).get("description", None)
project_version = config.get("project", {}).get("version", None)
project_authors = config.get("project", {}).get("authors", [])
def start(startup: Callable | None = None) -> FastAPI:
# from pyfiglet import FigletFont
# fonts = FigletFont().getFonts()
# for font in fonts:
# try:
# result = pyfiglet.figlet_format(project_name, font="red_phoenix")
# print(f"Font: {font}")
# print(result)
# print("-" * 50)
# except Exception as e:
# logger.warning(f"Failed to render font {font}: {e}")
#
if not startup:
raise ValueError("startup function is required")
print("-" * 50)
print(pyfiglet.figlet_format(project_name, font="red_phoenix"))
print(f"Project Description: {project_description}")
print(f"Version: {project_version}")
print("Author: ", end="")
[
print(f"{author.get('name', '')} {author.get('email', '')}", end="")
for author in project_authors
]
print()
print("-" * 50)
return startup()