From 2612d5d370f4a6eb6c118f560b62de28c3d403b1 Mon Sep 17 00:00:00 2001 From: Dan Chen Date: Mon, 18 Mar 2024 17:58:23 +0800 Subject: [PATCH] fix: rename --- src/blackbox/blackbox_factory.py | 17 ++++++++++++++ src/blackbox/blockbox_factory.py | 14 ------------ src/blackbox/calculator.py | 38 ++++++++++++++++++++++++++++++++ src/main.py | 8 +++---- 4 files changed, 59 insertions(+), 18 deletions(-) create mode 100644 src/blackbox/blackbox_factory.py delete mode 100644 src/blackbox/blockbox_factory.py create mode 100644 src/blackbox/calculator.py diff --git a/src/blackbox/blackbox_factory.py b/src/blackbox/blackbox_factory.py new file mode 100644 index 0000000..d46e07b --- /dev/null +++ b/src/blackbox/blackbox_factory.py @@ -0,0 +1,17 @@ +from blackbox.audio_to_text import AudioToText +from blackbox.blackbox import Blackbox +from blackbox.calculator import Calculator +from blackbox.text_to_audio import TextToAudio + + +class BlackboxFactory: + + def create_blackbox(self, blackbox_type: str, blackbox_config: dict) -> Blackbox: + + if blackbox_type == "audio_to_text": + return AudioToText(blackbox_config) + if blackbox_type == "text_to_audio": + return TextToAudio(blackbox_config) + if blackbox_type == "calculator": + return Calculator(blackbox_config) + raise ValueError("Invalid blockbox type") \ No newline at end of file diff --git a/src/blackbox/blockbox_factory.py b/src/blackbox/blockbox_factory.py deleted file mode 100644 index 0483122..0000000 --- a/src/blackbox/blockbox_factory.py +++ /dev/null @@ -1,14 +0,0 @@ -from blackbox.audio_to_text import AudioToText -from blackbox.blackbox import Blackbox -from blackbox.text_to_audio import TextToAudio - - -class BlockboxFactory: - - def create_blockbox(self, blockbox_type: str, blockbox_config: dict) -> Blackbox: - - if blockbox_type == "audio_to_text": - return AudioToText(blockbox_config) - if blockbox_type == "text_to_audio": - return TextToAudio(blockbox_config) - raise ValueError("Invalid blockbox type") \ No newline at end of file diff --git a/src/blackbox/calculator.py b/src/blackbox/calculator.py new file mode 100644 index 0000000..a99a584 --- /dev/null +++ b/src/blackbox/calculator.py @@ -0,0 +1,38 @@ +from fastapi import status +from fastapi.responses import JSONResponse +from blackbox.blackbox import Blackbox + + +class Calculator(Blackbox): + + """This class just for example, it show how to implement Blackbox interface.""" + + def valid(self, data: any) -> bool: + return isinstance(data, dict) and "operation" in data and "a" in data and "b" in data + + def processing(self, data: dict) -> any: + if not self.valid(data): + raise ValueError("Invalid data") + a = data["a"] + b = data["b"] + op = data["operation"] + if op == "add": + return a + b + if op == "sub": + return a - b + if op == "mul": + return a * b + if op == "div": + return a / b + raise ValueError("Invalid operation") + + async def fast_api_handler(self, request) -> any: + try: + data = await request.json() + except: + return JSONResponse(content={"error": "json parse error"}, status_code=status.HTTP_400_BAD_REQUEST) + try: + result = self.processing(data) + except ValueError as e: + return JSONResponse(content={"error": str(e)}, status_code=status.HTTP_400_BAD_REQUEST) + return JSONResponse(content={"result": result}, status_code=status.HTTP_200_OK) \ No newline at end of file diff --git a/src/main.py b/src/main.py index 0de0a8d..561c7d0 100644 --- a/src/main.py +++ b/src/main.py @@ -1,19 +1,19 @@ from typing import Union -from fastapi import FastAPI, Request, UploadFile, status +from fastapi import FastAPI, Request, status from fastapi.responses import JSONResponse -from blackbox.blockbox_factory import BlockboxFactory +from blackbox.blackbox_factory import BlackboxFactory app = FastAPI() -blackbox_factory = BlockboxFactory() +blackbox_factory = BlackboxFactory() @app.post("/") async def blackbox(blackbox_name: Union[str, None] = None, request: Request = None): if not blackbox_name: return await JSONResponse(content={"error": "blackbox_name is required"}, status_code=status.HTTP_400_BAD_REQUEST) try: - box = blackbox_factory.create_blockbox(blackbox_name, {}) + box = blackbox_factory.create_blackbox(blackbox_name, {}) except ValueError: return await JSONResponse(content={"error": "value error"}, status_code=status.HTTP_400_BAD_REQUEST) return await box.fast_api_handler(request)