class TestDispatcherMisses(unittest.TestCase): class MyIncompleteColl(Collection): def __init__(self): self.called = {} def _ok(self, environ, start_response): start_response("200 Ok", [("Content-Type", "text/plain")]) return ["Dispatched correctly."] def list(self, environ, start_response): self.called['list'] = True return self._ok(environ, start_response) def delete(self, environ, start_response): self.called['delete'] = True return self._ok(environ, start_response) def setUp(self): self.collection = self.MyIncompleteColl() self.select = Dispatcher() self.select.addregex("/blog/(?P<id>\w+)?(;(?P<noun>\w+))?", _ANY_=self.collection) def start_response(self, status, headers): self.status = int(status.split(' ')[0]) def test_missing(self): environ = { "PATH_INFO": "/blog/", "REQUEST_METHOD": "POST" } self.select(environ, self.start_response) self.assertEqual(404, self.status) def test_list(self): environ = { "PATH_INFO": "/blog/", "REQUEST_METHOD": "GET" } self.select(environ, self.start_response) self.assertTrue('list' in self.collection.called) self.assertEqual(200, self.status) def test_list_miss(self): environ = { "PATH_INFO": "/fredblog/", "REQUEST_METHOD": "GET" } self.select(environ, self.start_response) self.assertTrue(len(self.collection.called) == 0) self.assertEqual(404, self.status)
class TestDispatcher(unittest.TestCase): class MyColl(Collection): def __init__(self): self.called = {} def _ok(self, environ, start_response): start_response("200 Ok", [("Content-Type", "text/plain")]) return ["Dispatched correctly."] def list(self, environ, start_response): self.called['list'] = True return self._ok(environ, start_response) def create(self, environ, start_response): self.called['create'] = True return self._ok(environ, start_response) def retrieve(self, environ, start_response): self.called['retrieve'] = True return self._ok(environ, start_response) def update(self, environ, start_response): self.called['update'] = True return self._ok(environ, start_response) def delete(self, environ, start_response): self.called['delete'] = True return self._ok(environ, start_response) def get_create_form(self, environ, start_response): self.called['get_create_form'] = True return self._ok(environ, start_response) def post_create_form(self, environ, start_response): self.called['post_create_form'] = True return self._ok(environ, start_response) def setUp(self): self.collection = self.MyColl() self.select = Dispatcher() self.select.addregex("/blog/(?P<id>\w+)?(;(?P<noun>\w+))?", _ANY_=self.collection) def start_response(self, status, headers): self.status = int(status.split(' ')[0]) def testretrieve(self): environ = { "PATH_INFO": "/blog/1", "REQUEST_METHOD": "GET" } self.select(environ, self.start_response) self.assertTrue(self.collection.called['retrieve']) def testupdate(self): environ = { "PATH_INFO": "/blog/1", "REQUEST_METHOD": "PUT" } self.select(environ, self.start_response) self.assertEqual(environ['wsgiorg.routing_args'][1]['id'], '1') self.assertTrue(self.collection.called['update']) def testdelete(self): environ = { "PATH_INFO": "/blog/1", "REQUEST_METHOD": "DELETE" } self.select(environ, self.start_response) self.assertTrue(self.collection.called['delete']) def testlist(self): environ = { "PATH_INFO": "/blog/", "REQUEST_METHOD": "GET" } self.select(environ, self.start_response) self.assertTrue(self.collection.called['list']) def testcreate(self): environ = { "PATH_INFO": "/blog/", "REQUEST_METHOD": "POST" } self.select(environ, self.start_response) self.assertTrue('create' in self.collection.called) def testcreate_form(self): environ = { "PATH_INFO": "/blog/;create_form", "REQUEST_METHOD": "GET" } self.select(environ, self.start_response) self.assertTrue('get_create_form' in self.collection.called) def testcreate_form_on_entry(self): environ = { "PATH_INFO": "/blog/1;create_form", "REQUEST_METHOD": "POST" } self.select(environ, self.start_response) self.assertTrue('post_create_form' in self.collection.called) self.assertEqual(200, self.status) def test_missing(self): environ = { "PATH_INFO": "/blog/1;no_create_form", "REQUEST_METHOD": "POST" } self.select(environ, self.start_response) self.assertFalse('no_create_form' in self.collection.called) self.assertEqual(404, self.status) def test_ok(self): environ = { "PATH_INFO": "/blog/1;_ok", "REQUEST_METHOD": "GET" } self.select(environ, self.start_response) self.assertFalse('_ok' in self.collection.called) self.assertEqual(404, self.status)
def setUp(self): self.collection = self.MyColl() self.select = Dispatcher() self.select.addregex("/blog/(?P<id>\w+)?(;(?P<noun>\w+))?", _ANY_=self.collection)
from robaccia.wsgidispatcher import Dispatcher from robaccia import deferred_collection app = Dispatcher() app.add('/{view:alnum}/[{id:unreserved}][;{noun:unreserved}]', deferred_collection)