| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- # @description:
- # @author: licanglong
- # @date: 2025/11/20 11:41
- import logging
- import multiprocessing
- import os
- import sys
- from pydantic import ValidationError
- # 设置环境变量
- os.environ["APP_PATH"] = os.getenv('APP_PATH') or os.path.abspath(os.path.dirname(__file__)) # noqa
- from app.App import App
- from app.core import BizException, CTX
- from app.models.Result import SysResult
- CTX.DEFAULT_LOG_FILE = "logs/app.log" # noqa
- from flask import Flask, jsonify, request
- from flask_cors import CORS
- class AppImpl(App):
- def create_app(self):
- from app.blueprints.base import base_bp
- from app.blueprints.risk import risk_bp
- from app.blueprints.vector_store import vector_store_bp
- from app.blueprints.invoice import invoice_bp
- app = Flask(__name__)
- # 初始化扩展
- CORS(app, supports_credentials=True)
- app.config['JSON_AS_ASCII'] = False
- # 注册 Blueprint
- app.register_blueprint(base_bp)
- app.register_blueprint(risk_bp)
- app.register_blueprint(vector_store_bp)
- app.register_blueprint(invoice_bp)
- @app.before_request
- def before():
- pass
- @app.after_request
- def after_request(response):
- """为每个请求添加 CORS 头"""
- return response
- @app.errorhandler(404)
- def handle_404_error(e):
- # 打印请求路径
- logging.error(f"error request url: {request.path}")
- logging.exception(e)
- return jsonify(SysResult.fail(code=404, msg=str(e)))
- @app.errorhandler(BizException)
- def biz_error_handle(e):
- logging.exception(e.message)
- return jsonify(SysResult.fail(msg=e.message or "服务异常", code=e.code))
- @app.errorhandler(ValidationError)
- def biz_error_handle(e):
- logging.exception("数据类型不匹配")
- return jsonify(SysResult.fail(msg="数据类型不匹配", code=5001))
- @app.errorhandler(Exception)
- def exception_handle(e):
- logging.exception(e)
- return jsonify(SysResult.fail(msg="服务异常"))
- return app
- def run(self, *args, **kwargs):
- _app = self.create_app()
- port = CTX.ENV.getprop("server.port", 7699)
- try:
- if getattr(sys, 'frozen', False):
- from waitress import serve
- if sys.platform == "win32":
- import msvcrt
- multiprocessing.freeze_support()
- serve(_app, host='0.0.0.0', port=port)
- msvcrt.getch()
- else:
- serve(_app, host='0.0.0.0', port=port)
- else:
- _app.run(host="0.0.0.0", port=port)
- except KeyboardInterrupt:
- logging.warning("程序终止!!")
- if __name__ == '__main__':
- AppImpl().start()
|