Estado SQLite
Use esta skill quando um trabalho recorrente precisa lembrar o que já fez - quais itens alertou, o último cursor que processou - para que não re-notifique ou re-raspe no próximo ciclo. Um único arquivo SQLite padrão fornece estado durável e com bloqueio de arquivo, sem servidor e sem dependência extra.
Quando invocar
- O usuário diz: "não alerte a mesma coisa duas vezes", "deduplicar entre execuções", "lembre do último id", "retome de onde parou".
- O código na conversa é um script cron/agendado que atualmente re-processa tudo a cada execução.
Quando NÃO invocar
- O estado é minúsculo e efêmero dentro de uma única execução - um conjunto/dicionário simples é suficiente.
- Várias máquinas precisam compartilhar estado simultaneamente; recorra a um banco de dados servidor real em vez de um único arquivo.
Exemplo concreto
Entrada do usuário:
Meu raspador de notícias reenvia os mesmos títulos a cada hora. Faça com que ele envie apenas os novos.
Saída:
from state import filter_new, mark_seen
db = "news.db"
novos = filter_new(db, [a["url"] for a in articles]) # apenas URLs não vistas
for url in novos:
send_alert(url)
mark_seen(db, *novos) # lembre-se deles para a próxima execução
Padrão a aplicar
- Identifique cada item por algo estável e único (URL, id, hash de conteúdo), não por posição no array.
- Use
filter_newpara decidir sobre o que agir, depoismark_seenapenas após a ação ser bem-sucedida. - Armazene o progresso como um cursor nomeado (
set_cursor/get_cursor) para que um raspador retomável recomece no meio do fluxo. - Ative o modo WAL para gravações duráveis com leitores concorrentes; mantenha um único escritor.
- Faça backup ou versione o único arquivo
.db- ele é toda a memória do trabalho.
Referência: assets/state.py.
Fonte
Destilado do uso em produção nos projetos de automação do autor. v1.0.0. Veja também: [[pipeline-orchestrator]], [[cron-dispatch]], [[webhook-receiver]].
→ Construa o bot executável completo com Trawlkit.