renamed onionr dir and bugfixes/linting progress
This commit is contained in:
		
							parent
							
								
									2b996da17f
								
							
						
					
					
						commit
						720efe4fca
					
				
					 226 changed files with 179 additions and 142 deletions
				
			
		
							
								
								
									
										71
									
								
								src/logger/__init__.py
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										71
									
								
								src/logger/__init__.py
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,71 @@ | |||
| ''' | ||||
|     Onionr - Private P2P Communication | ||||
| 
 | ||||
|     This file handles all operations involving logging | ||||
| ''' | ||||
| ''' | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| ''' | ||||
| 
 | ||||
| import sys, traceback | ||||
| 
 | ||||
| from . import colors, readline, log, raw, confirm, colors, settings | ||||
| colors = colors.Colors | ||||
| readline = readline.readline | ||||
| log = log.log | ||||
| raw = raw.raw | ||||
| confirm = confirm.confirm | ||||
| 
 | ||||
| # debug: when there is info that could be useful for debugging purposes only | ||||
| def debug(data: str, error = None, timestamp = True, prompt = True, terminal = False, level = settings.LEVEL_DEBUG): | ||||
|     if settings.get_level() <= level: | ||||
|         log('/', data, timestamp = timestamp, prompt = prompt, terminal = terminal) | ||||
|     if not error is None: | ||||
|         debug('Error: ' + str(error) + parse_error()) | ||||
| 
 | ||||
| # info: when there is something to notify the user of, such as the success of a process | ||||
| def info(data: str, timestamp = False, prompt = True, terminal = False, level = settings.LEVEL_INFO): | ||||
|     if settings.get_level() <= level: | ||||
|         log('+', data, colors.fg.green, timestamp = timestamp, prompt = prompt, terminal = terminal) | ||||
| 
 | ||||
| # warn: when there is a potential for something bad to happen | ||||
| def warn(data: str, error = None, timestamp = True, prompt = True, terminal = False, level = settings.LEVEL_WARN): | ||||
|     if not error is None: | ||||
|         debug('Error: ' + str(error) + parse_error()) | ||||
|     if settings.get_level() <= level: | ||||
|         log('!', data, colors.fg.orange, timestamp = timestamp, prompt = prompt, terminal = terminal) | ||||
| 
 | ||||
| # error: when only one function, module, or process of the program encountered a problem and must stop | ||||
| def error(data: str, error = None, timestamp = True, prompt = True, terminal = False, level = settings.LEVEL_ERROR): | ||||
|     if settings.get_level() <= level: | ||||
|         log('-', data, colors.fg.red, timestamp = timestamp, fd = sys.stderr, prompt = prompt, terminal = terminal) | ||||
|     if not error is None: | ||||
|         debug('Error: ' + str(error) + parse_error()) | ||||
| 
 | ||||
| # fatal: when the something so bad has happened that the program must stop | ||||
| def fatal(data: str, error = None, timestamp=True, prompt = True, terminal = False, level = settings.LEVEL_FATAL): | ||||
|     if not error is None: | ||||
|         debug('Error: ' + str(error) + parse_error(), terminal = terminal) | ||||
|     if settings.get_level() <= level: | ||||
|         log('#', data, colors.bg.red + colors.fg.green + colors.bold, timestamp = timestamp, fd = sys.stderr, prompt = prompt, terminal = terminal) | ||||
| 
 | ||||
| # returns a formatted error message | ||||
| def parse_error(): | ||||
|     details = traceback.extract_tb(sys.exc_info()[2]) | ||||
|     output = '' | ||||
| 
 | ||||
|     for line in details: | ||||
|         output += '\n    ... module %s in  %s:%i' % (line[2], line[0], line[1]) | ||||
| 
 | ||||
|     return output | ||||
							
								
								
									
										60
									
								
								src/logger/colors.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								src/logger/colors.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| ''' | ||||
|     Onionr - Private P2P Communication | ||||
| 
 | ||||
|     class to access ANSI control codes | ||||
| ''' | ||||
| ''' | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| ''' | ||||
| import re | ||||
| class Colors: | ||||
|     ''' | ||||
|         This class allows you to set the color if ANSI codes are supported | ||||
|     ''' | ||||
|     reset='\033[0m' | ||||
|     bold='\033[01m' | ||||
|     disable='\033[02m' | ||||
|     underline='\033[04m' | ||||
|     reverse='\033[07m' | ||||
|     strikethrough='\033[09m' | ||||
|     invisible='\033[08m' | ||||
|     italics='\033[3m' | ||||
|     class fg: | ||||
|         black='\033[30m' | ||||
|         red='\033[31m' | ||||
|         green='\033[32m' | ||||
|         orange='\033[33m' | ||||
|         blue='\033[34m' | ||||
|         purple='\033[35m' | ||||
|         cyan='\033[36m' | ||||
|         lightgrey='\033[37m' | ||||
|         darkgrey='\033[90m' | ||||
|         lightred='\033[91m' | ||||
|         lightgreen='\033[92m' | ||||
|         yellow='\033[93m' | ||||
|         lightblue='\033[94m' | ||||
|         pink='\033[95m' | ||||
|         lightcyan='\033[96m' | ||||
|     class bg: | ||||
|         black='\033[40m' | ||||
|         red='\033[41m' | ||||
|         green='\033[42m' | ||||
|         orange='\033[43m' | ||||
|         blue='\033[44m' | ||||
|         purple='\033[45m' | ||||
|         cyan='\033[46m' | ||||
|         lightgrey='\033[47m' | ||||
|     @staticmethod | ||||
|     def filter(data): | ||||
|         return re.compile(r'\x1B\[[0-?]*[ -/]*[@-~]').sub('', str(data)) | ||||
							
								
								
									
										54
									
								
								src/logger/confirm.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/logger/confirm.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | |||
