# 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)
<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 | Situação
|---|---|---|---|---|
| CNPJ | Pessoa Jurídica | Carteira Nacional de Pessoas Jurídicas | Digito Verificador | Concluído
| CPF | Pessoa física | Cadastro de Pessoa Física | Digito Verificador | Concluído
| CNH | Pessoa física | Carteira Nacional de Habilitação | Digito Verificador | Concluído
| TE | Pessoa física | Título de Eleitor | Digito Verificador | Concluído
| PIS | Pessoa física | Programa de Integração Social | Digito Verificador | Concluído
| CERT | Pessoa física | Certidão (Nascimento/Casamento/Óbito) | Digito Verificador | Concluído
| CNS | Pessoa física | Cartão Nacional de Saúde | Digito Verificador | Em desenvolvimento
| RENAVAM | Veículos | Registro Nacional de Veículos Automotores | RegExr | Em desenvolvimento
| PLACA | Veículos | Placa do Veículo | RegExr | Em desenvolvimento
| ISBN | Livros | Padrão Internacional de Numeração de Livro | Digito Verificador | Em desenvolvimento
## 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 apnas com dígitos
p1 = Pessoa(
nome="João", cpf="53221394780", cpf_mask="532.213.947-80", cpf_digits="53221394780"
)
pprint(p1.dict())
```
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.dict())
```
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=value_error.invalid_data)
cpf_mask
invalid mask format (type=value_error.invalid_mask)
cpf_digits
field only accept digits as string (type=value_error.not_digits)
```
## 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, os métodos de 'apresentação' das models foram alterados na v2.
- O método `dict()` foi alterado para `model_dump()`
- 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": ">=3.8,<4.0",
"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/1b/91/286130f64b1a0e9ca7846b2f561415dc0651f0e8a8ad32a1716ef9d6d9b5/pydantic_br-1.0.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\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 | Situa\u00e7\u00e3o\n|---|---|---|---|---|\n| CNPJ | Pessoa Jur\u00eddica | Carteira Nacional de Pessoas Jur\u00eddicas | Digito Verificador | Conclu\u00eddo\n| CPF | Pessoa f\u00edsica | Cadastro de Pessoa F\u00edsica | Digito Verificador | Conclu\u00eddo\n| CNH | Pessoa f\u00edsica | Carteira Nacional de Habilita\u00e7\u00e3o | Digito Verificador | Conclu\u00eddo\n| TE | Pessoa f\u00edsica | T\u00edtulo de Eleitor | Digito Verificador | Conclu\u00eddo\n| PIS | Pessoa f\u00edsica | Programa de Integra\u00e7\u00e3o Social | Digito Verificador | Conclu\u00eddo\n| CERT | Pessoa f\u00edsica | Certid\u00e3o (Nascimento/Casamento/\u00d3bito) | Digito Verificador | Conclu\u00eddo\n| CNS | Pessoa f\u00edsica | Cart\u00e3o Nacional de Sa\u00fade | Digito Verificador | Em desenvolvimento\n| RENAVAM | Ve\u00edculos | Registro Nacional de Ve\u00edculos Automotores | RegExr | Em desenvolvimento\n| PLACA | Ve\u00edculos | Placa do Ve\u00edculo | RegExr | Em desenvolvimento\n| ISBN | Livros | Padr\u00e3o Internacional de Numera\u00e7\u00e3o de Livro | Digito Verificador | Em desenvolvimento\n\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 apnas 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.dict())\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### 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.dict())\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=value_error.invalid_data)\ncpf_mask\n invalid mask format (type=value_error.invalid_mask)\ncpf_digits\n field only accept digits as string (type=value_error.not_digits)\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, os m\u00e9todos de 'apresenta\u00e7\u00e3o' das models foram alterados na v2. \n\n- O m\u00e9todo `dict()` foi alterado para `model_dump()`\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.0.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": "9b27086eb32e17de66c3fef56c6f711f1329256e5d2fb0f0b4ef581b97a99312",
"md5": "24b6f27e33f637e34f4189f67a4397f2",
"sha256": "f18b0d74f8c1e16348a4082ad30231c6f4d059f17eb1447c49ebf32557d0871a"
},
"downloads": -1,
"filename": "pydantic_br-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "24b6f27e33f637e34f4189f67a4397f2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8,<4.0",
"size": 13625,
"upload_time": "2023-08-14T02:15:58",
"upload_time_iso_8601": "2023-08-14T02:15:58.005545Z",
"url": "https://files.pythonhosted.org/packages/9b/27/086eb32e17de66c3fef56c6f711f1329256e5d2fb0f0b4ef581b97a99312/pydantic_br-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1b91286130f64b1a0e9ca7846b2f561415dc0651f0e8a8ad32a1716ef9d6d9b5",
"md5": "7b573a1c2b5592449a780f179ccb5964",
"sha256": "3f13d07fef5500aa50b8be485d9eb2d5ce0e55e7176db3af5c19d9f4c069f1ff"
},
"downloads": -1,
"filename": "pydantic_br-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "7b573a1c2b5592449a780f179ccb5964",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8,<4.0",
"size": 10015,
"upload_time": "2023-08-14T02:15:59",
"upload_time_iso_8601": "2023-08-14T02:15:59.366199Z",
"url": "https://files.pythonhosted.org/packages/1b/91/286130f64b1a0e9ca7846b2f561415dc0651f0e8a8ad32a1716ef9d6d9b5/pydantic_br-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-08-14 02:15:59",
"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"
}