38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
|
import logging
|
||
|
from fastapi import FastAPI, Request, Response
|
||
|
from fastapi.responses import JSONResponse
|
||
|
from utils.meme_util import MemeUtil
|
||
|
|
||
|
|
||
|
class Meme(FastAPI):
|
||
|
"""
|
||
|
Misc Endpoints
|
||
|
"""
|
||
|
|
||
|
def __init__(self, app: FastAPI, my_util, constants) -> None:
|
||
|
self.app: FastAPI = app
|
||
|
self.util = my_util
|
||
|
self.meme_util = MemeUtil(constants)
|
||
|
self.constants = constants
|
||
|
self.endpoints: dict = {
|
||
|
"memes/get_meme/{id:path}": self.get_meme_by_id,
|
||
|
"memes/list_memes": self.list_memes,
|
||
|
}
|
||
|
|
||
|
for endpoint, handler in self.endpoints.items():
|
||
|
app.add_api_route(
|
||
|
f"/{endpoint}", handler, methods=["GET"], include_in_schema=True
|
||
|
)
|
||
|
|
||
|
async def get_meme_by_id(self, id: int, request: Request) -> Response:
|
||
|
"""Get meme (image) by id"""
|
||
|
meme_image = await self.meme_util.get_meme_by_id(id)
|
||
|
if not meme_image:
|
||
|
return Response(status_code=404, content="Not found")
|
||
|
return Response(content=meme_image, media_type="image/png")
|
||
|
|
||
|
async def list_memes(self, page: int, request: Request) -> Response:
|
||
|
"""Get meme (image) by id"""
|
||
|
meme_list = await self.meme_util.list_memes(page)
|
||
|
return JSONResponse(content={"memes": meme_list})
|