| ''' | ||||
|     Onionr - Private P2P Communication | ||||
| 
 | ||||
|     confirm y/n cli prompt | ||||
| ''' | ||||
| ''' | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| ''' | ||||
| import sys | ||||
| from . import colors, settings | ||||
| colors = colors.Colors | ||||
| def confirm(default = 'y', message = 'Are you sure %s? '): | ||||
|     ''' | ||||
|         Displays an "Are you sure" message, returns True for Y and False for N | ||||
|         message: The confirmation message, use %s for (y/n) | ||||
|         default: which to prefer-- y or n | ||||
|     ''' | ||||
| 
 | ||||
|     color = colors.fg.green + colors.bold | ||||
| 
 | ||||
|     default = default.lower() | ||||
|     confirm = colors.bold | ||||
|     if default.startswith('y'): | ||||
|         confirm += '(Y/n)' | ||||
|     else: | ||||
|         confirm += '(y/N)' | ||||
|     confirm += colors.reset + color | ||||
| 
 | ||||
|     output = colors.reset + str(color) + '... ' + colors.reset + str(message) + colors.reset | ||||
| 
 | ||||
|     if not get_settings() & settings.USE_ANSI: | ||||
|         output = colors.filter(output) | ||||
| 
 | ||||
|     sys.stdout.write(output.replace('%s', confirm)) | ||||
| 
 | ||||
|     inp = input().lower() | ||||
| 
 | ||||
|     if 'y' in inp: | ||||
|         return True | ||||
|     if 'n' in inp: | ||||
|         return False | ||||
|     else: | ||||
|         return default == 'y' | ||||
							
								
								
									
										38
									
								
								src/logger/log.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/logger/log.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| ''' | ||||
|     Onionr - Private P2P Communication | ||||
| 
 | ||||
|     god log function | ||||
| ''' | ||||
| ''' | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| ''' | ||||
| import sys, time | ||||
| from . import colors, raw, settings | ||||
| colors = colors.Colors | ||||
| def log(prefix, data, color = '', timestamp=True, fd = sys.stdout, prompt = True, terminal = False): | ||||
|     ''' | ||||
|         Logs the data | ||||
|         prefix : The prefix to the output | ||||
|         data   : The actual data to output | ||||
|         color  : The color to output before the data | ||||
|     ''' | ||||
|     curTime = '' | ||||
|     if timestamp: | ||||
|         curTime = time.strftime("%m-%d %H:%M:%S") + ' ' | ||||
| 
 | ||||
|     output = colors.reset + str(color) + ('[' + colors.bold + str(prefix) + colors.reset + str(color) + '] ' if prompt is True else '') + curTime + str(data) + colors.reset | ||||
|     if not settings.get_settings() & settings.USE_ANSI: | ||||
|         output = colors.filter(output) | ||||
| 
 | ||||
|     raw.raw(output, fd = fd, terminal = terminal) | ||||
							
								
								
									
										46
									
								
								src/logger/raw.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								src/logger/raw.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,46 @@ | |||
| ''' | ||||
|     Onionr - Private P2P Communication | ||||
| 
 | ||||
|     Output raw data to file or terminal | ||||
| ''' | ||||
| ''' | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| ''' | ||||
| import sys, os | ||||
| from . import settings, colors | ||||
| colors = colors.Colors | ||||
| def raw(data, fd = sys.stdout, terminal = False): | ||||
|     ''' | ||||
|         Outputs raw data to console without formatting | ||||
|     ''' | ||||
| 
 | ||||
