Exemplo n.º 1
0
    def update_callback(self, ids):
        failed_feeds = []
        feeds = Feed.query.filter(Feed.id.in_(ids)).all()
        app.logger.info(u"Admin Updating Callback URL for Feeds: {0}".format(u", ".join(map(str, feeds))))
        for feed in feeds:
            if feed.status != STATUS.UNSUBSCRIBED:
                try:
                    result = subscriber.unsubscribe(feed.topic)
                    if result[0] in [200, 202, 204]:
                        feed.callback_url = get_public_url(feed)
                        result = subscriber.subscribe(feed.topic, find_feed=False)
                        flash_status(result)
                        db.session.add(feed)
                    else:
                        failed_feeds.append(feed)
                except Exception as e:
                    app.logger.error(str(e))
                    flash(str(e), ALERT.ERROR)
            else:
                feed.callback_url = get_public_url(feed)
                db.session.add(feed)

        db.session.commit()

        if failed_feeds:
            flash(u"Callback URL Update failed for: {0}".format(u", ".join(map(str, failed_feeds))))

        return redirect(url_for("feedview.index_view"))
Exemplo n.º 2
0
    def subscribe(self, ids):
        feeds = Feed.query.filter(Feed.id.in_(ids)).all()
        app.logger.info(u"Admin Subscribing to Feeds: {0}".format(u", ".join(map(str, feeds))))
        for feed in feeds:
            try:
                result = subscriber.subscribe(feed.topic, find_feed=False)
                flash_status(result)
            except Exception as e:
                app.logger.error(str(e))
                flash(str(e), ALERT.ERROR)

        return redirect(url_for("feedview.index_view"))
Exemplo n.º 3
0
def send_subscribe_feed():
    """
    Subscribes to a single feed.
    """

    requested_url = request.get_json()
    app.logger.info(u'User: {0} requested Subscription to feed: {0}'
                    .format(current_user, requested_url))

    # Only subscribe if feed was found by search_feed method and
    # loaded in session, otherwise return empty result.
    if requested_url not in session['feed_urls']:
        app.logger.warning(u'Requested url: {0} was not found in session'
                           .format(requested_url))
        return jsonify({'subcribed': None})

    print(session['feeds'])
    feed_info_schema = FeedInfoSchema(many=True)
    feedinfos = feed_info_schema.load(session['feeds'])
    print(feedinfos.data)

    feedinfo = None
    for f in feedinfos.data:
        f1 = feed_info_schema.make_feedinfo(f)
        print(f1)
        if f1.url == requested_url:
            feedinfo = f1

    if not feedinfo:
        app.logger.warning(u'Requested url: {0} was not found in session'
                           .format(requested_url))
        return jsonify({'subcribed': None})

    feed = Feed.query.filter_by(topic=feedinfo.url).first()
    if not feed:
        feed = Feed(topic=feedinfo.url,
                    hub=feedinfo.hub or app.config['DEFAULT_HUB'])
        feed.update_from_feedinfo(feedinfo)
        app.logger.info(u'User: {0} created Feed: {1}'
                        .format(current_user, feed))

    else:
        if feed.status == STATUS.SUBSCRIBED:
            feedinfo.subscribed = True
            return jsonify({'subcribed': feedinfo})

    db.session.add(feed)

    result = subscriber.subscribe(feed.topic, find_feed=False)
    return jsonify({'subscribed': feedinfo.url, 'message': result[1]})
Exemplo n.º 4
0
    def test_subscribe_succeeded(self):
        topic = 'http://test.com/feed'
        hub = 'http://push.superfeedr.com'

        responses.add(responses.POST,
                      hub,
                      body='{"title": "Success"}',
                      status=204,
                      content_type='application/json')

        result = subscriber.subscribe(topic, hub, find_feed=False)

        self.assertEqual(result[0], 204)
        feed = Feed.query.filter_by(topic=topic).first()
        self.assertEqual(feed.status, STATUS.PENDING_SUB)
Exemplo n.º 5
0
    def test_subscribe_failed(self):
        topic = 'http://test.com/feed'
        hub = 'http://push.superfeedr.com'

        responses.add(responses.POST,
                      hub,
                      body='{"error": "not found"}',
                      status=404,
                      content_type='application/json')

        result = subscriber.subscribe(topic, hub, find_feed=False)

        feed = Feed.query.filter_by(topic=topic).first()

        self.assertEqual(result[0], 404)
        self.assertIsNotNone(feed)
        self.assertEqual(feed.status, STATUS.PENDING_SUB)
        self.assertIsNone(feed.sub_time)
Exemplo n.º 6
0
def test_subscribe_succeeded_with_content(session):
    topic = 'http://test.com/feed'
    hub = 'http://push.superfeedr.com'

    notification_received.connect(when_notification_received)

    with open(TEST_FILES_DIR + 'rss.xml') as f:
        data = f.read()

    responses.add(responses.POST,
                  hub,
                  body=data,
                  status=200,
                  content_type='application/rss+xml')

    result = subscriber.subscribe(topic, hub, find_feed=False)

    assert result[0] == 200
    feed = Feed.query.filter_by(topic=topic).first()
    assert feed.title == 'David Beath'
    assert feed.status == STATUS.PENDING_SUB

    entryCount = Entry.query.count()
    assert entryCount == 10
Exemplo n.º 7
0
    def index(self):
        form = SubscribeForm()
        if request.method == "POST" and form.validate():
            if form.isjson.data is True:
                feed_format = "json"
            else:
                feed_format = "atom"
            hub = None
            if form.hub.data:
                hub = form.hub.data
            find_feed = form.findfeed.data | False

            try:
                result = subscriber.subscribe(form.topic.data, hub, feed_format, find_feed)
                flash_status(result)
                return redirect(url_for("feedview.index_view"))
            except GetFeedError as e:
                app.logger.warning(str(e))
                flash(str(e), ALERT.ERROR)
            except Exception as e:
                app.logger.exception(str(e), exc_info=True)
                flash(str(e), ALERT.ERROR)

        return self.render("admin/subscribe.html", title="Subscribe", form=form)