def __call__(self, dsrc, row): strElems = self.getStrElements_(dsrc, row) arrayType = type(strElems) count = len(strElems) if count == 0: # 不填写内容 return self.filter_(dsrc, row, arrayType) elems = [] for index, strElem in enumerate(strElems): value = self.str2value_(index, strElem) if value == ex_base.ERR_TYPE: raise ExplainErrorValueTypeException(dsrc, row, self.key) elems.append(value) if self.ecount_ > 0: # 元素个数固定 if count > self.ecount_: # 填写元素过多,被截断 elems = elems[:self.ecount_] elif count < self.ecount_: # 填写元素不够 if self.fillValues_: # 需要填充 for idx in xrange(count, self.ecount_): elems.append(self.fillValues_[idx]) else: raise ExplainErrorValueTypeException( dsrc, row, self.key) # 填写元素不够,但不要求填充 if arrayType is tuple: elems = tuple(elems) # 元素个数不固定 return self.filter_(dsrc, row, arrayType, elems)
def filter_(self, dsrc, row, arrayType, value=ex_base.INNER): if value is ex_base.INNER: # 解释内容为空 if self.isExcludeValue_(): # 有排除值 return ABANDON_COL elif self.defValue_ is not ex_base.INNER: # 有默认值 return self.fnRet(self.defValue_) elif self.ecount_ < 1: # 没有元素个数限定 return self.fnRet(arrayType()) return ExplainErrorValueTypeException(dsrc, row, self.key) # 有限定个数,却不填任何值 elif self.isExcludeValue_(value): # 解释内容与排除值相等 return ABANDON_COL elif value is ex_base.ERR_TYPE: # 解释内容类型不正确 raise ExplainErrorValueTypeException(dsrc, row, self.key) return self.fnRet(value)
def __call__(self, dsrc, row): text = self.getCellText_(dsrc, row) if text == "": return KEYRET_EMPTY if text == self.query("ignorSign", str): return KEYRET_IGNOR strElems = utils.splits(text, self.splitters_) if len(strElems) < self.__ecount: raise ExplainErrorValueTypeException(dsrc, row, self.key) key = [] for idx, ktype in enumerate(self.__ktypes): value = ktype(ktype, strElems[idx]) if value == ex_base.ERR_TYPE: raise ExplainErrorValueTypeException(dsrc, row, self.key) key.append(value) return tuple(key)
def __call__(self, dsrc, row): text = self.getCellText_(dsrc, row) if text == "": return self.filter_(dsrc, row) # 表格不填写任何内容 value = self.filter_(dsrc, row, self.str2value_(text)) if self.__fixValues is not ex_base.INNER and \ value not in self.__fixValues: raise ExplainErrorValueTypeException(dsrc, row, self.key) return value
def __call__(self, dsrc, row): text = self.getCellText_(dsrc, row) if text == "": return KEYRET_EMPTY if text == self.query("ignorSign", str): return KEYRET_IGNOR value = self.str2value_(text) if value == ex_base.ERR_TYPE: raise ExplainErrorValueTypeException(dsrc, row, self.key) return self.fnRet(value)
def __explainArrayTypeText(self, dsrc, row): """ 返回:(列表类型, Excel 格子中填写的字符串) """ vtype = tuple text = self.getCellText_(dsrc, row).strip() cutted, text = utils.cutStarts(text, self.__listScopeStarts) if cutted: cutted, text = utils.cutEnds(text, self.__listScopeEnds) if not cutted: raise ExplainErrorValueTypeException(dsrc, row, self.key) vtype = list else: cutted, text = utils.cutStarts(text, self.__tupleScopeStarts) if cutted: cutted, text = utils.cutEnds(text, self.__tupleScopeEnds) if not cutted: raise ExplainErrorValueTypeException(dsrc, row, self.key) text = utils.cutEnds(text, self.__splitters)[1] return vtype, text.strip()
def filter_(self, dsrc, row, value=ex_base.INNER): """ 如果构造函数中传入 extra 的参数带有 excludeValue 则: 1、如果解释内容为空,则返回 ABANDON_COL 2、如果解释内容与 exclueValue 值相等,则返回 ABANDON_COL 如果构造函数中传入的 extra 参数中没带有 excludeValue 则: 1、如果解释内容为空,同时传入了 defValue,则返回 defValue 2、如果解释内容为空,但没传入 defValue,则抛出 ExplainErrorValueTypeException 异常 """ if value is ex_base.INNER: # 解释内容为空 if self.excludeValue is not ex_base.INNER: # 有排除值 return ABANDON_COL elif self.defValue_ is ex_base.INNER: # 没有传入默认值 raise ExplainErrorValueTypeException(dsrc, row, self.key) return self.fnRet(self.defValue_) elif self.isExcludeValue_(value): # 解释内容与排除值相等 return ABANDON_COL elif value is ex_base.ERR_TYPE: # 解释内容类型不正确 raise ExplainErrorValueTypeException(dsrc, row, self.key) return self.fnRet(value)
def __call__(self, dsrc, row): elems = [] for ftran, etype in self.__ftrans: text = ftran(dsrc, row) if text == self.query("ignorSign", str): return KEYRET_IGNOR if text == "": return KEYRET_EMPTY value = self.str2value_(etype, text) if value == ex_base.ERR_TYPE: raise ExplainErrorValueTypeException(dsrc, row, self.key) elems.append(value) return tuple(elems)