Código fonte de legislei.cron

import logging
import os
from datetime import datetime, timedelta

from apscheduler.schedulers.background import BackgroundScheduler
from pytz import timezone

from legislei.exceptions import ModelError
from legislei.send_reports import send_email, send_push_notification
from legislei.services.inscricoes import Inscricao
from legislei.services.relatorios import Relatorios


[documentos]def get_users_by_subscriptions(): for user in Inscricao().obter_todas_inscricoes_para_processar(): yield user
[documentos]def check_and_send_reports(): return generate_reports(get_users_by_subscriptions())
[documentos]def generate_reports(users, data_final = None): if data_final == None: data_final = datetime.now() for user in users: reports = [] inscricao = user.inscricoes data_inicial = (data_final - timedelta(days=int(inscricao["intervalo"]))) logging.info("Obtendo relatorios para {}".format(user.username)) for par in inscricao["parlamentares"]: try: reports.append(Relatorios().obter_relatorio( parlamentar=par['id'], data_final=data_final.strftime('%Y-%m-%d'), cargo=par['cargo'], periodo=inscricao["intervalo"] )) except ModelError: reports.append({ 'parlamentar': par.to_dict(), 'orgaos': [], 'eventosPresentes': [], 'eventosPrevistos': [], 'eventosAusentes': [], 'proposicoes': [], '_id': None }) send_email(user["email"], reports, dates=(data_inicial, data_final)) if user.devices: for device in user.devices: if device.active: send_push_notification(device.token, reports)
scheduler = BackgroundScheduler() scheduler.configure(timezone=timezone('America/Sao_Paulo')) scheduler.add_job( func=check_and_send_reports, trigger='cron', day_of_week='sat', hour='12', minute='0', second=0, day='*', month='*' )