diff options
Diffstat (limited to 'libpathod')
-rw-r--r-- | libpathod/language/base.py | 12 | ||||
-rw-r--r-- | libpathod/language/generators.py | 17 | ||||
-rw-r--r-- | libpathod/language/http.py | 20 |
3 files changed, 19 insertions, 30 deletions
diff --git a/libpathod/language/base.py b/libpathod/language/base.py index f91add75..5b9e99f6 100644 --- a/libpathod/language/base.py +++ b/libpathod/language/base.py @@ -64,6 +64,9 @@ class Token(object): """ Resolves this token to ready it for transmission. This means that the calculated offsets of actions are fixed. + + settings: a language.Settings instance + msg: The containing message """ return self @@ -76,7 +79,7 @@ class _ValueLiteral(Token): self.val = val.decode("string_escape") def get_generator(self, settings): - return generators.LiteralGenerator(self.val) + return self.val def freeze(self, settings): return self @@ -215,13 +218,14 @@ Offset = pp.MatchFirst( class _Component(Token): """ A value component of the primary specification of an message. + Components produce byte values desribe the bytes of the message. """ @abc.abstractmethod def values(self, settings): # pragma: no cover """ - A sequence of value objects. + A sequence of values, which can either be strings or generators. """ - return None + pass def string(self, settings=None): """ @@ -361,7 +365,7 @@ class Integer(_Component): return e.setParseAction(lambda x: klass(*x)) def values(self, settings): - return [generators.LiteralGenerator(self.value)] + return self.value def spec(self): return "%s"%(self.value) diff --git a/libpathod/language/generators.py b/libpathod/language/generators.py index 58be7130..07b0be06 100644 --- a/libpathod/language/generators.py +++ b/libpathod/language/generators.py @@ -43,23 +43,6 @@ class TransformGenerator: return "'transform(%s)'"%self.gen -class LiteralGenerator: - def __init__(self, s): - self.s = s - - def __len__(self): - return len(self.s) - - def __getitem__(self, x): - return self.s.__getitem__(x) - - def __getslice__(self, a, b): - return self.s.__getslice__(a, b) - - def __repr__(self): - return "'%s'"%self.s - - class RandomGenerator: def __init__(self, dtype, length): self.dtype = dtype diff --git a/libpathod/language/http.py b/libpathod/language/http.py index c1c2ae96..f926a8cf 100644 --- a/libpathod/language/http.py +++ b/libpathod/language/http.py @@ -81,7 +81,7 @@ class ShortcutUserAgent(_HeaderMixin, base.OptionsOrValue): self.value.val.lower() )[2] else: - value = self.value + value = self.value.val return self.format_header( self.key.get_generator(settings), value @@ -129,7 +129,7 @@ class _HTTPMessage(message.Message): vals.extend(h.values(settings)) vals.append("\r\n") if self.body: - vals.append(self.body.value.get_generator(settings)) + vals.extend(self.body.values(settings)) return vals @@ -169,11 +169,9 @@ class Response(_HTTPMessage): l.extend(self.reason.values(settings)) else: l.append( - generators.LiteralGenerator( - http_status.RESPONSES.get( - code, - "Unknown code" - ) + http_status.RESPONSES.get( + code, + "Unknown code" ) ) return l @@ -205,7 +203,9 @@ class Response(_HTTPMessage): if not self.body: length = 0 else: - length = len(self.body.value.get_generator(settings)) + length = sum( + len(i) for i in self.body.values(settings) + ) tokens.append( Header( base.ValueLiteral("Content-Length"), @@ -301,7 +301,9 @@ class Request(_HTTPMessage): if not self.raw: if not get_header("Content-Length", self.headers): if self.body: - length = len(self.body.value.get_generator(settings)) + length = sum( + len(i) for i in self.body.values(settings) + ) tokens.append( Header( base.ValueLiteral("Content-Length"), |