pydantic-br


Namepydantic-br JSON
Version 1.1.0 PyPI version JSON
download
home_pagehttps://github.com/scjorge/pydantic_br
SummaryPydantic library extension with Brazilian fields
upload_time2024-08-02 21:54:49
maintainerJorge Silva
docs_urlNone
authorJorge Silva
requires_python<4.0.0,>=3.8.1
licenseMIT
keywords pydantic json json-schema hints parsin brasil documentos br fastapi doc documento schema
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# 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"
}
        
Elapsed time: 4.29274s