def handle_cli(self, args, func): parser = argparse.ArgumentParser() parser.add_argument("--input", required=True) parser.add_argument("-o", "--output", default="str", choices=["str", "json"]) parser.add_argument( "--orient", default=self.orient, choices=PANDAS_DATAFRAME_TO_DICT_ORIENT_OPTIONS, ) parser.add_argument( "--output_orient", default=self.output_orient, choices=PANDAS_DATAFRAME_TO_DICT_ORIENT_OPTIONS, ) parsed_args = parser.parse_args(args) orient = parsed_args.orient output_orient = parsed_args.output_orient cli_input = parsed_args.input if os.path.isfile(cli_input) or is_s3_url(cli_input) or is_url( cli_input): if cli_input.endswith(".csv"): df = pd.read_csv(cli_input) elif cli_input.endswith(".json"): df = pd.read_json(cli_input, orient=orient, typ=self.typ, dtype=False) else: raise BadInput( "Input file format not supported, BentoML cli only accepts .json " "and .csv file") else: # Assuming input string is JSON format try: df = pd.read_json(cli_input, orient=orient, typ=self.typ, dtype=False) except ValueError as e: raise BadInput( "Unexpected input format, BentoML DataframeHandler expects json " "string as input: {}".format(e)) if self.typ == "frame" and self.input_dtypes is not None: _check_dataframe_column_contains(self.input_dtypes, df) result = func(df) if parsed_args.output == 'json': result = api_func_result_to_json( result, pandas_dataframe_orient=output_orient) else: result = str(result) print(result)
def handle_cli(self, args, func): parser = argparse.ArgumentParser() parser.add_argument('--input', required=True) parser.add_argument('-o', '--output', default="str", choices=['str', 'json', 'yaml']) parser.add_argument('--orient', default=self.orient) parser.add_argument('--output_orient', default=self.output_orient) parsed_args = parser.parse_args(args) orient = parsed_args.orient output_orient = parsed_args.output_orient cli_input = parsed_args.input if os.path.isfile(cli_input) or is_s3_url(cli_input) or is_url( cli_input): if cli_input.endswith('.csv'): df = pd.read_csv(cli_input) elif cli_input.endswith('.json'): df = pd.read_json(cli_input, orient=orient, typ=self.typ, dtype=False) else: raise ValueError( "Input file format not supported, BentoML cli only accepts .json and .csv file" ) else: # Assuming input string is JSON format try: df = pd.read_json(cli_input, orient=orient, typ=self.typ, dtype=False) except ValueError as e: raise ValueError( "Unexpected input format, BentoML DataframeHandler expects json string as" "input: {}".format(e)) if self.typ == 'frame' and self.input_columns is not None: check_dataframe_column_contains(self.input_columns, df) result = func(df) result = get_output_str(result, parsed_args.output, output_orient) print(result)
def handle_cli(self, args, func): parser = argparse.ArgumentParser() parser.add_argument("--input", required=True) parser.add_argument( "--orient", default=self.orient, choices=PANDAS_DATAFRAME_TO_JSON_ORIENT_OPTIONS, ) parsed_args, unknown_args = parser.parse_known_args(args) orient = parsed_args.orient cli_input = parsed_args.input if os.path.isfile(cli_input) or is_s3_url(cli_input) or is_url(cli_input): if cli_input.endswith(".csv"): df = pd.read_csv(cli_input) elif cli_input.endswith(".json"): df = pd.read_json(cli_input, orient=orient, typ=self.typ) else: raise BadInput( "Input file format not supported, BentoML cli only accepts .json " "and .csv file" ) else: # Assuming input string is JSON format try: df = pd.read_json(cli_input, orient=orient, typ=self.typ) except ValueError as e: raise BadInput( "Unexpected input format, BentoML DataframeInput expects json " "string as input: {}".format(e) ) if self.typ == "frame" and self.input_dtypes is not None: check_dataframe_column_contains(self.input_dtypes, df) result = func(df) self.output_adapter.to_cli(result, unknown_args)