Mini-Projecto · Agregador de meteorologia
Contexto
Cada par/trio constrói uma aplicação Python que: 1. Consulta API de meteorologia para várias cidades portuguesas. 2. Guarda histórico em ficheiros locais. 3. Gera relatórios diários e mensais. 4. Tem testes automatizados.
Aplica recursão (travessia de directorias de dados), módulos (organização), JSON (API + persistência), pytest (testes).
Requisitos
Funcionais
- CLI com argumentos (
--cidade Lisboa,--relatorio). - Consumir API (OpenWeather, wttr.in ou outra pública gratuita).
- Persistir dados em JSON (1 ficheiro por cidade ou por dia).
- Relatórios:
- Temperatura máxima e mínima do dia.
- Média semanal.
- Comparação entre cidades.
- Cache — se já temos dado da última hora, não chamar API.
Não-funcionais
- Estrutura modular (pelo menos 4 módulos).
- 15+ testes pytest.
- Cobertura mín. 70% (pytest-cov).
- README com instalação + uso.
- Git com 10+ commits descritivos.
Fases
Fase 1 · 1.5h
Planeamento e API
- Escolher API (recomendado: wttr.in que não precisa de chave).
- Testar manualmente com curl/Postman.
- Esboçar módulos.
Diagrama de módulos + exemplo de resposta JSON da API.
Fase 2 · 2h
Camada de API
- Módulo
api.pycom função para consultar API. - Tratamento de timeout, erro 404, sem rede.
- Cache simples (não chamar mais de 1x/hora por cidade).
api.py + 5+ testes (com mock de requests).
Fase 3 · 2h
Persistência
- Módulo
storage.pycom guardar/ler JSON. - Estrutura: pasta
dados/Lisboa/2026-05-19.json. - Funções:
gravar_dia(cidade, dados),ler_historico(cidade, dias).
storage.py + 4+ testes (com tmp_path fixture).
Fase 4 · 2h
Relatórios
- Módulo
relatorios.pycom funções de agregação. - Mínimo: max/min/média do dia; média semanal; comparação cidades.
- Imprimir em tabela bonita (rich, tabulate ou print manual).
relatorios.py + 4+ testes.
Fase 5 · 1.5h
CLI e integração
main.pycom argparse.- Comandos:
--cidade X,--actualizar,--relatorio dia|semana|comparar. - Integrar todos os módulos.
CLI funcional. python main.py --cidade Lisboa deve mostrar tempo actual.
Fase 6 · 1h
README, polish, entrega
- README com instalação, uso, exemplos.
- Cobertura mín. 70%.
- Push final para Git.
README + repositório Git + apresentação curta (3-5 min).
Critérios de avaliação
| Item | Peso |
|---|---|
| Estrutura modular | 15% |
| Consumir API correctamente (com erros) | 15% |
| Persistência funcional | 15% |
| Relatórios úteis | 15% |
| Testes (qtd. + qualidade) | 20% |
| Cobertura ≥ 70% | 5% |
| CLI bem desenhada | 5% |
| README + Git history | 10% |
Reflexão
Em meia página: qual a parte mais difícil? Testes ajudaram ou atrasaram-te? Como adaptarias este projecto se em vez de meteorologia fosse cotações da bolsa?