From df82998cb8deb3aea6430371bd837b22ed5f3cb3 Mon Sep 17 00:00:00 2001 From: vmagueta Date: Thu, 24 Oct 2024 16:50:59 -0300 Subject: [PATCH 1/5] =?UTF-8?q?Implementada=20a=20fun=C3=A7=C3=A3o=20remov?= =?UTF-8?q?e=5Fsymbols=5Fcpf=20e=20escrito=20a=20docstring=20e=20doctest?= =?UTF-8?q?=20closes=20#issue=20437?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 ++++++++++- README_EN.md | 11 ++++++++++- brutils/__init__.py | 5 ++--- brutils/cpf.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ tests/test_cpf.py | 13 +++++++++++++ 5 files changed, 79 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 73769b04..13ed333f 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,8 @@ Argumentos: Retorna: -- str: Uma nova string com os símbolos especificados removidos. +- str: Uma nova string com os símbolos especificados removidos. Caso o CPF +fornecido não seja válido, retornará None Exemplo: @@ -162,6 +163,14 @@ Exemplo: >>> from brutils import remove_symbols_cpf >>> remove_symbols_cpf('000.111.222-33') '00011122233' +>>> remove_symbols_cpf('000.111.222-3') +None +>>> remove_symbols_cpf('000.111.222-333') +None +>>> remove_symbols_cpf('') +None +>>> remove_symbols_cpf(123) +None ``` ### generate_cpf diff --git a/README_EN.md b/README_EN.md index 7917b673..2d38b429 100644 --- a/README_EN.md +++ b/README_EN.md @@ -151,7 +151,8 @@ the '.', '-' characters from it. Args: -- cpf (str): The CPF string containing symbols to be removed. +- cpf (str): The CPF string containing symbols to be removed. If the provided +CPF is invalid, it'll return None. Returns: @@ -163,6 +164,14 @@ Example: >>> from brutils import remove_symbols_cpf >>> remove_symbols_cpf('000.111.222-33') '00011122233' +>>> remove_symbols_cpf('000.111.222-3') +None +>>> remove_symbols_cpf('000.111.222-333') +None +>>> remove_symbols_cpf('') +None +>>> remove_symbols_cpf(123) +None ``` ### generate_cpf diff --git a/brutils/__init__.py b/brutils/__init__.py index 6959a0d0..b336ebd1 100644 --- a/brutils/__init__.py +++ b/brutils/__init__.py @@ -31,6 +31,8 @@ # CPF Imports from brutils.cpf import ( format_cpf, + remove_symbols, + remove_symbols_cpf, ) from brutils.cpf import ( generate as generate_cpf, @@ -38,9 +40,6 @@ from brutils.cpf import ( is_valid as is_valid_cpf, ) -from brutils.cpf import ( - remove_symbols as remove_symbols_cpf, -) # Email Import from brutils.email import is_valid as is_valid_email diff --git a/brutils/cpf.py b/brutils/cpf.py index d5d76721..9156f9ce 100644 --- a/brutils/cpf.py +++ b/brutils/cpf.py @@ -243,3 +243,47 @@ def _checksum(basenum): # type: (str) -> str verifying_digits += str(_hashdigit(basenum + verifying_digits, 11)) return verifying_digits + + +def remove_symbols_cpf(cpf: str) -> str: + """ + Compute the checksum digits for a given CPF base number. + + This function removes the symbols dot and dash (`.` and `-`) from a CPF. + + Args: + basenum (str): A formatted CPF string with standard visual aid symbols or None + if the input is invalid. + + Returns: + str: A numbers-only CPF string. If it's not a valid number or format, it'll return None. + + Example: + >>> from brutils import remove_symbols_cpf + >>> remove_symbols_cpf('000.111.222-33') + '00011122233' + >>> remove_symbols_cpf('') + None + >>> remove_symbols_cpf(123) + None + >>> remove_symbols_cpf('000.111.222') + None + >>> remove_symbols_cpf('000.111.222-333') + None + """ + + cpf_no_symbols = "" + if cpf == "": + return None + elif not isinstance(cpf, str): + return None + else: + for character in cpf: + if character not in ".-": + cpf_no_symbols += character + if len(cpf_no_symbols) < 10: + return None + elif len(cpf_no_symbols) > 11: + return None + else: + return cpf_no_symbols diff --git a/tests/test_cpf.py b/tests/test_cpf.py index 84f49e70..c0744c56 100644 --- a/tests/test_cpf.py +++ b/tests/test_cpf.py @@ -9,6 +9,7 @@ generate, is_valid, remove_symbols, + remove_symbols_cpf, sieve, validate, ) @@ -109,5 +110,17 @@ def test_when_cpf_is_not_valid_returns_none(self, mock_is_valid): self.assertIsNone(format_cpf("11144477735")) +@patch("brutils.cpf.remove_symbols_cpf") +class TestRemoveSymbolsCPF(TestCase): + def test_remove_symbols_cpf_positive(self, mock_remove_symbols_cpf): + self.assertEqual(remove_symbols_cpf("123.456.789-10"), "12345678910") + + def test_remove_symbols_cpf_negative_int(self, mock_remove_symbols_cpf): + self.assertIsNone(remove_symbols_cpf(123456789)) + + def test_remove_symbols_cpf_negative_empy(self, mock_remove_symbols_cpf): + self.assertIsNone(remove_symbols_cpf("")) + + if __name__ == "__main__": main() From 105d31822552f5ce57154ca0bf3099637e79e3f0 Mon Sep 17 00:00:00 2001 From: vmagueta Date: Thu, 24 Oct 2024 17:45:57 -0300 Subject: [PATCH 2/5] Adicionado remove_symbols a lista __all__ --- brutils/__init__.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/brutils/__init__.py b/brutils/__init__.py index b336ebd1..d45395a0 100644 --- a/brutils/__init__.py +++ b/brutils/__init__.py @@ -31,8 +31,6 @@ # CPF Imports from brutils.cpf import ( format_cpf, - remove_symbols, - remove_symbols_cpf, ) from brutils.cpf import ( generate as generate_cpf, @@ -40,6 +38,12 @@ from brutils.cpf import ( is_valid as is_valid_cpf, ) +from brutils.cpf import ( + remove_symbols as remove_symbols_cpf, +) +from brutils.cpf import ( + remove_symbols_cpf as remove_symbols_from_cpf, +) # Email Import from brutils.email import is_valid as is_valid_email @@ -140,6 +144,7 @@ "generate_cpf", "is_valid_cpf", "remove_symbols_cpf", + "remove_symbols_from_cpf", # Email "is_valid_email", # Legal Process From 522d86e3c4f61129fb5b370ed58de351886eca43 Mon Sep 17 00:00:00 2001 From: vmagueta Date: Thu, 24 Oct 2024 18:23:01 -0300 Subject: [PATCH 3/5] Adicionado testes para cobrir a string de argumento menor e maior que um cpf --- tests/test_cpf.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_cpf.py b/tests/test_cpf.py index c0744c56..dd03923b 100644 --- a/tests/test_cpf.py +++ b/tests/test_cpf.py @@ -121,6 +121,12 @@ def test_remove_symbols_cpf_negative_int(self, mock_remove_symbols_cpf): def test_remove_symbols_cpf_negative_empy(self, mock_remove_symbols_cpf): self.assertIsNone(remove_symbols_cpf("")) + def test_remove_symbols_cpf_negative_longer(self, mock_remove_symbols_cpf): + self.assertIsNone(remove_symbols_cpf("111.222.333-444")) + + def test_remove_symbols_cpf_negative_shorter(self, mock_remove_symbols_cpf): + self.assertIsNone(remove_symbols_cpf("111.222.333")) + if __name__ == "__main__": main() From dba3ad4888178e70b1dd3580dd4f40f0f48a86e0 Mon Sep 17 00:00:00 2001 From: vmagueta Date: Fri, 25 Oct 2024 11:26:56 -0300 Subject: [PATCH 4/5] =?UTF-8?q?Alterado=20o=20c=C3=B3digo=20para=20ficar?= =?UTF-8?q?=20mais=20leg=C3=ADvel=20e=20funcional?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- brutils/cpf.py | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/brutils/cpf.py b/brutils/cpf.py index 9156f9ce..7376954d 100644 --- a/brutils/cpf.py +++ b/brutils/cpf.py @@ -272,18 +272,12 @@ def remove_symbols_cpf(cpf: str) -> str: None """ + result = None cpf_no_symbols = "" - if cpf == "": - return None - elif not isinstance(cpf, str): - return None - else: - for character in cpf: - if character not in ".-": - cpf_no_symbols += character - if len(cpf_no_symbols) < 10: - return None - elif len(cpf_no_symbols) > 11: - return None - else: - return cpf_no_symbols + if isinstance(cpf, str) and cpf != "": + cpf_no_symbols = "".join([char for char in cpf if char not in ".-"]) + + if len(cpf_no_symbols) == 11: + result = cpf_no_symbols + + return result From 831aead60d13ad30fd21e0dd416e7582051cb332 Mon Sep 17 00:00:00 2001 From: vmagueta Date: Tue, 29 Oct 2024 10:23:08 -0300 Subject: [PATCH 5/5] =?UTF-8?q?Adicionada=20constante=20CPF=5FLENGHT=20par?= =?UTF-8?q?a=20melhor=20leitura=20do=20c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- brutils/cpf.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/brutils/cpf.py b/brutils/cpf.py index 7376954d..5ccccd2e 100644 --- a/brutils/cpf.py +++ b/brutils/cpf.py @@ -271,13 +271,13 @@ def remove_symbols_cpf(cpf: str) -> str: >>> remove_symbols_cpf('000.111.222-333') None """ + CPF_LENGHT = 11 - result = None - cpf_no_symbols = "" - if isinstance(cpf, str) and cpf != "": - cpf_no_symbols = "".join([char for char in cpf if char not in ".-"]) + if not cpf: + return None - if len(cpf_no_symbols) == 11: - result = cpf_no_symbols + if isinstance(cpf, str) and cpf != "": + cpf_no_symbols = "".join([char for char in cpf if char.isalnum()]) - return result + if len(cpf_no_symbols) == CPF_LENGHT: + return cpf_no_symbols