Exemple #1
0
def feed_push_update(feed_key):
    feed = ndb.Key(urlsafe=feed_key).get()
    if not feed:
        raise ndb.Return(("No feed", 404))

    data = request.stream.read()
    logger.info('Got PuSH body: %s', data)
    logger.info('Got PuSH headers: %s', request.headers)

    if feed.hub_secret:
        server_signature = request.headers.get('X-Hub-Signature', None)
        signature = hmac.new(feed.hub_secret, data).hexdigest()

        if server_signature != signature:
            logger.warn('Got PuSH subscribe POST for feed key=%s w/o valid signature: sent=%s != expected=%s', feed_key,
                        server_signature, signature)

            raise ndb.Return('')

    # I want to turn these off for a bit because they seem to be causing double posts
    raise ndb.Return('')

    yield feed.clear_error()
    parsed_feed = feedparser.parse(data)
    new_guids, old_guids = yield Entry.process_parsed_feed(parsed_feed, feed, overflow=False)
    yield Entry.publish_for_feed(feed, skip_queue=False)

    raise ndb.Return('')
Exemple #2
0
def feed_push_update(feed_key):
    feed = ndb.Key(urlsafe=feed_key).get()
    if not feed:
        raise ndb.Return(("No feed", 404))

    data = request.stream.read()
    logger.info("Got PuSH body: %s", data)
    logger.info("Got PuSH headers: %s", request.headers)

    if feed.hub_secret:
        server_signature = request.headers.get("X-Hub-Signature", None)
        signature = hmac.new(feed.hub_secret, data).hexdigest()

        if server_signature != signature:
            logger.warn(
                "Got PuSH subscribe POST for feed key=%s w/o valid signature: sent=%s != expected=%s",
                feed_key,
                server_signature,
                signature,
            )

            raise ndb.Return("")

    # I want to turn these off for a bit because they seem to be causing double posts
    raise ndb.Return("")

    yield feed.clear_error()
    parsed_feed = feedparser.parse(data)
    new_guids, old_guids = yield Entry.process_parsed_feed(parsed_feed, feed, overflow=False)
    yield Entry.publish_for_feed(feed, skip_queue=False)

    raise ndb.Return("")
def tq_feed_post_job():
    """Post some feeds feed"""
    if not request.headers.get("X-AppEngine-QueueName"):
        raise ndb.Return(jsonify_error(message="Not a Task call"))

    keys = request.form.get("keys")
    if not keys:
        logger.info("Task Queue post no keys")
        raise ndb.Return(jsonify_error(code=500))

    success = 0
    errors = 0
    num_posted = 0
    ndb_keys = [ndb.Key(urlsafe=key) for key in keys.split(",")]
    feeds = yield ndb.get_multi_async(ndb_keys)
    logger.info("Got %d feed(s) for posting", len(feeds))
    futures = []

    for feed in feeds:
        futures.append((feed, Entry.publish_for_feed(feed)))

    for feed, future in futures:
        try:
            num_posts = yield future
            if num_posts is not None:
                num_posted += num_posts
            success += 1
        except:
            errors += 1
            if feed:
                logger.exception("Failed to Publish feed:%s" % (feed.feed_url,))
            else:
                logger.exception("Failed to publish non-exsistant feed")

    logger.info("Post Feeds success:%s errors: %s num_posted: %s", success, errors, num_posted)
    raise ndb.Return(jsonify(status="ok"))
Exemple #4
0
def tq_feed_post_job():
    """Post some feeds feed"""
    if not request.headers.get('X-AppEngine-QueueName'):
        raise ndb.Return(jsonify_error(message='Not a Task call'))

    keys = request.form.get('keys')
    if not keys:
        logger.info('Task Queue post no keys')
        raise ndb.Return(jsonify_error(code=500))

    success = 0
    errors = 0
    num_posted = 0
    ndb_keys = [ndb.Key(urlsafe=key) for key in keys.split(',')]
    feeds = yield ndb.get_multi_async(ndb_keys)
    logger.info('Got %d feed(s) for posting', len(feeds))
    futures = []

    for feed in feeds:
        futures.append((feed, Entry.publish_for_feed(feed)))

    for feed, future in futures:
        try:
            num_posts = yield future
            if num_posts is not None:
                num_posted += num_posts
            success += 1
        except:
            errors += 1
            if feed:
                logger.exception('Failed to Publish feed:%s' % (feed.feed_url, ))
            else:
                logger.exception('Failed to publish non-exsistant feed')

    logger.info('Post Feeds success:%s errors: %s num_posted: %s', success, errors, num_posted)
    raise ndb.Return(jsonify(status='ok'))