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__
# __description__
2021-01-13 16:10:29 +01:00
import sys
import os
import logging
import click
import click_config_file
from logging . handlers import SysLogHandler
2021-01-13 16:17:31 +01:00
class __project_codename__ :
2021-01-13 16:10:29 +01:00
2023-02-23 22:23:04 +01:00
def __init__ ( self , debug_level , log_file , * * kwargs ) :
2021-01-13 16:10:29 +01:00
''' Initial function called when object is created '''
self . config = dict ( )
self . config [ ' debug_level ' ] = debug_level
2021-01-20 20:24:15 +01:00
if log_file is None :
log_file = os . path . join ( os . environ . get ( ' HOME ' , os . environ . get ( ' USERPROFILE ' , os . getcwd ( ) ) ) , ' log ' , ' __project_codename__.log ' )
self . config [ ' log_file ' ] = log_file
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 )
streamhandler . setLevel ( logging . getLevelName ( self . config . get ( " debug_level " , ' INFO ' ) ) )
self . _log . addHandler ( streamhandler )
if ' log_file ' in self . config :
log_file = self . config [ ' log_file ' ]
else :
home_folder = os . environ . get ( ' HOME ' , os . environ . get ( ' USERPROFILE ' , ' ' ) )
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 ) ) :
2021-03-23 11:23:06 +01:00
os . mkdir ( os . path . dirname ( log_file ) )
2021-01-13 16:10:29 +01:00
filehandler = logging . handlers . RotatingFileHandler ( log_file , maxBytes = 102400000 )
# create formatter
2021-01-20 20:24:15 +01: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
@click.command ( )
@click.option ( " --debug-level " , " -d " , default = " INFO " ,
type = click . Choice (
[ " CRITICAL " , " ERROR " , " WARNING " , " INFO " , " DEBUG " , " NOTSET " ] ,
case_sensitive = False ,
) , help = ' Set the debug level for the standard output. ' )
@click.option ( ' --log-file ' , ' -l ' , help = " File to store all debug messages. " )
2023-04-07 20:35:29 +02:00
#@click.option("--dummy","-n", is_flag=True, help="Don't do anything, just show what would be done.") # Don't forget to add dummy to parameters of main function
2021-01-13 16:10:29 +01:00
@click_config_file.configuration_option ( )
2023-02-23 22:23:04 +01:00
def __main__ ( debug_level , log_file , * * kwargs ) :
return __project_codename__ ( debug_level , log_file , * * kwargs )
2021-01-13 16:10:29 +01:00
if __name__ == " __main__ " :
2021-01-13 16:23:14 +01:00
__main__ ( )
2021-01-13 16:10:29 +01:00