view wsgraph/web.py @ 2:7a3b21cafc00

start to sketch out REST API
author Jeff Hammel <jhammel@mozilla.com>
date Sun, 09 Dec 2012 10:40:17 -0800
parents cfcfa093e4b4
children 42f484880808
line wrap: on
line source

#!/usr/bin/env python

"""
web handler for WSGraph
"""

import json
from webob import Request, Response, exc

def JSONFormatter(**kwargs):
    return json.dumps(kwargs, sort_keys=True)

def JSONGraphFormatter(graph):
    return json.dumps({'nodes': graph.nodes(),
                       'edges': graph.edges()},
                      sort_keys=True)

class Dispatcher(object):

    def __init__(self, graph,
                 graph_formatters=None, # TODO
                 node_formatters=None, # TODO
                 edge_formatters=None, # TODO
                 require_auth=False):
        self.graph = graph
        self.require_auth = require_auth
        self.formatters = {0: JSONGraphFormatter,
                           1: JSONFormatter,
                           2: JSONFormatter}

    def __call__(self, environ, start_response):
        request = Request(environ)
        import pdb; pdb.set_trace()
        return response(environ, start_response)

    @staticmethod
    def path_segments(request):
        import pdb; pdb.set_trace()

    # HTTP methods

    def GET(self, request):
        """
        respond to a GET request

        Formatters are keyed off of

        formatters = {0: {
        }

        API:

        ?format=<format>

        """

        segments = self.path_segments(request)

        # formatter
        formatter = self.formatters[len(segments)]
        return Response(content_type='text/plain',
                        body="WSGraph")

    def POST(self, request):
        """
        respond to a POST request

        API:

        ?update :
        """

        return exc.HTTPSeeOther('/') # TODO: /path/to/self

    def HEAD(self, request):
        """respond to a HEAD request"""
        raise NotImplementedError

if __name__ == '__main__':

    # imports
    from wsgiref import simple_server
    from .model import MemoryCache

    graph = MemoryCache()

    app = Dispatcher(graph=graph)
    server = simple_server.make_server(host='0.0.0.0', port=8080, app=app)
    server.serve_forever()