[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