[CalendarServer-changes] [8211] CalendarServer/trunk/calendarserver/tools/dbinspect.py

source_changes at macosforge.org source_changes at macosforge.org
Wed Oct 19 09:27:10 PDT 2011


Revision: 8211
          http://trac.macosforge.org/projects/calendarserver/changeset/8211
Author:   cdaboo at apple.com
Date:     2011-10-19 09:27:05 -0700 (Wed, 19 Oct 2011)
Log Message:
-----------
Add an events in timerange command, and tweak output for event by resource id.

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/tools/dbinspect.py

Modified: CalendarServer/trunk/calendarserver/tools/dbinspect.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/dbinspect.py	2011-10-18 20:05:14 UTC (rev 8210)
+++ CalendarServer/trunk/calendarserver/tools/dbinspect.py	2011-10-19 16:27:05 UTC (rev 8211)
@@ -24,6 +24,7 @@
 from calendarserver.tap.util import directoryFromConfig
 from calendarserver.tools import tables
 from calendarserver.tools.cmdline import utilityMain
+from pycalendar.datetime import PyCalendarDateTime
 from twext.enterprise.dal.syntax import Select, Parameter, Count, Delete
 from twisted.application.service import Service
 from twisted.internet.defer import inlineCallbacks, returnValue
@@ -31,8 +32,11 @@
 from twisted.python.reflect import namedClass
 from twisted.python.text import wordWrap
 from twisted.python.usage import Options
+from twistedcaldav import caldavxml
 from twistedcaldav.config import config
+from twistedcaldav.datafilters.peruserdata import PerUserDataFilter
 from twistedcaldav.directory import calendaruserproxy
+from twistedcaldav.query import calendarqueryfilter
 from twistedcaldav.stdconfig import DEFAULT_CONFIG_FILE
 from txdav.common.datastore.sql_tables import schema, _BIND_MODE_OWN
 import os
@@ -239,9 +243,16 @@
         except ValueError:
             print 'Resource ID must be an integer'
             returnValue(None)
-        data = yield self.getData(txn, rid)
-        if data:
+        result = yield self.getData(txn, rid)
+        if result:
+            resource, created, modified, data = result
+            table = tables.Table()
+            table.addRow(("Resource Name:", resource))
+            table.addRow(("Resource ID:", rid))
+            table.addRow(("Created", created))
+            table.addRow(("Modified", modified))
             print "\n"
+            table.printTable()
             print data
         else:
             print "Could not find resource"
@@ -251,12 +262,15 @@
         co = schema.CALENDAR_OBJECT
         rows = (yield Select(
             [
+                co.RESOURCE_NAME,
+                co.CREATED,
+                co.MODIFIED,
                 co.ICALENDAR_TEXT,
             ],
             From=co,
             Where=(co.RESOURCE_ID == Parameter("ResourceID")),
         ).on(txn, **{"ResourceID": rid}))
-        returnValue(rows[0][0] if rows else None)
+        returnValue(rows[0] if rows else None)
 
 class EventsByUID(Cmd):
     
@@ -509,6 +523,86 @@
         returnValue(tuple(rows))
 
 
+class EventsInTimerange(Cmd):
+    
+    _name = "Get Event Data within a specified time range"
+    
+    @inlineCallbacks
+    def doIt(self, txn):
+        
+        
+        uid = raw_input("Owner UID: ")
+        start = raw_input("Start Time (UTC YYYYMMDDTHHMMSSZ or YYYYMMDD): ")
+        if len(start) == 8:
+            start += "T000000Z"
+        end = raw_input("End Time (UTC YYYYMMDDTHHMMSSZ or YYYYMMDD): ")
+        if len(end) == 8:
+            end += "T000000Z"
+
+        try:
+            start = PyCalendarDateTime.parseText(start)
+        except ValueError:
+            print "Invalid start value"
+            returnValue(None)
+        try:
+            end = PyCalendarDateTime.parseText(end)
+        except ValueError:
+            print "Invalid end value"
+            returnValue(None)
+        timerange = caldavxml.TimeRange(start=start.getText(), end=end.getText())
+
+        home = yield txn.calendarHomeWithUID(uid)
+        if home is None:
+            print "Could not find calendar home"
+            returnValue(None)
+            
+        yield self.eventsForEachCalendar(home, uid, timerange)
+
+    @inlineCallbacks
+    def eventsForEachCalendar(self, home, uid, timerange):
+        
+        calendars = yield home.calendars()
+        for calendar in calendars:
+            if calendar.name() == "inbox":
+                continue
+            yield self.eventsInTimeRange(calendar, uid, timerange)
+
+    @inlineCallbacks
+    def eventsInTimeRange(self, calendar, uid, timerange):
+        
+        # Create fake filter element to match time-range
+        filter =  caldavxml.Filter(
+                      caldavxml.ComponentFilter(
+                          caldavxml.ComponentFilter(
+                              timerange,
+                              name=("VEVENT",),
+                          ),
+                          name="VCALENDAR",
+                       )
+                  )
+        filter = calendarqueryfilter.Filter(filter)
+        filter.settimezone(None)
+
+        matches = yield calendar._index.indexedSearch(filter, useruid=uid, fbtype=False)
+        if matches is None:
+            returnValue(None)
+        for name, _ignore_uid, _ignore_type in matches:
+            event = yield calendar.calendarObjectWithName(name)
+            ical_data = yield event.component()
+            ical_data = PerUserDataFilter(uid).filter(ical_data)
+            ical_data.stripKnownTimezones()
+
+            table = tables.Table()
+            table.addRow(("Calendar:", calendar.name(),))
+            table.addRow(("Resource Name:", name))
+            table.addRow(("Resource ID:", event._resourceID))
+            table.addRow(("Created", event.created()))
+            table.addRow(("Modified", event.modified()))
+            print "\n"
+            table.printTable()
+            print ical_data.getTextWithTimezones(includeTimezones=False)
+
+
 class Purge(Cmd):
     
     _name = "Purge all data from tables"
@@ -613,6 +707,7 @@
         self.registerCommand(EventsByOwner)
         self.registerCommand(EventsByOwnerCalendar)
         self.registerCommand(EventsByContent)
+        self.registerCommand(EventsInTimerange)
         self.doDBInspect()
 
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20111019/20975bf8/attachment.html>


More information about the calendarserver-changes mailing list