Exemple #1
0
 def __checkdata__(self,data):
     if self.__CHECK_REGEXP__ != None:
         _rxd = re.findall(self.__CHECK_REGEXP__,data)
         if _rxd:
             self.__RXD__ = _rxd[0]
         else:
             self.__error__.append("接收的数据不合法")
             raise WkError.WkError(self.__error__)
             # exit()
     else:
         self.__error__.append("合法性检查错误")
         raise WkError.WkError(self.__error__)
Exemple #2
0
    def __read_defaults_file__(self, fileName1, fileName2):
        root_dir = os.path.dirname(os.path.abspath(__file__))
        path = os.path.abspath(root_dir + "/" + fileName1)
        if os.path.exists(path):
            with open(path, "r", encoding='utf-8') as f:
                self.__config__ = json.load(f)
                f.close()
        else:
            raise WkError.WkError("缺少JSON文件")

        #加载附加指令配置文件
        epath = os.path.abspath(root_dir + "/" + fileName2)
        if os.path.exists(epath):
            with open(epath, "r", encoding='utf-8') as f2:
                self.__extraconfig__ = json.load(f2)
                f.close()
        else:
            raise WkError.WkError("缺少extra.json文件")
Exemple #3
0
 def __read_defaults_file__(self, fileName1, fileName2):
     root_dir = os.path.dirname(os.path.abspath(__file__))
     path = os.path.abspath(root_dir + "/" + fileName1)
     if os.path.exists(path):
         with open(path, "r", encoding='utf-8') as f:
             self.__config__ = json.load(f)
             f.close()
         # cnf = open(path)
         # self.__config__ = json.load(cnf)
     else:
         raise WkError.WkError("缺少JSON文件")
Exemple #4
0
 def __Vkheader(self,s):
     try:
         if s.startswith('['):
             st = eval('self.__RXD__'+s)
         else:
             reg0 = '(.+?)' + s
             reg = re.compile(r''+reg0+'')
             st = re.findall(reg,self.__RXD__)[0]
         return st
     except:
         self.__error__.append("头部分隔符错误")
         raise WkError.WkError(self.__error__)
Exemple #5
0
    def __Wackeval(self, s, d):
        if not s:
            return None
        try:
            if s.startswith('['):
                st = eval('d' + s)
            else:
                reg0 = '(.+?)' + s
                reg = re.compile(r'' + reg0 + '')
                st = re.findall(reg, d)[0]
            return st
        except:

            raise WkError.WkError('分隔符错误')
Exemple #6
0
 def __read_config_file__(self,fileName,section):
    
     root_dir = os.path.dirname(os.path.abspath(__file__))
     path = os.path.abspath(root_dir+"/"+fileName)
     if os.path.exists(path):
         cnf = WackeConfigParser()
         cnf.read( path )
         options = cnf.options( section )
         for key in options:
             self.__config__[key] = cnf.get( section, key )
     else:
         print("缺少配置文件")
         self.__error__.append( "缺少配置文件")
         raise WkError.WkError(self.__error__)
Exemple #7
0
 def __get_header_payload__(self,HS):
     if self.__RXD__ != None :
         _rxheader = self.__Vkheader(HS)
         _payload = self._delete_substr('',_rxheader)
         #处理header,获取属性
         
         _udid = _rxheader[0:2]
         _ver = _rxheader[2:4]
         _reply = _rxheader[4:5]
         _tid = _rxheader[5:]
         _header = {'UDID':_udid,'VER':_ver,'REPLY':_reply,'TID':_tid}
         return {'head': _header,"payload":_payload}
     else:
         self.__error__.append('接收的数据为空')
         raise WkError.WkError(self.__error__)
         
Exemple #8
0
    def __parsing_data__(self, payload):
        _typecode = payload[0:1]
        _typekey = payload[1:2]
        _datas = re.split(r'[&]', payload[2:])
        #数据(不含附加参数,即数据+参数)
        _dvdata = _datas[0]
        #附加参数
        _extradata = _datas[1:]
        _basedata = _basedataval = _explain = new_para = None
        try:
            _tmp = self.__config__.get(_typecode).get(_typekey)
            _explain = _tmp.get('explain')
        except:
            raise WkError.WkError('JSON文件未找到对应的功能类型或功能键')
        try:
            if _tmp:
                if _tmp.get('sep'):
                    _basedata = self.__Wackeval(_tmp.get('sep'), _dvdata)
                    _parameterdata = super()._delete_substr(
                        _dvdata, _basedata)  #提取basedata后剩余的字符串,即参数

            else:
                raise WkError.WkError('JSON文件未找到对应的功能键')
            if _tmp.get('vals'):
                if isinstance(_tmp.get('vals'), dict):
                    _basedataval = _tmp.get('vals').get(_basedata)
                elif isinstance(_tmp.get('vals'), str):
                    _basedataval = _tmp.get('vals')

            #处理参数
            #TODO 待验证
            _parameterconfig = _tmp.get('parameter')
            if _parameterconfig:
                _par_sep = _parameterconfig.get('sep')  #参数分隔符
                #根据不同分隔符执行不同的提取方法
                if _par_sep == ',':
                    _parameter = re.split(r'[,]', _parameterdata)
                elif _par_sep == '()':
                    _parameter = re.findall(r'\((.*?)\)', _parameterdata)
                else:
                    raise WkError.WkError('未定义的参数分隔符')

                #继续解析参数内容
                if _parameterconfig.get('vals') and _parameter:
                    #遍历参数,分别提取分隔符
                    for x in range(len(_parameter)):
                        x_sep = self.__getsep(_parameter[x])
                        for r in x_sep:
                            rx = r'[' + r + ']'
                            x_re_split = re.split(rx, _parameter[x])
                            _parameter[x] = x_re_split

                    new_para = dict(zip(_parameterconfig['vals'], _parameter))
                    # print('new_para = '+str(new_para))
                elif (not _parameterconfig.get('vals')) and _parameter:
                    #没有配置项,直接将参数转成dict
                    _new_para = {}
                    for index, item in enumerate(_parameter):
                        _new_para[index] = item
                    new_para = _new_para

        except:
            raise

        #返回结果,暂定
        _result = {
            'funckey': _typecode + _typekey,
            'explain': _explain,
            'data': _basedata,
            "title": _basedataval,
            "parameter": new_para
        }
        return _result