main.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import FastAPI, Request #, Response,HTTPException
  4. from fastapi.responses import PlainTextResponse, JSONResponse, RedirectResponse, FileResponse
  5. from fastapi.exceptions import RequestValidationError
  6. from fastapi.middleware.cors import CORSMiddleware
  7. from starlette.middleware.sessions import SessionMiddleware
  8. from starlette.staticfiles import StaticFiles
  9. from routers import home, api ,prod_api
  10. from exceptions import *
  11. from pymysql.err import OperationalError
  12. import os
  13. import platform
  14. from config import settings
  15. from extensions import logger
  16. from jobs import register_jobs
  17. from apscheduler.schedulers.asyncio import AsyncIOScheduler
  18. from apscheduler.executors.pool import ThreadPoolExecutor, ProcessPoolExecutor
  19. app = FastAPI()
  20. # app.include_router(home.router)
  21. app.include_router(api.router, prefix="/api")
  22. app.include_router(prod_api.router, prefix="")
  23. @app.get("/", response_class=PlainTextResponse)
  24. async def main():
  25. return "应急后端接口9988"
  26. @app.get("/favicon.ico", response_class=FileResponse)
  27. async def favicon():
  28. return FileResponse("./static/favicon.ico")
  29. app.add_middleware(SessionMiddleware, secret_key='MM-ZHCS-YJ-API', max_age=36000 * 24)
  30. app.add_middleware(CORSMiddleware,allow_origins=['*'],allow_credentials=False,allow_methods=['*'],allow_headers=['*'])
  31. app.mount('/static', StaticFiles(directory='static'), name='static')
  32. @app.on_event('startup')
  33. def app_startup():
  34. logger.info('---------------------------------------')
  35. logger.info('--------------'+ settings.ENVIRONMENT +'---------------')
  36. logger.info('---------------------------------------')
  37. logger.info("server started.")
  38. sys = platform.system()
  39. if sys == "Windows":
  40. from warnings import filterwarnings
  41. from pytz_deprecation_shim import PytzUsageWarning
  42. filterwarnings('ignore', category=PytzUsageWarning)
  43. executors = {
  44. 'default': ThreadPoolExecutor(20),
  45. 'processpool': ProcessPoolExecutor(5)
  46. }
  47. scheduler = AsyncIOScheduler(timezone='Asia/Shanghai', executors=executors)
  48. register_jobs(scheduler)
  49. scheduler.start()
  50. # @app.exception_handler(RequestValidationError)
  51. # async def validation_exception_handler(request, exc):
  52. # return JSONResponse(status_code=200, content={ "errcode": 100060, "errmsg": "参数错误" }, )
  53. @app.exception_handler(TokenException)
  54. async def exception_handler(request: Request, exc: TokenException):
  55. return JSONResponse(
  56. status_code=200,
  57. content={"errcode": "4001", "errmsg":"验证不通过"}
  58. )
  59. @app.exception_handler(OperationalError)
  60. async def exception_handler(request: Request, exc: OperationalError):
  61. return JSONResponse(
  62. status_code=412,
  63. content={"code": "412", "msg":f"接口对应sql异常,请检查{exc}"}
  64. )
  65. # @app.exception_handler(AttributeError)
  66. # async def exception_handler(request: Request, exc: TokenException):
  67. # return JSONResponse(
  68. # status_code=200,
  69. # content={"errcode": "500", "errmsg":"Internal Server Error"}
  70. # )
  71. @app.exception_handler(AuthException)
  72. async def exception_handler(request: Request, exc: TokenException):
  73. return RedirectResponse("/")
  74. @app.exception_handler(AlertException)
  75. async def exception_handler(request: Request, exc: AlertException):
  76. return JSONResponse(
  77. status_code=200,
  78. content={"ret": 1, "msg": exc.msg}
  79. )
  80. if __name__ == '__main__':
  81. from common import YzyApi
  82. # YzyApi.get_user_info("h4RxABdc-pfXIdhTT3UhTnKv-qTs-Yn6TfeSWE4IJd0")
  83. # YzyApi.send_textcard_message(["c3o4t44nb2e1oipbs80paw"], "title", "事件进度", "https://www.baidu.com/")
  84. # YzyApi.send_textcard_message(["ivj823s4b56za2jcu293f7"], "title", "事件进度", "https://www.baidu.com/")
  85. # YzyApi.send_textcard_message(["ivj823s4b56za2jcu293f7"], "title", "事件进度", "https://www.baidu.com/")
  86. # YzyApi.send_textcard_message(["eb4kehgy6wj4qn0jhx1dk6"], "预案响应消息", "预案名称: 茂名市自然灾害救助应急预案\n响应级别: Ⅰ级响应\n消息内容: 单位您好!《茂名市自然灾害救助应急预案》现已全面启动,特此通知您单位迅速响应,全力做好预案工作要点:负责救灾工作宣传报道协调工作。", "https://www.baidu.com/")
  87. # YzyApi.send_text_message(["eb4kehgy6wj4qn0jhx1dk6"], "事件进度")
  88. import uvicorn
  89. sys = platform.system()
  90. if sys == "Windows":
  91. os.system("title 茂名应急数据中台 DEV")
  92. # print(1234567890)
  93. uvicorn.run(app='main:app', host='0.0.0.0',port=9988, reload=True, debug=True)
  94. # uvicorn.run(app='main:app', host='0.0.0.0', port=9988)