simple code refactoring
This commit is contained in:
		
							parent
							
								
									31e3261664
								
							
						
					
					
						commit
						1b2fec8b3c
					
				
							
								
								
									
										19
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								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.<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 | ||||
| ``` | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| logs=./script.log | ||||
| #log_root=/var/log | ||||
|  |  | |||
							
								
								
									
										104
									
								
								script.py
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								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) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user