aboutsummaryrefslogtreecommitdiffstats
path: root/libbe/cmdutil.py
diff options
context:
space:
mode:
authorW. Trevor King <wking@drexel.edu>2009-12-05 21:35:56 -0500
committerW. Trevor King <wking@drexel.edu>2009-12-05 21:35:56 -0500
commit0295c3f04ac457081559064ddf965dc507d04553 (patch)
treeb4cd5a1390746003a121e370906c75a6d7f67d51 /libbe/cmdutil.py
parent4d6bc107406ce936639cd1bd314d6ac3b4e3bff3 (diff)
downloadbugseverywhere-0295c3f04ac457081559064ddf965dc507d04553.tar.gz
Moved becommands.depend._allowed_values() to cmdutil.select_values()
I like this code, and I want to use it for other places, e.g. `be list`. Also renamed depend options --limit-severity and --limit-status to --severity and --status
Diffstat (limited to 'libbe/cmdutil.py')
-rw-r--r--libbe/cmdutil.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/libbe/cmdutil.py b/libbe/cmdutil.py
index dcd4ca9..b892bde 100644
--- a/libbe/cmdutil.py
+++ b/libbe/cmdutil.py
@@ -217,6 +217,59 @@ def underlined(instring):
return "%s\n%s" % (instring, "="*len(instring))
+def select_values(string, possible_values, name="unkown"):
+ """
+ This function allows the user to select values from a list of
+ possible values. The default is to select all the values:
+
+ >>> select_values(None, ['abc', 'def', 'hij'])
+ ['abc', 'def', 'hij']
+
+ The user selects values with a comma-separated limit_string.
+ Prepending a minus sign to such a list denotes blacklist mode:
+
+ >>> select_values('-abc,hij', ['abc', 'def', 'hij'])
+ ['def']
+
+ Without the leading -, the selection is in whitelist mode:
+
+ >>> select_values('abc,hij', ['abc', 'def', 'hij'])
+ ['abc', 'hij']
+
+ In either case, appropriate errors are raised if on of the
+ user-values is not in the list of possible values. The name
+ parameter lets you make the error message more clear:
+
+ >>> select_values('-xyz,hij', ['abc', 'def', 'hij'], name="foobar")
+ Traceback (most recent call last):
+ ...
+ UserError: Invalid foobar xyz
+ ['abc', 'def', 'hij']
+ >>> select_values('xyz,hij', ['abc', 'def', 'hij'], name="foobar")
+ Traceback (most recent call last):
+ ...
+ UserError: Invalid foobar xyz
+ ['abc', 'def', 'hij']
+ """
+ possible_values = list(possible_values) # don't alter the original
+ if string == None:
+ pass
+ elif string.startswith('-'):
+ blacklisted_values = set(string[1:].split(','))
+ for value in blacklisted_values:
+ if value not in possible_values:
+ raise UserError('Invalid %s %s\n %s'
+ % (name, value, possible_values))
+ possible_values.remove(value)
+ else:
+ whitelisted_values = string.split(',')
+ for value in whitelisted_values:
+ if value not in possible_values:
+ raise UserError('Invalid %s %s\n %s'
+ % (name, value, possible_values))
+ possible_values = whitelisted_values
+ return possible_values
+
def restrict_file_access(bugdir, path):
"""
Check that the file at path is inside bugdir.root. This is