get-sinapi 3.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- get_sinapi-3.1.0.dist-info/METADATA +236 -0
- get_sinapi-3.1.0.dist-info/RECORD +30 -0
- get_sinapi-3.1.0.dist-info/WHEEL +5 -0
- get_sinapi-3.1.0.dist-info/entry_points.txt +2 -0
- get_sinapi-3.1.0.dist-info/licenses/LICENSE +21 -0
- get_sinapi-3.1.0.dist-info/top_level.txt +1 -0
- getsinapi/__init__.py +2 -0
- getsinapi/api/__init__.py +1 -0
- getsinapi/api/main.py +791 -0
- getsinapi/bootstrap.py +422 -0
- getsinapi/cli.py +206 -0
- getsinapi/collectors/__init__.py +1 -0
- getsinapi/collectors/caixa.py +386 -0
- getsinapi/collectors/history.py +238 -0
- getsinapi/config.py +60 -0
- getsinapi/domain.py +74 -0
- getsinapi/exporter.py +189 -0
- getsinapi/extractors/__init__.py +1 -0
- getsinapi/extractors/compositions.py +213 -0
- getsinapi/extractors/price_tables.py +151 -0
- getsinapi/extractors/reference_workbook.py +68 -0
- getsinapi/extractors/sinapi_parser.py +158 -0
- getsinapi/extractors/workbooks.py +126 -0
- getsinapi/normalizers.py +114 -0
- getsinapi/pipeline/__init__.py +1 -0
- getsinapi/pipeline/normalize.py +114 -0
- getsinapi/services/__init__.py +1 -0
- getsinapi/services/costing.py +332 -0
- getsinapi/storage/__init__.py +1 -0
- getsinapi/storage/sqlite.py +342 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: get-sinapi
|
|
3
|
+
Version: 3.1.0
|
|
4
|
+
Summary: Pipeline rastreável de dados públicos do SINAPI/CAIXA
|
|
5
|
+
Author: NR TECH
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Requires-Python: >=3.11
|
|
8
|
+
Description-Content-Type: text/markdown
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Dist: requests>=2.31
|
|
11
|
+
Requires-Dist: curl-cffi>=0.7
|
|
12
|
+
Requires-Dist: beautifulsoup4>=4.12
|
|
13
|
+
Requires-Dist: python-dotenv>=1.0
|
|
14
|
+
Requires-Dist: pandas>=2.2
|
|
15
|
+
Requires-Dist: openpyxl>=3.1
|
|
16
|
+
Requires-Dist: xlrd>=2.0
|
|
17
|
+
Requires-Dist: PyYAML>=6.0
|
|
18
|
+
Requires-Dist: SQLAlchemy>=2.0
|
|
19
|
+
Requires-Dist: fastapi>=0.110
|
|
20
|
+
Requires-Dist: uvicorn[standard]>=0.27
|
|
21
|
+
Requires-Dist: reportlab>=4.2
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
24
|
+
Requires-Dist: pytest-cov>=5.0; extra == "dev"
|
|
25
|
+
Requires-Dist: ruff>=0.5; extra == "dev"
|
|
26
|
+
Requires-Dist: requests-mock>=1.12; extra == "dev"
|
|
27
|
+
Requires-Dist: httpx>=0.27; extra == "dev"
|
|
28
|
+
Dynamic: license-file
|
|
29
|
+
|
|
30
|
+
<div align="center">
|
|
31
|
+
|
|
32
|
+
<img src="assets/gets-inapi-hero.svg" alt="GET-SINAPI — plataforma privada para consulta e análise de custos SINAPI" width="100%">
|
|
33
|
+
|
|
34
|
+
# GET-SINAPI
|
|
35
|
+
|
|
36
|
+
### PLATAFORMA DESKTOP · CONSULTA SINAPI · ENGENHARIA DE CUSTOS
|
|
37
|
+
|
|
38
|
+
Aplicação privada para Windows que transforma publicações oficiais da CAIXA/SINAPI em consultas, análises, comparações e orçamentos rastreáveis.
|
|
39
|
+
|
|
40
|
+

|
|
41
|
+

|
|
42
|
+

|
|
43
|
+

|
|
44
|
+

