O Notion Scheduler é um script em Python que automatiza o agendamento de tarefas e tópicos a partir de bases de dados no Notion. Ele consulta atividades e intervalos de tempo, limpa cronogramas existentes e gera um novo cronograma respeitando prazos e disponibilidades, com suporte a slots regulares e exceções.
- Consulta de Dados: Lê atividades e tópicos da base "Atividades" e intervalos de tempo da base "Intervalos de Tempo" no Notion.
- Limpeza de Cronogramas: Remove entradas antigas da base "Cronogramas" antes de criar um novo agendamento.
- Agendamento Inteligente:
- Ordena tarefas por data limite.
- Respeita durações definidas e intervalos de tempo disponíveis.
- Insere pausas entre partes de tarefas longas.
- Prioriza slots de exceção sobre slots regulares em dias específicos.
- Cache: Suporta caches locais (
topics_cache.jsonetime_slots_cache.json) para otimizar consultas (opcional). - Logs: Gera logs detalhados para depuração e monitoramento.
- Python 3.8+
- Bibliotecas Python:
notion-client(para integração com o Notion)python-dateutil(para manipulação de datas)- Outras dependências listadas em
requirements.txt
- Uma conta no Notion com as bases "Atividades", "Intervalos de Tempo" e "Cronogramas" configuradas.
- Token de integração do Notion (veja Notion API).
-
Clone o repositório
-
Crie um ambiente virtual (opcional, mas recomendado):
python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows
-
Instale as dependências:
pip install -r requirements.txt
-
Configure as variáveis de ambiente:
- Crie um arquivo
.envna raiz do projeto:NOTION_TOKEN=seu-token-aqui ACTIVITY_DB_ID=id-da-base-atividades TIME_SLOTS_DB_ID=id-da-base-intervalos SCHEDULE_DB_ID=id-da-base-cronogramas - Substitua os valores pelos IDs das suas bases no Notion e pelo token de integração.
- Crie um arquivo
- Execute o script principal:
python main.py
- Verifique os logs gerados em
notion_scheduler.logpara detalhes da execução. - O cronograma será atualizado na base "Cronogramas" do Notion.
- Desativar Cache: Para forçar o carregamento de dados frescos, delete os arquivos de cache:
rm caches/topics_cache.json caches/time_slots_cache.json
- Depuração: Ajuste o nível de log em
config.pyparaDEBUGpara mais detalhes.
/notion-scheduler
├── caches/ # Arquivos de cache (topics_cache.json, time_slots_cache.json)
├── logs/ # Logs gerados (notion_scheduler.log)
├── main.py # Script principal
├── scheduler.py # Lógica de geração de slots e agendamento
├── config.py # Configurações (timezone, dias a agendar, etc.)
├── requirements.txt # Dependências do projeto
└── .env # Variáveis de ambiente (não versionado)
- Atividades:
- Colunas:
Name(texto),Duration(número em horas),Due Date(data),Status(seleção com "Concluído"),Topics(relação com tópicos).
- Colunas:
- Intervalos de Tempo:
- Colunas:
Day(texto, ex: "Monday"),Start Time(hora),End Time(hora),Exception Date(data, opcional para exceções).
- Colunas:
- Cronogramas:
- Colunas:
Task Name(texto),Start Time(data/hora),End Time(data/hora),Task ID(texto).
- Colunas:
- Atividades:
Name Duration Due Date Status [A] - Professor 1 2025-03-14 Lesão Renal Aguda 4 2025-03-26 - Intervalos de Tempo:
Day Start Time End Time Exception Date Monday 19:00 21:00 08:00 11:00 2025-03-10 18:00 23:00 2025-03-10
- Sobreposição de Tarefas:
- Verifique se os slots de exceção no Notion estão corretos (ex.:
18:00-23:00em vez de19:00-21:00para 2025-03-10). - Confirme que
scheduler.pyprioriza exceções (veja funçãogenerate_available_slots).
- Verifique se os slots de exceção no Notion estão corretos (ex.:
- Erro de Dados:
- Ative logs de depuração em
main.pypara inspecionartime_slots_data. - Corrija entradas inválidas no Notion (duração ausente, datas incorretas).
- Ative logs de depuração em
- Cache Desatualizado:
- Delete os arquivos de cache e reexecute.
- Faça um fork do repositório.
- Crie uma branch para sua feature (
git checkout -b feature/nova-funcionalidade). - Commit suas mudanças (
git commit -m "Adiciona nova funcionalidade"). - Push para a branch (
git push origin feature/nova-funcionalidade). - Abra um Pull Request.
Este projeto está licenciado sob a MIT License.