diff --git a/pyproject.toml b/pyproject.toml index 9bc0689..333b693 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ version = "0.1.0" description = "" authors = ["Vitor Hideyoshi "] readme = "README.md" -packages = [{include = "resize_image_service"}] +packages = [{include = "storage_service"}] [tool.poetry.dependencies] python = "^3.8" diff --git a/resize_image_service/controller/__init__.py b/resize_image_service/controller/__init__.py deleted file mode 100644 index d6d0df7..0000000 --- a/resize_image_service/controller/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from resize_image_service.controller.s3_controller import s3_router - -from fastapi import FastAPI - -app = FastAPI() - -app.include_router(s3_router, tags=["s3"], prefix="/s3") diff --git a/resize_image_service/controller/s3_controller.py b/resize_image_service/controller/s3_controller.py deleted file mode 100644 index 9cd05cb..0000000 --- a/resize_image_service/controller/s3_controller.py +++ /dev/null @@ -1,48 +0,0 @@ -from resize_image_service.depends.depend_queue import dependency_queue -from resize_image_service.depends.depend_s3_service import ( - dependency_storage_service, -) -from resize_image_service.service.storage_service import StorageService -from resize_image_service.utils.enums.file_type import FileType -from resize_image_service.utils.file_name_hash import file_name_hash -from resize_image_service.worker.storage_file_worker import storage_file_worker - -from fastapi import Body, Depends, Form -from fastapi_utils.cbv import cbv -from fastapi_utils.inferring_router import InferringRouter -from rq import Queue - -from typing import Annotated - -s3_router = InferringRouter() - - -@cbv(s3_router) -class S3Controller: - queue: Queue = Depends(dependency_queue, use_cache=True) - storage_service: StorageService = Depends(dependency_storage_service, use_cache=True) - - @s3_router.get("/new_file_url/", status_code=200) - def new_file_url( - self, - username: Annotated[str, Body(embed=True)], - file_postfix: Annotated[str, Body(embed=True)], - file_type: Annotated[FileType, Body(embed=True)], - ) -> dict[str, str]: - return self.storage_service.get_temp_upload_link( - file_name_hash(username, file_postfix), file_type - ) - - @s3_router.get("/file_url/", status_code=200) - def file_url( - self, - username: Annotated[str, Body(embed=True)], - file_postfix: Annotated[str, Body(embed=True)], - ) -> dict[str, str]: - return self.storage_service.get_temp_read_link( - file_name_hash(username, file_postfix) - ) - - @s3_router.post("/process_file/", status_code=200) - def process_file(self, string_url: Annotated[str, Body(embed=True)]): - self.queue.enqueue(storage_file_worker, string_url) diff --git a/resize_image_service/worker/storage_file_worker.py b/resize_image_service/worker/storage_file_worker.py deleted file mode 100644 index 821c533..0000000 --- a/resize_image_service/worker/storage_file_worker.py +++ /dev/null @@ -1,7 +0,0 @@ -from resize_image_service.depends.depend_s3_service import ( - dependency_storage_service, -) - - -def storage_file_worker(string_url: str) -> None: - dependency_storage_service().process_image(string_url) diff --git a/resize_image_service/__init__.py b/storage_service/__init__.py similarity index 100% rename from resize_image_service/__init__.py rename to storage_service/__init__.py diff --git a/resize_image_service/__main__.py b/storage_service/__main__.py similarity index 58% rename from resize_image_service/__main__.py rename to storage_service/__main__.py index 242001a..7d9b6b9 100644 --- a/resize_image_service/__main__.py +++ b/storage_service/__main__.py @@ -1,5 +1,5 @@ -from resize_image_service.config.config_server import get_config_server -from resize_image_service.controller import app +from storage_service.config.config_server import get_config_server +from storage_service.controller import app import uvicorn diff --git a/resize_image_service/config/__init__.py b/storage_service/config/__init__.py similarity index 100% rename from resize_image_service/config/__init__.py rename to storage_service/config/__init__.py diff --git a/storage_service/config/config_allowed_origins.py b/storage_service/config/config_allowed_origins.py new file mode 100644 index 0000000..36c5e94 --- /dev/null +++ b/storage_service/config/config_allowed_origins.py @@ -0,0 +1,14 @@ +import os + +from dotenv import load_dotenv + + +def get_allowed_origins(): + load_dotenv() + + origins = os.environ.get("ALLOWED_ORIGINS", None) + + if origins is None: + return [] + + return origins.split(",") \ No newline at end of file diff --git a/resize_image_service/config/config_redis.py b/storage_service/config/config_redis.py similarity index 100% rename from resize_image_service/config/config_redis.py rename to storage_service/config/config_redis.py diff --git a/resize_image_service/config/config_s3.py b/storage_service/config/config_s3.py similarity index 86% rename from resize_image_service/config/config_s3.py rename to storage_service/config/config_s3.py index 31ce4db..3c05e44 100644 --- a/resize_image_service/config/config_s3.py +++ b/storage_service/config/config_s3.py @@ -1,4 +1,4 @@ -from resize_image_service.utils.enums.storage_type import StorageType +from storage_service.utils.enums.storage_type import StorageType from dotenv import load_dotenv diff --git a/resize_image_service/config/config_server.py b/storage_service/config/config_server.py similarity index 73% rename from resize_image_service/config/config_server.py rename to storage_service/config/config_server.py index fd57bc4..5a6fadb 100644 --- a/resize_image_service/config/config_server.py +++ b/storage_service/config/config_server.py @@ -7,5 +7,5 @@ def get_config_server(): load_dotenv() return { "host": os.environ.get("SERVER_HOST", "0.0.0.0"), - "port": os.environ.get("SERVER_PORT", 8000), + "port": int(os.environ.get("SERVER_PORT", 8000)), } diff --git a/storage_service/controller/__init__.py b/storage_service/controller/__init__.py new file mode 100644 index 0000000..aaaf5d4 --- /dev/null +++ b/storage_service/controller/__init__.py @@ -0,0 +1,19 @@ +from storage_service.config.config_allowed_origins import get_allowed_origins +from storage_service.controller.storage_controller import s3_router + +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware + + +app = FastAPI() + + +app.add_middleware( + CORSMiddleware, + allow_origins=get_allowed_origins(), + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +app.include_router(s3_router) diff --git a/storage_service/controller/storage_controller.py b/storage_service/controller/storage_controller.py new file mode 100644 index 0000000..ca09890 --- /dev/null +++ b/storage_service/controller/storage_controller.py @@ -0,0 +1,46 @@ +from storage_service.depends.depend_queue import dependency_queue +from storage_service.depends.depend_s3_service import ( + dependency_storage_service, +) +from storage_service.service.storage_service import StorageService +from storage_service.utils.enums.file_type import FileType +from storage_service.utils.file_name_hash import file_name_hash +from storage_service.worker.storage_file_worker import storage_file_worker + +from fastapi import Body, Depends, Form +from fastapi_utils.cbv import cbv +from fastapi_utils.inferring_router import InferringRouter +from rq import Queue + +from typing import Annotated + +s3_router = InferringRouter() + + +@cbv(s3_router) +class StorageController: + queue: Queue = Depends(dependency_queue, use_cache=True) + storage_service: StorageService = Depends(dependency_storage_service, use_cache=True) + + @s3_router.post("/new_file_url/", status_code=200) + def new_file_url( + self, + username: Annotated[str, Body(embed=True)], + file_postfix: Annotated[str, Body(embed=True)], + file_type: Annotated[FileType, Body(embed=True)], + ) -> dict[str, str]: + return self.storage_service.get_temp_upload_link( + file_name_hash(username, file_postfix), file_type + ) + + @s3_router.get("/file_url/", status_code=200) + def file_url(self, username: str, file_postfix: str) -> dict[str, str]: + return self.storage_service.get_temp_read_link( + file_name_hash(username, file_postfix) + ) + + @s3_router.post("/process_file/", status_code=200) + def process_file(self, + username: Annotated[str, Body(embed=True)], + file_postfix: Annotated[str, Body(embed=True)]): + self.queue.enqueue(storage_file_worker, username, file_postfix) diff --git a/resize_image_service/depends/__init__.py b/storage_service/depends/__init__.py similarity index 100% rename from resize_image_service/depends/__init__.py rename to storage_service/depends/__init__.py diff --git a/resize_image_service/depends/depend_queue.py b/storage_service/depends/depend_queue.py similarity index 64% rename from resize_image_service/depends/depend_queue.py rename to storage_service/depends/depend_queue.py index 8e26e9c..aede448 100644 --- a/resize_image_service/depends/depend_queue.py +++ b/storage_service/depends/depend_queue.py @@ -1,4 +1,4 @@ -from resize_image_service.config.config_redis import get_config_redis +from storage_service.config.config_redis import get_config_redis from redis import Redis from rq import Queue diff --git a/resize_image_service/depends/depend_s3_service.py b/storage_service/depends/depend_s3_service.py similarity index 53% rename from resize_image_service/depends/depend_s3_service.py rename to storage_service/depends/depend_s3_service.py index ef16b11..0e7f46a 100644 --- a/resize_image_service/depends/depend_s3_service.py +++ b/storage_service/depends/depend_s3_service.py @@ -1,7 +1,7 @@ -from resize_image_service.config.config_s3 import get_config_s3 -from resize_image_service.service.amazon_s3_service import AmazonS3Service -from resize_image_service.service.storage_service import StorageService -from resize_image_service.utils.enums.storage_type import StorageType +from storage_service.config.config_s3 import get_config_s3 +from storage_service.service.amazon_s3_service import AmazonS3Service +from storage_service.service.storage_service import StorageService +from storage_service.utils.enums.storage_type import StorageType from dotenv import load_dotenv diff --git a/resize_image_service/service/__init__.py b/storage_service/service/__init__.py similarity index 100% rename from resize_image_service/service/__init__.py rename to storage_service/service/__init__.py diff --git a/resize_image_service/service/amazon_s3_service.py b/storage_service/service/amazon_s3_service.py similarity index 91% rename from resize_image_service/service/amazon_s3_service.py rename to storage_service/service/amazon_s3_service.py index 9555be3..a400c7a 100644 --- a/resize_image_service/service/amazon_s3_service.py +++ b/storage_service/service/amazon_s3_service.py @@ -1,8 +1,8 @@ from __future__ import annotations -from resize_image_service.service.storage_service import StorageService -from resize_image_service.utils.enums.file_type import FileType -from resize_image_service.utils.file_handler import FILE_HANDLER +from storage_service.service.storage_service import StorageService +from storage_service.utils.enums.file_type import FileType +from storage_service.utils.file_handler import FILE_HANDLER import boto3 from PIL import Image @@ -40,7 +40,7 @@ class AmazonS3Service(StorageService): def get_temp_read_link(self, file_name) -> dict[str, str | Any]: return {"presigned_url": self._get_presigned_read_url(file_name)} - def process_file(self, file_name: str, file_type: FileType) -> None: + def process_file(self, file_name: str, file_type: FileType = FileType.PNG) -> None: file_bytes = self._get_file_obj(file_name) handler = FILE_HANDLER[file_type]["handler"] diff --git a/resize_image_service/service/storage_service.py b/storage_service/service/storage_service.py similarity index 77% rename from resize_image_service/service/storage_service.py rename to storage_service/service/storage_service.py index cce01f6..e065dca 100644 --- a/resize_image_service/service/storage_service.py +++ b/storage_service/service/storage_service.py @@ -1,6 +1,6 @@ from __future__ import annotations -from resize_image_service.utils.enums.file_type import FileType +from storage_service.utils.enums.file_type import FileType from abc import ABC, abstractmethod from typing import Any @@ -21,5 +21,5 @@ class StorageService(ABC): pass @abstractmethod - def process_file(self, file_name) -> None: + def process_file(self, file_name: str, file_type: FileType) -> None: pass diff --git a/resize_image_service/utils/__init__.py b/storage_service/utils/__init__.py similarity index 100% rename from resize_image_service/utils/__init__.py rename to storage_service/utils/__init__.py diff --git a/resize_image_service/utils/enums/__init__.py b/storage_service/utils/enums/__init__.py similarity index 100% rename from resize_image_service/utils/enums/__init__.py rename to storage_service/utils/enums/__init__.py diff --git a/resize_image_service/utils/enums/file_type.py b/storage_service/utils/enums/file_type.py similarity index 100% rename from resize_image_service/utils/enums/file_type.py rename to storage_service/utils/enums/file_type.py diff --git a/resize_image_service/utils/enums/storage_type.py b/storage_service/utils/enums/storage_type.py similarity index 100% rename from resize_image_service/utils/enums/storage_type.py rename to storage_service/utils/enums/storage_type.py diff --git a/resize_image_service/utils/file_handler/__init__.py b/storage_service/utils/file_handler/__init__.py similarity index 57% rename from resize_image_service/utils/file_handler/__init__.py rename to storage_service/utils/file_handler/__init__.py index e78370c..43930da 100644 --- a/resize_image_service/utils/file_handler/__init__.py +++ b/storage_service/utils/file_handler/__init__.py @@ -1,5 +1,5 @@ -from resize_image_service.utils.enums.file_type import FileType -from resize_image_service.utils.file_handler.handlers.image_handler import ( +from storage_service.utils.enums.file_type import FileType +from storage_service.utils.file_handler.handlers.image_handler import ( image_handler, ) diff --git a/resize_image_service/utils/file_handler/handlers/__init__.py b/storage_service/utils/file_handler/handlers/__init__.py similarity index 100% rename from resize_image_service/utils/file_handler/handlers/__init__.py rename to storage_service/utils/file_handler/handlers/__init__.py diff --git a/resize_image_service/utils/file_handler/handlers/image_handler.py b/storage_service/utils/file_handler/handlers/image_handler.py similarity index 100% rename from resize_image_service/utils/file_handler/handlers/image_handler.py rename to storage_service/utils/file_handler/handlers/image_handler.py diff --git a/resize_image_service/utils/file_name_hash.py b/storage_service/utils/file_name_hash.py similarity index 100% rename from resize_image_service/utils/file_name_hash.py rename to storage_service/utils/file_name_hash.py diff --git a/resize_image_service/worker/__init__.py b/storage_service/worker/__init__.py similarity index 100% rename from resize_image_service/worker/__init__.py rename to storage_service/worker/__init__.py diff --git a/storage_service/worker/storage_file_worker.py b/storage_service/worker/storage_file_worker.py new file mode 100644 index 0000000..6e03ff2 --- /dev/null +++ b/storage_service/worker/storage_file_worker.py @@ -0,0 +1,11 @@ +from storage_service.depends.depend_s3_service import ( + dependency_storage_service, +) +from storage_service.utils.enums.file_type import FileType +from storage_service.utils.file_name_hash import file_name_hash + + +def storage_file_worker(username: str, file_postfix: str) -> None: + dependency_storage_service().process_file( + file_name_hash(username, file_postfix) + )