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 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"))
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'))