def valor(self, valor): if self.formato == 'alfa': if not isinstance(valor, basestring): print "{0} - {1}".format(self.nome, self.valor) raise errors.TipoError(self, valor) if len(valor) > self.digitos: print "{0} - {1}".format(self.nome, self.valor) raise errors.NumDigitosExcedidoError(self, valor) elif self.decimais: if not isinstance(valor, Decimal): print "{0} - {1}".format(self.nome, self.valor) raise errors.TipoError(self, valor) num_decimais = valor.as_tuple().exponent * -1 if num_decimais != self.decimais: print "{0} - {1}".format(self.nome, self.valor) raise errors.NumDecimaisError(self, valor) if len(str(valor).replace('.', '')) > self.digitos: print "{0} - {1}".format(self.nome, self.valor) raise errors.NumDigitosExcedidoError(self, valor) else: if not isinstance(valor, (int, long)): print "{0} - {1}".format(self.nome, self.valor) raise errors.TipoError(self, valor) if len(str(valor)) > self.digitos: print "{0} - {1}".format(self.nome, self.valor) raise errors.NumDigitosExcedidoError(self, valor) self._valor = valor
def valor(self, valor): if self.formato == 'alfa': if not isinstance(valor, str): print("{0} - {1}".format(self.nome, valor)) raise errors.TipoError(self, valor) valor = self._normalize_str(valor) if len(valor) > self.digitos: print("truncating - {0}".format(self.nome)) # reduz o len(valor) cortar = len(valor) - self.digitos valor = valor[:-(cortar)] elif self.decimais: if not isinstance(valor, Decimal): print("{0} - {1}".format(self.nome, valor)) raise errors.TipoError(self, valor) num_decimais = valor.as_tuple().exponent * -1 if num_decimais != self.decimais: print("{0} - {1}".format(self.nome, valor)) raise errors.NumDecimaisError(self, valor) if len(str(valor).replace('.', '')) > self.digitos: print("{0} - {1}".format(self.nome, valor)) raise errors.NumDigitosExcedidoError(self, valor) else: if not isinstance(valor, int): print("{0} - {1}".format(self.nome, valor)) raise errors.TipoError(self, valor) if len(str(valor)) > self.digitos: print("{0} - {1}".format(self.nome, valor)) raise errors.NumDigitosExcedidoError(self, valor) self._valor = valor
def carregar(self, registro_str): for campo in self._campos.values(): valor = registro_str[campo.inicio:campo.fim].strip() if campo.decimais: exponente = campo.decimais * -1 dec = valor[:exponente] + '.' + valor[exponente:] try: campo.valor = Decimal(dec) except InvalidOperation: raise # raise custom? elif campo.formato == 'num': try: campo.valor = int(valor) except ValueError: raise errors.TipoError(campo, valor) else: campo.valor = valor