diff options
Diffstat (limited to 'libpathod/language/http2.py')
-rw-r--r-- | libpathod/language/http2.py | 85 |
1 files changed, 48 insertions, 37 deletions
diff --git a/libpathod/language/http2.py b/libpathod/language/http2.py index b206c0cf..6dd93d5f 100644 --- a/libpathod/language/http2.py +++ b/libpathod/language/http2.py @@ -104,7 +104,6 @@ class Header(_HeaderMixin, base.KeyValue): preamble = "h" - class ShortcutContentType(_HeaderMixin, base.Value): preamble = "c" key = base.TokValueLiteral("content-type") @@ -143,33 +142,24 @@ class Times(base.Integer): preamble = "x" -class Request(_HTTP2Message): +class Response(_HTTP2Message): + unique_name = None comps = ( Header, + Body, ShortcutContentType, - ShortcutUserAgent, + ShortcutLocation, Raw, - # NestedResponse, - Body, - Times, ) - logattrs = ["method", "path"] def __init__(self, tokens): - super(Request, self).__init__(tokens) + super(Response, self).__init__(tokens) self.rendered_values = None + self.stream_id = 0 @property - def method(self): - return self.tok(Method) - - @property - def path(self): - return self.tok(Path) - - @property - def times(self): - return self.tok(Times) + def code(self): + return self.tok(Code) @classmethod def expr(cls): @@ -177,9 +167,7 @@ class Request(_HTTP2Message): atom = pp.MatchFirst(parts) resp = pp.And( [ - Method.expr(), - base.Sep, - Path.expr(), + Code.expr(), pp.ZeroOrMore(base.Sep + atom) ] ) @@ -196,9 +184,9 @@ class Request(_HTTP2Message): if body: body = body.string() - self.rendered_values = settings.protocol.create_request( - self.method.string(), - self.path.string(), + self.rendered_values = settings.protocol.create_response( + self.code.string(), + self.stream_id, headers, body) return self.rendered_values @@ -207,24 +195,42 @@ class Request(_HTTP2Message): return ":".join([i.spec() for i in self.tokens]) -class Response(_HTTP2Message): - unique_name = None +class NestedResponse(base.NestedMessage): + preamble = "s" + nest_type = Response + + +class Request(_HTTP2Message): comps = ( Header, - Body, ShortcutContentType, - ShortcutLocation, + ShortcutUserAgent, Raw, + NestedResponse, + Body, + Times, ) + logattrs = ["method", "path"] def __init__(self, tokens): - super(Response, self).__init__(tokens) + super(Request, self).__init__(tokens) self.rendered_values = None - self.stream_id = 0 @property - def code(self): - return self.tok(Code) + def method(self): + return self.tok(Method) + + @property + def path(self): + return self.tok(Path) + + @property + def nested_response(self): + return self.tok(NestedResponse) + + @property + def times(self): + return self.tok(Times) @classmethod def expr(cls): @@ -232,7 +238,9 @@ class Response(_HTTP2Message): atom = pp.MatchFirst(parts) resp = pp.And( [ - Code.expr(), + Method.expr(), + base.Sep, + Path.expr(), pp.ZeroOrMore(base.Sep + atom) ] ) @@ -243,15 +251,19 @@ class Response(_HTTP2Message): if self.rendered_values: return self.rendered_values else: + path = self.path.string() + if self.nested_response: + path += self.nested_response.parsed.spec() + headers = [header.values(settings) for header in self.headers] body = self.body if body: body = body.string() - self.rendered_values = settings.protocol.create_response( - self.code.string(), - self.stream_id, + self.rendered_values = settings.protocol.create_request( + self.method.string(), + path, headers, body) return self.rendered_values @@ -259,7 +271,6 @@ class Response(_HTTP2Message): def spec(self): return ":".join([i.spec() for i in self.tokens]) - def make_error_response(reason, body=None): tokens = [ Code("800"), |