simple code refactoring

This commit is contained in:
pavel.muhortov 2023-03-15 14:58:27 +03:00
parent 31e3261664
commit 1b2fec8b3c
3 changed files with 65 additions and 60 deletions

View File

@ -2,36 +2,41 @@
Template repository for projects on python 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` ## `script.py`
**Description:** **Description:**
> returning current username if privileged rights are exist > returning current username if privileged rights are exist
> or > or
> returning error, if privileged rights are not exist > returning error, if privileged rights are not exist
**Dependencies:** **Dependencies:**
> - Python 3 (tested version 3.9.5) >
> * Python 3 (tested version 3.9.5)
| PARAMETERS | DESCRIPTION | DEFAULT| | PARAMETERS | DESCRIPTION | DEFAULT|
|-------------|-------------|--------| |-------------|-------------|--------|
|**[-s,--show]**|"" - execution with pauses.<br/>"qn" - execution without pauses.|| |**[-s,--show]**|"" - execution with pauses.<br/>"qn" - execution without pauses.||
|**[-c,--conf]**|path to configuration file|./script.conf| |**[-c,--conf]**|path to configuration file|`./script.conf`|
Example usage in terminal with Python on Linux: Example usage in terminal with Python on Linux:
```shell ```shell
python3 ./script.py python3 ./script.py
``` ```
Example usage in terminal with make the script executable on Linux: Example usage in terminal with make the script executable on Linux:
```shell ```shell
chmod u+x ./script.py chmod u+x ./script.py
script.py -s qn -c ./script.conf script.py -s qn -c ./script.conf
``` ```
Example usage in terminal with Python on Windows: Example usage in terminal with Python on Windows:
```shell ```shell
python .\script.py python .\script.py
``` ```

View File

@ -1 +1 @@
logs=./script.log #log_root=/var/log

102
script.py
View File

@ -1,71 +1,53 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from os import path, chdir import logging
from sys import platform
from getpass import getuser
from datetime import datetime 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: def execquite(code: int) -> None:
""" """Exit procedure.
Exit handler
:param code: integer to exitcode Args:
:return: None code (int): exitcode
""" """
if args['show'] != 'qn': if args['show'] != 'qn':
execpause() input("Press [ENTER] to continue...")
addtolog("execution time is " + str((datetime.now() - start).seconds) + " seconds, exit") global time_start
time_execute = datetime.now() - time_start
logging.info(msg='execution time is ' + str(time_execute) + '. Exit.')
exit(code) 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: def getconfig(config: str) -> dict:
""" """Simple config reader.
Simple config reader
:param config: path to configuration file Args:
:return: dictionary as "key":"value" config (str): custom configuration file path
Returns:
dict: dictionary as "key":"value"
""" """
dictionary = {} dictionary = {}
dictionary['logs'] = None dictionary['log_root'] = None
if path.exists(config): if path.exists(config):
with open(config) as file: with open(config) as file:
raw = file.read() raw = file.read()
for line in raw.splitlines(): for line in raw.splitlines():
if "logs=" in line: if not line.lstrip().startswith('#') and "=" in line:
dictionary['logs'] = line.split('=')[1].strip() if "log_root=" in line:
dictionary['log_root'] = line.split('=')[1].strip()
return dictionary return dictionary
def checkroot() -> bool: def checkroot() -> bool:
""" """Crossplatform privileged rights checker.
Crossplatform privileged rights checker
:return: "true" or "false" Returns:
bool: True - if privileged rights, False - if not privileged rights
""" """
if platform.startswith('linux') or platform.startswith('darwin'): if platform.startswith('linux') or platform.startswith('darwin'):
from os import geteuid from os import geteuid
@ -81,27 +63,45 @@ def checkroot() -> bool:
if __name__ == "__main__": if __name__ == "__main__":
from argparse import ArgumentParser from argparse import ArgumentParser
global time_start
time_start = datetime.now()
args = ArgumentParser( args = ArgumentParser(
prog='script', prog='script',
description='Checking privileged rights', description='Checking privileged rights',
epilog='Dependencies: ' 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, args.add_argument('-s', '--show', type=str, default=None, required=False,
help='qn - execution without pauses') help='qn - execution without pauses')
args.add_argument('-c', '--conf', type=str, default=None, required=False, args.add_argument('-c', '--conf', type=str, default=None, required=False,
help='path to configuration file') help='path to configuration file')
args = vars(args.parse_args()) args = vars(args.parse_args())
if not args['conf']:
conf = path.abspath(__file__).replace('.py', '.conf') conf = path.abspath(__file__).replace('.py', '.conf')
else: if args['conf']:
conf = args['conf'] conf = args['conf']
conf = getconfig(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]) chdir(path.split(path.abspath(__file__))[0])
if checkroot(): if checkroot():
print('Running as', getuser()) print('Running as', getuser())
execquite(0) execquite(0)
else: else:
execerror("Restart this as root!") logging.warning(msg='Restart this as root!')
execquite(1)