コード例 #1
0
 async def __call__(self, scope, receive, send):
     if scope["type"] == "lifespan":
         while True:
             message = await receive()
             if message["type"] == "lifespan.startup":
                 await send({"type": "lifespan.startup.complete"})
             elif message["type"] == "lifespan.shutdown":
                 await send({"type": "lifespan.shutdown.complete"})
                 return
     elif scope["type"] == "http":
         try:
             await _respond(
                 await self._muggle.act(
                     RqOf(
                         SimpleHeadRq(
                             CIMultiDictProxy(
                                 CIMultiDict([(k.decode(), v.decode())
                                              for k, v in scope["headers"]
                                              ])),
                             scope["path"],
                             scope["method"],
                         ),
                         BodyFromASGI(receive),
                     )),
                 send,
             )
         except HttpException as e:
             await _respond(RsWithStatus(e.code()), send)
コード例 #2
0
ファイル: test_rs_text.py プロジェクト: monomonedula/muggle
async def test_rs_text():
    rs = RsText(b"12345", RsWithHeaders(RsWithStatus(204), {"foo": "bar"}))
    assert await rs.status() == "204 No Content"
    assert await rs.headers() == {"Content-Type": "text/plain", "foo": "bar"}
    body = rs.body()
    assert await body.__anext__() == b"12345"
    with pytest.raises(StopAsyncIteration):
        await body.__anext__()
コード例 #3
0
 def __init__(
     self, text: Union[str, bytes, TextIO] = "", response: Optional[Response] = None
 ):
     if response is None:
         response = RsWithStatus(200)
     if text:
         response = RsWithBody(TextBody(text), response)
     super(RsText, self).__init__(RsWithType(response, "text/plain"))
コード例 #4
0
 def __init__(self,
              rs: Response = RsEmpty(),
              code: int = 303,
              loc: str = "/"):
     self._origin: Response = RsWithHeaders(
         RsWithoutHeaders(RsWithStatus(code, response=rs), ("Location", )),
         {"Location": loc},
     )
     super(RsForward, self).__init__(code)
コード例 #5
0
async def test_rs_with_status_decorating():
    rs = RsWithStatus(
        404,
        response=RsFake(status="200 OK",
                        body=b"foo bar",
                        headers=CIMultiDict({"Hello": "there"})),
    )
    assert await rs.body().__anext__() == b"foo bar"
    assert await rs.headers() == CIMultiDict({"Hello": "there"})
    assert await rs.status() == "404 Not Found"
コード例 #6
0
async def test_rs_with_status_empty():
    rs = RsWithStatus(404)
    with pytest.raises(StopAsyncIteration):
        await rs.body().__anext__()

    assert await rs.headers() == CIMultiDict()
コード例 #7
0
def test_rs_with_status_bad_status(status):
    with pytest.raises(TypeError):
        RsWithStatus(status)
コード例 #8
0
 def __init__(self, body: Body, response: Optional[Response] = None):
     self._body: Body = body
     super(RsWithBody, self).__init__(
         RsWithStatus(200) if response is None else response)