From 1b2fec8b3cb6d7f19fa5e06f0a7ea1c115f1c1b1 Mon Sep 17 00:00:00 2001 From: "pavel.muhortov" Date: Wed, 15 Mar 2023 14:58:27 +0300 Subject: [PATCH] simple code refactoring --- README.md | 19 ++++++---- script.conf | 2 +- script.py | 104 ++++++++++++++++++++++++++-------------------------- 3 files changed, 65 insertions(+), 60 deletions(-) diff --git a/README.md b/README.md index b556cf6..a8dcc8b 100644 --- a/README.md +++ b/README.md @@ -2,36 +2,41 @@ Template repository for projects on python -* [`script.sh`](https://git.hmp.today/pavel.muhortov/template-python#script-py) +* [`script.py`](https://git.hmp.today/pavel.muhortov/template-python#script-py) ____ + ## `script.py` + **Description:** > returning current username if privileged rights are exist > or > returning error, if privileged rights are not exist - **Dependencies:** -> - Python 3 (tested version 3.9.5) - +> +> * Python 3 (tested version 3.9.5) | PARAMETERS | DESCRIPTION | DEFAULT| |-------------|-------------|--------| -|**[-s,--show]**|"" - execution with pauses.
"qn" - execution without pauses.|| -|**[-c,--conf]**|path to configuration file|./script.conf| - +|**[-s,--show]**|"" - execution with pauses.
"qn" - execution without pauses.|| +|**[-c,--conf]**|path to configuration file|`./script.conf`| Example usage in terminal with Python on Linux: + ```shell python3 ./script.py ``` + Example usage in terminal with make the script executable on Linux: + ```shell chmod u+x ./script.py script.py -s qn -c ./script.conf ``` + Example usage in terminal with Python on Windows: + ```shell python .\script.py ``` diff --git a/script.conf b/script.conf index ce25bc5..8772633 100644 --- a/script.conf +++ b/script.conf @@ -1 +1 @@ -logs=./script.log \ No newline at end of file +#log_root=/var/log diff --git a/script.py b/script.py index c9bfc6d..ece148c 100644 --- a/script.py +++ b/script.py @@ -1,71 +1,53 @@ #!/usr/bin/env python3 -from os import path, chdir -from sys import platform -from getpass import getuser +import logging from datetime import datetime +from getpass import getuser +from os import path, sep, chdir, devnull +from sys import platform - -def addtolog(message: str) -> None: - """ - Simple logger - :param message: string for print to stdout and write to log - :return: None - """ - print(message) - if conf['logs']: - with open(conf['logs'], 'a') as file: - file.write(datetime.now().strftime("%Y.%m.%d-%H:%M:%S") + " " + message + "\n") - -def execpause() -> None: - """ - Simple pause - :return: None - """ - input("Press [ENTER] to continue...") - def execquite(code: int) -> None: - """ - Exit handler - :param code: integer to exitcode - :return: None + """Exit procedure. + + Args: + code (int): exitcode """ if args['show'] != 'qn': - execpause() - addtolog("execution time is " + str((datetime.now() - start).seconds) + " seconds, exit") + input("Press [ENTER] to continue...") + global time_start + time_execute = datetime.now() - time_start + logging.info(msg='execution time is ' + str(time_execute) + '. Exit.') exit(code) -def execerror(message: str) -> None: - """ - Error handler - :param message: string for print to stdout and write to log - :return: None - """ - addtolog("error: " + message) - execquite(1) def getconfig(config: str) -> dict: - """ - Simple config reader - :param config: path to configuration file - :return: dictionary as "key":"value" + """Simple config reader. + + Args: + config (str): custom configuration file path + + Returns: + dict: dictionary as "key":"value" """ dictionary = {} - dictionary['logs'] = None + dictionary['log_root'] = None if path.exists(config): with open(config) as file: raw = file.read() for line in raw.splitlines(): - if "logs=" in line: - dictionary['logs'] = line.split('=')[1].strip() + if not line.lstrip().startswith('#') and "=" in line: + if "log_root=" in line: + dictionary['log_root'] = line.split('=')[1].strip() return dictionary + def checkroot() -> bool: - """ - Crossplatform privileged rights checker - :return: "true" or "false" + """Crossplatform privileged rights checker. + + Returns: + bool: True - if privileged rights, False - if not privileged rights """ if platform.startswith('linux') or platform.startswith('darwin'): from os import geteuid @@ -81,27 +63,45 @@ def checkroot() -> bool: if __name__ == "__main__": from argparse import ArgumentParser + global time_start + time_start = datetime.now() + args = ArgumentParser( prog='script', description='Checking privileged rights', epilog='Dependencies: ' - 'Python 3 (tested version 3.9.5)' + '- Python 3 (tested version 3.9.5)' ) args.add_argument('-s', '--show', type=str, default=None, required=False, help='qn - execution without pauses') args.add_argument('-c', '--conf', type=str, default=None, required=False, help='path to configuration file') args = vars(args.parse_args()) - if not args['conf']: - conf = path.abspath(__file__).replace('.py', '.conf') - else: + + conf = path.abspath(__file__).replace('.py', '.conf') + if args['conf']: conf = args['conf'] conf = getconfig(conf) + log_path = devnull + if conf['log_root']: + log_path = conf['log_root'] + sep + path.splitext(path.basename(__file__))[0] + '.log' + logging.basicConfig( + format='%(asctime)s %(levelname)s: %(message)s', + datefmt='%Y-%m-%d_%H.%M.%S', + handlers=[ + logging.FileHandler( + filename=log_path, + mode='a' + ), + logging.StreamHandler() + ], + level='INFO' + ) - start = datetime.now() chdir(path.split(path.abspath(__file__))[0]) if checkroot(): print('Running as', getuser()) execquite(0) else: - execerror("Restart this as root!") + logging.warning(msg='Restart this as root!') + execquite(1)