Um pacote para consultar e validar dados de CNPJ utilizando a API pública cnpj.ws
Project description
cnpjData
cnpjData é uma biblioteca Python robusta e fácil de usar para consultar informações de CNPJ e validar inscrições no SUFRAMA utilizando a API Pública de CNPJ. Ela gerencia automaticamente os limites de requisições para evitar exceder as restrições da API, garantindo consultas eficientes e seguras.
📝 Índice
- 🔍 Visão Geral
- 🚀 Funcionalidades
- 📦 Instalação
- 🛠️ Uso
- ⚙️ API Reference
- 🔒 Tratamento de Erros
- 📈 Limitações
- 🧪 Testes
- 🤝 Contribuição
- 📄 Licença
- 👤 Autor
🔍 Visão Geral
A API Pública de CNPJ permite realizar consultas de informações empresariais e validar inscrições no SUFRAMA. Com o cnpjData, você pode integrar facilmente essas funcionalidades em seus projetos Python, mantendo-se dentro dos limites de requisição estabelecidos pela API.
🚀 Funcionalidades
- Consultar CNPJ: Obtém informações detalhadas sobre um CNPJ específico.
- Validar Inscrição no SUFRAMA: Verifica a validade de uma inscrição no SUFRAMA para um determinado CNPJ.
- Gerenciamento Automático de Limites de Requisições: Controla o número de requisições para evitar exceder os limites da API.
- Tratamento de Erros Personalizado: Lida com respostas de erro, como limites excedidos, de forma elegante.
- Fácil Integração: Interfaces simples e intuitivas para facilitar o uso.
📦 Instalação
Você pode instalar a biblioteca diretamente do PyPI utilizando o pip:
pip install cnpjData
Ou instalar a partir do repositório GitHub:
pip install git+https://github.com/hqr90/cnpjData.git
Pré-requisitos
- Python 3.8 ou superior
- Biblioteca
requests(instalada automaticamente com ocnpjData)
🛠️ Uso
Consultar CNPJ
Consulte informações detalhadas sobre um CNPJ específico.
from cnpjData import CNPJAPIClient
# Inicialize o cliente
client = CNPJAPIClient()
# Consulte o CNPJ
cnpj_info = client.consultar_cnpj("27865757000102")
# Exiba as informações
print(cnpj_info)
Validar Inscrição no SUFRAMA
Verifique a validade de uma inscrição no SUFRAMA para um determinado CNPJ.
from cnpjData import CNPJAPIClient
# Inicialize o cliente
client = CNPJAPIClient()
# Valide a inscrição no SUFRAMA
suframa_info = client.validar_inscricao_suframa("61940292006682", "210140267")
# Exiba a validação
print(suframa_info)
⚙️ API Reference
CNPJAPIClient
Classe principal para interagir com a API Pública de CNPJ.
consultar_cnpj(cnpj: str) -> dict
Consulta informações de um CNPJ utilizando o método GET.
-
Parâmetros:
cnpj(str): Número do CNPJ sem caracteres especiais.
-
Retorna:
dict: Dados do CNPJ ou detalhes de erro.
-
Exceções:
APIException: Erros gerais da API.RateLimitException: Quando o limite de requisições é excedido.
Exemplo:
client = CNPJAPIClient()
try:
cnpj_info = client.consultar_cnpj("27865757000102")
print(cnpj_info)
except APIException as e:
print(e)
validar_inscricao_suframa(cnpj: str, inscricao: str) -> dict
Valida uma inscrição no SUFRAMA utilizando o método POST.
-
Parâmetros:
cnpj(str): Número do CNPJ sem caracteres especiais.inscricao(str): Número da inscrição no SUFRAMA.
-
Retorna:
dict: Resultado da validação ou detalhes de erro.
-
Exceções:
APIException: Erros gerais da API.RateLimitException: Quando o limite de requisições é excedido.
Exemplo:
client = CNPJAPIClient()
try:
suframa_info = client.validar_inscricao_suframa("61940292006682", "210140267")
print(suframa_info)
except APIException as e:
print(e)
🔒 Tratamento de Erros
A biblioteca cnpjData utiliza exceções personalizadas para facilitar o tratamento de erros:
-
APIException: Representa erros gerais da API, como respostas inesperadas ou falhas de conexão.
try: cnpj_info = client.consultar_cnpj("27865757000102") except APIException as e: print(f"Erro ao consultar CNPJ: {e.message}")
-
RateLimitException: Indica que o limite de requisições foi excedido. A biblioteca tenta aguardar o tempo necessário antes de realizar a próxima requisição.
try: suframa_info = client.validar_inscricao_suframa("61940292006682", "210140267") except RateLimitException as e: print(f"Limite de requisições atingido: {e.message}")
📈 Limitações
A API Pública de CNPJ impõe as seguintes limitações:
-
Limite de Requisições:
- Até 3 consultas por minuto por IP para cada método (
GETePOST). - O pacote
cnpjDatagerencia esses limites automaticamente, aguardando o tempo necessário antes de realizar novas requisições.
- Até 3 consultas por minuto por IP para cada método (
-
Penalidades por Excesso de Erros:
- Mais de 360 consultas por hora resultam em penalidades, bloqueando novas requisições por 1 hora.
- Penalizações adicionais são aplicadas se o excesso de erros persistir.
-
Mensagens de Erro:
- Erro HTTP
429 Too Many Requestsé retornado quando os limites são excedidos.
- Erro HTTP
🧪 Testes
A biblioteca inclui um conjunto de testes automatizados para garantir a funcionalidade correta.
Executando os Testes
-
Instale as Dependências de Teste:
Assegure-se de que todas as dependências estão instaladas:
pip install -e .
-
Execute os Testes:
Utilize o módulo
unittestpara descobrir e executar os testes:python -m unittest discover tests
Estrutura de Testes
- tests/test_client.py: Contém testes para as funcionalidades principais da classe
CNPJAPIClient, incluindo cenários de sucesso e tratamento de erros.
Exemplo de Teste:
import unittest
from unittest.mock import patch
from cnpjData import CNPJAPIClient, APIException, RateLimitException
class TestCNPJAPIClient(unittest.TestCase):
@patch('cnpjData.client.requests.get')
def test_consultar_cnpj_success(self, mock_get):
mock_response = mock_get.return_value
mock_response.status_code = 200
mock_response.json.return_value = {"cnpj": "27865757000102", "razao_social": "Test Company"}
client = CNPJAPIClient()
result = client.consultar_cnpj("27865757000102")
self.assertIn("cnpj", result)
self.assertEqual(result["cnpj"], "27865757000102")
@patch('cnpjData.client.requests.get')
def test_consultar_cnpj_rate_limit(self, mock_get):
mock_response = mock_get.return_value
mock_response.status_code = 429
mock_response.json.return_value = {
"status": 429,
"titulo": "Muitas requisições",
"detahes": "Excedido o limite máximo de 3 consultas por minuto. Liberação ocorrerá em Thu Jun 03 2021 16:15:00 GMT-0300 (Horário Padrão de Brasília)"
}
client = CNPJAPIClient()
with self.assertRaises(RateLimitException):
client.consultar_cnpj("27865757000102")
@patch('cnpjData.client.requests.post')
def test_validar_inscricao_suframa_success(self, mock_post):
mock_response = mock_post.return_value
mock_response.status_code = 200
mock_response.json.return_value = {"cnpj": "61940292006682", "inscricao_suframa": "210140267", "ativo": True}
client = CNPJAPIClient()
result = client.validar_inscricao_suframa("61940292006682", "210140267")
self.assertIn("ativo", result)
self.assertTrue(result["ativo"])
@patch('cnpjData.client.requests.post')
def test_validar_inscricao_suframa_rate_limit(self, mock_post):
mock_response = mock_post.return_value
mock_response.status_code = 429
mock_response.json.return_value = {
"status": 429,
"titulo": "Muitas requisições",
"detahes": "Excedido o limite máximo de 3 consultas por minuto. Liberação ocorrerá em Thu Jun 03 2021 16:15:00 GMT-0300 (Horário Padrão de Brasília)"
}
client = CNPJAPIClient()
with self.assertRaises(RateLimitException):
client.validar_inscricao_suframa("61940292006682", "210140267")
if __name__ == '__main__':
unittest.main()
🤝 Contribuição
Contribuições são altamente bem-vindas! Sinta-se à vontade para abrir issues e pull requests para melhorar o projeto. Aqui estão algumas diretrizes para contribuir:
📋 Passos para Contribuir
-
Fork o Repositório:
Clique no botão "Fork" no GitHub para criar uma cópia do repositório em sua conta.
-
Clone o Repositório Forkado:
git clone https://github.com/hqr90/cnpjData.git cd cnpjData
-
Crie uma Branch para Sua Feature:
git checkout -b feature/nova-funcionalidade
-
Faça as Alterações Desejadas:
Adicione ou modifique o código conforme necessário.
-
Adicione e Commite as Alterações:
git add . git commit -m "Descrição clara das mudanças"
-
Envie a Branch para o Repositório Remoto:
git push origin feature/nova-funcionalidade
-
Abra um Pull Request:
No GitHub, abra um Pull Request a partir da sua branch para o repositório original.
📚 Boas Práticas
- Escreva Testes: Certifique-se de que seu código é acompanhado por testes automatizados.
- Siga o Estilo de Código PEP8: Utilize ferramentas como
flake8oublackpara manter o código consistente. - Documente Suas Mudanças: Atualize a documentação se adicionar ou modificar funcionalidades.
🤔 Como Reportar Problemas
Se você encontrar algum problema ou bug, por favor, abra uma issue no repositório com uma descrição detalhada do problema e, se possível, passos para reproduzi-lo.
📄 Licença
Este projeto está licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.
👤 Autor
- Hilton Queiroz Rebello
📧 rebello.hiltonqueiroz@gmail.com
🔗 LinkedIn
🔗 GitHub
📌 Notas Finais
Parabéns por utilizar o cnpjData! Se tiver dúvidas, sugestões ou precisar de assistência, não hesite em entrar em contato através dos canais fornecidos. Sua contribuição e feedback são valiosos para a evolução contínua deste projeto.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cnpjdata-0.3.1.tar.gz.
File metadata
- Download URL: cnpjdata-0.3.1.tar.gz
- Upload date:
- Size: 6.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3cc8808705836b7583693a5549267f0e434276e440617d4b7abe644409dd254e
|
|
| MD5 |
6b8c98d5183f0c51281660877ee977d0
|
|
| BLAKE2b-256 |
c1cc6220568f2fa32bd6ed09d9ecf887c782c3c798d526d6b0bf5056535dd584
|
File details
Details for the file cnpjData-0.3.1-py3-none-any.whl.
File metadata
- Download URL: cnpjData-0.3.1-py3-none-any.whl
- Upload date:
- Size: 5.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db595915eb36bbbfa99bf054fa07a4db5a6da4b0372f2cc3d4bdb30e07b77ded
|
|
| MD5 |
d7cb1b4583f23ab06152e6a993bacce2
|
|
| BLAKE2b-256 |
dcf478c1def0851ce2790044e348592357e93005a290cbb4c600668f64483ce4
|