made parser flake8 compliant

This commit is contained in:
Kevin Froman 2019-12-19 04:32:40 -06:00
parent 4b6fdbdd0a
commit 6d123b93fc
3 changed files with 92 additions and 58 deletions

View File

@ -1,9 +1,17 @@
''' """
Onionr - Private P2P Communication Onionr - Private P2P Communication
This module loads in the Onionr arguments and their help messages This module loads in the Onionr arguments and their help messages
''' """
''' import sys
import os
import logger
import onionrexceptions
import onionrplugins
from onionrplugins import onionrpluginapi
from . import arguments, recommend
"""
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
@ -16,19 +24,14 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. along with this program. If not, see <https://www.gnu.org/licenses/>.
''' """
import sys
import os
from etc import onionrvalues
import logger, onionrexceptions
import onionrplugins
from onionrplugins import onionrpluginapi
from . import arguments, recommend
plugin_command = lambda cmd: 'on_%s_cmd' % (cmd,) def plugin_command(cmd):
return f'on_{cmd}_cmd'
def register_plugin_commands(cmd)->bool:
def register_plugin_commands(cmd) -> bool:
plugin_cmd = plugin_command(cmd) plugin_cmd = plugin_command(cmd)
for pl in onionrplugins.get_enabled_plugins(): for pl in onionrplugins.get_enabled_plugins():
pl = onionrplugins.get_plugin(pl) pl = onionrplugins.get_plugin(pl)
@ -37,10 +40,17 @@ def register_plugin_commands(cmd)->bool:
return True return True
return False return False
def _show_term(msg: str):
logger.info(msg, terminal=True)
def register(): def register():
"""Registers commands and handles help command processing""" """Registers commands and handles help command processing"""
def get_help_message(cmd: str, default: str = 'No help available for this command'): def get_help_message(cmd: str,
default: str = 'No help available for this command'):
"""Return help message for a given command, supports plugin commands""" """Return help message for a given command, supports plugin commands"""
pl_cmd = plugin_command(cmd) pl_cmd = plugin_command(cmd)
for pl in onionrplugins.get_enabled_plugins(): for pl in onionrplugins.get_enabled_plugins():
pl = onionrplugins.get_plugin(pl) pl = onionrplugins.get_plugin(pl)
@ -49,14 +59,14 @@ def register():
return getattr(pl, pl_cmd).onionr_help return getattr(pl, pl_cmd).onionr_help
except AttributeError: except AttributeError:
pass pass
for i in arguments.get_arguments(): for i in arguments.get_arguments():
for alias in i: for alias in i:
try: try:
return arguments.get_help(cmd) return arguments.get_help(cmd)
except AttributeError: except AttributeError:
pass pass
return default # Return the help string return default # Return the help string
PROGRAM_NAME = "onionr" PROGRAM_NAME = "onionr"
@ -71,8 +81,9 @@ def register():
if cmd.replace('--', '').lower() == 'help': is_help_cmd = True if cmd.replace('--', '').lower() == 'help': is_help_cmd = True
try: try:
try: try:
if not cmd in ('start', 'details', 'show-details') : os.chdir(os.environ['ORIG_ONIONR_RUN_DIR']) if cmd not in ('start', 'details', 'show-details'):
os.chdir(os.environ['ORIG_ONIONR_RUN_DIR'])
except KeyError: pass except KeyError: pass
try: try:
arguments.get_func(cmd)() arguments.get_func(cmd)()
@ -81,29 +92,35 @@ def register():
if not register_plugin_commands(cmd) and not is_help_cmd: if not register_plugin_commands(cmd) and not is_help_cmd:
recommend.recommend() recommend.recommend()
sys.exit(3) sys.exit(3)
if is_help_cmd: if is_help_cmd:
try: try:
sys.argv[2] sys.argv[2]
except IndexError: except IndexError:
for i in arguments.get_arguments(): for i in arguments.get_arguments():
logger.info('%s <%s>: %s' % (PROGRAM_NAME, '/'.join(i), get_help_message(i[0])), terminal=True) _show_term('%s <%s>: %s' % (PROGRAM_NAME, '/'.join(i),
get_help_message(i[0])))
for pl in onionrplugins.get_enabled_plugins(): for pl in onionrplugins.get_enabled_plugins():
pl = onionrplugins.get_plugin(pl) pl = onionrplugins.get_plugin(pl)
if hasattr(pl, 'ONIONR_COMMANDS'): if hasattr(pl, 'ONIONR_COMMANDS'):
print('') print('')
try: try:
logger.info('%s commands:' % (pl.plugin_name,), terminal=True) _show_term('%s commands:' % (pl.plugin_name,))
except AttributeError: except AttributeError:
logger.info('%s commands:' % (pl.__name__,), terminal=True) _show_term('%s commands:' % (pl.__name__,))
for plugin_cmd in pl.ONIONR_COMMANDS: for plugin_cmd in pl.ONIONR_COMMANDS:
logger.info('%s %s: %s' % (PROGRAM_NAME, plugin_cmd, get_help_message(plugin_cmd)), terminal=True) _show_term('%s %s: %s' %
(PROGRAM_NAME,
plugin_cmd,
get_help_message(plugin_cmd)),)
print('') print('')
else: else:
try: try:
logger.info('%s %s: %s' % (PROGRAM_NAME, sys.argv[2], get_help_message(sys.argv[2])), terminal=True) _show_term('%s %s: %s' % (PROGRAM_NAME,
sys.argv[2],
get_help_message(sys.argv[2])))
except KeyError: except KeyError:
logger.error('%s: command does not exist.' % [sys.argv[2]], terminal=True) logger.error('%s: command does not exist.' % [sys.argv[2]],
terminal=True)
sys.exit(3) sys.exit(3)
return return

View File

@ -1,9 +1,27 @@
''' """
Onionr - Private P2P Communication Onionr - Private P2P Communication
Sets CLI arguments for Onionr Sets CLI arguments for Onionr
''' """
''' from typing import Callable
from .. import onionrstatistics, version, daemonlaunch, keyadders
from .. import openwebinterface
from .. import banblocks # Command to blacklist a block by its hash
from .. import filecommands # commands to share files with onionr
from .. import exportblocks # commands to export blocks
from .. import pubkeymanager # commands to add or change id
from .. import resettor # cmds to reset the tor data folder/transport keypair
from .. import resetplugins # command to reinstall default plugins
from .. import softreset # command to delete onionr blocks
from .. import restartonionr # command to restart Onionr
from .. import runtimetestcmd
from .. import motdcreator
from .. import sitecreator
import onionrexceptions
from onionrutils import importnewblocks # func to import new blocks
"""
This program is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
@ -16,30 +34,15 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. along with this program. If not, see <https://www.gnu.org/licenses/>.
''' """
from typing import Callable
from .. import onionrstatistics, version, daemonlaunch, keyadders, openwebinterface
from .. import banblocks # Command to blacklist a block by its hash
from .. import filecommands # commands to share files with onionr
from .. import exportblocks # commands to export blocks
from .. import pubkeymanager # commands to add or change id
from .. import resettor # commands to reset the tor data directory or transport keypair
from .. import resetplugins # command to reinstall default plugins
from .. import softreset # command to delete onionr blocks
from .. import restartonionr # command to restart Onionr
from .. import runtimetestcmd
from .. import motdcreator
from .. import sitecreator
import onionrexceptions def get_arguments() -> dict:
from onionrutils import importnewblocks # func to import new blocks """This is a function because we need to be able
from onionrplugins import onionrevents as events to dynamically modify them with plugins"""
def get_arguments()->dict:
"""This is a function because we need to be able to dynamically modify them with plugins"""
args = { args = {
('blacklist', 'blacklist-block', 'remove-block', 'removeblock', 'banblock', 'ban-block'): banblocks.ban_block, ('blacklist', 'blacklist-block', 'remove-block',
'removeblock', 'banblock', 'ban-block'): banblocks.ban_block,
('details', 'info'): onionrstatistics.show_details, ('details', 'info'): onionrstatistics.show_details,
('stats', 'statistics'): onionrstatistics.show_stats, ('stats', 'statistics'): onionrstatistics.show_stats,
('version',): version.version, ('version',): version.version,
@ -47,14 +50,17 @@ def get_arguments()->dict:
('stop', 'kill'): daemonlaunch.kill_daemon, ('stop', 'kill'): daemonlaunch.kill_daemon,
('restart',): restartonionr.restart, ('restart',): restartonionr.restart,
('add-address', 'addaddress', 'addadder'): keyadders.add_address, ('add-address', 'addaddress', 'addadder'): keyadders.add_address,
('openhome', 'gui', 'openweb', 'open-home', 'open-web'): openwebinterface.open_home, ('openhome', 'gui', 'openweb',
'open-home', 'open-web'): openwebinterface.open_home,
('get-url', 'url', 'get-web'): openwebinterface.get_url, ('get-url', 'url', 'get-web'): openwebinterface.get_url,
('addhtml', 'add-html'): filecommands.add_html, ('addhtml', 'add-html'): filecommands.add_html,
('addsite', 'add-site', 'update-site', 'updatesite'): sitecreator.create_multipage_site, ('addsite', 'add-site',
'update-site', 'updatesite'): sitecreator.create_multipage_site,
('addfile', 'add-file'): filecommands.add_file, ('addfile', 'add-file'): filecommands.add_file,
('get-file', 'getfile'): filecommands.get_file, ('get-file', 'getfile'): filecommands.get_file,
('export-block', 'exportblock'): exportblocks.export_block, ('export-block', 'exportblock'): exportblocks.export_block,
('importblocks', 'import-blocks', 'import-block'): importnewblocks.import_new_blocks, ('importblocks',
'import-blocks', 'import-block'): importnewblocks.import_new_blocks,
('addid', 'add-id'): pubkeymanager.add_ID, ('addid', 'add-id'): pubkeymanager.add_ID,
('changeid', 'change-id'): pubkeymanager.change_ID, ('changeid', 'change-id'): pubkeymanager.change_ID,
('add-vanity', 'addvanity'): pubkeymanager.add_vanity, ('add-vanity', 'addvanity'): pubkeymanager.add_vanity,
@ -68,21 +74,28 @@ def get_arguments()->dict:
} }
return args return args
def get_help(arg: str) -> str: def get_help(arg: str) -> str:
"""Returns the help info string from a given command""" """Returns the help info string from a given command"""
arguments = get_arguments() arguments = get_arguments()
# Iterate the command alias tuples # Iterate the command alias tuples
for argument in arguments: for argument in arguments:
# Return the help message if its found in a command alias tuple # Return the help message if its found in a command alias tuple
if arg in argument: return arguments[argument].onionr_help if arg in argument:
return arguments[argument].onionr_help
raise KeyError raise KeyError
def get_func(argument: str) -> Callable: def get_func(argument: str) -> Callable:
"""Returns the function for a given command argument""" """Returns the function for a given command argument"""
argument = argument.lower() argument = argument.lower()
args = get_arguments() args = get_arguments()
for arg in args.keys(): # Iterate command alias sets for arg in args.keys(): # Iterate command alias sets
if argument in arg: # If our argument is in the current alias set, return the command function """
If our argument is in the current alias set,
return the command function
"""
if argument in arg:
return args[arg] return args[arg]
raise onionrexceptions.NotFound raise onionrexceptions.NotFound

View File

@ -3,6 +3,7 @@ from difflib import SequenceMatcher
import logger import logger
from . import arguments from . import arguments
def recommend(print_default: bool = True): def recommend(print_default: bool = True):
tried = sys.argv[1] tried = sys.argv[1]
args = arguments.get_arguments() args = arguments.get_arguments()
@ -10,6 +11,9 @@ def recommend(print_default: bool = True):
for key in args.keys(): for key in args.keys():
for word in key: for word in key:
if SequenceMatcher(None, tried, word).ratio() >= 0.75: if SequenceMatcher(None, tried, word).ratio() >= 0.75:
logger.warn('%s "%s", did you mean "%s"?' % (print_message, tried, word), terminal=True) logger.warn(f'{print_message} "{tried}", '
+ 'did you mean "{word}"?',
terminal=True)
return return
if print_default: logger.error('%s "%s"' % (print_message, tried), terminal=True) if print_default: logger.error('%s "%s"' %
(print_message, tried), terminal=True)