parse.py (1706B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\evelink\client\handlers\local_service\parse.py 2 from future.utils import raise_ 3 import functools 4 import sys 5 import typeutils 6 7 def parse(kwargs, **data_types): 8 return {k:parse_value(v, get_eval_func(data_types[k])) for k, v in kwargs.iteritems()} 9 10 11 def parse_value(value, eval_func): 12 if value is None or value == 'None': 13 return 14 try: 15 if isinstance(value, list): 16 return map(eval_func, value) 17 return eval_func(value) 18 except ValueError: 19 raise 20 except Exception: 21 message = "Failed to parse value '{}'".format(value) 22 raise_(ValueError(message), None, sys.exc_info()[2]) 23 24 25 def get_eval_func(data_type): 26 return data_type_to_eval_func.get(data_type, data_type) 27 28 29 def fail_on_none(value, eval_func): 30 parsed_value = eval_func(value, default=None) 31 if parsed_value is None: 32 raise ValueError("Failed to parse value '{}'".format(value)) 33 return parsed_value 34 35 36 data_type_to_eval_func = {int: functools.partial(fail_on_none, eval_func=typeutils.int_eval), 37 float: functools.partial(fail_on_none, eval_func=typeutils.float_eval), 38 bool: typeutils.bool_eval} 39 40 def pre_parse_none(eval_func, value): 41 if value is None or value == 'None': 42 return 43 return eval_func(value) 44 45 46 int_optional = functools.partial(pre_parse_none, data_type_to_eval_func[int]) 47 float_optional = functools.partial(pre_parse_none, data_type_to_eval_func[float]) 48 bool_optional = functools.partial(pre_parse_none, data_type_to_eval_func[bool]) 49 str_optional = functools.partial(pre_parse_none, str) 50 unicode_optional = functools.partial(pre_parse_none, unicode)