mirror of
https://github.com/naruxde/revpicommander.git
synced 2025-11-09 08:58:04 +01:00
118 lines
3.1 KiB
Python
118 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Global program initialization."""
|
|
__author__ = "Sven Sager"
|
|
__copyright__ = "Copyright (C) 2019 Sven Sager"
|
|
__license__ = "LGPLv3"
|
|
|
|
import logging
|
|
import sys
|
|
from argparse import ArgumentParser
|
|
from configparser import ConfigParser
|
|
from os import R_OK, W_OK, access
|
|
from os.path import abspath, dirname, join
|
|
|
|
# Program name
|
|
programname = "revpicommander"
|
|
|
|
# Set to True, if you want to save config file
|
|
conf_rw = False
|
|
|
|
conf = ConfigParser()
|
|
logger = logging.getLogger()
|
|
pidfile = "/var/run/{0}.pid".format(programname)
|
|
|
|
|
|
def cleanup():
|
|
"""Clean up program."""
|
|
# Shutdown logging system
|
|
logging.shutdown()
|
|
|
|
|
|
def reconfigure_logger():
|
|
"""Configure logging module of program."""
|
|
# Clear all log handler
|
|
for lhandler in logger.handlers.copy():
|
|
lhandler.close()
|
|
logger.removeHandler(lhandler)
|
|
|
|
# Create new log handler
|
|
logformat = logging.Formatter(
|
|
"{asctime} [{levelname:8}] {message}",
|
|
datefmt="%Y-%m-%d %H:%M:%S", style="{"
|
|
)
|
|
lhandler = logging.StreamHandler(sys.stdout)
|
|
lhandler.setFormatter(logformat)
|
|
logger.addHandler(lhandler)
|
|
|
|
if "logfile" in pargs and pargs.logfile is not None:
|
|
# Write logs to a logfile
|
|
lhandler = logging.FileHandler(filename=pargs.logfile)
|
|
lhandler.setFormatter(logformat)
|
|
logger.addHandler(lhandler)
|
|
|
|
# Loglevel auswerten
|
|
if pargs.verbose == 1:
|
|
loglevel = logging.INFO
|
|
elif pargs.verbose > 1:
|
|
loglevel = logging.DEBUG
|
|
else:
|
|
loglevel = logging.WARNING
|
|
logger.setLevel(loglevel)
|
|
|
|
|
|
def reload_conf():
|
|
"""Reload config file."""
|
|
if "conffile" in pargs:
|
|
|
|
# Check config file
|
|
if not access(pargs.conffile, R_OK):
|
|
raise RuntimeError(
|
|
"can not access config file '{0}'".format(pargs.conffile)
|
|
)
|
|
if conf_rw and not access(pargs.conffile, W_OK):
|
|
raise RuntimeError(
|
|
"can not write to config file '{0}'".format(pargs.conffile)
|
|
)
|
|
|
|
# Create global config
|
|
global conf
|
|
logger.info("loading config file: {0}".format(pargs.conffile))
|
|
conf.read(pargs.conffile)
|
|
|
|
|
|
# Generate command arguments of the program
|
|
parser = ArgumentParser(
|
|
prog=programname,
|
|
description="Program description"
|
|
)
|
|
parser.add_argument(
|
|
"-f", "--logfile", dest="logfile",
|
|
help="Save log entries to this file"
|
|
)
|
|
|
|
parser.add_argument(
|
|
"-v", "--verbose", action="count", dest="verbose", default=0,
|
|
help="Switch on verbose logging"
|
|
)
|
|
pargs = parser.parse_args()
|
|
|
|
# Check important objects and set to default if they do not exists
|
|
if "verbose" not in pargs:
|
|
pargs.verbose = 0
|
|
|
|
# Get absolute paths
|
|
pwd = abspath(".")
|
|
|
|
# Configure logger
|
|
if "logfile" in pargs and pargs.logfile is not None \
|
|
and dirname(pargs.logfile) == "":
|
|
pargs.logfile = join(pwd, pargs.logfile)
|
|
reconfigure_logger()
|
|
|
|
# Initialize configparser of globalconfig
|
|
if "conffile" in pargs and dirname(pargs.conffile) == "":
|
|
pargs.conffile = join(pwd, pargs.conffile)
|
|
|
|
# Load configuration - Comment out, if you do that in your own program
|
|
reload_conf()
|