def render_POST(self, request): mode = request.args.get('hub.mode', [None])[0] url = request.args.get('hub.url', [None])[0] if not mode or not url: request.setResponseCode(http.BAD_REQUEST) return "400 Bad request: Expected 'hub.mode' and 'hub.url'" if mode == 'publish': queue.put('fetch', url) request.setResponseCode(http.NO_CONTENT) return "204 Published" else: request.setResponseCode(http.BAD_REQUEST) return "400 Bad request: Unrecognized mode"
def render_POST(self, request): mode = request.args.get('hub.mode', [None])[0] callback = request.args.get('hub.callback', [None])[0] topic = request.args.get('hub.topic', [None])[0] verify = request.args.get('hub.verify', [None]) verify_token = request.args.get('hub.verify_token', [None])[0] if not mode or not callback or not topic or not verify: request.setResponseCode(http.BAD_REQUEST) return "400 Bad request: Expected 'hub.mode', 'hub.callback', 'hub.topic', and 'hub.verify'" if not mode in ['subscribe', 'unsubscribe']: request.setResponseCode(http.BAD_REQUEST) return "400 Bad request: Unrecognized mode" verify = verify[0] # For now, only using the first preference of verify mode if not verify in ['sync', 'async']: request.setResponseCode(http.BAD_REQUEST) return "400 Bad request: Unsupported verification mode" to_verify = {'mode': mode, 'callback': callback, 'topic': topic, 'verify_token': verify_token} if verify == 'sync': def finish_success(request): request.setResponseCode(http.NO_CONTENT) request.write("204 Subscription created") request.finish() def finish_failed(request): request.setResponseCode(http.CONFLICT) request.write("409 Subscription verification failed") request.finish() to_verify['onsuccess'] = lambda x: finish_success(request) to_verify['onfail'] = lambda x: finish_failed(request) queue.put('verify', to_verify) return NOT_DONE_YET elif verify == 'async': queue.put('verify', to_verify) request.setResponseCode(http.ACCEPTED) return "202 Scheduled for verification"
def render(self, request): path = '/'.join(request.prepath[1:]) print path topic_param = request.args.get('_topic', [None])[0] if topic_param: del request.args['_topic'] data_params = urllib.urlencode(request.args, doseq=True) queue.put('dispatch', { 'topic' : topic_param, 'data' : data_params, 'content_type' : 'application/x-www-form-urlencoded', }) return "202 Scheduled" url_param = request.args.get('_url', [None])[0] if url_param: del request.args['_url'] url = 'http://%s' % path if len(path) else url_param if url: params = {} for k in request.args: value = request.args[k] if type(value) is list and len(value) == 1: params[k] = value[0] else: params[k] = value post_and_retry(url, params) request.setResponseCode(http.ACCEPTED) return "202 Scheduled" else: request.setResponseCode(http.BAD_REQUEST) return "400 No destination URL"
def receivedMessage(self, url): subscribers = len(subscriptions.get(url, [])) if subscribers: print "Fetching %s for %s subscribers" % (url, subscribers) client.getPage(url, headers={'X-Hub-Subscribers': subscribers}) \ .addCallbacks(lambda p: queue.put('dispatch', {'topic': url, 'data': p, 'content_type': 'application/atom+xml'}))