python_skeleton/skeleton/project_codename/project_codename.py

95 lines
2.7 KiB
Python
Raw Normal View History

2021-01-13 16:10:29 +01:00
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
#
# This script is licensed under GNU GPL version 2.0 or above
2021-01-13 16:17:31 +01:00
# (c) __authoring_date__ __author__
2023-05-18 10:52:53 +02:00
"""__description__"""
2021-01-13 16:10:29 +01:00
import sys
import os
import logging
2023-05-18 10:52:53 +02:00
from logging.handlers import SysLogHandler
2021-01-13 16:10:29 +01:00
import click
import click_config_file
2023-05-18 10:52:53 +02:00
2021-01-13 16:10:29 +01:00
2021-01-13 16:17:31 +01:00
class __project_codename__:
2021-01-13 16:10:29 +01:00
2023-05-18 10:52:53 +02:00
def __init__(self, **kwargs):
self.config = kwargs
if 'log_file' not in kwargs or kwargs['log_file'] is None:
self.config['log_file'] = os.path.join(
os.environ.get(
'HOME',
os.environ.get(
'USERPROFILE',
os.getcwd()
)
),
'log',
'__project_codename__.log'
)
2021-01-13 16:10:29 +01:00
self._init_log()
def _init_log(self):
''' Initialize log object '''
2021-01-13 16:17:31 +01:00
self._log = logging.getLogger("__project_codename__")
2021-01-13 16:10:29 +01:00
self._log.setLevel(logging.DEBUG)
sysloghandler = SysLogHandler()
sysloghandler.setLevel(logging.DEBUG)
self._log.addHandler(sysloghandler)
streamhandler = logging.StreamHandler(sys.stdout)
2023-05-18 10:52:53 +02:00
streamhandler.setLevel(
logging.getLevelName(self.config.get("debug_level", 'INFO'))
)
2021-01-13 16:10:29 +01:00
self._log.addHandler(streamhandler)
if 'log_file' in self.config:
log_file = self.config['log_file']
else:
2023-05-18 10:52:53 +02:00
home_folder = os.environ.get(
'HOME', os.environ.get('USERPROFILE', '')
)
2021-01-13 16:10:29 +01:00
log_folder = os.path.join(home_folder, "log")
2021-01-13 16:17:31 +01:00
log_file = os.path.join(log_folder, "__project_codename__.log")
2021-01-13 16:10:29 +01:00
if not os.path.exists(os.path.dirname(log_file)):
os.mkdir(os.path.dirname(log_file))
2021-01-13 16:10:29 +01:00
2023-05-18 10:52:53 +02:00
filehandler = logging.handlers.RotatingFileHandler(
log_file, maxBytes=102400000
)
2021-01-13 16:10:29 +01:00
# create formatter
2023-05-18 10:52:53 +02:00
formatter = logging.Formatter(
'%(asctime)s %(name)-12s %(levelname)-8s %(message)s'
)
2021-01-13 16:10:29 +01:00
filehandler.setFormatter(formatter)
filehandler.setLevel(logging.DEBUG)
self._log.addHandler(filehandler)
return True
2023-05-18 10:52:53 +02:00
2021-01-13 16:10:29 +01:00
@click.command()
2023-05-18 10:52:53 +02:00
@click.option(
"--debug-level",
"-d",
default="INFO",
2021-01-13 16:10:29 +01:00
type=click.Choice(
["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG", "NOTSET"],
case_sensitive=False,
2023-05-18 10:52:53 +02:00
),
help='Set the debug level for the standard output.'
)
2021-01-13 16:10:29 +01:00
@click.option('--log-file', '-l', help="File to store all debug messages.")
2023-05-18 10:52:53 +02:00
# @click.option("--dummy","-n", is_flag=True,
# help="Don't do anything, just show what would be done.")
2021-01-13 16:10:29 +01:00
@click_config_file.configuration_option()
2023-05-18 10:52:53 +02:00
def __main__(**kwargs):
return __project_codename__(**kwargs)
2021-01-13 16:10:29 +01:00
if __name__ == "__main__":
2021-01-13 16:23:14 +01:00
__main__()