|     if terminal and (settings.get_settings() & settings.OUTPUT_TO_CONSOLE): | ||||
|         try: | ||||
|             ts = fd.write('%s\n' % data) | ||||
|         except OSError: | ||||
|             pass | ||||
|     if settings.get_settings() & settings.OUTPUT_TO_FILE: | ||||
|         fdata = '' | ||||
|         try: | ||||
|             with open(settings._outputfile, 'r') as file: | ||||
|                 fdata = file.read() | ||||
|         except FileNotFoundError: | ||||
|             pass | ||||
|         fdata = fdata + '\n' + data | ||||
|         fdata = fdata.split('\n') | ||||
|         if len(fdata) >= settings.MAX_LOG_FILE_LINES: | ||||
|             fdata.pop(0) | ||||
|         fdata = '\n'.join(fdata) | ||||
|         with open(settings._outputfile, 'w') as file: | ||||
|             file.write(fdata) | ||||
							
								
								
									
										37
									
								
								src/logger/readline.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/logger/readline.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | |||
| ''' | ||||
|     Onionr - Private P2P Communication | ||||
| 
 | ||||
|     get a line of input from stdin | ||||
| ''' | ||||
| ''' | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| ''' | ||||
| import sys | ||||
| from . import colors, settings | ||||
| colors = colors.Colors | ||||
| def readline(message = ''): | ||||
|     ''' | ||||
|         Takes in input from the console, not stored in logs | ||||
|         message: The message to display before taking input | ||||
|     ''' | ||||
| 
 | ||||
|     color = colors.fg.green + colors.bold | ||||
|     output = colors.reset + str(color) + '... ' + colors.reset + str(message) + colors.reset | ||||
| 
 | ||||
|     if not settings.get_settings() & settings.USE_ANSI: | ||||
|         output = colors.filter(output) | ||||
| 
 | ||||
|     sys.stdout.write(output) | ||||
| 
 | ||||
|     return input() | ||||
							
								
								
									
										87
									
								
								src/logger/settings.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								src/logger/settings.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,87 @@ | |||
| ''' | ||||
|     Onionr - Private P2P Communication | ||||
| 
 | ||||
|     logger settings | ||||
| ''' | ||||
| ''' | ||||
|     This program is free software: you can redistribute it and/or modify | ||||
|     it under the terms of the GNU General Public License as published by | ||||
|     the Free Software Foundation, either version 3 of the License, or | ||||
|     (at your option) any later version. | ||||
| 
 | ||||
|     This program is distributed in the hope that it will be useful, | ||||
|     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|     GNU General Public License for more details. | ||||
| 
 | ||||
|     You should have received a copy of the GNU General Public License | ||||
|     along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| ''' | ||||
| import os | ||||
| from utils import identifyhome | ||||
| 
 | ||||
| data_home = os.environ.get('ONIONR_LOG_DIR', identifyhome.identify_home()) | ||||
| # Use the bitwise operators to merge these settings | ||||
| USE_ANSI = 0b100 | ||||
| if os.name == 'nt': | ||||
|     USE_ANSI = 0b000 | ||||
| OUTPUT_TO_CONSOLE = 0b010 | ||||
| OUTPUT_TO_FILE = 0b001 | ||||
| 
 | ||||
| LEVEL_DEBUG = 1 | ||||
| LEVEL_INFO = 2 | ||||
| LEVEL_WARN = 3 | ||||
| LEVEL_ERROR = 4 | ||||
| LEVEL_FATAL = 5 | ||||
| LEVEL_IMPORTANT = 6 | ||||
| 
 | ||||
| MAX_LOG_FILE_LINES = 10000 | ||||
| 
 | ||||
| _type = OUTPUT_TO_CONSOLE | USE_ANSI # the default settings for logging | ||||
| _level = LEVEL_DEBUG # the lowest level to log | ||||
| _outputfile = '%s/onionr.log' % (data_home,) # the file to log to | ||||
| 
 | ||||
| def set_settings(type): | ||||
|     ''' | ||||
|         Set the settings for the logger using bitwise operators | ||||
|     ''' | ||||
| 
 | ||||
|     global _type | ||||
|     _type = type | ||||
| 
 | ||||
| def get_settings(): | ||||
|     ''' | ||||
|         Get settings from the logger | ||||
|     ''' | ||||
| 
 | ||||
|     return _type | ||||
| 
 | ||||
| def set_level(level): | ||||
|     ''' | ||||
|         Set the lowest log level to output | ||||
|     ''' | ||||
| 
 | ||||
|     global _level | ||||
|     _level = level | ||||
| 
 | ||||
| def get_level()->int: | ||||
|     ''' | ||||
|         Get the lowest log level currently being outputted | ||||
|     ''' | ||||
| 
 | ||||
|     return _level | ||||
| 
 | ||||
| def set_file(outputfile): | ||||
|     ''' | ||||
|         Set the file to output to, if enabled | ||||
|     ''' | ||||
| 
 | ||||
|     global _outputfile | ||||
|     _outputfile = outputfile | ||||
| 
 | ||||
| def get_file(): | ||||
|     ''' | ||||
|         Get the file to output to | ||||
|     ''' | ||||
| 
 | ||||
|     return _outputfile | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue