From b8fc66612982cbdf0bf7f2560974baf22531cd9a Mon Sep 17 00:00:00 2001 From: shiran <2488252513@qq.com> Date: Sat, 31 May 2025 20:51:08 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=87=A0=E4=B8=AA?= =?UTF-8?q?=E7=AE=80=E5=8D=95=E6=8E=A5=E5=8F=A3=EF=BC=8C=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E5=85=BC=E5=AE=B9rust=E7=89=88=E6=9C=AC=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- meme_generator/app.py | 91 ++++++++++++++++++++++++++++++------------- 1 file changed, 64 insertions(+), 27 deletions(-) diff --git a/meme_generator/app.py b/meme_generator/app.py index 87ece1ac..727a713b 100644 --- a/meme_generator/app.py +++ b/meme_generator/app.py @@ -40,6 +40,7 @@ class MemeParamsResponse(BaseModel): class MemeInfoResponse(BaseModel): key: str params_type: MemeParamsResponse + params: MemeParamsResponse keywords: list[str] shortcuts: list[CommandShortcut] tags: set[str] @@ -47,6 +48,10 @@ class MemeInfoResponse(BaseModel): date_modified: datetime +class MemeInfoResponses(BaseModel): + memes: list[MemeInfoResponse] + + def register_router(meme: Meme): if args_type := meme.params_type.args_type: args_model = args_type.args_model @@ -109,6 +114,36 @@ class RenderMemeListRequest(BaseModel): add_category_icon: bool = True +def getMemeResponse(meme: Meme) -> MemeInfoResponse: + args_type_response = None + if args_type := meme.params_type.args_type: + args_model = args_type.args_model + args_type_response = MemeArgsResponse( + args_model=model_json_schema(args_model), + args_examples=[ + model_dump(example) for example in args_type.args_examples + ], + parser_options=args_type.parser_options, + ) + paramsResponse = MemeParamsResponse( + min_images=meme.params_type.min_images, + max_images=meme.params_type.max_images, + min_texts=meme.params_type.min_texts, + max_texts=meme.params_type.max_texts, + default_texts=meme.params_type.default_texts, + args_type=args_type_response, + ) + return MemeInfoResponse( + key=meme.key, + params_type=paramsResponse, + params=paramsResponse, + keywords=meme.keywords, + shortcuts=meme.shortcuts, + tags=meme.tags, + date_created=meme.date_created, + date_modified=meme.date_modified, + ) + def register_routers(): @app.post("/memes/render_list") def _(params: RenderMemeListRequest = RenderMemeListRequest()): @@ -132,14 +167,27 @@ def _(params: RenderMemeListRequest = RenderMemeListRequest()): media_type = str(filetype.guess_mime(content)) or "text/plain" return Response(content=content, media_type=media_type) + @app.get("/meme/code") + def _(): + return "python" + @app.get("/meme/version") def _(): return __version__ @app.get("/memes/keys") + @app.get("/meme/keys") def _(): return get_meme_keys() + @app.get("/meme/infos") + def _(): + memes = get_memes() + memesResponse = MemeInfoResponses(memes=[]) + for meme in memes: + memesResponse.memes.append(getMemeResponse(meme)) + return memesResponse.memes + @app.get("/memes/{key}/info") def _(key: str): try: @@ -147,33 +195,22 @@ def _(key: str): except NoSuchMeme as e: raise HTTPException(status_code=e.status_code, detail=e.message) - args_type_response = None - if args_type := meme.params_type.args_type: - args_model = args_type.args_model - args_type_response = MemeArgsResponse( - args_model=model_json_schema(args_model), - args_examples=[ - model_dump(example) for example in args_type.args_examples - ], - parser_options=args_type.parser_options, - ) - - return MemeInfoResponse( - key=meme.key, - params_type=MemeParamsResponse( - min_images=meme.params_type.min_images, - max_images=meme.params_type.max_images, - min_texts=meme.params_type.min_texts, - max_texts=meme.params_type.max_texts, - default_texts=meme.params_type.default_texts, - args_type=args_type_response, - ), - keywords=meme.keywords, - shortcuts=meme.shortcuts, - tags=meme.tags, - date_created=meme.date_created, - date_modified=meme.date_modified, - ) + return getMemeResponse(meme) + + @app.get("/meme/search") + def _(query: str, include_tags: bool = True): + memes = get_memes() + memesResponse = MemeInfoResponses(memes=[]) + for meme in memes: + if query in meme.key: + memesResponse.memes.append(getMemeResponse(meme)) + for keyword in meme.keywords: + if query in keyword: + memesResponse.memes.append(getMemeResponse(meme)) + if include_tags: + for tag in meme.tags: + if query in tag: + memesResponse.memes.append(getMemeResponse(meme)) @app.get("/memes/{key}/preview") async def _(key: str): From 32573c8ed562c044dd9a9576eb812b41be15d087 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 31 May 2025 12:55:03 +0000 Subject: [PATCH 2/2] style: auto fix by pre-commit hooks --- meme_generator/app.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/meme_generator/app.py b/meme_generator/app.py index 727a713b..82f2afb0 100644 --- a/meme_generator/app.py +++ b/meme_generator/app.py @@ -120,9 +120,7 @@ def getMemeResponse(meme: Meme) -> MemeInfoResponse: args_model = args_type.args_model args_type_response = MemeArgsResponse( args_model=model_json_schema(args_model), - args_examples=[ - model_dump(example) for example in args_type.args_examples - ], + args_examples=[model_dump(example) for example in args_type.args_examples], parser_options=args_type.parser_options, ) paramsResponse = MemeParamsResponse( @@ -144,6 +142,7 @@ def getMemeResponse(meme: Meme) -> MemeInfoResponse: date_modified=meme.date_modified, ) + def register_routers(): @app.post("/memes/render_list") def _(params: RenderMemeListRequest = RenderMemeListRequest()):