From c06b356f3ae72e7b8ba8c36098ff9615c4c52dc9 Mon Sep 17 00:00:00 2001 From: Hudson Brendon Date: Fri, 29 Mar 2024 17:38:06 -0300 Subject: [PATCH 1/5] feat: adiciona python publish no CI --- .github/workflows/python-publish.yml | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/workflows/python-publish.yml diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml new file mode 100644 index 0000000..1cb774c --- /dev/null +++ b/.github/workflows/python-publish.yml @@ -0,0 +1,38 @@ +# This workflow will upload a Python Package using Twine when a release is created +# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Upload Python Package + +on: + release: + types: [published] + +permissions: + contents: read + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: "3.x" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + python -m pip install poetry + poetry config ${{ secrets.PYPI_SECRET_KEY }} + - name: Check Package + run: poetry check + - name: Build Package + run: poetry build + - name: Publish Package + run: poetry publish From 0778821dad7591bcfd29d9c05f5bf9ab16f242d0 Mon Sep 17 00:00:00 2001 From: Hudson Brendon Date: Fri, 29 Mar 2024 17:41:58 -0300 Subject: [PATCH 2/5] =?UTF-8?q?fix:=20atualiza=20vers=C3=A3o=20da=20biblio?= =?UTF-8?q?teca?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pydantic_br_validator/__init__.py | 2 +- pyproject.toml | 2 +- tests/test_version.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pydantic_br_validator/__init__.py b/pydantic_br_validator/__init__.py index b5c9c6b..029c9da 100644 --- a/pydantic_br_validator/__init__.py +++ b/pydantic_br_validator/__init__.py @@ -2,7 +2,7 @@ from .field_erros import * # noqa -__version__ = "0.4.0" +__version__ = "0.5.0" if TYPE_CHECKING: diff --git a/pyproject.toml b/pyproject.toml index 76b5eed..ed9f7d2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pydantic-br-validator" -version = "0.4.0" +version = "0.5.0" description = "Uma biblioteca python com modelos de validação para os principais documentos brasileiros" authors = ["Hudson Brendon "] readme = "README.md" diff --git a/tests/test_version.py b/tests/test_version.py index 20782b7..d88a0ab 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -2,4 +2,4 @@ def test_version() -> None: - assert __version__ == "0.4.0" + assert __version__ == "0.5.0" From 8ea6fcbb3d42ee15b44528acd5a9ca6bbd8a8e18 Mon Sep 17 00:00:00 2001 From: Hudson Brendon Date: Fri, 29 Mar 2024 17:51:11 -0300 Subject: [PATCH 3/5] feat: atualiza readme --- README.md | 5 +---- pydantic_br_validator/__init__.py | 2 +- pyproject.toml | 2 +- tests/test_version.py | 2 +- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 6065357..d56ad88 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,5 @@ -# Pydantic BR Validator +# Pydantic BR Validator 🇧🇷 -

- Pydantic BR Validator -

Uma biblioteca python com modelos de validação para os principais documentos brasileiros.

