Transitioned set to Command-format
authorW. Trevor King <wking@drexel.edu>
Tue, 15 Dec 2009 08:05:34 +0000 (03:05 -0500)
committerW. Trevor King <wking@drexel.edu>
Tue, 15 Dec 2009 08:05:34 +0000 (03:05 -0500)
libbe/command/set.py
libbe/command/target.py

index 4d54a594ba2093b3102151b061f496c4ae52964f..cea6fb9226b52913f0baf1da7dd020c55365eeb5 100644 (file)
 # You should have received a copy of the GNU General Public License along
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-"""Change tree settings"""
+
+
 import textwrap
-from libbe import cmdutil, bugdir, vcs, settings_object
-__desc__ = __doc__
-
-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 not in [None, settings_object.EMPTY]:
-            val = "None (%s)" % default
-        else:
-            val = None
-    return str(val)
 
-def execute(args, manipulate_encodings=True, restrict_file_access=False,
-            dir="."):
-    """
-    >>> import os
-    >>> bd = bugdir.SimpleBugDir()
-    >>> os.chdir(bd.root)
-    >>> execute(["target"], manipulate_encodings=False)
+import libbe
+import libbe.bugdir
+import libbe.command
+import libbe.command.util
+from libbe.storage.util.settings_object import EMPTY
+
+
+class Set (libbe.command.Command):
+    """Change bug directory settings
+
+    >>> import sys
+    >>> import libbe.bugdir
+    >>> bd = libbe.bugdir.SimpleBugDir(memory=False)
+    >>> cmd = Set()
+    >>> cmd._storage = bd.storage
+    >>> cmd._setup_io = lambda i_enc,o_enc : None
+    >>> cmd.stdout = sys.stdout
+
+    >>> ret = cmd.run(args=['target'])
     None
-    >>> execute(["target", "tomorrow"], manipulate_encodings=False)
-    >>> execute(["target"], manipulate_encodings=False)
-    tomorrow
-    >>> execute(["target", "none"], manipulate_encodings=False)
-    >>> execute(["target"], manipulate_encodings=False)
+    >>> ret = cmd.run(args=['target', 'abcdefg'])
+    >>> ret = cmd.run(args=['target'])
+    abcdefg
+    >>> ret = cmd.run(args=['target', 'none'])
+    >>> ret = cmd.run(args=['target'])
     None
     >>> bd.cleanup()
     """
-    parser = get_parser()
-    options, args = parser.parse_args(args)
-    complete(options, args, parser)
-    if len(args) > 2:
-        raise cmdutil.UsageError, "Too many arguments"
-    bd = bugdir.BugDir(from_disk=True,
-                       manipulate_encodings=manipulate_encodings,
-                       root=dir)
-    if len(args) == 0:
-        keys = bd.settings_properties
-        keys.sort()
-        for key in keys:
-            print "%16s: %s" % (key, _value_string(bd, key))
-    elif len(args) == 1:
-        print _value_string(bd, args[0])
-    else:
-        if args[1] == "none":
-            setattr(bd, args[0], settings_object.EMPTY)
+    name = 'set'
+
+    def __init__(self, *args, **kwargs):
+        libbe.command.Command.__init__(self, *args, **kwargs)
+        self.args.extend([
+                libbe.command.Argument(
+                    name='setting', metavar='SETTING', optional=True,
+                    completion_callback=complete_bugdir_settings),
+                libbe.command.Argument(
+                    name='value', metavar='VALUE', optional=True)
+                ])
+
+    def _run(self, **params):
+        bugdir = self._get_bugdir()
+        if params['setting'] == None:
+            keys = bugdir.settings_properties
+            keys.sort()
+            for key in keys:
+                print >> self.stdout, \
+                    '%16s: %s' % (key, _value_string(bugdir, key))
+            return 0
+        if params['setting'] not in bugdir.settings_properties:
+            msg = 'Invalid setting %s\n' % params['setting']
+            msg += 'Allowed settings:\n  '
+            msg += '\n  '.join(bugdir.settings_properties)
+            raise libbe.command.UserError(msg)
+        if params['value'] == None:
+            print _value_string(bugdir, params['setting'])
         else:
-            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])
-            setattr(bd, args[0], args[1])
-
-def get_parser():
-    parser = cmdutil.CmdOptionParser("be set [NAME] [VALUE]")
-    return parser
+            if params['value'] == 'none':
+                params['value'] = EMPTY
+            old_setting = bugdir.settings.get(params['setting'])
+            attr = bugdir._setting_name_to_attr_name(params['setting'])
+            setattr(bugdir, attr, params['value'])
+        return 0
 
 def get_bugdir_settings():
     settings = []
-    for s in bugdir.BugDir.settings_properties:
+    for s in libbe.bugdir.BugDir.settings_properties:
         settings.append(s)
     settings.sort()
     documented_settings = []
     for s in settings:
-        set = getattr(bugdir.BugDir, s)
+        set = getattr(libbe.bugdir.BugDir, s)
         dstr = set.__doc__.strip()
         # per-setting comment adjustments
-        if s == "vcs_name":
+        if s == 'vcs_name':
             lines = dstr.split('\n')
-            while lines[0].startswith("This property defaults to") == False:
+            while lines[0].startswith('This property defaults to') == False:
                 lines.pop(0)
             assert len(lines) != None, \
-                "Unexpected vcs_name docstring:\n  '%s'" % dstr
+                'Unexpected vcs_name docstring:\n  "%s"' % dstr
             lines.insert(
-                0, "The name of the revision control system to use.\n")
+                0, 'The name of the revision control system to use.\n')
             dstr = '\n'.join(lines)
         doc = textwrap.wrap(dstr, width=70, initial_indent='  ',
                             subsequent_indent='  ')
-        documented_settings.append("%s\n%s" % (s, '\n'.join(doc)))
+        documented_settings.append('%s\n%s' % (s, '\n'.join(doc)))
     return documented_settings
 
 longhelp="""
@@ -116,17 +122,21 @@ Allowed settings are:
 
 %s""" % ('\n'.join(get_bugdir_settings()),)
 
-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
+
+def _value_string(bugdir, setting):
+    val = bugdir.settings.get(setting, EMPTY)
+    if val == EMPTY:
+        default = getattr(bugdir, bugdir._setting_name_to_attr_name(setting))
+        if default not in [None, EMPTY]:
+            val = 'None (%s)' % default
+        else:
+            val = None
+    return str(val)
+
+def complete_bugdir_settings(command, argument, fragment=None):
+    """
+    List possible command completions for fragment.
+
+    Neither the command nor argument arguments are used.
+    """
+    return libbe.bugdir.BugDir.settings_properties
index 39e12b2e8c59bfe1bbdeeadb3c26a51bdaab95a9..034c532b37ab56c32c46cec80fddb06128702aa7 100644 (file)
@@ -25,7 +25,6 @@ import libbe.command.util
 import libbe.command.depend
 
 
-
 class Target (libbe.command.Command):
     """Assorted bug target manipulations and queries
 
@@ -70,12 +69,10 @@ class Target (libbe.command.Command):
                 ])
         self.args.extend([
                 libbe.command.Argument(
-                    name='id', metavar='BUG-ID', default=None,
-                    optional=True,
+                    name='id', metavar='BUG-ID', optional=True,
                     completion_callback=libbe.command.util.complete_bug_id),
                 libbe.command.Argument(
-                    name='target', metavar='TARGET', default=None,
-                    optional=True,
+                    name='target', metavar='TARGET', optional=True,
                     completion_callback=complete_target),
                 ])