NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)