[CalendarServer-changes] [8334] CalendarServer/trunk/calendarserver/tools/shell.py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Nov 18 14:21:40 PST 2011
Revision: 8334
http://trac.macosforge.org/projects/calendarserver/changeset/8334
Author: wsanchez at apple.com
Date: 2011-11-18 14:21:38 -0800 (Fri, 18 Nov 2011)
Log Message:
-----------
Add EMACS key bindings (woot). Add describe() for calendar objects.
Modified Paths:
--------------
CalendarServer/trunk/calendarserver/tools/shell.py
Modified: CalendarServer/trunk/calendarserver/tools/shell.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/shell.py 2011-11-18 21:12:18 UTC (rev 8333)
+++ CalendarServer/trunk/calendarserver/tools/shell.py 2011-11-18 22:21:38 UTC (rev 8334)
@@ -124,6 +124,8 @@
self.arguments = arguments
+EMULATE_EMACS = object()
+
class ShellProtocol(ReceiveLineProtocol):
"""
Data store shell protocol.
@@ -141,22 +143,24 @@
self.wd = RootFolder(service.store)
self.inputLines = []
self.activeCommand = None
+ self.emulate = EMULATE_EMACS
def connectionMade(self):
ReceiveLineProtocol.connectionMade(self)
- self.keyHandlers['\x03'] = self.handle_INT # Control-C
- self.keyHandlers['\x04'] = self.handle_EOF # Control-D
- self.keyHandlers['\x1c'] = self.handle_QUIT # Control-\
- self.keyHandlers['\x0c'] = self.handle_FF # Control-L
+ self.keyHandlers['\x03'] = self.handle_INT # Control-C
+ self.keyHandlers['\x04'] = self.handle_EOF # Control-D
+ self.keyHandlers['\x1c'] = self.handle_QUIT # Control-\
+ self.keyHandlers['\x0c'] = self.handle_FF # Control-L
- # EMACS key bindinds
- self.keyHandlers['\x10'] = self.handle_UP # Control-P
- self.keyHandlers['\x0e'] = self.handle_DOWN # Control-N
- self.keyHandlers['\x02'] = self.handle_LEFT # Control-B
- self.keyHandlers['\x06'] = self.handle_RIGHT # Control-F
- self.keyHandlers['\x01'] = self.handle_HOME # Control-A
- self.keyHandlers['\x05'] = self.handle_END # Control-E
+ if self.emulate is EMULATE_EMACS:
+ # EMACS key bindinds
+ self.keyHandlers['\x10'] = self.handle_UP # Control-P
+ self.keyHandlers['\x0e'] = self.handle_DOWN # Control-N
+ self.keyHandlers['\x02'] = self.handle_LEFT # Control-B
+ self.keyHandlers['\x06'] = self.handle_RIGHT # Control-F
+ self.keyHandlers['\x01'] = self.handle_HOME # Control-A
+ self.keyHandlers['\x05'] = self.handle_END # Control-E
def handle_INT(self):
"""
@@ -174,7 +178,10 @@
def handle_EOF(self):
if self.lineBuffer:
- self.terminal.write('\a')
+ if self.emulate is EMULATE_EMACS:
+ self.handle_DELETE()
+ else:
+ self.terminal.write('\a')
else:
self.handle_QUIT()
@@ -312,6 +319,9 @@
if attr.startswith("cmd_"):
m = getattr(self, attr)
+ if hasattr(m, "hidden"):
+ continue
+
for line in m.__doc__.split("\n"):
line = line.strip()
if line:
@@ -427,7 +437,9 @@
# with self exposed in globals.
raise NotImplementedError()
+ cmd_python.hidden = "Not implemented"
+
class File(object):
"""
Object in virtual data hierarchy.
@@ -546,6 +558,19 @@
self.home = home
@inlineCallbacks
+ def child(self, name):
+ calendar = (yield self.home.calendarWithName(name))
+ if calendar:
+ returnValue(CalendarFolder(self.store, self.path + (name,), calendar))
+ else:
+ raise NotFoundError("Calendar home %r has no calendar %r" % (self, name))
+
+ @inlineCallbacks
+ def list(self):
+ calendars = (yield self.home.calendars())
+ returnValue(("%s/" % (c.name(),) for c in calendars))
+
+ @inlineCallbacks
def describe(self):
# created() -> int
# modified() -> int
@@ -576,20 +601,7 @@
returnValue("\n".join(result))
- @inlineCallbacks
- def child(self, name):
- calendar = (yield self.home.calendarWithName(name))
- if calendar:
- returnValue(CalendarFolder(self.store, self.path + (name,), calendar))
- else:
- raise NotFoundError("Calendar home %r has no calendar %r" % (self, name))
- @inlineCallbacks
- def list(self):
- calendars = (yield self.home.calendars())
- returnValue(("%s/" % (c.name(),) for c in calendars))
-
-
class CalendarFolder(Folder):
"""
Calendar.
@@ -655,7 +667,47 @@
component = (yield self.object.component())
returnValue(str(component))
+ @inlineCallbacks
+ def describe(self):
+ component = (yield self.object.component())
+ mainComponent = component.mainComponent()
+ componentType = mainComponent.name()
+ uid = mainComponent.propertyValue("UID")
+ summary = mainComponent.propertyValue("SUMMARY")
+
+ assert uid == self.object.uid()
+ assert componentType == (yield self.object.componentType())
+
+ result = []
+
+ result.append("Calendar object (%s) for UID: %s" % (componentType, uid))
+ result.append("Summary: %s" % (summary,))
+
+ #
+ # Organizer
+ #
+ organizer = mainComponent.getProperty("ORGANIZER")
+ organizerName = organizer.parameterValue("CN")
+ organizerEmail = organizer.parameterValue("EMAIL")
+
+ if organizer:
+ name = " (%s)" % (organizerName ,) if organizerName else ""
+ email = " <%s>" % (organizerEmail,) if organizerEmail else ""
+ result.append("Organized by: %s%s%s" % (organizer.value(), name, email))
+
+ #
+ # Attachments
+ #
+# attachments = (yield self.object.attachments())
+# log.msg("%r" % (attachments,))
+# for attachment in attachments:
+# log.msg("%r" % (attachment,))
+# # FIXME: Not getting any results here
+
+ returnValue("\n".join(result))
+
+
def main(argv=sys.argv, stderr=sys.stderr, reactor=None):
if reactor is None:
from twisted.internet import reactor
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20111118/c2d8b45c/attachment-0001.html>
More information about the calendarserver-changes
mailing list