Add help menu, refactor code
This commit is contained in:
		
							parent
							
								
									005273b52c
								
							
						
					
					
						commit
						8acef01b68
					
				
					 3 changed files with 127 additions and 42 deletions
				
			
		|  | @ -78,60 +78,67 @@ _type = OUTPUT_TO_CONSOLE | USE_ANSI # the default settings for logging | ||||||
| _level = LEVEL_DEBUG # the lowest level to log | _level = LEVEL_DEBUG # the lowest level to log | ||||||
| _outputfile = './output.log' # the file to log to | _outputfile = './output.log' # the file to log to | ||||||
| 
 | 
 | ||||||
| ''' |  | ||||||
|     Set the settings for the logger using bitwise operators |  | ||||||
| ''' |  | ||||||
| def set_settings(type): | def set_settings(type): | ||||||
|  |     ''' | ||||||
|  |         Set the settings for the logger using bitwise operators | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|     global _type |     global _type | ||||||
|     _type = type |     _type = type | ||||||
| 
 | 
 | ||||||
| ''' |  | ||||||
|     Get settings from the logger |  | ||||||
| ''' |  | ||||||
| def get_settings(): | def get_settings(): | ||||||
|  |     ''' | ||||||
|  |         Get settings from the logger | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|     return _type |     return _type | ||||||
| 
 | 
 | ||||||
| ''' |  | ||||||
|     Set the lowest log level to output |  | ||||||
| ''' |  | ||||||
| def set_level(level): | def set_level(level): | ||||||
|  |     ''' | ||||||
|  |         Set the lowest log level to output | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|     global _level |     global _level | ||||||
|     _level = level |     _level = level | ||||||
| 
 | 
 | ||||||
| ''' |  | ||||||
|     Get the lowest log level currently being outputted |  | ||||||
| ''' |  | ||||||
| def get_level(): | def get_level(): | ||||||
|  |     ''' | ||||||
|  |         Get the lowest log level currently being outputted | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|     return _level |     return _level | ||||||
| 
 | 
 | ||||||
