Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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"])
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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