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