handle signals for better app shutdown
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Tobias Brunner 2021-02-27 15:02:35 +01:00
parent bd3a00c2d9
commit 573765958f
4 changed files with 28 additions and 9 deletions

View File

@ -2,6 +2,6 @@
Pylokid. From Mail to Lodur - all automated.
"""
__version__ = "3.0.2"
__version__ = "3.0.3"
__git_version__ = "0"
__url__ = "https://github.com/tobru/pylokid"

View File

@ -4,7 +4,4 @@ Helper module to run not-installed version (via ``python3 -m pylokid``)
from pylokid.main import main
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("Byebye")
main()

View File

@ -5,6 +5,7 @@
import logging
import os
import time
import signal
import requests
from importlib.metadata import version
@ -37,6 +38,20 @@ PUSHOVER_API_TOKEN = os.getenv("PUSHOVER_API_TOKEN")
PUSHOVER_USER_KEY = os.getenv("PUSHOVER_USER_KEY")
class GracefulKiller:
kill_now = False
signals = {signal.SIGINT: "SIGINT", signal.SIGTERM: "SIGTERM"}
def __init__(self, logger):
signal.signal(signal.SIGINT, self.exit_gracefully)
signal.signal(signal.SIGTERM, self.exit_gracefully)
self.logger = logger
def exit_gracefully(self, signum, frame):
self.logger.info("Received signal %s", self.signals[signum])
self.kill_now = True
def main():
""" main """
@ -48,6 +63,8 @@ def main():
logger = logging.getLogger("pylokid")
logger.info("Starting pylokid version %s", version("pylokid"))
killer = GracefulKiller(logger)
# Initialize IMAP Session
imap_client = EmailHandling(
IMAP_SERVER,
@ -244,6 +261,11 @@ def main():
# send heartbeat
requests.get(HEARTBEAT_URL)
# repeat every
logger.info("Waiting %s seconds until next check", IMAP_CHECK_INTERVAL)
time.sleep(int(IMAP_CHECK_INTERVAL))
while not killer.kill_now:
# repeat every
logger.info("Waiting %s seconds until next check", IMAP_CHECK_INTERVAL)
time.sleep(int(IMAP_CHECK_INTERVAL))
logger.info("Pylokid waves bye bye")
exit()

View File

@ -1,6 +1,6 @@
[tool.poetry]
name = "pylokid"
version = "3.0.2"
version = "3.0.3"
description = ""
authors = ["Tobias Brunner <tobias@tobru.ch>"]
license = "MIT"