def expr(klass): e = pp.Literal("@").suppress() + v_integer u = reduce(operator.or_, [pp.Literal(i) for i in utils.SIZE_UNITS.keys()]) e = e + pp.Optional(u, default=None) s = pp.Literal(",").suppress() s += reduce(operator.or_, [pp.Literal(i) for i in DATATYPES.keys()]) e += pp.Optional(s, default="bytes") return e.setParseAction(lambda x: klass(*x))
def expr(klass): parts = [i.expr() for i in klass.comps] atom = pp.MatchFirst(parts) resp = pp.And([ pp.MatchFirst([ WS.expr() + pp.Optional(Sep + Code.expr()), Code.expr(), ]), pp.ZeroOrMore(Sep + atom) ]) resp = resp.setParseAction(klass) return resp
elif hasattr(v, "__len__"): v = v[:TRUNCATE] v = v.encode("string_escape") ret[i] = v ret["spec"] = self.spec() return ret def freeze(self, settings): r = self.resolve(settings) return self.__class__([i.freeze(settings) for i in r.tokens]) def __repr__(self): return self.spec() Sep = pp.Optional(pp.Literal(":")).suppress() class _HTTPMessage(_Message): version = "HTTP/1.1" @abc.abstractmethod def preamble(self, settings): # pragma: no cover pass def values(self, settings): vals = self.preamble(settings) vals.append("\r\n") for h in self.headers: vals.extend(h.values(settings)) vals.append("\r\n")
def expr(klass): e = v_integer e = e + pp.Optional(Value) return e.setParseAction(lambda x: klass(*x))