[CalendarServer-changes] [8547] CalendarServer/trunk/calendarserver/tools/shell

source_changes at macosforge.org source_changes at macosforge.org
Mon Jan 16 16:06:30 PST 2012


Revision: 8547
          http://trac.macosforge.org/projects/calendarserver/changeset/8547
Author:   wsanchez at apple.com
Date:     2012-01-16 16:06:29 -0800 (Mon, 16 Jan 2012)
Log Message:
-----------
Refactor Commands to have a base class.

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/tools/shell/cmd.py
    CalendarServer/trunk/calendarserver/tools/shell/terminal.py

Added Paths:
-----------
    CalendarServer/trunk/calendarserver/tools/shell/test/
    CalendarServer/trunk/calendarserver/tools/shell/test/__init__.py

Modified: CalendarServer/trunk/calendarserver/tools/shell/cmd.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell/cmd.py	2012-01-16 23:44:41 UTC (rev 8546)
+++ CalendarServer/trunk/calendarserver/tools/shell/cmd.py	2012-01-17 00:06:29 UTC (rev 8547)
@@ -29,13 +29,13 @@
 from calendarserver.tools.shell.vfs import Folder
 
 
-class UsageError (Exception):
+class UsageError(Exception):
     """
     Usage error.
     """
 
 
-class UnknownArguments (UsageError):
+class UnknownArguments(UsageError):
     """
     Unknown arguments.
     """
@@ -44,23 +44,22 @@
         self.arguments = arguments
 
 
-class Commands (object):
-    """
-    Data store commands.
-    """
+class CommandsBase(object):
+    def __init__(self, wd):
+        self.wd = wd
 
     #
     # Utilities
     #
 
-    def _getTarget(self, tokens):
+    def getTarget(self, tokens):
         if tokens:
             return self.wd.locate(tokens.pop(0).split("/"))
         else:
             return succeed(self.wd)
 
     @inlineCallbacks
-    def _getTargets(self, tokens):
+    def getTargets(self, tokens):
         if tokens:
             result = []
             for token in tokens:
@@ -77,21 +76,21 @@
                     yield (attr[4:], m)
 
     @staticmethod
-    def _complete(word, items):
+    def complete(word, items):
         for item in items:
             if item.startswith(word):
                 yield item[len(word):]
 
-    def _complete_commands(self, word):
-        return self._complete(word, (name for name, method in self.commands()))
+    def complete_commands(self, word):
+        return self.complete(word, (name for name, method in self.commands()))
 
     @inlineCallbacks
-    def _complete_files(self, tokens, filter=None):
+    def complete_files(self, tokens, filter=None):
         if filter is None:
             filter = lambda items: True
 
         files = (
-            self._listEntryToString(item)
+            self.listEntryToString(item)
             for item in (yield self.wd.list())
             if filter(item)
         )
@@ -99,12 +98,12 @@
         if len(tokens) == 0:
             returnValue(files)
         elif len(tokens) == 1:
-            returnValue(self._complete(tokens[0], files))
+            returnValue(self.complete(tokens[0], files))
         else:
             returnValue(())
 
     @staticmethod
-    def _listEntryToString(entry):
+    def listEntryToString(entry):
         klass = entry[0]
         name  = entry[1]
 
@@ -113,10 +112,12 @@
         else:
             return name
 
-    #
-    # Commands
-    #
 
+class Commands(CommandsBase):
+    """
+    Data store commands.
+    """
+
     def cmd_help(self, tokens):
         """
         Show help.
@@ -184,7 +185,7 @@
         if len(tokens) == 0:
             return (name for name, method in self.commands())
         elif len(tokens) == 1:
-            return self._complete_commands(tokens[0])
+            return self.complete_commands(tokens[0])
         else:
             return ()
 
@@ -226,7 +227,7 @@
         if len(tokens) == 0:
             return self.emulation_modes
         elif len(tokens) == 1:
-            return self._complete(tokens[0], self.emulation_modes)
+            return self.complete(tokens[0], self.emulation_modes)
         else:
             return ()
 
@@ -266,7 +267,7 @@
 
     @inlineCallbacks
     def complete_cd(self, tokens):
-        returnValue((yield self._complete_files(
+        returnValue((yield self.complete_files(
             tokens,
             filter = lambda item: issubclass(item[0], Folder)
         )))
@@ -278,7 +279,7 @@
 
         usage: ls [folder]
         """
-        targets = (yield self._getTargets(tokens))
+        targets = (yield self.getTargets(tokens))
         multiple = len(targets) > 0
 
         for target in targets:
@@ -289,7 +290,7 @@
             #
             table = Table()
             for row in rows:
-                table.addRow((self._listEntryToString(row),) + tuple(row[2:]))
+                table.addRow((self.listEntryToString(row),) + tuple(row[2:]))
 
             if multiple:
                 self.terminal.write("%s:\n" % (target,))
@@ -297,7 +298,7 @@
                 table.printTable(self.terminal)
             self.terminal.nextLine()
 
-    complete_ls = _complete_files
+    complete_ls = CommandsBase.complete_files
 
     @inlineCallbacks
     def cmd_info(self, tokens):
@@ -306,7 +307,7 @@
 
         usage: info [folder]
         """
-        target = (yield self._getTarget(tokens))
+        target = (yield self.getTarget(tokens))
 
         if tokens:
             raise UnknownArguments(tokens)
@@ -315,7 +316,7 @@
         self.terminal.write(description)
         self.terminal.nextLine()
 
-    complete_ls = _complete_files
+    complete_info = CommandsBase.complete_files
 
     @inlineCallbacks
     def cmd_cat(self, tokens):
@@ -324,12 +325,12 @@
 
         usage: cat target [target ...]
         """
-        for target in (yield self._getTargets(tokens)):
+        for target in (yield self.getTargets(tokens)):
             if hasattr(target, "text"):
                 text = (yield target.text())
                 self.terminal.write(text)
 
-    complete_ls = _complete_files
+    complete_cat = CommandsBase.complete_files
 
     def cmd_exit(self, tokens):
         """

Modified: CalendarServer/trunk/calendarserver/tools/shell/terminal.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell/terminal.py	2012-01-16 23:44:41 UTC (rev 8546)
+++ CalendarServer/trunk/calendarserver/tools/shell/terminal.py	2012-01-17 00:06:29 UTC (rev 8547)
@@ -136,8 +136,8 @@
 
     def __init__(self, service):
         ReceiveLineProtocol.__init__(self)
+        Commands.__init__(self, RootFolder(service))
         self.service = service
-        self.wd = RootFolder(service)
         self.inputLines = []
         self.activeCommand = None
         self.emulate = "emacs"

Copied: CalendarServer/trunk/calendarserver/tools/shell/test/__init__.py (from rev 8545, CalendarServer/trunk/calendarserver/tools/shell/__init__.py)
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell/test/__init__.py	                        (rev 0)
+++ CalendarServer/trunk/calendarserver/tools/shell/test/__init__.py	2012-01-17 00:06:29 UTC (rev 8547)
@@ -0,0 +1,19 @@
+##
+# Copyright (c) 2012 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+
+"""
+Data store interactive shell.
+"""
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120116/917c9ffa/attachment-0001.html>


More information about the calendarserver-changes mailing list