From b012b91613c480193de21b865491c4521cd0980d Mon Sep 17 00:00:00 2001 From: zhouchengrong Date: Thu, 13 Jun 2024 14:31:14 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=20=E6=9B=B4=E6=96=B0=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/api_attribute_retrieve.py | 23 ++++------ app/api/api_chat_robot.py | 16 +++---- app/api/api_design.py | 16 +++---- app/api/api_design_pre_processing.py | 19 +++----- app/api/api_generate_image.py | 67 ++++++++++++++++------------ app/api/api_prompt_generation.py | 18 +++----- app/api/api_super_resolution.py | 23 ++++++---- app/api/api_test.py | 13 ++++-- app/core/config.py | 2 +- app/main.py | 15 ++++++- app/schemas/response_template.py | 8 ++++ 11 files changed, 120 insertions(+), 100 deletions(-) create mode 100644 app/schemas/response_template.py diff --git a/app/api/api_attribute_retrieve.py b/app/api/api_attribute_retrieve.py index 7dd4afb..267b796 100644 --- a/app/api/api_attribute_retrieve.py +++ b/app/api/api_attribute_retrieve.py @@ -1,8 +1,9 @@ import json import logging -from fastapi import APIRouter +from fastapi import APIRouter, HTTPException from app.schemas.attribute_retrieve import * +from app.schemas.response_template import ResponseModel from app.service.attribute.config import const from app.service.attribute.service_att_recognition import AttributeRecognition from app.service.attribute.service_category_recognition import CategoryRecognition @@ -12,34 +13,28 @@ logger = logging.getLogger() # 属性识别 -@router.post("/attribute_recognition") +@router.post("/attribute_recognition", response_model=ResponseModel) def attribute_recognition(request_item: list[AttributeRecognitionModel]): try: + logger.info(f"attribute_recognition request item is : @@@@@@:{request_item}") service = AttributeRecognition(const=const, request_data=request_item) data = service.get_result() - code = 200 - message = "OK!" logger.info(f"attribute_recognition response @@@@@@:{json.dumps(data, indent=4)}") except Exception as e: - code = 400 - message = e - data = e logger.warning(f"attribute_recognition Run Exception @@@@@@:{e}") - return {"code": code, "msg": message, "data": data} + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel(data=data) # 类别识别 @router.post("/category_recognition") def category_recognition(request_item: list[CategoryRecognitionModel]): try: + logger.info(f"category_recognition request item is : @@@@@@:{request_item}") service = CategoryRecognition(request_data=request_item) data = service.get_result() - code = 200 - message = "OK!" logger.info(f"category_recognition response @@@@@@:{json.dumps(data, indent=4)}") except Exception as e: - code = 400 - message = e - data = e logger.warning(f"category_recognition Run Exception @@@@@@:{e}") - return {"code": code, "msg": message, "data": data} + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel(data=data) diff --git a/app/api/api_chat_robot.py b/app/api/api_chat_robot.py index a0158da..dccba9a 100644 --- a/app/api/api_chat_robot.py +++ b/app/api/api_chat_robot.py @@ -1,8 +1,10 @@ +import json import logging import time -from fastapi import APIRouter +from fastapi import APIRouter, HTTPException from app.schemas.chat_robot import ChatRobotModel +from app.schemas.response_template import ResponseModel from app.service.chat_robot.script.main import chat router = APIRouter() @@ -13,15 +15,9 @@ logger = logging.getLogger() def chat_robot(request_data: ChatRobotModel): try: logger.info(f"chat_robot request item is : @@@@@@:{request_data}") - code = 200 - message = "OK!" - start_time = time.time() data = chat(post_data=request_data) - logger.info(f"chat_robot Run time is @@@@@@:{time.time() - start_time}") + logger.info(f"chat_robot response @@@@@@:{json.dumps(data, indent=4)}") except Exception as e: - code = 400 - message = str(e) - data = str(e) logger.warning(f"chat_robot Run Exception @@@@@@:{e}") - logger.info({"code": code, "message": message, "data": data}) - return {"code": code, "msg": message, "data": data} + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel(data=data) diff --git a/app/api/api_design.py b/app/api/api_design.py index a224067..c77d4c2 100644 --- a/app/api/api_design.py +++ b/app/api/api_design.py @@ -1,9 +1,11 @@ +import json import logging import time -from fastapi import APIRouter +from fastapi import APIRouter, HTTPException from app.schemas.design import DesignModel +from app.schemas.response_template import ResponseModel from app.service.design.service import generate router = APIRouter() @@ -14,15 +16,9 @@ logger = logging.getLogger() def design(request_data: DesignModel): try: logger.info(f"design request item is : @@@@@@:{request_data}") - code = 200 - message = "OK!" - start_time = time.time() data = generate(request_data=request_data) - logger.info(f"design Run time is @@@@@@:{time.time() - start_time}") + logger.info(f"design response @@@@@@:{json.dumps(data, indent=4)}") except Exception as e: - code = 400 - message = str(e) - data = str(e) logger.warning(f"design Run Exception @@@@@@:{e}") - logger.info({"code": code, "message": message, "data": data}) - return {"code": code, "msg": message, "data": data} \ No newline at end of file + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel(data=data) diff --git a/app/api/api_design_pre_processing.py b/app/api/api_design_pre_processing.py index 38d051a..bd87e00 100644 --- a/app/api/api_design_pre_processing.py +++ b/app/api/api_design_pre_processing.py @@ -1,9 +1,8 @@ +import json import logging -import time - -from fastapi import APIRouter - +from fastapi import APIRouter, HTTPException from app.schemas.pre_processing import DesignPreProcessingModel +from app.schemas.response_template import ResponseModel from app.service.design_pre_processing.service import DesignPreprocessing router = APIRouter() @@ -14,16 +13,10 @@ logger = logging.getLogger() def design_pre_processing(request_data: DesignPreProcessingModel): try: logger.info(f"design_pre_processing request item is : @@@@@@:{request_data}") - code = 200 - message = "OK!" - start_time = time.time() server = DesignPreprocessing() data = server.pipeline(image_list=request_data.sketches) - logger.info(f"design_pre_processing Run time is @@@@@@:{time.time() - start_time}") + logger.info(f"design response @@@@@@:{json.dumps(data, indent=4)}") except Exception as e: - code = 400 - message = str(e) - data = str(e) logger.warning(f"design Run Exception @@@@@@:{e}") - logger.info({"code": code, "message": message, "data": data}) - return {"code": code, "msg": message, "data": data} + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel(data=data) diff --git a/app/api/api_generate_image.py b/app/api/api_generate_image.py index 1d2f3a9..8c706a1 100644 --- a/app/api/api_generate_image.py +++ b/app/api/api_generate_image.py @@ -1,6 +1,8 @@ +import json import logging -from fastapi import APIRouter, BackgroundTasks +from fastapi import APIRouter, BackgroundTasks, HTTPException from app.schemas.generate_image import GenerateImageModel, GenerateProductImageModel, GenerateSingleLogoImageModel +from app.schemas.response_template import ResponseModel from app.service.generate_image.service_generate_image import GenerateImage, infer_cancel as generate_image_infer_cancel from app.service.generate_image.service_generate_product_image import GenerateProductImage, infer_cancel as generate_product_image_cancel from app.service.generate_image.service_generate_single_logo import GenerateSingleLogoImage, infer_cancel as generate_single_logo_cancel @@ -14,22 +16,25 @@ logger = logging.getLogger() @router.post("/generate_image") def generate_image(request_item: GenerateImageModel, background_tasks: BackgroundTasks): try: - logger.info(f"request data ### : {request_item}") + logger.info(f"generate_image request item is : @@@@@@:{request_item}") service = GenerateImage(request_item) background_tasks.add_task(service.get_result) - code = 200 - message = "OK!" except Exception as e: - code = 400 - message = e - logger.warning(e) - return {"code": code, "msg": message} + logger.warning(f"generate_image Run Exception @@@@@@:{e}") + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel() @router.get("/generate_cancel/{tasks_id}>") def generate_image(tasks_id): - result = generate_image_infer_cancel(tasks_id) - return {"code": 200, "msg": "OK!", "data": result['data']} + try: + logger.info(f"generate_cancel request item is : @@@@@@:{tasks_id}") + data = generate_image_infer_cancel(tasks_id) + logger.info(f"generate_cancel response @@@@@@:{json.dumps(data, indent=4)}") + except Exception as e: + logger.warning(f"generate_cancel Run Exception @@@@@@:{e}") + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel(data=data['data']) '''single logo''' @@ -38,22 +43,25 @@ def generate_image(tasks_id): @router.post("/generate_single_logo") def generate_single_logo(request_item: GenerateSingleLogoImageModel, background_tasks: BackgroundTasks): try: - logger.info(f"request data ### : {request_item}") + logger.info(f"generate_single_logo request item is : @@@@@@:{request_item}") service = GenerateSingleLogoImage(request_item) background_tasks.add_task(service.get_result) - code = 200 - message = "OK!" except Exception as e: - code = 400 - message = e - logger.warning(e) - return {"code": code, "msg": message} + logger.warning(f"generate_single_logo Run Exception @@@@@@:{e}") + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel() @router.get("/generate_single_logo_cancel/{tasks_id}>") def generate_single_logo_image(tasks_id): - result = generate_single_logo_cancel(tasks_id) - return {"code": 200, "msg": "OK!", "data": result['data']} + try: + logger.info(f"generate_single_logo_cancel request item is : @@@@@@:{tasks_id}") + data = generate_single_logo_cancel(tasks_id) + logger.info(f"generate_single_logo_cancel response @@@@@@:{json.dumps(data, indent=4)}") + except Exception as e: + logger.warning(f"generate_single_logo_cancel Run Exception @@@@@@:{e}") + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel(data=data['data']) '''product image''' @@ -62,19 +70,22 @@ def generate_single_logo_image(tasks_id): @router.post("/generate_product_image") def generate_product_image(request_item: GenerateProductImageModel, background_tasks: BackgroundTasks): try: - logger.info(f"request data ### : {request_item}") + logger.info(f"generate_product_image request item is : @@@@@@:{request_item}") service = GenerateProductImage(request_item) background_tasks.add_task(service.get_result) - code = 200 - message = "OK!" except Exception as e: - code = 400 - message = e - logger.warning(e) - return {"code": code, "msg": message} + logger.warning(f"generate_product_image Run Exception @@@@@@:{e}") + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel() @router.get("/generate_product_image_cancel_cancel/{tasks_id}>") def generate_single_logo_image(tasks_id): - result = generate_product_image_cancel(tasks_id) - return {"code": 200, "msg": "OK!", "data": result['data']} + try: + logger.info(f"generate_product_image_cancel_cancel request item is : @@@@@@:{tasks_id}") + data = generate_single_logo_cancel(tasks_id) + logger.info(f"generate_product_image_cancel_cancel response @@@@@@:{json.dumps(data, indent=4)}") + except Exception as e: + logger.warning(f"generate_product_image_cancel_cancel Run Exception @@@@@@:{e}") + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel(data=data['data']) diff --git a/app/api/api_prompt_generation.py b/app/api/api_prompt_generation.py index a963bde..292ad2e 100644 --- a/app/api/api_prompt_generation.py +++ b/app/api/api_prompt_generation.py @@ -1,9 +1,11 @@ +import json import logging import time -from fastapi import APIRouter +from fastapi import APIRouter, HTTPException from app.schemas.prompt_generation import PromptGenerationImageModel +from app.schemas.response_template import ResponseModel from app.service.prompt_generation.chatgpt_for_translation import translate_to_en router = APIRouter() @@ -13,16 +15,10 @@ logger = logging.getLogger() @router.post("/translateToEN") def prompt_generation(request_data: PromptGenerationImageModel): try: - logger.info(f"prompt_translate to English request data : @@@@@@:{request_data}") - code = 200 - message = "OK!" - start_time = time.time() + logger.info(f"prompt_generation request item is : @@@@@@:{request_data}") data = translate_to_en(request_data.text) - logger.info(f"prompt_generation Run time is @@@@@@:{time.time() - start_time}") + logger.info(f"prompt_generation response @@@@@@:{json.dumps(data, indent=4)}") except Exception as e: - code = 400 - message = str(e) - data = str(e) logger.warning(f"prompt_generation Run Exception @@@@@@:{e}") - logger.info({"code": code, "message": message, "data": data}) - return {"code": code, "msg": message, "data": data} + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel(data=data) diff --git a/app/api/api_super_resolution.py b/app/api/api_super_resolution.py index 03311d1..e68cbe0 100644 --- a/app/api/api_super_resolution.py +++ b/app/api/api_super_resolution.py @@ -1,8 +1,9 @@ import json import logging -from fastapi import APIRouter, BackgroundTasks +from fastapi import APIRouter, BackgroundTasks, HTTPException +from app.schemas.response_template import ResponseModel from app.schemas.super_resolution import SuperResolutionModel from app.service.super_resolution.service import SuperResolution, infer_cancel @@ -13,18 +14,22 @@ logger = logging.getLogger() @router.post("/super_resolution") def super_resolution(request_item: SuperResolutionModel, background_tasks: BackgroundTasks): try: + logger.info(f"super_resolution request item is : @@@@@@:{request_item}") service = SuperResolution(request_item) background_tasks.add_task(service.sr_result) - code = 200 - message = "OK!" except Exception as e: - code = 400 - message = e - logger.warning(e) - return {"code": code, "msg": message} + logger.warning(f"super_resolution Run Exception @@@@@@:{e}") + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel() @router.get("/sr_cancel/{tasks_id}>") def super_resolution(tasks_id): - result = infer_cancel(tasks_id) - return {"code": 200, "msg": result['message'], "data": result['data']} + try: + logger.info(f"sr_cancel request item is : @@@@@@:{tasks_id}") + data = infer_cancel(tasks_id) + logger.info(f"sr_cancel response @@@@@@:{json.dumps(data, indent=4)}") + except Exception as e: + logger.warning(f"sr_cancel Run Exception @@@@@@:{e}") + raise HTTPException(status_code=404, detail=str(e)) + return ResponseModel(data=data['data']) diff --git a/app/api/api_test.py b/app/api/api_test.py index 63ef1aa..739c08f 100644 --- a/app/api/api_test.py +++ b/app/api/api_test.py @@ -1,13 +1,20 @@ import logging from fastapi import APIRouter from app.core.config import SR_RABBITMQ_QUEUES, GI_RABBITMQ_QUEUES +from fastapi import FastAPI, HTTPException + +from app.schemas.response_template import ResponseModel logger = logging.getLogger() router = APIRouter() -@router.get("") -def test(): +@router.get("{id}") +def test(id: int): logger.info(SR_RABBITMQ_QUEUES) logger.info("test") - return {"SR_RABBITMQ_QUEUES message": SR_RABBITMQ_QUEUES, "GI_RABBITMQ_QUEUES": GI_RABBITMQ_QUEUES} + data = {"SR_RABBITMQ_QUEUES message": SR_RABBITMQ_QUEUES, "GI_RABBITMQ_QUEUES": GI_RABBITMQ_QUEUES} + if id == 1: + raise HTTPException(status_code=404, detail="Item not found") + + return ResponseModel(data=data) diff --git a/app/core/config.py b/app/core/config.py index 30bdd30..cfcfa0b 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -19,7 +19,7 @@ class Settings(BaseSettings): LOGGING_CONFIG_FILE = os.path.join(BASE_DIR, 'logging_env.py') -DEBUG = False +DEBUG = True if DEBUG: LOGS_PATH = "logs/" CATEGORY_PATH = "service/attribute/config/descriptor/category/category_dis.csv" diff --git a/app/main.py b/app/main.py index 941ff79..b085d7d 100644 --- a/app/main.py +++ b/app/main.py @@ -1,13 +1,16 @@ import logging.config +from http.client import HTTPException +from fastapi.responses import JSONResponse +from fastapi import FastAPI, HTTPException, Request import uvicorn from fastapi import FastAPI from app.api.api_route import router from app.core.config import settings +from app.schemas.response_template import ResponseModel from logging_env import LOGGER_CONFIG_DICT - logging.config.dictConfig(LOGGER_CONFIG_DICT) logging.getLogger("pika").setLevel(logging.WARNING) @@ -36,5 +39,15 @@ def get_application() -> FastAPI: app = get_application() + + +@app.exception_handler(HTTPException) +async def http_exception_handler(request: Request, exc: HTTPException): + return JSONResponse( + status_code=exc.status_code, + content=ResponseModel(code=exc.status_code, msg=exc.detail, data=exc.detail).dict() + ) + + if __name__ == '__main__': uvicorn.run(app, host="0.0.0.0", port=8000) diff --git a/app/schemas/response_template.py b/app/schemas/response_template.py new file mode 100644 index 0000000..b3b773c --- /dev/null +++ b/app/schemas/response_template.py @@ -0,0 +1,8 @@ +from pydantic import BaseModel +from typing import Any, Optional + + +class ResponseModel(BaseModel): + code: int = 200 + msg: str = "OK!" + data: Optional[Any] = None