From 21972d9630e34a17619c0eae81f5f2080eb4dcb4 Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Fri, 13 Mar 2020 16:16:47 +0100 Subject: [PATCH] See #170: fixed several feed parsing issues, again 2 --- api/config/settings/common.py | 2 ++ api/funkwhale_api/audio/serializers.py | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/api/config/settings/common.py b/api/config/settings/common.py index 8af05491fd..373c196d66 100644 --- a/api/config/settings/common.py +++ b/api/config/settings/common.py @@ -989,3 +989,5 @@ PODCASTS_THIRD_PARTY_VISIBILITY = env("PODCASTS_THIRD_PARTY_VISIBILITY", default PODCASTS_RSS_FEED_REFRESH_DELAY = env.int( "PODCASTS_RSS_FEED_REFRESH_DELAY", default=60 * 60 * 24 ) +# maximum items loaded through XML feed +PODCASTS_RSS_FEED_MAX_ITEMS = env.int("PODCASTS_RSS_FEED_MAX_ITEMS", default=250) diff --git a/api/funkwhale_api/audio/serializers.py b/api/funkwhale_api/audio/serializers.py index 8f46edc9a9..310176238a 100644 --- a/api/funkwhale_api/audio/serializers.py +++ b/api/funkwhale_api/audio/serializers.py @@ -366,8 +366,10 @@ def get_channel_from_rss_url(url): ) ) if parsed_feed.feed.get("rights"): - track_defaults["copyright"] = parsed_feed.feed.rights - for entry in entries: + track_defaults["copyright"] = parsed_feed.feed.rights[ + : music_models.MAX_LENGTHS["COPYRIGHT"] + ] + for entry in entries[: settings.PODCASTS_RSS_FEED_MAX_ITEMS]: logger.debug("Importing feed item %s", entry.id) s = RssFeedItemSerializer(data=entry) if not s.is_valid(): @@ -510,7 +512,9 @@ class RssFeedSerializer(serializers.Serializer): **artist_kwargs, defaults={ "attributed_to": service_actor, - "name": validated_data["title"], + "name": validated_data["title"][ + : music_models.MAX_LENGTHS["ARTIST_NAME"] + ], "content_category": "podcast", }, ) @@ -695,12 +699,16 @@ class RssFeedItemSerializer(serializers.Serializer): { "disc_number": validated_data.get("itunes_season", 1), "position": validated_data.get("itunes_episode", 1), - "title": validated_data["title"], + "title": validated_data["title"][ + : music_models.MAX_LENGTHS["TRACK_TITLE"] + ], "artist": channel.artist, } ) if "rights" in validated_data: - track_defaults["rights"] = validated_data["rights"] + track_defaults["rights"] = validated_data["rights"][ + : music_models.MAX_LENGTHS["COPYRIGHT"] + ] if "published_parsed" in validated_data: track_defaults["creation_date"] = datetime.datetime.fromtimestamp( -- GitLab