SCLP
This commit is contained in:
99
SCLP/app.py
Normal file
99
SCLP/app.py
Normal file
@@ -0,0 +1,99 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
@Author : xuxingchen
|
||||
@Contact : xuxingchen@sinochem.com
|
||||
@Desc : api后端服务程序启动入口
|
||||
"""
|
||||
import argparse
|
||||
|
||||
from fastapi import FastAPI, Request
|
||||
from fastapi.exceptions import RequestValidationError
|
||||
from fastapi.responses import JSONResponse
|
||||
import uvicorn
|
||||
|
||||
from config import VERSION, PREFIX_PATH
|
||||
from utils import logger, database, misc
|
||||
from models import sessions, houses, devices, products, householders, subsystem, parkinglots
|
||||
from routers import (login, houses_manage, devices_manage, space_manage, householder_manage,
|
||||
access_devices_0, access_devices_1,
|
||||
parkinglot_0, parkinglot_1)
|
||||
|
||||
|
||||
class MainServer:
|
||||
def __init__(self, app_args):
|
||||
self.port = app_args.port
|
||||
self.app = None
|
||||
self.prepare()
|
||||
self.server_main()
|
||||
|
||||
def prepare(self):
|
||||
"""准备处理,一些适配和配置加载工作"""
|
||||
# 数据库初始化
|
||||
logger.Logger.init("数据库执行初始化校验 ...")
|
||||
th = database.get_table_handler()
|
||||
sessions.SessionsTable.check(th)
|
||||
houses.HousesTable.check(th)
|
||||
products.ProductsTable.check(th)
|
||||
devices.DevicesTable.check(th)
|
||||
subsystem.SubsystemTable.check(th)
|
||||
householders.HouseholdersTable.check(th)
|
||||
parkinglots.ParkinglotsTable.check(th)
|
||||
logger.Logger.init("数据库完成初始化校验 ✅")
|
||||
|
||||
self.app = FastAPI(
|
||||
title="Smart Community Local Platform",
|
||||
description="智慧社区本地化平台后端服务",
|
||||
version=VERSION,
|
||||
docs_url=f"{PREFIX_PATH}/docs" # 设为None则会关闭
|
||||
)
|
||||
|
||||
# 注册路由模块中的路由
|
||||
self.app.include_router(login.router, prefix=PREFIX_PATH, tags=["登录界面"])
|
||||
self.app.include_router(houses_manage.router, prefix=PREFIX_PATH, tags=["内置信息"])
|
||||
self.app.include_router(householder_manage.router, prefix=PREFIX_PATH, tags=["住户管理界面"])
|
||||
self.app.include_router(access_devices_0.router, prefix=PREFIX_PATH, tags=["通行设备界面"])
|
||||
self.app.include_router(access_devices_1.router, prefix=PREFIX_PATH, tags=["通行授权界面"])
|
||||
self.app.include_router(parkinglot_0.router, prefix=PREFIX_PATH, tags=["车场管理界面"])
|
||||
self.app.include_router(parkinglot_1.router, prefix=PREFIX_PATH, tags=["车场授权界面"])
|
||||
self.app.include_router(devices_manage.router, prefix=PREFIX_PATH, tags=["设备管理界面"])
|
||||
self.app.include_router(space_manage.router, prefix=PREFIX_PATH, tags=["通行空间映射界面"])
|
||||
|
||||
@self.app.exception_handler(RequestValidationError)
|
||||
async def validation_exception_handler(request: Request, exc: RequestValidationError):
|
||||
logger.Logger.error(f"{request.url.path} 请求参数错误 {exc.errors()} - {request.client.host}")
|
||||
return JSONResponse(
|
||||
status_code=422,
|
||||
content={"status": False,
|
||||
"message": f"请求参数错误,请检查输入"
|
||||
f"{',错误类型:' + exc.errors()[0]['type'] if len(exc.errors()) > 0 else ''}"}
|
||||
)
|
||||
|
||||
@self.app.exception_handler(misc.InvalidException)
|
||||
async def invalid_target_exception_handler(request: Request, exc: misc.InvalidException):
|
||||
logger.Logger.error(f"{request.url.path} {exc.message} - {request.client.host}")
|
||||
return JSONResponse(
|
||||
status_code=400,
|
||||
content={"status": False, "message": f"{exc.message}"}
|
||||
)
|
||||
|
||||
def server_main(self):
|
||||
"""主服务程序"""
|
||||
logger.Logger.debug(f"当前已开启 DEBUG 模式")
|
||||
uvicorn.run(self.app, host="0.0.0.0", port=self.port, access_log=False)
|
||||
|
||||
|
||||
def main(port: str = 9680):
|
||||
parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
|
||||
parser.add_argument(
|
||||
"-p",
|
||||
"--port",
|
||||
type=int,
|
||||
default=port,
|
||||
help=f"Port of server, default {logger.new_dc(port)}",
|
||||
)
|
||||
app_args = parser.parse_args()
|
||||
MainServer(app_args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user