aboutsummaryrefslogtreecommitdiffstats
path: root/becommands/set.py
diff options
context:
space:
mode:
Diffstat (limited to 'becommands/set.py')
-rw-r--r--becommands/set.py64
1 files changed, 49 insertions, 15 deletions
diff --git a/becommands/set.py b/becommands/set.py
index 287ceb4..b8a125e 100644
--- a/becommands/set.py
+++ b/becommands/set.py
@@ -15,38 +15,60 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""Change tree settings"""
-from libbe import cmdutil, bugdir
+from libbe import cmdutil, bugdir, settings_object
__desc__ = __doc__
-def execute(args):
+def _value_string(bd, setting):
+ val = bd.settings.get(setting, settings_object.EMPTY)
+ if val == settings_object.EMPTY:
+ default = getattr(bd, bd._setting_name_to_attr_name(setting))
+ if default != settings_object.EMPTY:
+ val = "None (%s)" % default
+ else:
+ val = None
+ return str(val)
+
+def execute(args, test=False):
"""
>>> import os
>>> bd = bugdir.simple_bug_dir()
>>> os.chdir(bd.root)
- >>> execute(["target"])
+ >>> execute(["target"], test=True)
None
- >>> execute(["target", "tomorrow"])
- >>> execute(["target"])
+ >>> execute(["target", "tomorrow"], test=True)
+ >>> execute(["target"], test=True)
tomorrow
- >>> execute(["target", "none"])
- >>> execute(["target"])
+ >>> execute(["target", "none"], test=True)
+ >>> execute(["target"], test=True)
None
"""
- options, args = get_parser().parse_args(args)
+ parser = get_parser()
+ options, args = parser.parse_args(args)
+ complete(options, args, parser)
if len(args) > 2:
- help()
- raise cmdutil.UserError("Too many arguments.")
- bd = bugdir.BugDir(from_disk=True)
+ raise cmdutil.UsageError, "Too many arguments"
+ bd = bugdir.BugDir(from_disk=True, manipulate_encodings=not test)
if len(args) == 0:
- keys = bd.settings.keys()
+ keys = bd.settings_properties
keys.sort()
for key in keys:
- print "%16s: %s" % (key, bd.settings[key])
+ print "%16s: %s" % (key, _value_string(bd, key))
elif len(args) == 1:
- print bd.settings.get(args[0])
+ print _value_string(bd, args[0])
else:
if args[1] != "none":
- bd.settings[args[0]] = args[1]
+ if args[0] not in bd.settings_properties:
+ msg = "Invalid setting %s\n" % args[0]
+ msg += 'Allowed settings:\n '
+ msg += '\n '.join(bd.settings_properties)
+ raise cmdutil.UserError(msg)
+ old_setting = bd.settings.get(args[0])
+ try:
+ setattr(bd, args[0], args[1])
+ except bugdir.InvalidValue, e:
+ bd.settings[args[0]] = old_setting
+ bd.save()
+ raise cmdutil.UserError(e)
else:
del bd.settings[args[0]]
bd.save()
@@ -73,3 +95,15 @@ To unset a setting, set it to "none".
def help():
return get_parser().help_str() + longhelp
+
+def complete(options, args, parser):
+ for option, value in cmdutil.option_value_pairs(options, parser):
+ if value == "--complete":
+ # no argument-options at the moment, so this is future-proofing
+ raise cmdutil.GetCompletions()
+ for pos,value in enumerate(args):
+ if value == "--complete":
+ if pos == 0: # first positional argument is a setting name
+ props = bugdir.BugDir.settings_properties
+ raise cmdutil.GetCompletions(props)
+ raise cmdutil.GetCompletions() # no positional arguments for list