def reminder_triage(item): got_trigger = False for reminder in ReminderList(item).reminders: if reminder.trigger is not None: got_trigger = True yield (timestamp(reminder.trigger), NOW) if got_trigger: yield (0, LATER)
def event_triage(item): """Hook for triage of an event.""" if not Event.installed_on(item): return () else: start = Event(item).start if not start: return () # LATER from distant past until NOW at start time return ((0, LATER), (timestamp(start), NOW))
def occurrence_triage(item): """Hook for triage of an occurrence.""" if not isinstance(item, Occurrence): return () else: master = Recurrence(item.master) done_before = master.triaged_done_before start = master.start_for(item) if item.hashable_recurrence_id in master.triaged_recurrence_ids: return (master.triaged_recurrence_ids[item.hashable_recurrence_id],) elif not done_before or done_before < start: return () else: return ((timestamp(start), DONE),)
def to_hashable(dt): """ Take a datetime with tzinfo and return either a timestamp or a naive datetime, either of which are suitable as dictionary keys (datetimes with floating tzinfo are *not*, because their __hash__ is mutable). Pass through non-datetimes. """ if not isinstance(dt, datetime) or dt.tzinfo is None: return dt if dt.tzinfo is TimeZone.floating: return dt.replace(tzinfo=None) else: return timestamp(dt)
def occurrence_triage(item): """Hook for triage of an occurrence.""" if not isinstance(item, Occurrence): return () else: master = Recurrence(item.master) done_before = master.triaged_done_before start = master.start_for(item) if item.hashable_recurrence_id in master.triaged_recurrence_ids: return ( master.triaged_recurrence_ids[item.hashable_recurrence_id], ) elif not done_before or done_before < start: return () else: return ((timestamp(start), DONE), )
def datetimeToDecimal(dt): return decimal_int(timestamp(dt))