deprecate inconsistent api endpoints

This commit is contained in:
Your Name 2023-06-03 01:43:03 -04:00 committed by Henri Dickson
parent f92861105d
commit 1c082f8308

View file

@ -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}