コード例 #1
0
ファイル: rparse.py プロジェクト: emidln/pathod
    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))
コード例 #2
0
ファイル: language.py プロジェクト: vaginessa/pathod
 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
コード例 #3
0
ファイル: language.py プロジェクト: vaginessa/pathod
            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")
コード例 #4
0
ファイル: rparse.py プロジェクト: emidln/pathod
 def expr(klass):
     e = v_integer
     e = e + pp.Optional(Value)
     return e.setParseAction(lambda x: klass(*x))