consolidate channe overwrite endpoint

This commit is contained in:
Simon 2024-11-08 14:04:35 +07:00
parent 29ce05b57d
commit 9b45187db4
3 changed files with 16 additions and 38 deletions

View File

@ -344,4 +344,4 @@ def channel_overwrites(channel_id, overwrites):
channel.upload_to_es()
channel.sync_to_videos()
return channel.json_data["channel_overwrites"]
return channel.json_data

View File

@ -19,11 +19,6 @@ urlpatterns = [
views.ChannelApiView.as_view(),
name="api-channel",
),
path(
"<slug:channel_id>/about/",
views.ChannelApiAboutView.as_view(),
name="api-channel-view",
),
path(
"<slug:channel_id>/aggs/",
views.ChannelAggsApiView.as_view(),

View File

@ -87,6 +87,21 @@ class ChannelApiView(ApiBaseView):
self.get_document(channel_id)
return Response(self.response, status=self.status_code)
def post(self, request, channel_id):
"""modify channel overwrites"""
data = request.data
if not isinstance(data, dict) or not "channel_overwrites" in data:
return Response({"error": "invalid payload"}, status=400)
overwrites = data["channel_overwrites"]
try:
json_data = channel_overwrites(channel_id, overwrites)
except ValueError as err:
return Response({"error": str(err)}, status=400)
return Response(json_data, status=200)
def delete(self, request, channel_id):
# pylint: disable=unused-argument
"""delete channel"""
@ -102,38 +117,6 @@ class ChannelApiView(ApiBaseView):
return Response(message, status=status_code)
class ChannelApiAboutView(ApiBaseView):
"""resolves to /api/channel/<channel_id>/about/
GET: returns the channel specific settings
POST: sets the channel specific settings, returning current values
"""
permission_classes = [AdminWriteOnly]
def get(self, request, channel_id):
"""get channel overwrites"""
# pylint: disable=unused-argument
channel = YoutubeChannel(channel_id)
channel.get_from_es()
if not channel.json_data:
return Response({"error": "unknown channel id"}, status=404)
return Response(channel.get_overwrites())
def post(self, request, channel_id):
"""modify channel overwrites"""
data = request.data
if not isinstance(data, dict):
return Response({"error": "invalid payload"}, status=400)
try:
new_channel_overwrites = channel_overwrites(channel_id, data)
except ValueError as err:
return Response({"error": str(err)}, status=400)
return Response(new_channel_overwrites, status=200)
class ChannelAggsApiView(ApiBaseView):
"""resolves to /api/channel/<channel_id>/aggs/
GET: get channel aggregations