def test_default_view(self): root = DummyModel() root_factory = lambda request: root from happy.traversal import TraversalDispatcher dispatcher = TraversalDispatcher(root_factory) calls = [] def view(request, context): calls.append((request, context)) dispatcher.register(view, DummyModel) from webob import Request request = Request.blank('/') dispatcher(request) self.assertEqual(calls[0][1], root)
def test_named_view(self): root = DummyModel() root_factory = lambda request: root from happy.traversal import TraversalDispatcher dispatcher = TraversalDispatcher(root_factory) def view(request, context): return 'Hello' dispatcher.register(view, DummyModel, 'hello') from webob import Request response = dispatcher(Request.blank('/')) self.assertEqual(response, None) response = dispatcher(Request.blank('/hello')) self.assertEqual(response, 'Hello')
def test_default_view_with_subpath(self): root = DummyModel() root_factory = lambda request: root from happy.traversal import TraversalDispatcher dispatcher = TraversalDispatcher(root_factory) calls = [] def view(request, context): calls.append((request, context)) dispatcher.register(view, DummyModel) from webob import Request request = Request.blank('/foo/bar') dispatcher(request) self.assertEqual(len(calls), 1) request, context = calls[0] self.assertEqual(request.subpath, ['foo', 'bar']) self.assertEqual(context, root)
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