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