def printEventDetails(event): nowPyDT = DateTime.getNowUTC() nowDT = datetime.datetime.utcnow() oneYearInFuture = DateTime.getNowUTC() oneYearInFuture.offsetDay(365) component = yield event.component() mainSummary = component.mainComponent().propertyValue("SUMMARY", u"<no title>") whenTrashed = event.whenTrashed() ago = nowDT - whenTrashed print(" Trashed {}:".format(agoString(ago))) if component.isRecurring(): print( " \"{}\" (repeating) Recovery ID = {}".format( mainSummary, event._resourceID ) ) print(" ...upcoming instances:") instances = component.cacheExpandedTimeRanges(oneYearInFuture) instances = sorted(instances.instances.values(), key=lambda x: x.start) limit = 3 count = 0 for instance in instances: if instance.start >= nowPyDT: summary = instance.component.propertyValue("SUMMARY", u"<no title>") location = locationString(instance.component) tzid = instance.component.getProperty("DTSTART").parameterValue("TZID", None) dtstart = instance.start if tzid is not None: timezone = Timezone(tzid=tzid) dtstart.adjustTimezone(timezone) print(" \"{}\" {} {}".format(summary, startString(dtstart), location)) count += 1 limit -= 1 if limit == 0: break if not count: print(" (none)") else: print( " \"{}\" (non-repeating) Recovery ID = {}".format( mainSummary, event._resourceID ) ) dtstart = component.mainComponent().propertyValue("DTSTART") location = locationString(component.mainComponent()) print(" {} {}".format(startString(dtstart), location))
def doIt(txn): home = yield txn.calendarHomeWithUID(principalUID) if home is None: print("No home for principal") returnValue(None) trash = yield home.getTrash() if trash is None: print("No trash available") returnValue(None) trashedCollections = yield home.children(onlyInTrash=True) if len(trashedCollections) == 0: print("No trashed collections for:", prettyRecord(record)) returnValue(None) print("Trashed collections for:", prettyRecord(record)) nowDT = datetime.datetime.utcnow() for collection in trashedCollections: displayName = displayNameForCollection(collection) whenTrashed = collection.whenTrashed() ago = nowDT - whenTrashed print() print(" Trashed {}:".format(agoString(ago))) print( " \"{}\" (collection) Recovery ID = {}".format( displayName.encode("utf-8"), collection._resourceID ) ) startTime = whenTrashed - datetime.timedelta(minutes=5) children = yield trash.trashForCollection( collection._resourceID, start=startTime ) print(" ...containing events:") for child in children: component = yield child.component() summary = component.mainComponent().propertyValue("SUMMARY", "<no title>") print(" \"{}\"".format(summary))
def doIt(txn): home = yield txn.calendarHomeWithUID(principalUID) if home is None: print("No home for principal") returnValue(None) trash = yield home.getTrash() if trash is None: print("No trash available") returnValue(None) trashedCollections = yield home.children(onlyInTrash=True) if len(trashedCollections) == 0: print("No trashed collections for:", prettyRecord(record)) returnValue(None) print("Trashed collections for:", prettyRecord(record)) nowDT = datetime.datetime.utcnow() for collection in trashedCollections: displayName = displayNameForCollection(collection) whenTrashed = collection.whenTrashed() ago = nowDT - whenTrashed print() print(" Trashed {}:".format(agoString(ago))) print( " \"{}\" (collection) Recovery ID = {}".format( displayName.encode("utf-8"), collection._resourceID ) ) startTime = whenTrashed - datetime.timedelta(minutes=5) children = yield trash.trashForCollection( collection._resourceID, start=startTime ) print(" ...containing events:") for child in children: component = yield child.component() summary = component.mainComponent().propertyValue("SUMMARY", "<no title>") print(" \"{}\"".format(summary.encode("utf-8")))