upload project source code
This commit is contained in:
109
后端源码/yifan.action-ai.cn/api-bak/main.py
Normal file
109
后端源码/yifan.action-ai.cn/api-bak/main.py
Normal file
@@ -0,0 +1,109 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
from typing import Annotated
|
||||
import uvicorn
|
||||
import typer
|
||||
from fastapi import FastAPI
|
||||
from alembic import command
|
||||
from alembic.config import Config
|
||||
|
||||
from app.common.enums import EnvironmentEnum
|
||||
|
||||
|
||||
fastapiadmin_cli = typer.Typer()
|
||||
|
||||
# 初始化 Alembic 配置
|
||||
alembic_cfg = Config("alembic.ini")
|
||||
|
||||
|
||||
def create_app() -> FastAPI:
|
||||
"""创建 FastAPI 应用实例"""
|
||||
from app.plugin.init_app import (
|
||||
register_middlewares,
|
||||
register_exceptions,
|
||||
register_routers,
|
||||
register_files,
|
||||
reset_api_docs,
|
||||
lifespan
|
||||
)
|
||||
from app.config.setting import settings
|
||||
# 创建FastAPI应用
|
||||
app = FastAPI(**settings.FASTAPI_CONFIG, lifespan=lifespan)
|
||||
|
||||
from app.core.logger import setup_logging
|
||||
# 初始化日志
|
||||
setup_logging()
|
||||
# 注册各种组件
|
||||
register_exceptions(app)
|
||||
# 注册中间件
|
||||
register_middlewares(app)
|
||||
# 注册路由
|
||||
register_routers(app)
|
||||
# 注册静态文件
|
||||
register_files(app)
|
||||
# 重设API文档
|
||||
reset_api_docs(app)
|
||||
|
||||
return app
|
||||
|
||||
# typer.Option是非必填;typer.Argument是必填
|
||||
@fastapiadmin_cli.command(name="run", help="启动 FastapiAdmin 服务, 运行 python main.py run --env=dev 不加参数默认 dev 环境")
|
||||
def run(env: Annotated[EnvironmentEnum, typer.Option("--env", help="运行环境 (dev, prod)")] = EnvironmentEnum.DEV) -> None:
|
||||
"""启动FastAPI服务"""
|
||||
|
||||
try:
|
||||
# 设置环境变量
|
||||
os.environ["ENVIRONMENT"] = env.value
|
||||
typer.echo("项目启动中...")
|
||||
|
||||
# 清除配置缓存,确保重新加载配置
|
||||
from app.config.setting import get_settings
|
||||
get_settings.cache_clear()
|
||||
settings = get_settings()
|
||||
|
||||
from app.core.logger import setup_logging
|
||||
setup_logging()
|
||||
|
||||
# 显示启动横幅
|
||||
from app.utils.banner import worship
|
||||
worship(env.value)
|
||||
|
||||
# 启动uvicorn服务
|
||||
uvicorn.run(
|
||||
app=f'main:create_app',
|
||||
host=settings.SERVER_HOST,
|
||||
port=settings.SERVER_PORT,
|
||||
reload=True if env.value == EnvironmentEnum.DEV.value else False,
|
||||
factory=True,
|
||||
log_config=None
|
||||
)
|
||||
|
||||
except KeyboardInterrupt:
|
||||
from app.utils.console import display_shutdown_info
|
||||
display_shutdown_info()
|
||||
except Exception as e:
|
||||
raise
|
||||
finally:
|
||||
from app.core.logger import cleanup_logging
|
||||
cleanup_logging()
|
||||
|
||||
@fastapiadmin_cli.command(name="revision", help="生成新的 Alembic 迁移脚本, 运行 python main.py revision --env=dev")
|
||||
def revision(env: Annotated[EnvironmentEnum, typer.Option("--env", help="运行环境 (dev, prod)")] = EnvironmentEnum.DEV) -> None:
|
||||
"""生成新的 Alembic 迁移脚本"""
|
||||
os.environ["ENVIRONMENT"] = env.value
|
||||
command.revision(alembic_cfg, autogenerate=True, message="迁移脚本")
|
||||
typer.echo(f"迁移脚本已生成")
|
||||
|
||||
@fastapiadmin_cli.command(name="upgrade", help="应用最新的 Alembic 迁移, 运行 python main.py upgrade --env=dev")
|
||||
def upgrade(env: Annotated[EnvironmentEnum, typer.Option("--env", help="运行环境 (dev, prod)")] = EnvironmentEnum.DEV) -> None:
|
||||
"""应用最新的 Alembic 迁移"""
|
||||
os.environ["ENVIRONMENT"] = env.value
|
||||
command.upgrade(alembic_cfg, "head")
|
||||
typer.echo("所有迁移已应用。")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
fastapiadmin_cli()
|
||||
|
||||
Reference in New Issue
Block a user