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)
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))