From 152ebdf7377453bbcba0f59c7a40fcc2cbb3ec7f Mon Sep 17 00:00:00 2001 From: Fabio Manganiello Date: Sat, 17 Dec 2022 00:21:32 +0100 Subject: [PATCH] [#236] Added `author` and `tags` attributes to new feed entry event and schema objects. --- platypush/message/event/rss.py | 31 +++++++++++++++++++----- platypush/plugins/rss/__init__.py | 6 +++++ platypush/schemas/rss.py | 40 +++++++++++++++++-------------- 3 files changed, 53 insertions(+), 24 deletions(-) diff --git a/platypush/message/event/rss.py b/platypush/message/event/rss.py index e3a8657d26..0c98f49585 100644 --- a/platypush/message/event/rss.py +++ b/platypush/message/event/rss.py @@ -1,5 +1,5 @@ from datetime import datetime -from typing import Optional +from typing import Iterable, Optional from platypush.message.event import Event @@ -10,11 +10,30 @@ class NewFeedEntryEvent(Event): """ def __init__( - self, *, feed_url: str, url: str, title: Optional[str] = None, id: Optional[str] = None, - feed_title: Optional[str] = None, published: Optional[datetime] = None, summary: Optional[str] = None, - content: Optional[str] = None, **kwargs + self, + *, + feed_url: str, + url: str, + title: Optional[str] = None, + id: Optional[str] = None, + feed_title: Optional[str] = None, + published: Optional[datetime] = None, + summary: Optional[str] = None, + content: Optional[str] = None, + author: Optional[str] = None, + tags: Optional[Iterable[str]] = None, + **kwargs ): super().__init__( - feed_url=feed_url, url=url, title=title, id=id, feed_title=feed_title, - published=published, summary=summary, content=content, **kwargs + feed_url=feed_url, + url=url, + title=title, + id=id, + feed_title=feed_title, + published=published, + summary=summary, + content=content, + author=author, + tags=tags or [], + **kwargs ) diff --git a/platypush/plugins/rss/__init__.py b/platypush/plugins/rss/__init__.py index 10ef835075..ae274af13d 100644 --- a/platypush/plugins/rss/__init__.py +++ b/platypush/plugins/rss/__init__.py @@ -129,6 +129,12 @@ class RssPlugin(RunnablePlugin): 'title': entry.title, 'summary': getattr(entry, 'summary', None), 'content': self._parse_content(entry), + 'author': getattr(entry, 'author', None), + 'tags': [ + tag['term'] + for tag in getattr(entry, 'tags', []) + if tag.get('term') + ], } for entry in feed.entries if getattr(entry, 'published_parsed', None) diff --git a/platypush/schemas/rss.py b/platypush/schemas/rss.py index 0298b21628..47cc716757 100644 --- a/platypush/schemas/rss.py +++ b/platypush/schemas/rss.py @@ -5,36 +5,40 @@ from platypush.schemas import DateTime class RssFeedEntrySchema(Schema): - feed_title = fields.String(metadata=dict(description='Feed title')) + feed_title = fields.String(metadata={'description': 'Feed title'}) feed_url = fields.URL( required=True, - metadata=dict( - description='URL of the feed', - example='https://some-website/rss', - ) + metadata={ + 'description': 'URL of the feed', + 'example': 'https://some-website/rss', + }, ) id = fields.String( required=True, - metadata=dict( - description='Feed entry ID', - example='1234', - ) + metadata={ + 'description': 'Feed entry ID', + 'example': '1234', + }, ) url = fields.URL( required=True, - metadata=dict( - description='URL of the feed entry', - example='https://some-website/articles/1234', - ) + metadata={ + 'description': 'URL of the feed entry', + 'example': 'https://some-website/articles/1234', + }, ) published = DateTime( - required=True, - metadata=dict(description='Entry published time') + required=True, metadata={'description': 'Entry published time'} ) - title = fields.String(metadata=dict(description='Feed entry title')) - summary = fields.String(metadata=dict(description='Feed entry summary')) - content = fields.String(metadata=dict(description='Feed entry content')) + title = fields.String(metadata={'description': 'Feed entry title'}) + summary = fields.String(metadata={'description': 'Feed entry summary'}) + content = fields.String(metadata={'description': 'Feed entry content'}) + author = fields.String(metadata={'description': 'Feed entry author'}) + tags = fields.List( + fields.String(), + metadata={'description': 'Feed entry tags'}, + )