Esempio n. 1
0
def parse_options(options):
    known_options = [
        'off',
        'on',
        'stop',
        'strict',
        'include',
        'exclude',
        'lint',
        'debug',
    ]

    for arg in sys.argv:
        if arg.startswith('--fence:'):
            sys.argv.remove(arg)
            new_options = arg.split(':')[1].split(',')
            for option in new_options:
                name = option if not '=' in option else option.split('=')[0]
                if not name in known_options:
                    error('Unknown option "%s"' % option)
                    sys.exit(1)
                else:
                    if '=' in option:
                        name, value = option.split('=')[:2]
                        options[name] = value
                    else:
                        options[option] = True
Esempio n. 2
0
    def wrapper(*args, **kwargs):
        for argument in requirements['argument_types']:
            value = extract_argument(argument, fx, args, kwargs)
            required_type = requirements['argument_types'][argument]
            if not validate_type(type(value), required_type):
                log_failure_header()
                log_function_call(fqn, args, kwargs)
                log_function_location(fx)
                error('%s was %s (%s) instead of %s' % (
                    argument, repr(value), type(value).__name__, required_type
                ))
                if pyfence.options['stop']:
                    abort()

        try:
            out = fx(*args, **kwargs)
        except Exception as ex:
            if len(requirements['raises']) == 0:
                raise
            for required_type in requirements['raises']:
                if validate_type(type(ex), [required_type]):
                    raise
            else:
                log_failure_header()
                log_function_call(fqn, args, kwargs)
                log_function_location(fx)
                error(repr(ex))
                error('%s was thrown (only %s allowed)' % (
                    type(ex).__name__, requirements['raises']
                ))
                if pyfence.options['stop']:
                    abort()
                raise

        if requirements['return_type'] is not None:
            required_type = requirements['return_type']
            if not validate_type(type(out), required_type):
                log_failure_header()
                log_function_call(fqn, args, kwargs)
                log_function_location(fx)
                error('Return value was %s (%s) instead of %s' % (
                    repr(out), type(out).__name__, required_type
                ))
                if pyfence.options['stop']:
                    abort()

        return out
Esempio n. 3
0
def abort():
    error('Aborting')
    sys.exit(1)