quantilica-cli 0.10.1__tar.gz → 0.12.0__tar.gz

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.
Files changed (29) hide show
  1. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/CHANGELOG.md +36 -0
  2. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/PKG-INFO +2 -2
  3. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/pyproject.toml +2 -2
  4. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/src/quantilica/cli/sdk.py +330 -35
  5. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/src/quantilica/cli/sources.py +54 -9
  6. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/tests/test_package_hygiene.py +21 -0
  7. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/tests/test_sdk.py +83 -0
  8. quantilica_cli-0.12.0/tests/test_sdk_force_probe.py +576 -0
  9. quantilica_cli-0.12.0/tests/test_sdk_mes_string.py +51 -0
  10. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/tests/test_sdk_onda_a2.py +12 -4
  11. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/tests/test_sources.py +91 -0
  12. quantilica_cli-0.10.1/src/quantilica/cli/progress.py +0 -77
  13. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/.githooks/pre-commit +0 -0
  14. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/.githooks/pre-push +0 -0
  15. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/.github/workflows/publish.yml +0 -0
  16. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/.github/workflows/test.yml +0 -0
  17. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/.gitignore +0 -0
  18. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/LICENSE +0 -0
  19. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/README.md +0 -0
  20. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/src/quantilica/cli/__init__.py +0 -0
  21. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/src/quantilica/cli/cli.py +0 -0
  22. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/src/quantilica/cli/health.py +0 -0
  23. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/src/quantilica/cli/manifests.py +0 -0
  24. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/src/quantilica/cli/ui.py +0 -0
  25. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/src/quantilica/py.typed +0 -0
  26. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/tests/__init__.py +0 -0
  27. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/tests/test_health.py +0 -0
  28. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/tests/test_manifests.py +0 -0
  29. {quantilica_cli-0.10.1 → quantilica_cli-0.12.0}/tests/test_ui.py +0 -0
@@ -5,6 +5,42 @@ Todas as mudanças notáveis deste projeto serão documentadas neste arquivo.
5
5
  O formato segue [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/),
