From de24fcd2075b45531ab9e3b9644b9a47dd7ae7ed Mon Sep 17 00:00:00 2001 From: kralverde <80051564+kralverde@users.noreply.github.com> Date: Fri, 8 Nov 2024 00:06:08 -0500 Subject: [PATCH] add /api/channel/{channel-id}/about/ (#783) * add /api/channel/{channel-id}/about/ * move testing function * remove unused import * fix unused import * fix formatting * simplify channel overwrites * remove unused --------- Co-authored-by: Simon --- backend/channel/src/index.py | 22 +++++++--------------- backend/channel/urls.py | 5 +++++ backend/channel/views.py | 34 +++++++++++++++++++++++++++++++++- 3 files changed, 45 insertions(+), 16 deletions(-) diff --git a/backend/channel/src/index.py b/backend/channel/src/index.py index b3b47db9..1273930e 100644 --- a/backend/channel/src/index.py +++ b/backend/channel/src/index.py @@ -326,22 +326,12 @@ class YoutubeChannel(YouTubeItem): for key, value in overwrites.items(): if key not in valid_keys: raise ValueError(f"invalid overwrite key: {key}") - elif value == "disable": - to_write[key] = False + + if value is None and key in to_write: + to_write.pop(key) continue - elif value == "0": - if key in to_write: - del to_write[key] - continue - elif value == "1": - to_write[key] = True - continue - elif isinstance(value, int) and int(value) < 0: - if key in to_write: - del to_write[key] - continue - elif value is not None and value != "": - to_write.update({key: value}) + + to_write.update({key: value}) self.json_data["channel_overwrites"] = to_write @@ -353,3 +343,5 @@ def channel_overwrites(channel_id, overwrites): channel.set_overwrites(overwrites) channel.upload_to_es() channel.sync_to_videos() + + return channel.json_data["channel_overwrites"] diff --git a/backend/channel/urls.py b/backend/channel/urls.py index 4b4ec53e..4e370d62 100644 --- a/backend/channel/urls.py +++ b/backend/channel/urls.py @@ -19,6 +19,11 @@ urlpatterns = [ views.ChannelApiView.as_view(), name="api-channel", ), + path( + "/about/", + views.ChannelApiAboutView.as_view(), + name="api-channel-view", + ), path( "/aggs/", views.ChannelAggsApiView.as_view(), diff --git a/backend/channel/views.py b/backend/channel/views.py index e5c7c8cd..f7bcac15 100644 --- a/backend/channel/views.py +++ b/backend/channel/views.py @@ -1,6 +1,6 @@ """all channel API views""" -from channel.src.index import YoutubeChannel +from channel.src.index import YoutubeChannel, channel_overwrites from channel.src.nav import ChannelNav from common.src.urlparser import Parser from common.views_base import AdminWriteOnly, ApiBaseView @@ -102,6 +102,38 @@ class ChannelApiView(ApiBaseView): return Response(message, status=status_code) +class ChannelApiAboutView(ApiBaseView): + """resolves to /api/channel//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//aggs/ GET: get channel aggregations