From 1c082f83087ee1f6725070cdbff06c51ed39770b Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 3 Jun 2023 01:43:03 -0400 Subject: [PATCH] deprecate inconsistent api endpoints --- catalog/api.py | 158 +++++++++++++++++++++++++++++-------------------- 1 file changed, 94 insertions(+), 64 deletions(-) diff --git a/catalog/api.py b/catalog/api.py index 9a31f9f1..c7d6e77a 100644 --- a/catalog/api.py +++ b/catalog/api.py @@ -52,6 +52,84 @@ def fetch_item(request, url: str): return 202, {"message": "Fetch in progress"} +def _get_item(cls, uuid, response): + item = cls.get_by_url(uuid) + if not item: + return 404, {"message": "Item not found"} + if item.merged_to_item: + response["Location"] = item.merged_to_item.api_url + return 302, {"message": "Item merged", "url": item.merged_to_item.api_url} + if item.is_deleted: + return 404, {"message": "Item not found"} + return item + + +@api.get( + "/book/{uuid}", + response={200: EditionSchema, 302: RedirectedResult, 404: Result}, + auth=None, +) +def get_book(request, uuid: str, response: HttpResponse): + return _get_item(Edition, uuid, response) + + +@api.get( + "/movie/{uuid}", + response={200: MovieSchema, 302: RedirectedResult, 404: Result}, + auth=None, +) +def get_movie(request, uuid: str, response: HttpResponse): + return _get_item(Movie, uuid, response) + + +@api.get( + "/tv/{uuid}", + response={200: TVShowSchema, 302: RedirectedResult, 404: Result}, + auth=None, +) +def get_tv_show(request, uuid: str, response: HttpResponse): + return _get_item(TVShow, uuid, response) + + +@api.get( + "/tv/season/{uuid}", + response={200: TVSeasonSchema, 302: RedirectedResult, 404: Result}, + auth=None, +) +def get_tv_season(request, uuid: str, response: HttpResponse): + return _get_item(TVSeason, uuid, response) + + +@api.get( + "/podcast/{uuid}", + response={200: PodcastSchema, 302: RedirectedResult, 404: Result}, + auth=None, +) +def get_podcast(request, uuid: str, response: HttpResponse): + return _get_item(Podcast, uuid, response) + + +@api.get( + "/album/{uuid}", + response={200: AlbumSchema, 302: RedirectedResult, 404: Result}, + auth=None, +) +def get_album(request, uuid: str, response: HttpResponse): + return _get_item(Album, uuid, response) + + +@api.get( + "/game/{uuid}", + response={200: GameSchema, 302: RedirectedResult, 404: Result}, + auth=None, +) +def get_game(request, uuid: str, response: HttpResponse): + return _get_item(Game, uuid, response) + + +# Legacy API will be removed soon + + @api.post( "/catalog/search", response={200: SearchResult, 400: Result}, @@ -87,58 +165,32 @@ def fetch_item_legacy(request, url: str): return 202, {"message": "Fetch in progress"} -def _get_item(cls, uuid, response): - item = cls.get_by_url(uuid) - if not item: - return 404, {"message": "Item not found"} - if item.merged_to_item: - response["Location"] = item.merged_to_item.api_url - return 302, {"message": "Item merged", "url": item.merged_to_item.api_url} - if item.is_deleted: - return 404, {"message": "Item not found"} - return item - - -@api.get( - "/book/{uuid}/", - response={200: EditionSchema, 302: RedirectedResult, 404: Result}, - auth=None, -) -def get_book(request, uuid: str, response: HttpResponse): - return _get_item(Edition, uuid, response) - - @api.get( "/movie/{uuid}/", response={200: MovieSchema, 302: RedirectedResult, 404: Result}, + summary="This method is deprecated, will be removed by Aug 1 2023", auth=None, + deprecated=True, ) -def get_movie(request, uuid: str, response: HttpResponse): +def get_movie_legacy(request, uuid: str, response: HttpResponse): return _get_item(Movie, uuid, response) @api.get( "/tv/{uuid}/", response={200: TVShowSchema, 302: RedirectedResult, 404: Result}, + summary="This method is deprecated, will be removed by Aug 1 2023", auth=None, + deprecated=True, ) -def get_tv_show(request, uuid: str, response: HttpResponse): +def get_tv_show_legacy(request, uuid: str, response: HttpResponse): return _get_item(TVShow, uuid, response) -@api.get( - "/tv/season/{uuid}/", - response={200: TVSeasonSchema, 302: RedirectedResult, 404: Result}, - auth=None, -) -def get_tv_season(request, uuid: str, response: HttpResponse): - return _get_item(TVSeason, uuid, response) - - @api.get( "/tvseason/{uuid}/", response={200: TVSeasonSchema, 302: RedirectedResult, 404: Result}, - summary="This method is deprecated, will be removed by Aug 1 2023; use /api/tv/season instead", + summary="This method is deprecated, will be removed by Aug 1 2023", auth=None, deprecated=True, ) @@ -149,53 +201,31 @@ def get_tv_season_legacy(request, uuid: str, response: HttpResponse): @api.get( "/podcast/{uuid}/", response={200: PodcastSchema, 302: RedirectedResult, 404: Result}, + summary="This method is deprecated, will be removed by Aug 1 2023", auth=None, + deprecated=True, ) -def get_podcast(request, uuid: str, response: HttpResponse): +def get_podcast_legacy(request, uuid: str, response: HttpResponse): return _get_item(Podcast, uuid, response) @api.get( "/album/{uuid}/", response={200: AlbumSchema, 302: RedirectedResult, 404: Result}, + summary="This method is deprecated, will be removed by Aug 1 2023", auth=None, + deprecated=True, ) -def get_album(request, uuid: str, response: HttpResponse): +def get_album_legacy(request, uuid: str, response: HttpResponse): return _get_item(Album, uuid, response) @api.get( "/game/{uuid}/", response={200: GameSchema, 302: RedirectedResult, 404: Result}, + summary="This method is deprecated, will be removed by Aug 1 2023", auth=None, + deprecated=True, ) -def get_game(request, uuid: str, response: HttpResponse): +def get_game_legacy(request, uuid: str, response: HttpResponse): return _get_item(Game, uuid, response) - - -# @api.get("/book", response=List[EditionSchema]) -# def list_editions(request): -# qs = Edition.objects.all() -# return qs - - -# @api.post("/book/") -# def create_edition(request, payload: EditionInSchema): -# edition = Edition.objects.create(**payload.dict()) -# return {"id": edition.uuid} - - -# @api.put("/book/{uuid}/") -# def update_edition(request, uuid: str, payload: EditionInSchema): -# edition = get_object_or_404(Item, uid=base62.decode(uuid)) -# for attr, value in payload.dict().items(): -# setattr(edition, attr, value) -# edition.save() -# return {"success": True} - - -# @api.delete("/book/{uuid}/") -# def delete_edition(request, uuid: str): -# edition = get_object_or_404(Edition, uid=base62.decode(uuid)) -# edition.delete() -# return {"success": True}