Changeset View
Changeset View
Standalone View
Standalone View
pykolab/xml/recurrence_rule.py
Show First 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | frequency_labels = { | ||||
"WEEKLY": N_("Every %d week(s)"), | "WEEKLY": N_("Every %d week(s)"), | ||||
"DAILY": N_("Every %d day(s)"), | "DAILY": N_("Every %d day(s)"), | ||||
"HOURLY": N_("Every %d hours"), | "HOURLY": N_("Every %d hours"), | ||||
"MINUTELY": N_("Every %d minutes"), | "MINUTELY": N_("Every %d minutes"), | ||||
"SECONDLY": N_("Every %d seconds") | "SECONDLY": N_("Every %d seconds") | ||||
} | } | ||||
def frequency_label(freq): | def frequency_label(freq): | ||||
return _(frequency_labels[freq]) if frequency_labels.has_key(freq) else _(freq) | return _(frequency_labels[freq]) if freq in frequency_labels else _(freq) | ||||
class RecurrenceRule(kolabformat.RecurrenceRule): | class RecurrenceRule(kolabformat.RecurrenceRule): | ||||
frequency_map = { | frequency_map = { | ||||
None: kolabformat.RecurrenceRule.FreqNone, | None: kolabformat.RecurrenceRule.FreqNone, | ||||
"YEARLY": kolabformat.RecurrenceRule.Yearly, | "YEARLY": kolabformat.RecurrenceRule.Yearly, | ||||
"MONTHLY": kolabformat.RecurrenceRule.Monthly, | "MONTHLY": kolabformat.RecurrenceRule.Monthly, | ||||
"WEEKLY": kolabformat.RecurrenceRule.Weekly, | "WEEKLY": kolabformat.RecurrenceRule.Weekly, | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | def from_ical(self, vrecur): | ||||
'INTERVAL': 'set_interval', | 'INTERVAL': 'set_interval', | ||||
'COUNT': 'set_count', | 'COUNT': 'set_count', | ||||
'UNTIL': 'set_until', | 'UNTIL': 'set_until', | ||||
'WKST': 'set_weekstart', | 'WKST': 'set_weekstart', | ||||
'BYDAY': 'set_byday', | 'BYDAY': 'set_byday', | ||||
} | } | ||||
for prop,setter in vectorimap.items(): | for prop,setter in vectorimap.items(): | ||||
if vrecur.has_key(prop): | if prop in vrecur: | ||||
getattr(self, setter)([int(v) for v in vrecur[prop]]) | getattr(self, setter)([int(v) for v in vrecur[prop]]) | ||||
for prop,setter in settermap.items(): | for prop,setter in settermap.items(): | ||||
if vrecur.has_key(prop): | if prop in vrecur: | ||||
getattr(self, setter)(vrecur[prop]) | getattr(self, setter)(vrecur[prop]) | ||||
def set_count(self, count): | def set_count(self, count): | ||||
if isinstance(count, list): | if isinstance(count, list): | ||||
count = count[0] | count = count[0] | ||||
self.setCount(int(count)) | self.setCount(int(count)) | ||||
def set_interval(self, val): | def set_interval(self, val): | ||||
Show All 15 Lines | def set_byday(self, bdays): | ||||
for wday in bdays: | for wday in bdays: | ||||
if isinstance(wday, str): | if isinstance(wday, str): | ||||
wday = icalendar.vWeekday(wday) | wday = icalendar.vWeekday(wday) | ||||
weekday = str(wday)[-2:] | weekday = str(wday)[-2:] | ||||
occurrence = int(wday.relative) | occurrence = int(wday.relative) | ||||
if str(wday)[0] == '-': | if str(wday)[0] == '-': | ||||
occurrence = occurrence * -1 | occurrence = occurrence * -1 | ||||
if self.weekday_map.has_key(weekday): | if weekday in self.weekday_map: | ||||
daypos.append(kolabformat.DayPos(occurrence, self.weekday_map[weekday])) | daypos.append(kolabformat.DayPos(occurrence, self.weekday_map[weekday])) | ||||
self.setByday(daypos) | self.setByday(daypos) | ||||
def set_weekstart(self, wkst): | def set_weekstart(self, wkst): | ||||
self._set_map_value(wkst, self.weekday_map, 'setWeekStart') | self._set_map_value(wkst, self.weekday_map, 'setWeekStart') | ||||
def get_weekstart(self, translated=False): | def get_weekstart(self, translated=False): | ||||
wkst = self.weekStart() | wkst = self.weekStart() | ||||
if translated: | if translated: | ||||
return self._translate_value(wkst, self.weekday_map) | return self._translate_value(wkst, self.weekday_map) | ||||
return wkst | return wkst | ||||
def set_until(self, until): | def set_until(self, until): | ||||
if isinstance(until, list): | if isinstance(until, list): | ||||
until = until[0] | until = until[0] | ||||
if isinstance(until, datetime.datetime) or isinstance(until, datetime.date): | if isinstance(until, datetime.datetime) or isinstance(until, datetime.date): | ||||
# move into UTC timezone according to RFC 5545 | # move into UTC timezone according to RFC 5545 | ||||
if isinstance(until, datetime.datetime): | if isinstance(until, datetime.datetime): | ||||
until = until.astimezone(pytz.utc) | until = until.astimezone(pytz.utc) | ||||
self.setEnd(xmlutils.to_cdatetime(until, True)) | self.setEnd(xmlutils.to_cdatetime(until, True)) | ||||
def _set_map_value(self, val, pmap, setter): | def _set_map_value(self, val, pmap, setter): | ||||
if isinstance(val, list): | if isinstance(val, list): | ||||
val = val[0] | val = val[0] | ||||
if val in pmap.keys(): | if val in pmap: | ||||
getattr(self, setter)(pmap[val]) | getattr(self, setter)(pmap[val]) | ||||
elif val in pmap.values(): | elif val in pmap.values(): | ||||
getattr(self, setter)(val) | getattr(self, setter)(val) | ||||
def _translate_value(self, val, map): | def _translate_value(self, val, map): | ||||
name_map = dict([(v, k) for (k, v) in map.iteritems()]) | name_map = dict([(v, k) for (k, v) in map.items()]) | ||||
return name_map[val] if name_map.has_key(val) else 'UNKNOWN' | return name_map[val] if val in name_map else 'UNKNOWN' | ||||
def to_ical(self): | def to_ical(self): | ||||
rrule = icalendar.vRecur(dict((k,v) for k,v in self.to_dict(True).items() if not (type(v) == str and v == '' or type(v) == list and len(v) == 0))) | rrule = icalendar.vRecur(dict((k,v) for k,v in self.to_dict(True).items() if not (type(v) == str and v == '' or type(v) == list and len(v) == 0))) | ||||
return rrule | return rrule | ||||
def to_dict(self, raw=False): | def to_dict(self, raw=False): | ||||
if not self.isValid() or self.frequency() == kolabformat.RecurrenceRule.FreqNone: | if not self.isValid() or self.frequency() == kolabformat.RecurrenceRule.FreqNone: | ||||
return None | return None | ||||
data = dict() | data = dict() | ||||
for p, getter in self.properties_map.iteritems(): | for p, getter in self.properties_map.items(): | ||||
val = None | val = None | ||||
args = {} | args = {} | ||||
if hasattr(self, getter): | if hasattr(self, getter): | ||||
if getter.startswith('get_'): | if getter.startswith('get_'): | ||||
args = dict(translated=True) | args = dict(translated=True) | ||||
if hasattr(self, getter): | if hasattr(self, getter): | ||||
val = getattr(self, getter)(**args) | val = getattr(self, getter)(**args) | ||||
if isinstance(val, kolabformat.cDateTime): | if isinstance(val, kolabformat.cDateTime): | ||||
Show All 14 Lines |