Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
importer_cron_job.py 1.81 KiB
# coding=utf-8
import logging
import os.path
import traceback

import timeout_decorator
from django.conf import settings
from django_cron import CronJobBase, Schedule

from csv_subject_import_reader import CsvSubjectImportReader
from importer import Importer
from web.models.constants import CRON_JOB_TIMEOUT
from ..smash_email import EmailSender

logger = logging.getLogger(__name__)


class ImporterCronJob(CronJobBase):
    RUN_EVERY_MINUTES = 60 * 24
    schedule = Schedule(run_every_mins=RUN_EVERY_MINUTES)
    code = 'web.import_daily_job'  # a unique code

    @timeout_decorator.timeout(CRON_JOB_TIMEOUT)
    def do(self):
        title = "Daily import"
        recipients = getattr(settings, "DEFAULT_FROM_EMAIL", None)

        filename = getattr(settings, "DAILY_IMPORT_FILE", None)
        if filename is None:
            return "import file not defined"
        if not os.path.isfile(filename):
            EmailSender().send_email(title,
                                     "<h1>File with imported data is not available in the system: " + filename + "</h1>",
                                     recipients)
        try:
            importer = Importer(settings.DAILY_IMPORT_FILE, CsvSubjectImportReader())
            importer.execute()
            body = importer.get_summary()
            EmailSender().send_email(title,
                                     "<h1>Data was successfully imported from file: " + filename + "</h1>" + body,
                                     recipients)
            return "import is successful"

        except:
            tb = traceback.format_exc()
            EmailSender().send_email(title,
                                     "<h1>There was a problem with importing data from file: " + filename + "</h1>" + tb,
                                     recipients)
            return "import crashed"