예제 #1
0
    def test_customized_dumps(self):
        """
        A customized dumps applies to both pretty and non-pretty responses.

        """

        renderer = renderers.JSON(default=lambda obj: 23)
        render = renderers.bind(renderer, to=lambda _: {"foo": object()})
        request = Request(
            url=URL(path=b"/"),
            headers=Headers([("Accept", ["application/json"])]),
        )
        self.assertEqual(
            render(request),
            Response(
                content=b'{"foo":23}',
                headers=Headers([("Content-Type", ["application/json"])]),
            ),
        )
        self.assertEqual(
            render(Request(url=URL(path=b"/"))),
            Response(
                content=b'{\n  "foo": 23\n}',
                headers=Headers([("Content-Type", ["application/json"])]),
            ),
        )
예제 #2
0
 def test_it_serves_mapped_requests(self):
     self.router.add(
         self.request.url.path,
         lambda request: Response(b"Hello"),
     )
     self.assertEqual(
         self.app.serve(self.request, path=self.request.url.path),
         Response(b"Hello"),
     )
예제 #3
0
    def test_it_maps_multiple_routes_for_specified_methods(self):
        self.mapper.add(b"/", lambda r: Response(b"GET"), methods=[b"GET"])
        self.mapper.add(b"/", lambda r: Response(b"POST"), methods=[b"POST"])

        get = Request(url=URL(path=b"/"), method=b"GET")
        post = Request(url=URL(path=b"/"), method=b"POST")
        map = self.mapper.map
        self.assertEqual(
            (map(get, path=b"/")(get), map(post, path=b"/")(post)),
            (Response(b"GET"), Response(b"POST")),
        )
예제 #4
0
 def assertNotPretty(self, content, response):
     self.assertEqual(
         response,
         Response(
             headers=Headers([("Content-Type", ["application/json"])]),
             content=json.dumps(content, separators=",:"),
         ),
     )
     self.assertNotEqual(
         response,
         Response(headers=Headers([("Content-Type", ["application/json"])]),
                  content=json.dumps(content, indent=2, sort_keys=True)),
     )
예제 #5
0
    def test_specified_renderer_multiple_routes(self):
        self.router.add(b"/", view, methods=[b"GET"], renderer=None)
        self.router.add(
            b"/", view, methods=[b"POST"], renderer=ReverseRenderer(),
        )

        get = Request(url=URL(path=b"/"), method=b"GET")
        response = self.router.route(get, path=b"/")
        self.assertEqual(response, Response(b"{}"))

        post = Request(url=URL(path=b"/"), method=b"POST")
        response = self.router.route(post, path=b"/")
        self.assertEqual(response, Response(b"}{"))
예제 #6
0
파일: flaskr.py 프로젝트: pombreda/Minion
def login(request, config, jinja):
    error = None
    if request.method == "POST":
        if request.form["username"] != config["credentials"]["user"]:
            error = "Invalid username"
        elif request.form["password"] != config["credentials"]["password"]:
            error = "Invalid password"
        else:
            # session["logged_in"] = True
            # flash("You were logged in")
            # return redirect(url_for("show_entries"))
            return Response(code=302, headers={"Location": "/"})
    content = jinja.get_template("login.html").render(error=error)
    return Response(content.encode("utf-8"))
예제 #7
0
 def fooBar(request):
     self.assertEqual(request.headers.get(b"X-Foo"), [b"Hello"])
     return Response(
         code=302,
         content=request.url.path,
         headers=Headers([(b"Location", [b"http://example.com"])]),
     )
예제 #8
0
 def test_it_renders_via_the_given_encoding(self):
     renderer = renderers.Unicode(encoding="utf-8")
     render = renderers.bind(renderer, to=lambda _: u"שלום")
     self.assertEqual(
         render(self.request),
         Response(u"שלום".encode("utf-8")),
     )
예제 #9
0
파일: routing.py 프로젝트: Julian/Minion
 def route(self, request, path):
     render = self.mapper.map(request=request, path=path)
     if render is not None:
         response = render(request=request)
     else:
         response = Response(code=404)
     return response
예제 #10
0
파일: test_wsgi.py 프로젝트: Julian/Minion
 def test_script_name(self):
     self.minion.route(b"/home")(lambda request: Response(b"Hi!"))
     app = TestApp(
         wsgi.create_app(self.minion),
         extra_environ={"SCRIPT_NAME": "/app"},
     )
     response = app.get(b"/app/home")
     self.assertEqual(response.body, b"Hi!")
예제 #11
0
def path_view(request):
    """
    A renderer (view) that returns a response with the request path.

    Optionally adds a prefix to the front.

    """

    return Response(content=request.url.path)
예제 #12
0
파일: flaskr.py 프로젝트: pombreda/Minion
def add_entry(request, db, jinja):
    # if not session.get('logged_in'):
    #     return Response(code=401)
    db.execute("INSERT INTO entries (title, text) VALUES (?, ?)",
               [request.form["title"], request.form["text"]])
    db.commit()
    # flash('New entry was successfully posted')
    # return redirect(url_for('show_entries'))
    return Response(code=302, headers={"Location": "/"})
예제 #13
0
    def test_it_routes_simple_views(self):
        minion = Application(router=Router(mapper=SimpleMapper()))

        @minion.route(b"/show")
        def show(request):
            return Response(b"Hello World!")

        response = minion.serve(Request(url=URL(path=b"/show")), path=b"/show")
        self.assertEqual(response, Response(b"Hello World!"))
