diff --git a/file2mail.py b/file2mail.py index ac4b152..bfddb3e 100644 --- a/file2mail.py +++ b/file2mail.py @@ -8,68 +8,57 @@ import mail import os import psutil import report +import signal import time -LOCK_FILE = os.path.join(config.TARGET_FOLDER, "lock") -PID = os.getpid() +CYCLE_TIME = 60 +SLEEP_TIME = .5 logger = logging.getLogger('root') report.stdoutLoggingConfigure(log_name_lvl=[('root', config.LOG_LEVEL), ]) -def has_handle(fpath): - for proc in psutil.process_iter(): +class GracefulKiller: + kill_now = False + def __init__(self): + signal.signal(signal.SIGINT, self.exit_gracefully) + signal.signal(signal.SIGTERM, self.exit_gracefully) + + def exit_gracefully(self, signum, frame): + self.kill_now = True + + +def file2mail(): + # Scan for files to send + for filename in fstools.filelist(config.TARGET_FOLDER): + logger.info("Found %s to send via E-Mail to %s.", filename, config.SEND_TO) + # Send File as E-Mail try: - for item in proc.open_files(): - if fpath == item.path: - return True + mail.send_mail( + config.SEND_FROM, + config.SEND_TO, + "Gesanntes Dokument - %s" % os.path.basename(filename), + "Hier ist das gescannte Dokument vom Scanner in Buchen:", + files=[filename], + server=config.SMTP_SERVER, + username=config.SMTP_USER, + password=config.SMTP_PASSWORD + ) except Exception: - pass - - return False - - -if __name__ == "__main__": - while True: - # Check if LOCK_FILE EXISTS - if not os.path.exists(LOCK_FILE): - # Create LOCK_FILE - with open(LOCK_FILE, 'w') as fh: - fh.write(str(PID)) - logger.debug("Creating lock-file %s with PID %d", LOCK_FILE, PID) - # Read LOCK_FILE content - with open(LOCK_FILE, 'r') as fh: - lf_pid = json.loads(fh.read()) - # Check if LOCK_FILE has my PID - if lf_pid == PID: - # Scan for files to send - for filename in fstools.filelist(config.TARGET_FOLDER): - # Exclude LOCK_FILE - if filename != LOCK_FILE and not has_handle(filename): - logger.info("Found %s to send via E-Mail to %s.", filename, config.SEND_TO) - # Send File as E-Mail - try: - mail.send_mail( - config.SEND_FROM, - config.SEND_TO, - "Gesanntes Dokument - %s" % os.path.basename(filename), - "Hier ist das gescannte Dokument vom Scanner in Buchen:", - files=[filename], - server=config.SMTP_SERVER, - username=config.SMTP_USER, - password=config.SMTP_PASSWORD - ) - except Exception: - logger.exception("Exception while sending an E-Mail") - else: - # Remove file - logger.debug("Removing file %s", filename) - os.remove(filename) - # Remove LOCK_FILE - logger.debug("Removing lock-file %s", LOCK_FILE) - os.remove(LOCK_FILE) - else: - logger.warning("LOCK_FILE has PID %d and this proces %d. No action!", lf_pid, PID) + logger.exception("Exception while sending an E-Mail") else: - logger.warning("LOCK_FILE %s already exists. No action!", LOCK_FILE) - time.sleep(60) + # Remove file + logger.debug("Removing file %s", filename) + os.remove(filename) + + +if __name__ == '__main__': + killer = GracefulKiller() + i = 0 + while not killer.kill_now: + time.sleep(.5) + if i >= CYCLE_TIME / SLEEP_TIME: + cyclic_job() + i = 0 + else: + i += 1