Esempio n. 1
0
def get_func_plot_resource(model, var_symbol):
    """Get resource associated with this function's plot"""

    parser = reqparse.RequestParser()
    func = model[var_symbol]
    defaults = get_defaults(func)

    for arg in getfullargspec(func).args:
        if arg in defaults:
            parser.add_argument(arg, type=str)
        else:
            parser.add_argument(arg, type=str, required=True)

    class FuncPlotResource(Resource):
        """Resource associated with evaluate"""
        def get(self):
            """get method for this resource"""
            app.logger.info('function plot resource called')
            args_ = parser.parse_args(strict=True)
            args = dict(indexing='ij')  # needed for gridded data

            for argname, val_ in args_.items():
                if val_ is not None:
                    args[argname] = pd.read_json(StringIO(val_), typ='series')
            figure = model.figure(variable=str(type(var_symbol)), **args)
            return go.Figure(figure).to_json()

    return FuncPlotResource
Esempio n. 2
0
def get_func_resource(model_name, model, var_symbol):
    """Get resource associated with this function"""
    parser = reqparse.RequestParser()
    func = model[var_symbol]
    defaults = get_defaults(func)

    for arg in getfullargspec(func).args:
        if arg in defaults:
            parser.add_argument(arg, type=str)
        else:
            parser.add_argument(arg, type=str, required=True)

    class FuncResource(Resource):
        """Resource associated with this function"""

        def get(self):
            """get method for this resource"""
            args_ = parser.parse_args(strict=True)
            args = dict()

            for argname, val_ in args_.items():
                args[argname] = pd.read_json(StringIO(val_), typ='series')

            return func(**args).tolist()
    return FuncResource
Esempio n. 3
0
    def kamodo_model_func(user_model_name, user_func=None):
        user_model = user_models[user_model_name]
        print(user_model_name, user_func)
        print(user_model)

        if request.method == 'POST':
            func_key = request.form['signature']
            if 'expression' in request.form:
                func_expr = request.form['expression']
                if func_key in user_model:
                    del user_model[func_key]
                user_model[func_key] = func_expr
            elif 'model' in request.form:
                global_model_name = request.form['model']
                global_model = global_models[global_model_name]
                if 'model_func' in request.form:
                    global_model_func_name = request.form['model_func']
                    global_model_func = global_model[global_model_func_name]
                    user_model[func_key] = global_model_func

        if user_func is not None:
            parser = reqparse.RequestParser()
            if request.method == 'GET':
                func = user_model[user_func]
                defaults = get_defaults(func)
                for arg in getfullargspec(func).args:
                    if arg in defaults:
                        parser.add_argument(arg, type=str)
                    else:
                        parser.add_argument(arg, type=str, required=True)

                args_ = parser.parse_args(strict=True)
                args = dict()

                for argname, val_ in args_.items():
                    args[argname] = json.loads(val_, object_hook=deserialize)
                    if isinstance(args[argname], str):
                        args[argname] = json.loads(val_,
                                                   object_hook=deserialize)
                    if isinstance(args[argname], list):
                        args[argname] = np.array(args[argname])
                print('{} {} passed {}'.format(
                    model_name, user_func, ' '.join([
                        '{}:{}'.format(arg, type(arg_value))
                        for arg, arg_value in args.items()
                    ])))
                try:
                    result = func(**args)
                    print('{} {} function returned {}'.format(
                        model_name, user_func, type(result)))
                    return serialize(result)
                except:
                    return json.dumps(None)
            if request.method == "DELETE":
                if user_func in user_model:
                    del user_model[user_func]

        return get_model_details(user_model)
Esempio n. 4
0
    def kamodo_model_func_defaults(user_model_name, user_func):
        user_model = user_models[user_model_name]
        user_func = user_model[user_func]
        function_defaults = get_defaults(user_func)

        for arg in getfullargspec(user_func).args:
            if arg in function_defaults:
                pass
            else:
                function_defaults[arg] = None
        try:
            function_defaults_ = json.dumps(function_defaults,
                                            default=serialize)
        except:
            print('problem with {}.{}'.format(model_name, user_func))
            raise
        return jsonify(function_defaults_)
Esempio n. 5
0
def get_evaluate_resource(model_name, model):
    """get resource associated with evaluate"""
    # not sure what to do if the model changes
    # get doesn't know what variables exist in the model
    # maybe move to route/<model_name>

    parser = reqparse.RequestParser()
    parser.add_argument('variable', type=str, required=True)

    for var_symbol in model:
        if type(var_symbol) != UndefinedFunction:
            func = model[var_symbol]
            for arg in getfullargspec(func).args:
                parser.add_argument(arg, type=str)

    class EvaluateResource(Resource):
        """Resource associated with evaluate"""
        def get(self):
            """get method for this resource"""
            args_ = parser.parse_args()
            args = dict()

            variable_name = ''

            for argname, val_ in args_.items():
                if argname != 'variable':
                    if val_ is not None:
                        args[argname] = pd.read_json(StringIO(val_),
                                                     typ='series')

                else:
                    variable_name = val_

            try:
                result = model.evaluate(variable=variable_name, **args)
            except SyntaxError as m:
                return {'message': '{}'.format(m)}

            return {k_: v_.tolist() for k_, v_ in result.items()}

    return EvaluateResource
Esempio n. 6
0
def get_func_resource(model_name, model, var_symbol):
    """Get resource associated with this function"""
    parser = reqparse.RequestParser()
    func = model[var_symbol]
    defaults = get_defaults(func)

    for arg in getfullargspec(func).args:
        if arg in defaults:
            parser.add_argument(arg, type=str)
        else:
            parser.add_argument(arg, type=str, required=True)

    class FuncResource(Resource):
        """Resource associated with this function"""
        def get(self):
            """get method for this resource"""
            args_ = parser.parse_args(strict=True)
            args = dict()

            for argname, val_ in args_.items():
                args[argname] = json.loads(val_, object_hook=deserialize)
                if isinstance(args[argname], str):
                    args[argname] = json.loads(val_, object_hook=deserialize)
                if isinstance(args[argname], list):
                    args[argname] = np.array(args[argname])
            print('{} {} passed {}'.format(
                model_name, var_symbol, ' '.join([
                    '{}:{}'.format(arg, type(arg_value))
                    for arg, arg_value in args.items()
                ])))
            result = func(**args)
            print('{} {} function returned {}'.format(model_name, var_symbol,
                                                      type(result)))
            return serialize(result)

            # try:
            #     return result.tolist()
            # except:
            #     return result

    return FuncResource
Esempio n. 7
0
    def kamodo_model_func_plot(user_model_name, user_func):
        user_model = user_models[user_model_name]
        func = user_model[user_func]
        defaults = get_defaults(func)

        parser = reqparse.RequestParser()

        for arg in getfullargspec(func).args:
            if arg in defaults:
                parser.add_argument(arg, type=str)
            else:
                parser.add_argument(arg, type=str, required=True)

        app.logger.info('function plot resource called')
        args_ = parser.parse_args(strict=True)
        args = dict(indexing='ij')  # needed for gridded data

        for argname, val_ in args_.items():
            if val_ is not None:
                args[argname] = pd.read_json(StringIO(val_), typ='series')
        figure = user_model.figure(variable=user_func, **args)
        return go.Figure(figure).to_json()