예제 #14
0
class TreeResource(object):
    """
    A tree resource that supports adding children via :meth:`set_child`\ .

    """

    render = attr.ib(default=lambda request: Response(code=404))
    _children = attr.ib(default=attr.Factory(dict))

    _no_such_child = LeafResource(render=lambda request: Response(code=404))

    def get_child(self, name, request):
        child = self._children.get(name)
        if child is None:
            return self._no_such_child
        return child

    def set_child(self, name, resource):
        self._children[name] = resource
예제 #15
0
    def test_it_traverses_children(self):
        class Resource(object):
            def get_child(self, name, request):
                return LeafResource(
                    render=lambda request: Response(b"Hello " + name), )

        mapper = routing.TraversalMapper(root=Resource())
        request = Request(url=URL(path=b"/world"))
        render = mapper.map(request, path=b"/world")
        self.assertEqual(render(request), Response(content=b"Hello world"))
예제 #16
0
def path_view(request):
    """
    A renderer (view) that returns a response with the request path.

    Optionally adds a prefix to the front.

    """

    path = b"/" + b"/".join(each.encode("ascii") for each in request.url.path)
    return Response(content=path)
예제 #17
0
    def test_renderer_with_render_error_handler(self):
        class RendererWithErrorHandler(object):
            def render(self, request, response):
                raise ZeroDivisionError()

            def render_error(self, request, response, exc):
                return Response(response.content + exc.__class__.__name__)

        self.router.add(b"/", view, renderer=RendererWithErrorHandler())
        response = self.router.route(Request(url=URL(path=b"/")), path=b"/")
        self.assertEqual(response, Response(b"{}ZeroDivisionError"))
예제 #18
0
파일: music.py 프로젝트: Julian/Great
    def render(self, request):
        if request.method == b"GET":
            fields = [
                field for raw in request.url.get(b"fields")
                for field in raw.rstrip(b",").split(b",")
            ]
            content = self.manager.list(fields=fields, )
        elif request.method == b"POST":
            try:
                new = self.from_detail_json(request.content)
            except ValueError:
                return Response(code=400)
            content = self.for_detail_json(self.manager.create(**new))
        elif request.method == b"DELETE":
            self.manager.delete(id=json.load(request.content)[u"id"])
            return Response(code=204)
        else:
            return Response(code=405)

        return self.renderer.render(jsonable=content, request=request)
예제 #19
0
 def test_separators(self):
     render = renderers.bind(renderers.JSON(), to=lambda _: dict(a=1, b=2))
     request = Request(
         url=URL(path=b"/"),
         headers=Headers([("Accept", ["application/json"])]),
     )
     self.assertEqual(
         render(request),
         Response(
             content=b'{"a":1,"b":2}',
             headers=Headers([("Content-Type", ["application/json"])]),
         ),
     )
예제 #20
0
 def render(self, request, jsonable):
     machine_json = request.accept.media_types[-1] == MediaRange(
         type="application",
         subtype="json",
     )
     if machine_json:
         content = self._dumps(jsonable, separators=",:")
     else:
         content = self._dumps(jsonable, indent=2, sort_keys=True)
     return Response(
         content=content,
         headers=Headers([("Content-Type", ["application/json"])]),
     )
예제 #21
0
    def test_renderer_with_view_error_handler(self):
        class RendererWithErrorHandler(object):
            def render(self, request, response):
                raise ZeroDivisionError("I won't ever get raised")

            def view_error(self, request, error):
                return Response(error.__class__.__name__)

        def boom(request):
            raise IndexError()

        self.router.add(b"/", boom, renderer=RendererWithErrorHandler())
        response = self.router.route(Request(url=URL(path=b"/")), path=b"/")
        self.assertEqual(response, Response(b"IndexError"))
예제 #22
0
 def test_separators(self):
     render = renderers.bind(renderers.JSON(), to=lambda _: dict(a=1, b=2))
     request = Request(
         url=URL(path=[u""]),
         headers=Headers([("Accept", ["application/json"])]),
     )
     response = render(request)
     self.assertEqual(
         response, Response(
             content=response.content,
             headers=Headers([("Content-Type", ["application/json"])]),
         ),
     )
     self.assertNotIn(response.content, " ")
     self.assertEqual(json.loads(response.content), {"a": 1, "b": 2})
예제 #23
0
class TreeResource(object):
    """
    A tree resource that supports adding children via :meth:`set_child`\ .

    """

    _no_such_child = LeafResource(render=lambda request: Response(code=404))

    def __init__(self, render):
        self.children = {}
        self.render = render

    def get_child(self, name, request):
        child = self.children.get(name)
        if child is None:
            return self._no_such_child
        return child

    def set_child(self, name, resource):
        self.children[name] = resource
예제 #24
0
 def view_error(self, request, error):
     return Response(error.__class__.__name__)
예제 #25
0
 def render_error(self, request, response, exc):
     return Response(response.content + exc.__class__.__name__)
예제 #26
0
 def test_specified_renderer(self):
     self.router.add(b"/", view, renderer=ReverseRenderer())
     request = Request(url=URL(path=b"/"))
     response = self.router.route(request, path=b"/")
     self.assertEqual(response, Response(b"}{"))
예제 #27
0
 def test_unknown_route(self):
     request = Request(url=URL(path=b"/404"))
     response = self.router.route(request, path=b"/404")
     self.assertEqual(response, Response(code=404))
예제 #28
0
 def get_child(self, name, request):
     return LeafResource(
         render=lambda request: Response(b"Hello " + name), )
예제 #29
0
def view(request, **kwargs):
    return Response(json.dumps(kwargs))
예제 #30
0
 def render(self, request, response):
     return Response(b"".join(reversed(response.content)))