コード例 #1
0
def format(format_str, inp):
    try:
        return format_str.value.format(inp)
    except ValueError:
        panic("Incorrect format string '{}' for input '{}'.".format(
            format_str.value, inp)
        )
コード例 #2
0
def register(*names):
    if len(names) == 0 or type(names[0]) != str:
        panic("Called @register without arguments")

    def wrap(fn):
        global function_list

        for n in names:
            function_list[n] = fn

    return wrap
コード例 #3
0
def register(*names):
    if len(names) == 0 or not isinstance(names[0], str):
        panic("Called @register without arguments")

    def wrap(fn):
        global function_list

        for n in names:
            function_list[n] = fn

    return wrap
コード例 #4
0
    def handle_input(self, value):
        val_to_test = value
        if self.column and value.fttype == T_ARRAY:
            val_to_test = value.value[self.column - 1]

        result = self.function(val_to_test)

        if result.fttype == T_BOOL:
            if result.value:
                self.print_formatted(value)
        else:
            panic("The filter function needs to return a 'Bool', got '{}'".format(result.fttype))
コード例 #5
0
    def parse_args(self):
        parser = self.get_argument_parser()

        args = parser.parse_args()

        self.column = args.column
        self.arguments = args.args

        function_name = args.function
        try:
            self.function = function_list[function_name]
        except KeyError:
            panic("Function not found: '{}'".format(function_name))
コード例 #6
0
    def handle_input(self, value):
        val_to_test = value
        if self.column and value.fttype == T_ARRAY:
            val_to_test = value.value[self.column - 1]

        result = self.function(val_to_test)

        if result.fttype == T_BOOL:
            if result.value:
                self.print_formatted(value)
            else:
                if self.exit_when_false:
                    self.exit_early = True
        else:
            panic("The function argument to '{}' needs to return a 'Bool', got '{}'"
                  .format(self.name, result.fttype))
コード例 #7
0
ファイル: functions.py プロジェクト: pppigrui/shell-functools
def reverse(inp):
    # slice arrays and string from start to finish in reversed order
    if type(inp) == str or type(inp) == list:
        return inp[::-1]

    # treat integers as strings
    elif type(inp) == int:
        return str(inp)[::-1]

    # booleans can not be reversed
    elif type(inp) == bool:
        panic("Cannot reverse bool value")

    # we got something unexpected
    else:
        panic("Unexpected type '{}' for input '{}'.".format(
            type(inp).__name__, inp))
コード例 #8
0
        def fn_typecheck(*args):
            inp = args[-1]

            if type_in is not None:
                try:
                    inp = type_in.create_from(inp)
                except TypeConversionError as e:
                    panic("Incompatible input type: expected '{}', got '{}'".format(e.type_to,
                                                                                    e.type_from))

            if len(args) > 1:
                result = fn(*args[0:-1], inp=inp.value)
            else:
                result = fn(inp=inp.value)

            if type_out is None:
                return TypedValue(result, inp.fttype)
            elif type_out == "returned":
                return result

            return TypedValue(result, type_out)
コード例 #9
0
def index(idx, inp):
    idx = dynamic_cast(T_INT, idx).value
    try:
        return T_STRING.create_from(inp[idx]).value
    except IndexError:
        panic("array index out of range")
コード例 #10
0
ファイル: foldl.py プロジェクト: ysj123688/shell-functools
    def initialize(self):
        # Initial value
        if len(self.arguments) != 1:
            panic("Initial value to foldl is required")

        self.acc = add_dynamic_type(self.arguments[0])