Ejemplo n.º 1
0
    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/*')
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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')
Ejemplo n.º 4
0
    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/'))
Ejemplo n.º 5
0
    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/'))
Ejemplo n.º 6
0
    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', {}, []))
Ejemplo n.º 7
0
    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')
Ejemplo n.º 8
0
    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/')
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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