def test_get_route_by_name(self): controller = lambda x: x from happy.routes import RoutesDispatcher d = RoutesDispatcher() d.register(controller, 'foo', '/foo/*') self.assertEquals(d['foo'].path, '/foo/*')
def __init__(self, app_context): self.app_context = app_context # Set up skin static_version = str(int(time.time())) static = SkinApplication( Skin('edwin.views:static'), expires_timedelta=datetime.timedelta(days=3650) ) templates = Templates(Skin('edwin.views:templates'), PageTemplateFile) app_context.static_version = static_version app_context.templates = templates subapps = RoutesDispatcher(rewrite_paths=True) subapps.register(static, 'static', '/static/%s/*' % static_version) # Image application (serves images and creates sizes) from edwin.views.image import ImageApplication images = ImageApplication(app_context.image_cache_dir) if not os.path.exists(app_context.image_cache_dir): os.mkdir(app_context.image_cache_dir) # Routes from edwin.views.home import homepage_view from edwin.views.month import month_view from edwin.views.undo import undo_view routes = RoutesDispatcher() routes.register(homepage_view, 'homepage', '/') routes.register(month_view, 'month', '/archive/:year/:month/') routes.register(images, 'images', '/image/:fname/*') routes.register(undo_view, 'undo', '/undo/:code') # Use traversal for albums and photos from edwin.models.album import Album from edwin.models.photo import Photo from edwin.views.album import album_view from edwin.views.album import edit_album_view from edwin.views.album import delete_photos_view from edwin.views.photo import delete_photo_view from edwin.views.photo import photo_view from edwin.views.photo import edit_photo_view from edwin.views.photo import download_photo_view def root_factory(request): return app_context.photos photos = TraversalDispatcher(root_factory) photos.register(album_view, Album) photos.register(edit_album_view, Album, 'edit.json') photos.register(delete_photos_view, Album, 'delete_photos') photos.register(photo_view, Photo) photos.register(edit_photo_view, Photo, 'edit.json') photos.register(download_photo_view, Photo, 'dl') photos.register(delete_photo_view, Photo, 'delete') self.responders = [ subapps, routes, photos, ] app_context.routes = routes app_context.images = images
def test_no_match(self): controller = lambda x: x from happy.routes import RoutesDispatcher d = RoutesDispatcher() d.register(controller, 'foo', '/foo/*') from webob import Request self.assertEqual(d(Request.blank('/')), None)
def test_instance_callable(self): class Controller(object): def __call__(self, request): return 'Hello' from happy.routes import RoutesDispatcher d = RoutesDispatcher() d.register(Controller(), 'root', '/') from webob import Request self.assertEqual(d(Request.blank('/')), 'Hello')
def test_preserve_trailing_slash(self): controller1 = lambda request: (1, request.url) controller2 = lambda request: (2, request.url) from happy.routes import RoutesDispatcher d = RoutesDispatcher() d.register(controller1, 'foobar', '/foo/bar/') d.register(controller2, 'fooplus', '/foo/*') from webob import Request req = Request.blank self.assertEqual(d(req('/foo/bar/')), (1, 'http://localhost/foo/bar/')) self.assertEqual(d(req('/foo/cat/')), (2, 'http://localhost/foo/cat/'))
def test_request_rewrite(self): controller = lambda request: (request.script_name, request.path_info) from happy.routes import RoutesDispatcher d = RoutesDispatcher(rewrite_paths=True) d.register(controller, 'a', '/foo/:a/*') from webob import Request req = Request.blank self.assertEqual(d(req('/foo/man/')), ('/foo/man/', '')) self.assertEqual(d(req('/foo/man/choo/man')), ('/foo/man', '/choo/man')) self.assertEqual(d(req('/foo/man/choo/man/')), ('/foo/man', '/choo/man/'))
def test_override(self): def controller(foo): def wrapper(request): return foo return wrapper from happy.routes import RoutesDispatcher d = RoutesDispatcher() d.register(controller('one'), 'one', '/foo') import webob request = webob.Request.blank('/foo') self.assertEqual(d(request), 'one') self.assertRaises(ValueError, d.register, controller('two'), 'two', '/foo') d.override(controller('two'), 'two', '/foo') self.assertEqual(d(request), 'two')
def test_url(self): controller = lambda x: x from happy.routes import RoutesDispatcher d = RoutesDispatcher() one = d.register(controller, 'one', '/foo/bar/*') two = d.register(controller, 'two', '/foo/:bar') three = d.override(controller, 'three', '/foo/:bar/') import webob request = webob.Request.blank('/') self.assertEqual(one.url(request), 'http://localhost/foo/bar/') self.assertEqual(one.url(request, subpath=['bean', 'cheese']), 'http://localhost/foo/bar/bean/cheese') self.assertEqual(two.url(request, bar='booze'), 'http://localhost/foo/booze') self.assertEqual(three.url(request, bar='booze'), 'http://localhost/foo/booze/')
def test_wildcard(self): def controller1(request): return 'One', request.match_dict, request.subpath def controller2(request): return 'Two', request.match_dict, request.subpath def controller3(request): return 'Three', request.match_dict, request.subpath from happy.routes import RoutesDispatcher d = RoutesDispatcher() d.register(controller1, 'foo', '/foo/:a/*') d.register(controller2, 'foobar_plus', '/foo/bar/*') from webob import Request req = Request.blank self.assertEqual(d(req('/foo/man/choo')), ('One', {'a': 'man'}, ['choo',])) self.assertEqual(d(req('/foo/bar/')), ('Two', {}, [])) self.assertEqual(d(req('/foo/bar/chew/toy')), ('Two', {}, ['chew', 'toy'])) d.register(controller3, 'foobar', '/foo/bar/') self.assertEqual(d(req('/foo/bar/chew/toy')), ('Two', {}, ['chew', 'toy'])) self.assertEqual(d(req('/foo/bar/')), ('Three', {}, []))
def test_dispatch(self): def controller1(request): return 'One' def controller2(request, a, b): return ['Two', a, b] def controller3(request, a, bar, foo): return ['Three', a, foo, bar] from happy.routes import RoutesDispatcher d = RoutesDispatcher() d.register(controller1, 'root', '/') d.register(controller2, 'one', '/foo/:a/bar/:b') d.register(controller2, 'two', '/:a/:b') d.register(controller3, 'three', '/:a/:foo/:bar/happy') from webob import Request req = Request.blank self.assertEqual(d(req('/')), 'One') self.assertEqual(d(req('/foo/cat/bar/dog')), ['Two', 'cat', 'dog']) self.assertEqual(d(req('/egg/bird')), ['Two', 'egg', 'bird']) self.assertEqual(d(req('/lily/barf/pi/happy')), ['Three', 'lily', 'barf', 'pi']) self.assertEqual(d(req('/'), '/foo/bar/none'), None)