-
Piotr Gawron authoredPiotr Gawron authored
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"