6
6
  e este projeto adere ao [Semantic Versioning](https://semver.org/lang/pt-BR/).
7
7
 
8
+ ## [0.12.0] - 2026-10-19
9
+
10
+ ### Adicionado
11
+
12
+ - `FetcherApp(source_id=...)`: `source_id` explícito, gravado nos manifests de download. Sem ele, continua derivado de `name` sem o sufixo `-fetcher`, e o `default_output` padrão passa a ser `/data/{source_id}`.
13
+
14
+ ### Corrigido
15
+
16
+ - `check`: o probe `GET Range` tenta de novo (com backoff) em 429/5xx e em erros de transporte (`DEFAULT_RETRY_EXCEPTIONS`: timeout, reset de conexão) antes de desistir. Antes, uma falha transitória virava 404 e a URL saía como indisponível. Quando o probe desiste, a causa é logada em `WARNING` (`[check] probe Range falhou para <url> após N tentativa(s): ...`), e não mais em `DEBUG`.
17
+ - `check`: uma exceção inesperada em uma entrada (por exemplo, `OSError` ao montar o caminho local) não aborta mais o `check` inteiro com código 1. A entrada é verificada de novo uma vez e, se falhar outra vez, vira `download` com `reason=check-error: ...`, e o plano segue cobrindo as demais.
18
+
19
+ ## [0.11.0] - 2026-10-14
20
+
21
+ ### Adicionado
22
+
23
+ - `sync --force` (e `force` keyword-only em `download_datasets`, `download_entry` e `_download_file`, repassado ao cliente só quando `True`): baixa mesmo com o local atualizado.
24
+ - `check --out PATH`: grava o plano JSON de forma atômica e imprime só um resumo; `OSError` sai com código 1.
25
+ - `check`: `HEAD` com 403 ou 405 passa a um probe `GET` com `Range: bytes=0-0` e `Accept-Encoding: identity` (tamanho via `Content-Range`, corpo nunca lido); URL que dá 404 no `HEAD` e no probe vira a ação `skip-unavailable`, aceita por `CheckPlan.from_dict`.
26
+ - `FetcherApp.entry_from_plan`: gancho para fetchers que serializam objetos ricos na entrada do plano.
27
+ - `default_client` lê `QUANTILICA_HTTP_MAX_RESUMES` (opcional), repassado como `max_resumes` ao `HttpClient`.
28
+ - `quantilica install <fonte> --extra <nome>` (`-e`, repetível, aceita lista separada por vírgula): instala `<dist>[<extra>]` no ambiente da CLI, por exemplo `quantilica install pdet --extra analysis` para habilitar `convert` e `pipeline`. Funciona também em fonte já instalada. O estado continua registrando só a distribuição, e o re-exec pós-instalação não repete `--extra`, para não reinstalar em laço. Nomes de extra inválidos saem com código 2.
29
+
30
+ ### Alterado
31
+
32
+ - Piso de `quantilica-core` elevado para `>=0.11.0` (símbolo usado: `max_resumes` em `HttpClient`).
33
+
34
+ ### Removido
35
+
36
+ - `quantilica.cli.progress` (`file_progress`, `batch_progress`): módulo morto que nunca importou. Fazia `from .http import ProgressCallback` (não existe em `quantilica.cli`; o tipo vive em `quantilica.core.http`) e usava `tqdm`, que não é dependência do pacote. Nenhum fetcher o importava; o progresso real é Rich (`quantilica.cli.ui.make_download_progress`, `make_batch_progress`, `ProgressPool`).
37
+
38
+ ### Corrigido
39
+
40
+ - `install_package` imprimia `Instalando pdet-fetcher...` sem o `[analysis]`: o Rich tratava o colchete como marcação. Agora o nome é escapado.
41
+ - `sdk`: a dica de extra ausente em `convert`, `archive` e `pipeline` mandava `pip install <fetcher>[analysis]`, que não funciona para fetchers do Fluxo B (fora do PyPI). Agora imprime `quantilica install <chave> --extra analysis`, com a chave de registro resolvida pelo entry point (por exemplo `td` para `tesouro-direto-fetcher`).
42
+ - `sdk`: `quantilica <fonte> list` (e o rótulo de partição do `check`/`sync`) terminava com `ValueError: Unknown format code 'd' for object of type 'str'` quando o catálogo traz `month` como string, caso do PDET (grupo capturado de regex). O mês e o semestre agora passam por `int()` antes do `:02d`, em `_partition_label`, `default_path_builder` e `list`; o `list` reutiliza `_partition_label` em vez de duplicar a lógica.
43
+
8
44
  ## [0.10.1] - 2026-10-08
9
45
 
10
46
  ### Corrigido
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: quantilica-cli
3
- Version: 0.10.1
3
+ Version: 0.12.0
4
4
  Summary: Unified CLI for Quantilica open data fetchers
5
5
  Author-email: "Komesu, D.K." <daniel@dkko.me>
6
6
  License-Expression: MIT
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.12
16
16
  Classifier: Programming Language :: Python :: 3.13
17
17
  Classifier: Typing :: Typed
18
18
  Requires-Python: >=3.12
19
- Requires-Dist: quantilica-core>=0.10.1
19
+ Requires-Dist: quantilica-core>=0.11.0
20
20
  Requires-Dist: rich>=13.0.0
21
21
  Requires-Dist: typer>=0.15.0
22
22
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "quantilica-cli"
3
- version = "0.10.1"
3
+ version = "0.12.0"
4
4
  description = "Unified CLI for Quantilica open data fetchers"
5
5
  readme = "README.md"
6
6
  authors = [{ name = "Komesu, D.K.", email = "daniel@dkko.me" }]
@@ -20,7 +20,7 @@ classifiers = [
20
20
  "Programming Language :: Python :: 3.13",
21
21
  ]
22
22
  dependencies = [
23
- "quantilica-core>=0.10.1",
23
+ "quantilica-core>=0.11.0",
24
24
  "rich>=13.0.0",
25
25
  "typer>=0.15.0",
26
26
  ]