# Pydantic BR
[![CI](https://github.com/scjorge/pydantic_br/workflows/CI/badge.svg?event=push)](https://github.com/scjorge/pydantic_br/actions)
[![codecov](https://codecov.io/gh/scjorge/pydantic_br/branch/master/graph/badge.svg?token=1XVEXSBU69)](https://codecov.io/gh/scjorge/pydantic_br)
[![pypi](https://img.shields.io/pypi/v/pydantic-br)](https://pypi.org/project/pydantic-br/)
[![pypi](https://img.shields.io/pypi/pyversions/pydantic-br)](https://pypi.org/project/pydantic-br/)
[![license](https://img.shields.io/pypi/l/pydantic-br)](https://github.com/scjorge/pydantic_br/blob/master/LICENSE)
[![downloads](https://img.shields.io/pypi/dm/pydantic-br)](https://pypi.org/project/pydantic-br/)
<p align="center">
<img src="https://raw.githubusercontent.com/scjorge/pydantic_br/master/docs/assets/logo.png" width='200'/>
</p>
Essa é uma biblioteca de extensão e visa disponibilizar campos com validações brasileiras para a biblioteca pydantic.
Compatível com a versão v1 e v2 do Pydantic.
---
Código fonte: https://github.com/scjorge/pydantic_br
Documentação: https://pydantic-br.readthedocs.io
---
## Disponibilidades
| Campo | Grupo de Documentos | Nome do Documento | Método de validação
|---|---|---|---|
| CPF | Pessoa física | Cadastro de Pessoa Física | Digito Verificador
| CNH | Pessoa física | Carteira Nacional de Habilitação | Digito Verificador
| TE | Pessoa física | Título de Eleitor | Digito Verificador
| PIS | Pessoa física | Programa de Integração Social | Digito Verificador
| CERT | Pessoa física | Certidão (Nascimento/Casamento/Óbito) | Digito Verificador
| CNS | Pessoa física | Cartão Nacional de Saúde | Digito Verificador
| CNPJ | Pessoa Jurídica | Carteira Nacional de Pessoas Jurídicas | Digito Verificador
| CEP | Endereços | Código de Endereçamento Postal | RegExr
| SiglaEstado | Endereços | Sigla oficial do Estado Brasileiro | RegExr
| RENAVAM | Veículos | Registro Nacional de Veículos Automotores | Digito Verificador
| PlacaVeiculo | Veículos | Placa do Veículo | RegExr
## Instalação
### Utilizando pip
```
pip install pydantic-br
```
### Utilizando Poetry
```
poetry add pydantic-br
```
## Exemplos de Utilização
Os exemplos de dados exemplificados foram tirados dos seguintes sites:
- [geradordecpf](https://www.geradordecpf.org/)
- [4devs](https://www.4devs.com.br/gerador_de_cnpj)
A má utilização dos dados é de total responsabilidade do usuário.
### CPF válido
```python
from pprint import pprint
from pydantic import BaseModel
from pydantic_br import CPF, CPFDigits, CPFMask
class Pessoa(BaseModel):
nome: str
cpf: CPF # aceita CPF válidos com ou sem máscara
cpf_mask: CPFMask # aceita CPF válido apenas com máscara
cpf_digits: CPFDigits # aceita CPF válido apenas com dígitos
p1 = Pessoa(
nome="João", cpf="53221394780", cpf_mask="532.213.947-80", cpf_digits="53221394780"
)
pprint(p1.model_dump())
```
Saída
```
{'cpf': '53221394780',
'cpf_digits': '53221394780',
'cpf_mask': '532.213.947-80',
'nome': 'João'}
```
### CPF inválido
```python
from pprint import pprint
from pydantic import BaseModel
from pydantic_br import CPF, CPFDigits, CPFMask
class Pessoa(BaseModel):
nome: str
cpf: CPF # aceita CPF válidos com ou sem máscara
cpf_mask: CPFMask # aceita CPF válido apenas com máscara
cpf_digits: CPFDigits # aceita CPF válido apenas com dígitos
p1 = Pessoa(
nome="João", cpf="00000000000", cpf_mask="53221394780", cpf_digits="532.213.947-80"
)
pprint(p1.model_dump())
```
Saída
```
Traceback (most recent call last):
p1 = Pessoa(
File "pydantic\main.py", line 341, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 3 validation errors for Pessoa
cpf
invalid data [type=invalid_data, input_value='00000000000', input_type=str]
cpf_mask
invalid mask format [type=invalid_mask, input_value='53221394780', input_type=str]
cpf_digits
field only accept digits as string [type=not_digits, input_value='532.213.947-80', input_type=str]
```
## Versões do Pydantic
Os exemplos acima estão escritos na versão v1 do Pydantic. Entretanto, funciona perfeitamente com a versão v2.
Então que mudará? Bem, uma das coisa é que os métodos de 'apresentação' das models foram alterados na v2.
- O método `dict()` foi alterado para `model_dump()` e `model_dump_json()`
- O método `schema()` foi alterado para `model_json_schema()`
Raw data
{
"_id": null,
"home_page": "https://github.com/scjorge/pydantic_br",
"name": "pydantic-br",
"maintainer": "Jorge Silva",
"docs_url": null,
"requires_python": "<4.0.0,>=3.8.1",
"maintainer_email": "jorgesilva.ti@hotmail.com",
"keywords": "pydantic, json, json-schema, hints, parsin, brasil, documentos, br, fastapi, doc, documento, schema",
"author": "Jorge Silva",
"author_email": "jorgesilva.ti@hotmail.com",
"download_url": "https://files.pythonhosted.org/packages/79/16/c16d614d208ce7d60f5a0cfac14ae1e30bb6bf584b59f26cb639e1e5a1e2/pydantic_br-1.1.0.tar.gz",
"platform": null,
"description": "\n# Pydantic BR\n\n\n[![CI](https://github.com/scjorge/pydantic_br/workflows/CI/badge.svg?event=push)](https://github.com/scjorge/pydantic_br/actions)\n[![codecov](https://codecov.io/gh/scjorge/pydantic_br/branch/master/graph/badge.svg?token=1XVEXSBU69)](https://codecov.io/gh/scjorge/pydantic_br)\n[![pypi](https://img.shields.io/pypi/v/pydantic-br)](https://pypi.org/project/pydantic-br/)\n[![pypi](https://img.shields.io/pypi/pyversions/pydantic-br)](https://pypi.org/project/pydantic-br/)\n[![license](https://img.shields.io/pypi/l/pydantic-br)](https://github.com/scjorge/pydantic_br/blob/master/LICENSE)\n[![downloads](https://img.shields.io/pypi/dm/pydantic-br)](https://pypi.org/project/pydantic-br/)\n\n\n<p align=\"center\">\n <img src=\"https://raw.githubusercontent.com/scjorge/pydantic_br/master/docs/assets/logo.png\" width='200'/>\n</p>\n\n\nEssa \u00e9 uma biblioteca de extens\u00e3o e visa disponibilizar campos com valida\u00e7\u00f5es brasileiras para a biblioteca pydantic.\n\nCompat\u00edvel com a vers\u00e3o v1 e v2 do Pydantic.\n\n\n---\n\nC\u00f3digo fonte: https://github.com/scjorge/pydantic_br\n\nDocumenta\u00e7\u00e3o: https://pydantic-br.readthedocs.io\n\n---\n\n## Disponibilidades\n\n| Campo | Grupo de Documentos | Nome do Documento | M\u00e9todo de valida\u00e7\u00e3o\n|---|---|---|---|\n| CPF | Pessoa f\u00edsica | Cadastro de Pessoa F\u00edsica | Digito Verificador\n| CNH | Pessoa f\u00edsica | Carteira Nacional de Habilita\u00e7\u00e3o | Digito Verificador\n| TE | Pessoa f\u00edsica | T\u00edtulo de Eleitor | Digito Verificador\n| PIS | Pessoa f\u00edsica | Programa de Integra\u00e7\u00e3o Social | Digito Verificador\n| CERT | Pessoa f\u00edsica | Certid\u00e3o (Nascimento/Casamento/\u00d3bito) | Digito Verificador\n| CNS | Pessoa f\u00edsica | Cart\u00e3o Nacional de Sa\u00fade | Digito Verificador\n| CNPJ | Pessoa Jur\u00eddica | Carteira Nacional de Pessoas Jur\u00eddicas | Digito Verificador\n| CEP | Endere\u00e7os | C\u00f3digo de Endere\u00e7amento Postal | RegExr\n| SiglaEstado | Endere\u00e7os | Sigla oficial do Estado Brasileiro | RegExr\n| RENAVAM | Ve\u00edculos | Registro Nacional de Ve\u00edculos Automotores | Digito Verificador\n| PlacaVeiculo | Ve\u00edculos | Placa do Ve\u00edculo | RegExr\n\n\n## Instala\u00e7\u00e3o\n\n### Utilizando pip\n\n```\npip install pydantic-br\n```\n\n### Utilizando Poetry\n\n```\npoetry add pydantic-br\n```\n\n## Exemplos de Utiliza\u00e7\u00e3o\n\nOs exemplos de dados exemplificados foram tirados dos seguintes sites:\n\n- [geradordecpf](https://www.geradordecpf.org/)\n- [4devs](https://www.4devs.com.br/gerador_de_cnpj)\n\nA m\u00e1 utiliza\u00e7\u00e3o dos dados \u00e9 de total responsabilidade do usu\u00e1rio.\n\n### CPF v\u00e1lido \n```python\nfrom pprint import pprint\n\nfrom pydantic import BaseModel\n\nfrom pydantic_br import CPF, CPFDigits, CPFMask\n\n\nclass Pessoa(BaseModel):\n nome: str\n cpf: CPF # aceita CPF v\u00e1lidos com ou sem m\u00e1scara\n cpf_mask: CPFMask # aceita CPF v\u00e1lido apenas com m\u00e1scara\n cpf_digits: CPFDigits # aceita CPF v\u00e1lido apenas com d\u00edgitos\n\n\np1 = Pessoa(\n nome=\"Jo\u00e3o\", cpf=\"53221394780\", cpf_mask=\"532.213.947-80\", cpf_digits=\"53221394780\"\n)\n\n\npprint(p1.model_dump())\n```\n\nSa\u00edda\n\n```\n{'cpf': '53221394780',\n 'cpf_digits': '53221394780',\n 'cpf_mask': '532.213.947-80',\n 'nome': 'Jo\u00e3o'}\n```\n\n\n### CPF inv\u00e1lido \n\n```python\nfrom pprint import pprint\n\nfrom pydantic import BaseModel\n\nfrom pydantic_br import CPF, CPFDigits, CPFMask\n\n\nclass Pessoa(BaseModel):\n nome: str\n cpf: CPF # aceita CPF v\u00e1lidos com ou sem m\u00e1scara\n cpf_mask: CPFMask # aceita CPF v\u00e1lido apenas com m\u00e1scara\n cpf_digits: CPFDigits # aceita CPF v\u00e1lido apenas com d\u00edgitos\n\n\np1 = Pessoa(\n nome=\"Jo\u00e3o\", cpf=\"00000000000\", cpf_mask=\"53221394780\", cpf_digits=\"532.213.947-80\"\n)\n\npprint(p1.model_dump())\n```\n\nSa\u00edda\n\n```\nTraceback (most recent call last):\n p1 = Pessoa(\n File \"pydantic\\main.py\", line 341, in pydantic.main.BaseModel.__init__\npydantic.error_wrappers.ValidationError: 3 validation errors for Pessoa\ncpf\n invalid data [type=invalid_data, input_value='00000000000', input_type=str]\ncpf_mask\n invalid mask format [type=invalid_mask, input_value='53221394780', input_type=str]\ncpf_digits\n field only accept digits as string [type=not_digits, input_value='532.213.947-80', input_type=str]\n```\n\n\n## Vers\u00f5es do Pydantic \nOs exemplos acima est\u00e3o escritos na vers\u00e3o v1 do Pydantic. Entretanto, funciona perfeitamente com a vers\u00e3o v2.\n\nEnt\u00e3o que mudar\u00e1? Bem, uma das coisa \u00e9 que os m\u00e9todos de 'apresenta\u00e7\u00e3o' das models foram alterados na v2. \n\n- O m\u00e9todo `dict()` foi alterado para `model_dump()` e `model_dump_json()`\n- O m\u00e9todo `schema()` foi alterado para `model_json_schema()`\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Pydantic library extension with Brazilian fields",
"version": "1.1.0",
"project_urls": {
"Documentation": "https://pydantic-br.readthedocs.io",
"Homepage": "https://github.com/scjorge/pydantic_br",
"Repository": "https://github.com/scjorge/pydantic_br"
},
"split_keywords": [
"pydantic",
" json",
" json-schema",
" hints",
" parsin",
" brasil",
" documentos",
" br",
" fastapi",
" doc",
" documento",
" schema"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "bdd5d0d99c2e83f9f91b703ad53ab1779636c9bd3b4f0abe97f6d75243c19594",
"md5": "a53ae37516be8b3a87370c0410aa8484",
"sha256": "7f1891eb3bd02e247232a6cb88c38e6418e8cabe959e69ccf2edb483abc08f17"
},
"downloads": -1,
"filename": "pydantic_br-1.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a53ae37516be8b3a87370c0410aa8484",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0.0,>=3.8.1",
"size": 19181,
"upload_time": "2024-08-02T21:54:47",
"upload_time_iso_8601": "2024-08-02T21:54:47.046258Z",
"url": "https://files.pythonhosted.org/packages/bd/d5/d0d99c2e83f9f91b703ad53ab1779636c9bd3b4f0abe97f6d75243c19594/pydantic_br-1.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7916c16d614d208ce7d60f5a0cfac14ae1e30bb6bf584b59f26cb639e1e5a1e2",
"md5": "29c2bd0249a209c91e7c7450c88a9c00",
"sha256": "a6d45241d55e766084141be5f654a9b0cc6c1c73de896d292d8b8a882987c48e"
},
"downloads": -1,
"filename": "pydantic_br-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "29c2bd0249a209c91e7c7450c88a9c00",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0.0,>=3.8.1",
"size": 11785,
"upload_time": "2024-08-02T21:54:49",
"upload_time_iso_8601": "2024-08-02T21:54:49.032813Z",
"url": "https://files.pythonhosted.org/packages/79/16/c16d614d208ce7d60f5a0cfac14ae1e30bb6bf584b59f26cb639e1e5a1e2/pydantic_br-1.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-02 21:54:49",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "scjorge",
"github_project": "pydantic_br",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pydantic-br"
}