|
|
45
|
+
|
|
46
|
+
**Dados oficiais. Processamento local. Decisões de engenharia com rastreabilidade.**
|
|
47
|
+
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Visão geral
|
|
53
|
+
|
|
54
|
+
O GET-SINAPI é um aplicativo desktop privado para Windows. Ele reúne uma interface React, uma API local FastAPI, processamento Python e persistência SQLite. O launcher inicia os serviços na própria máquina e abre a plataforma no navegador padrão; o usuário não precisa iniciar manualmente os servidores.
|
|
55
|
+
|
|
56
|
+
O produto utiliza o PulseSINAPI como referência de experiência funcional, mas mantém pipeline e regras próprias para ingestão, qualidade, cálculo e rastreabilidade dos dados oficiais.
|
|
57
|
+
|
|
58
|
+
> **Distribuição atual:** executável Windows privado. A aplicação não é um serviço web público nem possui autenticação centralizada na nuvem.
|
|
59
|
+
|
|
60
|
+
## Funcionalidades disponíveis na aplicação
|
|
61
|
+
|
|
62
|
+
- Dashboard com indicadores derivados da base efetivamente carregada.
|
|
63
|
+
- Consulta de insumos com pesquisa, filtros e paginação.
|
|
64
|
+
- Consulta de composições e detalhamento de componentes e coeficientes.
|
|
65
|
+
- Comparação de preços por UF e competência, conforme cobertura disponível.
|
|
66
|
+
- Cesta de orçamento e cálculo de totais.
|
|
67
|
+
- Histórico das competências presentes na base local.
|
|
68
|
+
- Relatórios e exportações disponibilizados pela versão atual.
|
|
69
|
+
- Atualização da base com acompanhamento de estado e progresso.
|
|
70
|
+
- Integridade, auditoria e informações de origem dos dados.
|
|
71
|
+
- Gestão local de contas de acesso.
|
|
72
|
+
|
|
73
|
+
A disponibilidade de resultados depende das competências e dos arquivos oficiais efetivamente baixados, processados e validados. O sistema não deve apresentar dados ausentes como se fossem preços iguais a zero.
|
|
74
|
+
|
|
75
|
+
## Capturas e arquitetura
|
|
76
|
+
|
|
77
|
+
<p align="center">
|
|
78
|
+
<img src="assets/gets-inapi-architecture.svg" alt="Arquitetura local do GET-SINAPI: launcher Windows, React, FastAPI, Python e SQLite" width="100%">
|
|
79
|
+
</p>
|
|
80
|
+
|
|
81
|
+
A arquitetura é inteiramente local na distribuição atual:
|
|
82
|
+
|
|
83
|
+
| Componente | Tecnologia | Responsabilidade |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| Aplicação desktop | Python / PyInstaller | Inicialização e encerramento dos serviços |
|
|
86
|
+
| Interface | React + Vite + TypeScript | Navegação, filtros, tabelas e visualizações |
|
|
87
|
+
| API | FastAPI | Consultas, autenticação local e operações |
|
|
88
|
+
| Processamento | Python | Coleta, validação, normalização e cálculos |
|
|
89
|
+
| Persistência | SQLite | Dados SINAPI e informações locais |
|
|
90
|
+
| Autenticação | PBKDF2 + sessão local | Login e controle de contas neste computador |
|
|
91
|
+
|
|
92
|
+
## Autenticação local
|
|
93
|
+
|
|
94
|
+
O primeiro acesso permite configurar a conta administradora. O identificador pode ser o e-mail do usuário, acompanhado de uma senha com no mínimo 12 caracteres.
|
|
95
|
+
|
|
96
|
+
- O primeiro usuário cadastrado recebe o perfil de administrador.
|
|
97
|
+
- O administrador pode cadastrar outras contas locais pela área de gestão de acessos.
|
|
98
|
+
- As senhas não são armazenadas em texto puro: o backend deriva o hash com PBKDF2-HMAC-SHA256 e salt individual.
|
|
99
|
+
- A sessão local tem duração de até oito horas.
|
|
100
|
+
- Os registros de autenticação são mantidos no arquivo `security/users.json`, dentro do diretório de dados da aplicação.
|
|
101
|
+
|
|
102
|
+
**Limite importante:** as contas são locais e pertencem ao diretório de dados daquele computador. Cadastrar usuários em uma instalação não cria automaticamente contas nas instalações dos demais engenheiros. Ainda não há login centralizado, revogação remota, sincronização de contas ou compartilhamento central de orçamentos.
|
|
103
|
+
|
|
104
|
+
## Armazenamento e diretório de dados
|
|
105
|
+
|
|
106
|
+
A aplicação utiliza SQLite local. O diretório de dados pode ser definido por configuração de ambiente; na distribuição desktop, o launcher prepara o ambiente de execução e mantém logs locais.
|
|
107
|
+
|
|
108
|
+
Não compartilhe o arquivo de banco ou o diretório de autenticação contendo dados operacionais sem avaliar previamente as implicações de segurança e consistência. Para vários engenheiros trabalharem com a mesma base e os mesmos orçamentos, será necessária uma camada de sincronização central — não faz parte do modelo atual.
|
|
109
|
+
|
|
110
|
+
## Instalação e utilização
|
|
111
|
+
|
|
112
|
+
1. Baixe o pacote Windows disponibilizado na área de Releases ou no artefato de build autorizado.
|
|
113
|
+
2. Extraia o ZIP em uma pasta local.
|
|
114
|
+
3. Execute `GET-SINAPI-V3.exe`.
|
|
115
|
+
4. No primeiro acesso, configure o usuário administrador e a senha.
|
|
116
|
+
5. Nos acessos seguintes, entre com as credenciais locais.
|
|
117
|
+
|
|
118
|
+
O launcher inicia a API e o frontend localmente, aguarda os serviços responderem e então abre a interface no navegador padrão.
|
|
119
|
+
|
|
120
|
+
## Exportação em lote pelo terminal
|
|
121
|
+
|
|
122
|
+
Além do executável desktop, o pacote Python disponibiliza a interface de terminal pelo comando `getsinapi`. O menu interativo permite selecionar:
|
|
123
|
+
|
|
124
|
+
- Todas as categorias ou apenas insumos, composições e componentes.
|
|
125
|
+
- Uma competência específica ou todas as competências carregadas.
|
|
126
|
+
- Uma UF específica ou todas as UFs disponíveis.
|
|
127
|
+
- Regime de desoneração e modalidade de encargos.
|
|
128
|
+
- Pesquisa por código ou descrição.
|
|
129
|
+
- Saída em Excel (.xlsx), CSV ou nos dois formatos.
|
|
130
|
+
|
|
131
|
+
A exportação completa gera uma visão consolidada com os registros selecionados e arquivos/abas individualizados por categoria. No Excel, o consolidado e cada categoria ficam em abas próprias; no CSV, são gerados um arquivo consolidado e arquivos separados por categoria. Os CSVs usam UTF-8 com BOM e delimitador ponto e vírgula para melhor abertura no Excel em configurações regionais brasileiras.
|
|
132
|
+
|
|
133
|
+
### Instalação e execução
|
|
134
|
+
|
|
135
|
+
Após a publicação da versão que contém essa funcionalidade no PyPI:
|
|
136
|
+
|
|
137
|
+
```powershell
|
|
138
|
+
python -m pip install --upgrade get-sinapi
|
|
139
|
+
getsinapi
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Ou execute diretamente o menu de exportação:
|
|
143
|
+
|
|
144
|
+
```powershell
|
|
145
|
+
getsinapi export
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
O comando consulta a base SQLite local já carregada; não refaz o download dos pacotes oficiais a cada exportação. Na instalação desktop, utiliza o mesmo diretório de dados configurado pelo launcher. Em instalações independentes, defina `GETSINAPI_DATABASE_PATH` para apontar ao arquivo `getsinapi.sqlite3` correto. A funcionalidade de terminal não substitui nem altera o executável Windows.
|
|
149
|
+
|
|
150
|
+
## Desenvolvimento local
|
|
151
|
+
|
|
152
|
+
Requisitos: Python 3.11+ e Node.js 20+.
|
|
153
|
+
|
|
154
|
+
### Backend
|
|
155
|
+
|
|
156
|
+
```powershell
|
|
157
|
+
py -3.11 -m venv .venv
|
|
158
|
+
.\.venv\Scripts\Activate.ps1
|
|
159
|
+
python -m pip install --upgrade pip
|
|
160
|
+
pip install -e ".[dev]"
|
|
161
|
+
$env:GETSINAPI_DATABASE_PATH = "data/getsinapi.sqlite3"
|
|
162
|
+
uvicorn getsinapi.api.main:app --reload
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
API local: `http://127.0.0.1:8000`
|
|
166
|
+
Health check: `http://127.0.0.1:8000/api/health`
|
|
167
|
+
Documentação OpenAPI: `http://127.0.0.1:8000/docs`
|
|
168
|
+
|
|
169
|
+
### Frontend
|
|
170
|
+
|
|
171
|
+
Em outro terminal:
|
|
172
|
+
|
|
173
|
+
```powershell
|
|
174
|
+
cd frontend
|
|
175
|
+
npm install
|
|
176
|
+
npm run dev
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Frontend de desenvolvimento: `http://localhost:5173`. O Vite encaminha as chamadas `/api` para a API local.
|
|
180
|
+
|
|
181
|
+
### Qualidade e testes
|
|
182
|
+
|
|
183
|
+
```powershell
|
|
184
|
+
ruff check .
|
|
185
|
+
pytest -v
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
O workflow Windows também compila o frontend, empacota a aplicação com PyInstaller e executa um smoke test da interface e do endpoint de saúde antes de publicar o artefato.
|
|
189
|
+
|
|
190
|
+
## Pipeline e integridade dos dados
|
|
191
|
+
|
|
192
|
+
| Camada | Responsabilidade |
|
|
193
|
+
|---|---|
|
|
194
|
+
| Bronze | Preservação dos pacotes oficiais recebidos |
|
|
195
|
+
| Staging | Extração controlada e inventário dos arquivos |
|
|
196
|
+
| Silver | Normalização, tipagem e validação |
|
|
197
|
+
| Gold | Estruturas consolidadas para consulta e análise |
|
|
198
|
+
| Aplicação | Consulta, comparação, cálculo e orçamento |
|
|
199
|
+
|
|
200
|
+
Princípios:
|
|
201
|
+
|
|
202
|
+
- Publicações oficiais da CAIXA como fonte de referência.
|
|
203
|
+
- Nenhum dado sintético em produção.
|
|
204
|
+
- Distinção entre zero publicado, valor ausente e falha de extração.
|
|
205
|
+
- Preservação de competência, UF, regime e origem.
|
|
206
|
+
- Valores monetários e coeficientes tratados com precisão decimal.
|
|
207
|
+
- Atualizações incrementais e idempotentes, preservando o histórico válido.
|
|
208
|
+
- Rastreabilidade até publicação, arquivo e referência de origem, conforme metadados disponíveis.
|
|
209
|
+
|
|
210
|
+
## Cobertura e limitações conhecidas
|
|
211
|
+
|
|
212
|
+
- A cobertura histórica depende dos pacotes efetivamente publicados, coletados e processados.
|
|
213
|
+
- Os layouts legados anteriores a 2025 exigem tratamento específico; não se deve presumir cobertura histórica integral.
|
|
214
|
+
- O armazenamento é SQLite local.
|
|
215
|
+
- A autenticação é local, sem provedor externo.
|
|
216
|
+
- Não há sincronização de dados ou orçamentos entre computadores.
|
|
217
|
+
- A distribuição atual é desktop Windows; uma versão web hospedada não faz parte do escopo vigente.
|
|
218
|
+
|
|
219
|
+
## Stack tecnológica
|
|
220
|
+
|
|
221
|
+
Python · React · TypeScript · Vite · FastAPI · SQLite · SQLAlchemy · Pandas · Pytest · Ruff · PyInstaller · GitHub Actions.
|
|
222
|
+
|
|
223
|
+
## Licença e dados de terceiros
|
|
224
|
+
|
|
225
|
+
O código-fonte é distribuído sob a licença MIT, conforme o arquivo [LICENSE](LICENSE). Essa licença não altera os direitos, termos de uso ou atribuição aplicáveis às publicações, marcas e dados de terceiros, incluindo os dados oficiais do SINAPI.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
<div align="center">
|
|
230
|
+
|
|
231
|
+
**GET-SINAPI**
|
|
232
|
+
NR TECH · Engenharia de Dados e Custos
|
|
233
|
+
|
|
234
|
+
*Precisão na origem. Consistência no processamento. Confiança na consulta.*
|
|
235
|
+
|
|
236
|
+
</div>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
get_sinapi-3.1.0.dist-info/licenses/LICENSE,sha256=4fCQaRKEcEJSHX8SN_JdKPBjXkW1leC_yUS_zjurQR8,1073
|
|
2
|
+
getsinapi/__init__.py,sha256=Zy2MBHENN3aiZdfJFZqXcM3bKj_ySZYMIFuvaerf-68,75
|
|
3
|
+
getsinapi/bootstrap.py,sha256=SFH-jvWaSr1JkmIfBPf4-utACqZt9PDKgD2oMO06R08,16988
|
|
4
|
+
getsinapi/cli.py,sha256=ZKUmfgdXq4E0QuegJllz-Ga2h-k91ddlw9MhBzbEiPU,8620
|
|
5
|
+
getsinapi/config.py,sha256=HnLbH7CrzgHX9D5nXz1UDBctfRdjv7Nbak4L3sUmig4,2497
|
|
6
|
+
getsinapi/domain.py,sha256=uOu8nAw6FSy_bAO0UmuYKP-swgEC92PvFYU2QUafzE4,2524
|
|
7
|
+
getsinapi/exporter.py,sha256=SkxUUVqojyBDoyUyaWugFV6RinKNkjbgtfZZDJUO-KM,7332
|
|
8
|
+
getsinapi/normalizers.py,sha256=NSWy6HuL2kdwZW6g_AQEDUT2qalsYci7VF3JYB-vUus,3053
|
|
9
|
+
getsinapi/api/__init__.py,sha256=FKP77EwaRy0GY6zNwJxRA6PuHKg3f1SY9jeemA8DXiw,30
|
|
10
|
+
getsinapi/api/main.py,sha256=tpzc3oM9ndhGE0KD--J50Z0h6SRgsRQYwPE92PUuLto,35454
|
|
11
|
+
getsinapi/collectors/__init__.py,sha256=9GCabjqjrmyua9uo8hj6BgPAzXRZFN15d4CKVvLlCpo,36
|
|
12
|
+
getsinapi/collectors/caixa.py,sha256=k3kbqF1VPdvn7WtdOnD0sUK0UfytXgIznDX56ekOHXA,15715
|
|
13
|
+
getsinapi/collectors/history.py,sha256=lIQW5yMXRhtgocZDxNYKBz294k-c1SFZ9J3D1QWo8zU,9628
|
|
14
|
+
getsinapi/extractors/__init__.py,sha256=O70YkubpldZzy-LeCTDtHme_dVYpUce_f-Rime5brj0,45
|
|
15
|
+
getsinapi/extractors/compositions.py,sha256=x2ii1C8E73Os2dNSZxfQQVqScPFp9jlnvu53Cq370l0,7999
|
|
16
|
+
getsinapi/extractors/price_tables.py,sha256=dSM_8lappkXeBX7H8ixVFUB93aTZOs2bmnJt3vvkTMw,5526
|
|
17
|
+
getsinapi/extractors/reference_workbook.py,sha256=wDyAt1f9Cpq96EUaw2LpAMpa9rmfEPFzW7bw95rro20,1885
|
|
18
|
+
getsinapi/extractors/sinapi_parser.py,sha256=ofjKonGIkAW3vYTEaThwqPInoCgBrhYcnVeq9d7zuow,5583
|
|
19
|
+
getsinapi/extractors/workbooks.py,sha256=Hnsm7XiRDx26pO-fYjA6GPRLhCipTev91TgGC3r8pXk,4264
|
|
20
|
+
getsinapi/pipeline/__init__.py,sha256=EphtqrqW5TyTPLuQYWRvlEbbHzFIpZSRZggFa29vxHc,57
|
|
21
|
+
getsinapi/pipeline/normalize.py,sha256=I5MCDeISX328FeHzUSp41Uv_xAO2zHzN0ri7WFAKPnI,3926
|
|
22
|
+
getsinapi/services/__init__.py,sha256=vxutxHvWi3VZ6xdSidX2l_1wA7XhfDzdEf256oy4Enc,55
|
|
23
|
+
getsinapi/services/costing.py,sha256=0GdQlKUuKi3njDTS_m9p8R_6iBHONAZPOkzFnDbd3D4,11894
|
|
24
|
+
getsinapi/storage/__init__.py,sha256=bwFN3OgkIVkvcYbyRdNg-9wMFRqP9PI9lQtrheu36dU,51
|
|
25
|
+
getsinapi/storage/sqlite.py,sha256=B0xyM0hdPiJ6RDJEwBsJWbmx8sWOF6cTcODkFhSylyk,13841
|
|
26
|
+
get_sinapi-3.1.0.dist-info/METADATA,sha256=ED4BPbHKJPF4wWkMHVAmvYU36YZzVYJM9_hwmSxxMVo,10832
|
|
27
|
+
get_sinapi-3.1.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
|
|
28
|
+
get_sinapi-3.1.0.dist-info/entry_points.txt,sha256=PD_NKIXUh3Vlf85ffQUKfgFOHp6nmXo_6n3YGhl42Ns,49
|
|
29
|
+
get_sinapi-3.1.0.dist-info/top_level.txt,sha256=yFeiD3DfV9KUnZLhD6VDRt4eQz0NhEnHtAMASFMfd8Q,10
|
|
30
|
+
get_sinapi-3.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 NR Data Analysis
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
getsinapi
|
getsinapi/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""API HTTP do GET-SINAPI."""
|