Ejemplo n.º 1
0
def parse_acl(acl):
    """Parse ACL entry.

    >>> parse_acl('user=rwx/owner')
    ('user', 'rwx', 'owner')
    >>> parse_acl('" ""user"=rwx/" ""owner"')
    (' "user', 'rwx', ' "owner')
    >>> parse_acl('user=rwx')
    ('user', 'rwx', None)
    >>> parse_acl('=/f')
    (None, '', 'f')
    """
    global _acl_rc
    if not _acl_rc:
        _acl_rc = re.compile(_acl_re, re.I | re.X)

    m = _acl_rc.match(acl)
    if not m:
        return None

    target = m.group('tgt')
    perm = m.group('perm')
    owner = m.group('owner')

    if target:
        target = unquote_ident(target)
    if perm:
        perm = perm[1:]
    if owner:
        owner = unquote_ident(owner[1:])

    return (target, perm, owner)
Ejemplo n.º 2
0
 def parse_sql(self, op, sql):
     tk = self.tokenizer(sql)
     fields = []
     values = []
     try:
         if op == "I":
             self.parse_insert(tk, fields, values)
         elif op == "U":
             self.parse_update(tk, fields, values)
         elif op == "D":
             self.parse_delete(tk, fields, values)
         raise Exception("syntax error")
     except StopIteration:
         # last sanity check
         if len(fields) == 0 or len(fields) != len(values):
             raise Exception("syntax error, fields do not match values")
     fields = [unquote_ident(f) for f in fields]
     values = [unquote_literal(f) for f in values]
     return dict(zip(fields, values))