def parse_predicate(input):
    
    if isinstance(input, basestring):
        negate = input.startswith('!')
        if negate:
            input = input[1:]
        predicate = current_acl_manager.predicates.get(input)
        if not predicate:
            raise ValueError(input % 'unknown predicate: %r')
        if negate:
            predicate = Not(predicate)
        return predicate
    
    if isinstance(input, (tuple, list)):
        return And(parse_predicate(x) for x in input)
    
    return input
dataset/ETHPy150Open mikeboers/Flask-ACL/flask_acl/predicate.py/parse_predicate/swapped operands of `%`