[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