def create_feed_from_feed_info(feed_info, hub=None, feed_format=None): if not hub: if feed_info.hub: hub = feed_info.hub else: hub = app.config.get("DEFAULT_HUB") feed = Feed.query.filter_by(topic=feed_info.url).first() if not feed: feed = Feed(topic=feed_info.url, hub=hub) feed.create_unique_url() feed.create_secret() feed.feed_format = feed_format if feed_format else feed.feed_format if not feed.callback_url: feed.callback_url = get_public_url(feed) feed.site_url = (feed_info.site_url,) feed.description = (feed_info.descripton,) feed.site_name = (feed_info.site_name,) feed.title = (feed_info.title,) feed.site_icon_link = feed_info.site_icon_link return feed
def update_feed_details(self, data: Dict, feed: Feed) -> None: """ Updates the title and description of a feed if they have been sent with the notification. :param data: deserialized JSON :type data: Dict :param feed: The Feed to be updated :type feed: Feed :return: Feed object """ feed.title = data.get("title") if data.get("description"): feed.description = data["description"] if data.get("home_page_url"): feed.site_url = data["home_page_url"] if data.get("favicon"): feed.site_icon_url = data["favicon"] if data.get("feed_url"): feed.update_feed_topic(data["feed_url"]) if data.get("expired") and bool(data.get("expired")) == True: feed.set_expired() if data.get("hubs"): feed.handle_websub(data["hubs"])
def create_feed(self, url, hub=None, find_feed=True): """ Creates a Feed, searching the website for a feed and PuSH links if find_feed is True. :param url: The URL of a website or feed. :param hub: The URL of the PuSH hub to use. :param find_feed: Set to True to search the website for a feed and override the url if feed is found. :return: Feed """ topic = url parsed_feed = None if find_feed: app.logger.info(u'Finding feed for url {0}'.format(url)) data = get_feed(url) app.logger.info(u'Found feed {0} with hub {1} for url {2}' .format(data[1], data[0], url)) if data[0]: if not hub: hub = data[0] if data[1]: topic = data[1] if data[2]: parsed_feed = data[2] if not hub: hub = app.config['DEFAULT_HUB'] app.logger.info(u'Creating Feed with topic {0} and hub {1}' .format(topic, hub)) feed = Feed(topic=topic, hub=hub) if parsed_feed: try: url = parsed_feed.feed['link'] domain = get_domain(url) if domain: app.logger.info('Set site_url for Feed {0} to {1}' .format(feed, domain)) feed.site_url = domain except: pass db.session.add(feed) if parsed_feed: app.logger.info(u'Feed creation for topic {0} parsed a feed, ' 'sending notification'.format(topic)) notification_received.send(self, feed=feed, content_type='application/rss+xml', content=parsed_feed, parsed=True) db.session.commit() return feed
def create_feed(self, url, hub=None, find_feed=True): """ Creates a Feed, searching the website for a feed and PuSH links if find_feed is True. :param url: The URL of a website or feed. :param hub: The URL of the PuSH hub to use. :param find_feed: Set to True to search the website for a feed and override the url if feed is found. :return: Feed """ topic = url parsed_feed = None if find_feed: app.logger.info("Finding feed for url %s", url) data = get_feed(url) app.logger.info( "Found feed %s with hub %s for url %s", data[1], data[0], url ) if data[0]: if not hub: hub = data[0] if data[1]: topic = data[1] if data[2]: parsed_feed = data[2] if not hub: hub = app.config.get("DEFAULT_HUB") app.logger.info("Creating Feed with topic %s and hub %s", topic, hub) feed = Feed(topic=topic, hub=hub) if parsed_feed: try: url = parsed_feed.feed.get("link") domain = get_domain(url) if domain: app.logger.info("Set site_url for %s to %s", feed, domain) feed.site_url = domain except Exception as e: app.logger.error("Error getting domain for %s: %s", feed, e) pass db.session.add(feed) if parsed_feed: app.logger.info( "Feed creation for topic %s parsed a feed, " "sending notification", topic, ) notification_received.send( self, feed=feed, content_type="application/rss+xml", content=parsed_feed, parsed=True, ) db.session.commit() return feed