diff --git a/pydantic_br_validator/__init__.py b/pydantic_br_validator/__init__.py index 029c9da..3312eea 100644 --- a/pydantic_br_validator/__init__.py +++ b/pydantic_br_validator/__init__.py @@ -2,7 +2,7 @@ from .field_erros import * # noqa -__version__ = "0.5.0" +__version__ = "0.6.0" if TYPE_CHECKING: diff --git a/pyproject.toml b/pyproject.toml index ed9f7d2..b4f4adf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "pydantic-br-validator" -version = "0.5.0" +version = "0.6.0" description = "Uma biblioteca python com modelos de validação para os principais documentos brasileiros" authors = ["Hudson Brendon "] readme = "README.md" diff --git a/tests/test_version.py b/tests/test_version.py index d88a0ab..c2c9b09 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -2,4 +2,4 @@ def test_version() -> None: - assert __version__ == "0.5.0" + assert __version__ == "0.6.0" From 30516e7f81cc750f931418afd49c8ff9cadb631c Mon Sep 17 00:00:00 2001 From: Hudson Brendon Date: Sun, 14 Apr 2024 17:57:05 -0300 Subject: [PATCH 4/5] fix: atualiza readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d56ad88..7c94b20 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ pip install pydantic-br-validator - [ ] Renavam - [ ] Placa - [ ] ISBN -- [ ] CEP +- [x] CEP # Exemplos From 8fcc81780af6afbeb206b6a55b4794dbdd3de70a Mon Sep 17 00:00:00 2001 From: Hudson Brendon Date: Wed, 1 May 2024 19:51:37 -0300 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20adiciona=20m=C3=A9todo=20=5Fvalidate?= =?UTF-8?q?=5Fdigit=5Fverify?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pydantic_br_validator/__init__.py | 14 +++--- pydantic_br_validator/fields/rg_field.py | 45 +++++++++++++++++++ .../validators/rg_validator.py | 38 ++++++++++++++++ tests/test_rg.py | 0 tests/test_version.py | 2 +- 5 files changed, 89 insertions(+), 10 deletions(-) create mode 100644 pydantic_br_validator/fields/rg_field.py create mode 100644 pydantic_br_validator/validators/rg_validator.py create mode 100644 tests/test_rg.py diff --git a/pydantic_br_validator/__init__.py b/pydantic_br_validator/__init__.py index 3312eea..9b0524c 100644 --- a/pydantic_br_validator/__init__.py +++ b/pydantic_br_validator/__init__.py @@ -2,24 +2,19 @@ from .field_erros import * # noqa -__version__ = "0.6.0" +__version__ = "0.7.0" if TYPE_CHECKING: CPF = str - CNH = str CPFMask = str CPFDigits = str + RG = str + RGMask = str + RGDigits = str CNPJ = str CNPJDigits = str CNPJMask = str - TE = str - PIS = str - PISMask = str - PISDigits = str - Certidao = str - CertidaoMask = str - CertidaoDigits = str CEP = str CEPMask = str CEPDigits = str @@ -27,3 +22,4 @@ from .fields.cnpj_field import * # noqa from .fields.cpf_field import * # noqa from .fields.cep_field import * # noqa + from .fields.rg_field import * # noqa diff --git a/pydantic_br_validator/fields/rg_field.py b/pydantic_br_validator/fields/rg_field.py new file mode 100644 index 0000000..19f5603 --- /dev/null +++ b/pydantic_br_validator/fields/rg_field.py @@ -0,0 +1,45 @@ +from ..validators.rg_validator import RGValidator +from .base_field import Base, BaseDigits, BaseMask + +__all__ = [ + "RG", + "RGMask", + "RGDigits", +] + + +class RG(Base): + """ + Accepts string of RG with or without mask. + + Attributes: + number (str): RG number. + + """ + + format = "rg" + Validator = RGValidator + + +class RGMask(BaseMask): + """ + Only Accepts string of RG with mask. + + Attributes: + number (str): RG number. + """ + + format = "rg mask" + Validator = RGValidator + + +class RGDigits(BaseDigits): + """ + Only Accepts string of RG with digits. + + Attributes: + number (str): RG number. + """ + + format = "rg digits" + Validator = RGValidator diff --git a/pydantic_br_validator/validators/rg_validator.py b/pydantic_br_validator/validators/rg_validator.py new file mode 100644 index 0000000..21decca --- /dev/null +++ b/pydantic_br_validator/validators/rg_validator.py @@ -0,0 +1,38 @@ +from .base_validator import FieldMaskValidator + +__all__ = ["RGValidator"] + + +class RGValidator(FieldMaskValidator): + def __init__(self, rg: str) -> None: + self.rg = rg + + def validate_mask(self) -> bool: + """Valida se o RG tem a máscara correta (XX.XXX.XXX-X).""" + parts = self.rg.split(".") + if len(parts) != 3: + return False + if not all(len(part) == 3 for part in parts[:2]) or len(parts[2]) != 3: + return False + if parts[2][2] != "-": + return False + return all(part.replace("-", "").isdigit() for part in parts) + + def validate(self) -> bool: + """Valida se o RG tem 9 caracteres numéricos, permitindo máscara.""" + rg_clean = self.rg.replace(".", "").replace("-", "") + if len(rg_clean) != 9: + return False + if not rg_clean.isdigit(): + return False + return self.validate_mask() + + def _validate_digit_verify(self, rg: str) -> str: + """Valida o dígito verificador do RG.""" + sum = 0 + for i in range(9, 1, -1): + sum += int(rg[9 - i]) * i + sum = sum % 11 + if sum == 10: + sum = 0 + return str(sum) diff --git a/tests/test_rg.py b/tests/test_rg.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_version.py b/tests/test_version.py index c2c9b09..6c6e0a2 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -2,4 +2,4 @@ def test_version() -> None: - assert __version__ == "0.6.0" + assert __version__ == "0.7.0"