1
resposta

Possível perca de funcionalidades

Quando importamos o arquivo validate_docbr a entrada do documento poderia ser feita tanto utilizando somente os números (xxxxxxxxxxx) quanto o numero já formatado (xxx.xxx.xxx-xx).


cpf_um = "11111111112"

cpf_um = "111.111.111-12"

Já depois do factory as entradas só são validas quando digitadas somente os números, pois a class Documento utiliza da quantidades de caracteres na str de entrada para definir qual class seguir

from validate_docbr import CPF, CNPJ

class Documento:

    @staticmethod
    def cria_documento(documento):
        if len(documento) == 11:
            return DocCpf(documento)
        elif len(documento) == 14:
            return DocCnpj(documento)
        else:
            raise ValueError("Quantidade de dígitos incorreta!")

    # resto do código

então perdemos essa funcionalidade do arquivo importado

1 resposta

Olá Gabriel, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Com a implementação da factory houve sim uma perda de funcionalidade, no momento da criação para efeito didático foram realizados a verificação dos valores fornecidos através do comprimento da string.

Para contornar essa perda, podemos fazer uma limpeza dos valores com o uso do regex para substituir os pontos e traços por um espaço em branco, como apresentado abaixo.

from validate_docbr import CPF, CNPJ
import re


class Documentos:

    @staticmethod
    def cria_documento(documento):
        documento = re.sub('[./-]', '', documento)
        if len(documento) == 11:
            return DocCpf(documento)
        elif len(documento) == 14:
            return DocCnpj(documento)
        else:
            raise ValueError("Quantidade de dígitos incorreta!")

Para saber um pouco mais sobre o método utilizado para remoção dos caracteres especiais, recomendo a leitura do seguinte artigo:

O artigo acima está em inglês, caso tenha dificuldades encontro-me à disposição.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!