예제 #1
0
    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)
예제 #2
0
 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)
예제 #3
0
	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)
예제 #4
0
 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
예제 #5
0
	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)
예제 #6
0
    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()
예제 #7
0
    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)
예제 #8
0
	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)