| ''' |  | ||||||
|     Outputs raw data to console without formatting |  | ||||||
| ''' |  | ||||||
| def raw(data): | def raw(data): | ||||||
|  |     ''' | ||||||
|  |         Outputs raw data to console without formatting | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|     if get_settings() & OUTPUT_TO_CONSOLE: |     if get_settings() & OUTPUT_TO_CONSOLE: | ||||||
|         print(data) |         print(data) | ||||||
|     if get_settings() & OUTPUT_TO_FILE: |     if get_settings() & OUTPUT_TO_FILE: | ||||||
|         with open(_outputfile, "a+") as f: |         with open(_outputfile, "a+") as f: | ||||||
|             f.write(colors.filter(data) + '\n') |             f.write(colors.filter(data) + '\n') | ||||||
| 
 | 
 | ||||||
| ''' |  | ||||||
|     Logs the data |  | ||||||
|     prefix : The prefix to the output |  | ||||||
|     data   : The actual data to output |  | ||||||
|     color  : The color to output before the data |  | ||||||
| ''' |  | ||||||
| def log(prefix, data, color = ''): | def log(prefix, data, color = ''): | ||||||
|  |     ''' | ||||||
|  |         Logs the data | ||||||
|  |         prefix : The prefix to the output | ||||||
|  |         data   : The actual data to output | ||||||
|  |         color  : The color to output before the data | ||||||
|  |     ''' | ||||||
|  | 
 | ||||||
|     output = colors.reset + str(color) + '[' + colors.bold + str(prefix) + colors.reset + str(color) + '] ' + str(data) + colors.reset |     output = colors.reset + str(color) + '[' + colors.bold + str(prefix) + colors.reset + str(color) + '] ' + str(data) + colors.reset | ||||||
|     if not get_settings() & USE_ANSI: |     if not get_settings() & USE_ANSI: | ||||||
|         output = colors.filter(output) |         output = colors.filter(output) | ||||||
| 
 | 
 | ||||||
|     raw(output) |     raw(output) | ||||||
| 
 | 
 | ||||||
| ''' | def readline(message = ''): | ||||||
|     Takes in input from the console, not stored in logs |     ''' | ||||||
|     message: The message to display before taking input |         Takes in input from the console, not stored in logs | ||||||
| ''' |         message: The message to display before taking input | ||||||
| def readline(message = 'Enter input: '): |     ''' | ||||||
|  | 
 | ||||||
|     color = colors.fg.green + colors.bold |     color = colors.fg.green + colors.bold | ||||||
|     output = colors.reset + str(color) + '... ' + colors.reset + str(message) + colors.reset |     output = colors.reset + str(color) + '... ' + colors.reset + str(message) + colors.reset | ||||||
| 
 | 
 | ||||||
|  | @ -142,12 +149,13 @@ def readline(message = 'Enter input: '): | ||||||
| 
 | 
 | ||||||
|     return input() |     return input() | ||||||
| 
 | 
 | ||||||
| ''' |  | ||||||
|     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 |  | ||||||
| ''' |  | ||||||
| def confirm(default = 'y', message = 'Are you sure %s? '): | 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 |     color = colors.fg.green + colors.bold | ||||||
| 
 | 
 | ||||||
|     default = default.lower() |     default = default.lower() | ||||||
|  |  | ||||||
|  | @ -133,7 +133,24 @@ class Onionr: | ||||||
|             'add-peer': self.addPeer |             'add-peer': self.addPeer | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |     def getHelp(self): | ||||||
|  |         return { | ||||||
|  |             'help': 'Displays this Onionr help menu', | ||||||
|  |             'version': 'Displays the Onionr version', | ||||||
|  |             'start': 'Starts the Onionr daemon', | ||||||
|  |             'stop': 'Stops the Onionr daemon', | ||||||
|  |             'stats': 'Displays node statistics', | ||||||
|  |             'list-peers': 'Displays a list of peers (?)', | ||||||
|  |             'add-peer': 'Adds a peer (?)', | ||||||
|  |             'add-msg': 'Broadcasts a message to the Onionr network', | ||||||
|  |             'pm': 'Adds a private message (?)', | ||||||
|  |             'gui': 'Opens a graphical interface for Onionr' | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|     def execute(self, argument): |     def execute(self, argument): | ||||||
|  |         ''' | ||||||
|  |             Executes a command | ||||||
|  |         ''' | ||||||
|         argument = argument[argument.startswith('--') and len('--'):] # remove -- if it starts with it |         argument = argument[argument.startswith('--') and len('--'):] # remove -- if it starts with it | ||||||
| 
 | 
 | ||||||
|         # define commands |         # define commands | ||||||
|  | @ -146,12 +163,21 @@ class Onionr: | ||||||
|         THIS SECTION DEFINES THE COMMANDS |         THIS SECTION DEFINES THE COMMANDS | ||||||
|     ''' |     ''' | ||||||
| 
 | 
 | ||||||
|     def version(self): |     def version(self, verbosity=5): | ||||||
|         logger.info('Onionr ' + ONIONR_VERSION + ' (' + platform.machine() + ') : API v' + API_VERSION) |         ''' | ||||||
|         logger.info('Running on ' + platform.platform() + ' ' + platform.release()) |             Displays the Onionr version | ||||||
|  |         ''' | ||||||
|  |         logger.info('Onionr ' + ONIONR_VERSION + ' (' + platform.machine() + ') - API v' + API_VERSION) | ||||||
|  |         if verbosity >= 1: | ||||||
|  |             logger.info('Anonymous P2P Platform - GPLv3 - onionr.voidnet.tech') | ||||||
|  |         if verbosity >= 2: | ||||||
|  |             logger.info('Running on ' + platform.platform() + ' ' + platform.release()) | ||||||
| 
 | 
 | ||||||
|     def sendEncrypt(self): |     def sendEncrypt(self): | ||||||
|         '''Create a private message and send it''' |         ''' | ||||||
|  |             Create a private message and send it | ||||||
|  |         ''' | ||||||
|  | 
 | ||||||
|         while True: |         while True: | ||||||
|             peer = logger.readline('Peer to send to: ') |             peer = logger.readline('Peer to send to: ') | ||||||
|             if self.onionrUtils.validateID(peer): |             if self.onionrUtils.validateID(peer): | ||||||
|  | @ -164,14 +190,26 @@ class Onionr: | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     def openGUI(self): |     def openGUI(self): | ||||||
|  |         ''' | ||||||
|  |             Opens a graphical interface for Onionr | ||||||
|  |         ''' | ||||||
|  | 
 | ||||||
|         gui.OnionrGUI(self.onionrCore) |         gui.OnionrGUI(self.onionrCore) | ||||||
| 
 | 
 | ||||||
|     def listPeers(self): |     def listPeers(self): | ||||||
|  |         ''' | ||||||
|  |             Displays a list of peers (?) | ||||||
|  |         ''' | ||||||
|  | 
 | ||||||
|         logger.info('Peer list:\n') |         logger.info('Peer list:\n') | ||||||
|         for i in self.onionrCore.listPeers(): |         for i in self.onionrCore.listPeers(): | ||||||
|             logger.info(i) |             logger.info(i) | ||||||
| 
 | 
 | ||||||
|     def addPeer(self): |     def addPeer(self): | ||||||
|  |         ''' | ||||||
|  |             Adds a peer (?) | ||||||
|  |         ''' | ||||||
|  | 
 | ||||||
|         try: |         try: | ||||||
|             newPeer = sys.argv[2] |             newPeer = sys.argv[2] | ||||||
|         except: |         except: | ||||||
|  | @ -181,21 +219,38 @@ class Onionr: | ||||||
|             self.onionrCore.addPeer(newPeer) |             self.onionrCore.addPeer(newPeer) | ||||||
| 
 | 
 | ||||||
|     def addMessage(self): |     def addMessage(self): | ||||||
|  |         ''' | ||||||
|  |             Broadcasts a message to the Onionr network | ||||||
|  |         ''' | ||||||
|  | 
 | ||||||
|         while True: |         while True: | ||||||
|             messageToAdd = '-txt-' + logger.readline('Broadcast message to network: ') |             messageToAdd = '-txt-' + logger.readline('Broadcast message to network: ') | ||||||
|             if len(messageToAdd) >= 1: |             if len(messageToAdd) >= 1: | ||||||
|                 break |                 break | ||||||
|  | 
 | ||||||
|         addedHash = self.onionrCore.setData(messageToAdd) |         addedHash = self.onionrCore.setData(messageToAdd) | ||||||
|         self.onionrCore.addToBlockDB(addedHash, selfInsert=True) |         self.onionrCore.addToBlockDB(addedHash, selfInsert=True) | ||||||
|         self.onionrCore.setBlockType(addedHash, 'txt') |         self.onionrCore.setBlockType(addedHash, 'txt') | ||||||
| 
 | 
 | ||||||
|     def notFound(self): |     def notFound(self): | ||||||
|  |         ''' | ||||||
|  |             Displays a "command not found" message | ||||||
|  |         ''' | ||||||
|  | 
 | ||||||
|         logger.error('Command not found.') |         logger.error('Command not found.') | ||||||
| 
 | 
 | ||||||
|     def showHelpSuggestion(self): |     def showHelpSuggestion(self): | ||||||
|  |         ''' | ||||||
|  |             Displays a message suggesting help | ||||||
|  |         ''' | ||||||
|  | 
 | ||||||
|         logger.info('Do ' + logger.colors.bold + sys.argv[0] + ' --help' + logger.colors.reset + logger.colors.fg.green + ' for Onionr help.') |         logger.info('Do ' + logger.colors.bold + sys.argv[0] + ' --help' + logger.colors.reset + logger.colors.fg.green + ' for Onionr help.') | ||||||
| 
 | 
 | ||||||
|     def start(self): |     def start(self): | ||||||
|  |         ''' | ||||||
|  |             Starts the Onionr daemon | ||||||
|  |         ''' | ||||||
|  | 
 | ||||||
|         if os.path.exists('.onionr-lock'): |         if os.path.exists('.onionr-lock'): | ||||||
|             logger.fatal('Cannot start. Daemon is already running, or it did not exit cleanly.\n(if you are sure that there is not a daemon running, delete .onionr-lock & try again).') |             logger.fatal('Cannot start. Daemon is already running, or it did not exit cleanly.\n(if you are sure that there is not a daemon running, delete .onionr-lock & try again).') | ||||||
|         else: |         else: | ||||||
|  | @ -208,7 +263,9 @@ class Onionr: | ||||||
|                 os.remove('.onionr-lock') |                 os.remove('.onionr-lock') | ||||||
| 
 | 
 | ||||||
|     def daemon(self): |     def daemon(self): | ||||||
|         ''' Start the Onionr communication daemon ''' |         ''' | ||||||
|  |             Starts the Onionr communication daemon | ||||||
|  |         ''' | ||||||
|         if not os.environ.get("WERKZEUG_RUN_MAIN") == "true": |         if not os.environ.get("WERKZEUG_RUN_MAIN") == "true": | ||||||
|             if self._developmentMode: |             if self._developmentMode: | ||||||
|                 logger.warn('DEVELOPMENT MODE ENABLED (THIS IS LESS SECURE!)') |                 logger.warn('DEVELOPMENT MODE ENABLED (THIS IS LESS SECURE!)') | ||||||
|  | @ -226,7 +283,9 @@ class Onionr: | ||||||
|         return |         return | ||||||
| 
 | 
 | ||||||
|     def killDaemon(self): |     def killDaemon(self): | ||||||
|         ''' Shutdown the Onionr Daemon ''' |         ''' | ||||||
|  |             Shutdown the Onionr daemon | ||||||
|  |         ''' | ||||||
| 
 | 
 | ||||||
|         logger.warn('Killing the running daemon') |         logger.warn('Killing the running daemon') | ||||||
|         net = NetController(self.config['CLIENT']['PORT']) |         net = NetController(self.config['CLIENT']['PORT']) | ||||||
|  | @ -240,13 +299,31 @@ class Onionr: | ||||||
|         return |         return | ||||||
| 
 | 
 | ||||||
|     def showStats(self): |     def showStats(self): | ||||||
|         ''' Display statistics and exit ''' |         ''' | ||||||
|  |             Displays statistics and exits | ||||||
|  |         ''' | ||||||
| 
 | 
 | ||||||
|         return |         return | ||||||
| 
 | 
 | ||||||
|     def showHelp(self): |     def showHelp(self, command = None): | ||||||
|         ''' Show help for Onionr ''' |         ''' | ||||||
|  |             Show help for Onionr | ||||||
|  |         ''' | ||||||
| 
 | 
 | ||||||
|  |         helpmenu = self.getHelp() | ||||||
|  | 
 | ||||||
|  |         if command is None and len(sys.argv) >= 3: | ||||||
|  |             for cmd in sys.argv[2:]: | ||||||
|  |                 self.showHelp(cmd) | ||||||
|  |         elif not command is None: | ||||||
|  |             if command.lower() in helpmenu: | ||||||
|  |                 logger.info(logger.colors.bold + command  + logger.colors.reset + logger.colors.fg.blue + ' : ' + logger.colors.reset +  helpmenu[command.lower()]) | ||||||
|  |             else: | ||||||
|  |                 logger.warn(logger.colors.bold + command  + logger.colors.reset + logger.colors.fg.blue + ' : ' + logger.colors.reset + 'No help menu entry was found') | ||||||
|  |         else: | ||||||
|  |             self.version(0) | ||||||
|  |             for command, helpmessage in helpmenu.items(): | ||||||
|  |                 self.showHelp(command) | ||||||
|         return |         return | ||||||
| 
 | 
 | ||||||
| Onionr() | Onionr() | ||||||
|  |  | ||||||
|  | @ -28,7 +28,7 @@ class OnionrTests(unittest.TestCase): | ||||||
|         logger.debug('--------------------------') |         logger.debug('--------------------------') | ||||||
|         logger.info('Running simple program run test...') |         logger.info('Running simple program run test...') | ||||||
|         # Test just running ./onionr with no arguments |         # Test just running ./onionr with no arguments | ||||||
|         blank = os.system('./onionr.py') |         blank = os.system('./onionr.py --version') | ||||||
|         if blank != 0: |         if blank != 0: | ||||||
|             self.assertTrue(False) |             self.assertTrue(False) | ||||||
|         else: |         else: | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue