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
* [`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.<br/>"qn" - execution without pauses.||
|**[-c,--conf]**|path to configuration file|./script.conf|
|**[-s,--show]**|"" - execution with pauses.<br/>"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
```

View File

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

104
script.py
View File

@ -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)