Simplify @requires
This commit is contained in:
parent
2a314da910
commit
51b2bfe875
|
@ -78,11 +78,11 @@ def get_parser(valid_commands):
|
||||||
# Lexicon settings.
|
# Lexicon settings.
|
||||||
parser.add_argument("-n",
|
parser.add_argument("-n",
|
||||||
metavar="LEXICON",
|
metavar="LEXICON",
|
||||||
dest="lexicon",
|
dest="tl_lexicon",
|
||||||
help="Specify a lexicon to operate on")
|
help="Specify a lexicon to operate on")
|
||||||
parser.add_argument("-u",
|
parser.add_argument("-u",
|
||||||
metavar="USERNAME",
|
metavar="USERNAME",
|
||||||
dest="username",
|
dest="tl_username",
|
||||||
help="Specify a user to operate on")
|
help="Specify a user to operate on")
|
||||||
parser.set_defaults(func=lambda args: repl(args) if args.lexicon else parser.print_help())
|
parser.set_defaults(func=lambda args: repl(args) if args.lexicon else parser.print_help())
|
||||||
subp = parser.add_subparsers(
|
subp = parser.add_subparsers(
|
||||||
|
|
|
@ -29,26 +29,36 @@ def no_argument(command):
|
||||||
command(cmd_args)
|
command(cmd_args)
|
||||||
return augmented_command
|
return augmented_command
|
||||||
|
|
||||||
# This wrapper is another verification step
|
# Wrapper for commands requiring lexicon or username options
|
||||||
|
|
||||||
def requires(argument, verify=lambda a: a is not None):
|
def requires(arg, metavar, dest, fallback, help):
|
||||||
"""Errors out if the given argument is not present"""
|
"""Subparser fallback for -u and -n options"""
|
||||||
def req_checker(command):
|
def req_checker(command):
|
||||||
second_layer = command.__dict__.get('wrapper', False)
|
|
||||||
@wraps(command)
|
@wraps(command)
|
||||||
def augmented_command(cmd_args):
|
def augmented_command(cmd_args):
|
||||||
|
if type(cmd_args) is ArgumentParser:
|
||||||
|
cmd_args.add_argument(arg, metavar=metavar, dest=dest, help=help)
|
||||||
|
if command.__dict__.get('wrapper', False):
|
||||||
|
command(cmd_args)
|
||||||
if type(cmd_args) is Namespace:
|
if type(cmd_args) is Namespace:
|
||||||
if not hasattr(cmd_args, argument) or not verify(getattr(cmd_args, argument)):
|
base_val = hasattr(cmd_args, fallback) and getattr(cmd_args, fallback)
|
||||||
|
subp_val = hasattr(cmd_args, dest) and getattr(cmd_args, dest)
|
||||||
|
val = subp_val or base_val or None
|
||||||
|
if not val:
|
||||||
import config
|
import config
|
||||||
config.logger.error(
|
config.logger.error("This command requires {}".format(arg))
|
||||||
"This command requires specifying {}".format(argument))
|
|
||||||
return -1
|
return -1
|
||||||
if type(cmd_args) is not ArgumentParser or second_layer:
|
setattr(cmd_args, dest, val)
|
||||||
command(cmd_args)
|
command(cmd_args)
|
||||||
augmented_command.__dict__['wrapper'] = True
|
augmented_command.__dict__['wrapper'] = True
|
||||||
return augmented_command
|
return augmented_command
|
||||||
return req_checker
|
return req_checker
|
||||||
|
|
||||||
|
requires_lexicon = requires("-n", "LEXICON", "lexicon", "tl_lexicon",
|
||||||
|
"Specify a lexicon to operate on")
|
||||||
|
requires_username = requires("-u", "USERNAME", "username", "tl_username",
|
||||||
|
"Specify a user to operate on")
|
||||||
|
|
||||||
# Helpers for common command tasks
|
# Helpers for common command tasks
|
||||||
|
|
||||||
CONFIG_GET_ROOT_VALUE = object()
|
CONFIG_GET_ROOT_VALUE = object()
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
from cli.helpers import (
|
from cli.helpers import (
|
||||||
add_argument, no_argument, requires,
|
add_argument, no_argument, requires_lexicon, requires_username,
|
||||||
config_get, config_set, CONFIG_GET_ROOT_VALUE)
|
config_get, config_set, CONFIG_GET_ROOT_VALUE)
|
||||||
|
|
||||||
#
|
#
|
||||||
# CRUD commands
|
# CRUD commands
|
||||||
#
|
#
|
||||||
|
|
||||||
@add_argument("--name", required=True, help="Name of the lexicon")
|
@requires_lexicon
|
||||||
@add_argument("--editor", required=True, help="Name of the user who will be editor")
|
@add_argument("--editor", "-e", required=True, help="Name of the user who will be editor")
|
||||||
def command_create(args):
|
def command_create(args):
|
||||||
"""
|
"""
|
||||||
Create a lexicon
|
Create a lexicon
|
||||||
|
@ -23,8 +23,7 @@ def command_create(args):
|
||||||
u = user.user_from_uid(uid)
|
u = user.user_from_uid(uid)
|
||||||
create_lexicon(args.name, u)
|
create_lexicon(args.name, u)
|
||||||
|
|
||||||
@no_argument
|
@requires_lexicon
|
||||||
@requires("lexicon")
|
|
||||||
def command_delete(args):
|
def command_delete(args):
|
||||||
"""
|
"""
|
||||||
Delete a lexicon and all its data
|
Delete a lexicon and all its data
|
||||||
|
@ -38,8 +37,7 @@ def command_list(args):
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError() # TODO
|
raise NotImplementedError() # TODO
|
||||||
|
|
||||||
@no_argument
|
@requires_lexicon
|
||||||
@requires("lexicon")
|
|
||||||
def command_config(args):
|
def command_config(args):
|
||||||
"""
|
"""
|
||||||
Interact with a lexicon's config
|
Interact with a lexicon's config
|
||||||
|
@ -50,16 +48,16 @@ def command_config(args):
|
||||||
# Player/character commands
|
# Player/character commands
|
||||||
#
|
#
|
||||||
|
|
||||||
@no_argument
|
@requires_lexicon
|
||||||
@requires("lexicon")
|
@requires_username
|
||||||
def command_player_add(args):
|
def command_player_add(args):
|
||||||
"""
|
"""
|
||||||
Add a player to a lexicon
|
Add a player to a lexicon
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError() # TODO
|
raise NotImplementedError() # TODO
|
||||||
|
|
||||||
@no_argument
|
@requires_lexicon
|
||||||
@requires("lexicon")
|
@requires_username
|
||||||
def command_player_remove(args):
|
def command_player_remove(args):
|
||||||
"""
|
"""
|
||||||
Remove a player from a lexicon
|
Remove a player from a lexicon
|
||||||
|
@ -69,24 +67,22 @@ def command_player_remove(args):
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError() # TODO
|
raise NotImplementedError() # TODO
|
||||||
|
|
||||||
@no_argument
|
@requires_lexicon
|
||||||
@requires("lexicon")
|
@requires_username
|
||||||
def command_player_list(args):
|
def command_player_list(args):
|
||||||
"""
|
"""
|
||||||
List all players in a lexicon
|
List all players in a lexicon
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError() # TODO
|
raise NotImplementedError() # TODO
|
||||||
|
|
||||||
@no_argument
|
@requires_lexicon
|
||||||
@requires("lexicon")
|
|
||||||
def command_char_create(args):
|
def command_char_create(args):
|
||||||
"""
|
"""
|
||||||
Create a character for a lexicon
|
Create a character for a lexicon
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError() # TODO
|
raise NotImplementedError() # TODO
|
||||||
|
|
||||||
@no_argument
|
@requires_lexicon
|
||||||
@requires("lexicon")
|
|
||||||
def command_char_delete(args):
|
def command_char_delete(args):
|
||||||
"""
|
"""
|
||||||
Delete a character from a lexicon
|
Delete a character from a lexicon
|
||||||
|
@ -96,8 +92,7 @@ def command_char_delete(args):
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError() # TODO
|
raise NotImplementedError() # TODO
|
||||||
|
|
||||||
@no_argument
|
@requires_lexicon
|
||||||
@requires("lexicon")
|
|
||||||
def command_char_list(args):
|
def command_char_list(args):
|
||||||
"""
|
"""
|
||||||
List all characters in a lexicon
|
List all characters in a lexicon
|
||||||
|
@ -108,8 +103,7 @@ def command_char_list(args):
|
||||||
# Procedural commands
|
# Procedural commands
|
||||||
#
|
#
|
||||||
|
|
||||||
@no_argument
|
@requires_lexicon
|
||||||
@requires("lexicon")
|
|
||||||
def command_publish_turn(args):
|
def command_publish_turn(args):
|
||||||
"""
|
"""
|
||||||
Publishes the current turn of a lexicon
|
Publishes the current turn of a lexicon
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
from cli.helpers import add_argument, no_argument, requires, config_get, config_set, CONFIG_GET_ROOT_VALUE
|
from cli.helpers import (
|
||||||
|
add_argument, no_argument, requires_username,
|
||||||
|
config_get, config_set, CONFIG_GET_ROOT_VALUE)
|
||||||
|
|
||||||
@add_argument("--username", help="User's login handle")
|
@add_argument("--username", help="User's login handle")
|
||||||
@add_argument("--displayname", help="User's publicly displayed name")
|
@add_argument("--displayname", help="User's publicly displayed name")
|
||||||
|
@ -71,11 +73,11 @@ def command_list(args):
|
||||||
for user in users:
|
for user in users:
|
||||||
print("{0} {1} ({2})".format(user['uid'], user['displayname'], user['username']))
|
print("{0} {1} ({2})".format(user['uid'], user['displayname'], user['username']))
|
||||||
|
|
||||||
|
@requires_username
|
||||||
@add_argument("--get", metavar="PATHSPEC", dest="get",
|
@add_argument("--get", metavar="PATHSPEC", dest="get",
|
||||||
nargs="?", const=CONFIG_GET_ROOT_VALUE, help="Get the value of a config key")
|
nargs="?", const=CONFIG_GET_ROOT_VALUE, help="Get the value of a config key")
|
||||||
@add_argument("--set", metavar=("PATHSPEC", "VALUE"), dest="set",
|
@add_argument("--set", metavar=("PATHSPEC", "VALUE"), dest="set",
|
||||||
nargs=2, help="Set the value of a config key")
|
nargs=2, help="Set the value of a config key")
|
||||||
@requires("username")
|
|
||||||
def command_config(args):
|
def command_config(args):
|
||||||
"""
|
"""
|
||||||
Interact with a user's config
|
Interact with a user's config
|
||||||
|
|
Loading…
Reference in New Issue