def parse(klass, row, carrier, areacode, phone_type): row = list(row) # Make row mutable person = Person() person.name = normalize_text(row[2]) address = Address() address.location = normalize_text(row[3]) address.neighborhood = normalize_text(row[4]) address.city = normalize_text(row[5]) address.state = normalize_text(row[6]) phone = Phone() phone.carrier = carrier phone.areacode = areacode phone.type = phone_type try: # document - try CPF person.document = validate_cpf(row[8][-11:]) person.nature = Person.NATURE_CHOICES_PHYSICAL[0] except CPFValidationError: # document - try CNPJ person.document = validate_cnpj(row[8][-14:]) person.nature = Person.NATURE_CHOICES_LEGAL[0] address.zipcode = validate_zipcode(row[7]) phone.number = validate_phone_number(row[1]) return klass(row, person, address, phone)
def get_or_instantiate_for_zipcode(zipcode, number, complement): with is_valid_brazilian_zipcode(zipcode) as code: if code.is_valid: hash = Address.make_hash(code.number, remove_spaces_and_similar(number), remove_spaces_and_similar(complement)) instance = None number = remove_spaces_and_similar(number) or None complement = remove_spaces_and_similar(complement) or None try: instance = Address.objects.only('id').get(hash=hash) return dict_to_struct({'instance': instance, 'exists': True }) except Address.DoesNotExist: try: street = Street.objects.only('id').get(zipcode=code.number) instance = Address(hash=hash, street=street, number=number, complement=complement, neighborhood=street.neighborhood, city=street.neighborhood.city, state=street.neighborhood.city.state, ) return dict_to_struct({'instance': instance, 'exists': False }) except Street.DoesNotExist: raise ZipCodeNotFoundException(_(u'O CEP informado (%s) não existe na base de DNE' % zipcode)) raise ZipCodeInvalidException(_(u'O CEP informado (%s) parece estar incorreto' % zipcode))