Esempio n. 1
0
 def _conv_alarm(self, v, dd):
     try:
         alarm_date = bptime.BPTime(v['value'].split(';')[0])
         start_date = bptime.BPTime(dd['start'])
         if alarm_date.get() < start_date.get():
             dd['alarm_value'] = (start_date - alarm_date).seconds / 60
             return True
         return False
     except:
         return False
Esempio n. 2
0
 def _conv_start_date(self, v, dd):
     _dt = bptime.BPTime(v['value']).get(default=(0, 0, 0, None, None))
     if _dt[-1] is None:
         # all day event
         dd['allday'] = True
         _dt = _dt[:3] + (0, 0)
     return _dt
Esempio n. 3
0
    def _convert(self, vcal, d):
        global module_debug
        for i in vcal:
            try:
                dd = {'start': None, 'end': None}
                for j in self._calendar_keys:
                    if i.has_key(j[0]):
                        k = i[j[0]]
                        if j[2] is not None:
                            dd[j[1]] = j[2](self, k, dd)
                        else:
                            dd[j[1]] = k['value']
                if dd['start'] is None and dd['end'] is None:
                    # no start or end, drop this one
                    continue
                if dd['start'] is None:
                    dd['start'] = dd['end']
                elif dd['end'] is None:
                    dd['end'] = dd['start']
                if dd.get('allday', False) and dd['end'] > dd['start']:
                    # All day event, adjust the end time as necessary
                    dd['end']=(bptime.BPTime(dd['end'])-\
                               bptime.timedelta(days=1)).get()[:3]+(0, 0)

                if module_debug: print dd
                d.append(dd)
            except:
                if module_debug: raise
Esempio n. 4
0
 def _process_monthly_rule(self, v, dd):
     global module_debug
     try:
         # acceptable format: MD1 <day number> <end date | #duration>
         # or MP1 <[1-4]+ | 1-> <SU-SA> <end date | #duration>
         s = v['value'].split(' ')
         if s[0][:2] != 'MD' and s[0][:2] != 'MP':
             return False
         dd['repeat_interval2'] = int(s[0][2:])
         if s[0][:2] == 'MP':
             # every nth *day of every month
             n = s[1]
             if n in ['1+', '2+', '3+', '4+', '1-']:
                 if n[1] == '-':
                     dd['repeat_interval'] = 5
                 else:
                     dd['repeat_interval'] = int(n[0])
             else:
                 return False
             dd['repeat_dow'] = self._rrule_dow.get(s[2], 0)
         else:
             dd['repeat_interval'] = dd['repeat_dow'] = 0
         dd['repeat_type'] = 'monthly'
         n = s[-1]
         if len(n) > 7 and n[:8].isdigit():
             # end date/time specified
             dd['repeat_end'] = bptime.BPTime(n).get()
         elif n[0] == '#':
             dd['repeat_num'] = int(n[1:])
         return True
     except:
         if module_debug: raise
         return False
Esempio n. 5
0
 def _write_times_single(self, keyword, v, event, tzid):
     # write the DTSTART/DTEND property for a single
     # (non-recurrent) event
     _start=bptime.BPTime(event.start)
     _end=bptime.BPTime(event.end)
     if event.allday:
         # all day event
         _params=('VALUE=DATE',)
         _res=out_line('DTSTART', _params,
                       _start.iso_str(no_time=True), None)
         _end+=bptime.timedelta(days=1)
         _res+=out_line('DTEND', _params,
                        _end.iso_str(no_time=True), None)
     else:
         _params=('TZID=%s'%tzid,)
         _res=out_line('DTSTART', _params, _start.iso_str(no_seconds=False), None)
         _res+=out_line('DTEND', _params, _end.iso_str(no_seconds=False), None)
     return _res
Esempio n. 6
0
 def _write_start(self, event, tzid):
     # write the DTSTART/DURATION property for a recurrent event
     _start=bptime.BPTime(event.start)
     _end=bptime.BPTime(event.end)
     if event.allday:
         # all day event, can only handle sameday allday event (for now)
         _params=('VALUE=DATE',)
         _res=out_line('DTSTART', _params,
                       _start.iso_str(no_time=True), None)
         _end+=bptime.timedelta(days=1)
         _res+=out_line('DTEND', _params,
                        _end.iso_str(no_time=True), None)
     else:
         # can only handle 24hr-long event (for now)
         _new_end=_start+(_end-_start).seconds
         _params=('TZID=%s'%tzid,)
         _res=out_line('DTSTART', _params, _start.iso_str(no_seconds=False), None)
         _res+=out_line('DTEND',  _params, _new_end.iso_str(no_seconds=False), None)
     return _res
Esempio n. 7
0
 def _conv_exceptions(self, v, _):
     r = []
     try:
         _val = v if isinstance(v, (list, tuple)) else [v]
         for _item in _val:
             for n in _item['value'].split(','):
                 r.append(bptime.BPTime(n).get())
         return r
     except:
         if __debug__:
             raise
         return []
Esempio n. 8
0
 def _conv_repeat(self, v, dd):
     _params = v.get('params', {})
     _value = self._build_value_dict(v)
     _rep = self._funcs.get(
         _value.get('FREQ', [None])[0], lambda *_: False)(self, _value, dd)
     if _rep:
         if _value.get('COUNT', [None])[0]:
             dd['repeat_num'] = int(_value['COUNT'][0])
         elif _value.get('UNTIL', [None])[0]:
             dd['repeat_end'] = bptime.BPTime(_value['UNTIL'][0]).get()
         dd['repeat_wkst'] = _value.get('WKST', ['MO'])[0]
     return _rep
Esempio n. 9
0
 def _process_daily_rule(self, v, dd):
     # the rule is Dx #y or Dx YYYYMMDDTHHMM
     s = v['value'].split(' ')
     dd['repeat_interval'] = int(s[0][1:])
     if len(s) == 1:
         # no duration/end date
         return True
     if s[1][0] == '#':
         # duration
         dd['repeat_num'] = int(s[1][1:])
     else:
         # end date
         dd['repeat_end'] = bptime.BPTime(s[1]).get()
     dd['repeat_type'] = 'daily'
     return True
Esempio n. 10
0
 def _process_yearly_rule(self, v, dd):
     global module_debug
     try:
         # acceptable format YM1 <Month number> <end date | #duration>
         s = v['value'].split(' ')
         if s[0] != 'YM1':
             return False
         n = s[-1]
         if len(n) > 7 and n[:8].isdigit():
             # end date/time specified
             dd['repeat_end'] = bptime.BPTime(n).get()
         elif n[0] == '#':
             dd['repeat_num'] = int(n[1:])
         dd['repeat_type'] = 'yearly'
         return True
     except:
         if module_debug: raise
         return False
Esempio n. 11
0
 def _process_weekly_rule(self, v, dd):
     # the rule is Wx | Wx <#y|YYYYMMDDTHHMMSS> | Wx MO TU
     s = v['value'].split(' ')
     dd['repeat_interval'] = int(s[0][1:])
     dow = 0
     for i in range(1, len(s)):
         n = s[i]
         if n[0].isdigit():
             dd['repeat_end'] = bptime.BPTime(n).get()
         elif n[0] == '#':
             dd['repeat_num'] = int(n[1:])
         else:
             # day-of-week
             dow = dow | self._rrule_dow.get(n, 0)
     if dow:
         dd['repeat_dow'] = dow
     dd['repeat_type'] = 'weekly'
     return True
Esempio n. 12
0
 def _export_mbox(self, fp, sms):
     # export SMS data to mbox format
     _email_generator=Generator(fp, True)
     _lfs='\n\n'
     _keys=sms.keys()
     _keys.sort()
     for k in _keys:
         e=sms[k]
         try:
             _msg=MIMEText(e.text)
             _msg['From']=e._from or 'self'
             _msg['To']=e._to or 'self'
             _msg['Subject']=e.subject
             if e.datetime:
                 _msg['Date']=formatdate(bptime.BPTime(e.datetime).mktime(), True)
             _email_generator.flatten(_msg, True)
             _email_generator.write(_lfs)
         except:
             if __debug__:
                 raise
Esempio n. 13
0
 def _conv_date(self, v, dd):
     if v.get('params', {}).get('VALUE', None) == 'DATE':
         # allday event
         dd['allday'] = True
     return bptime.BPTime(v['value']).get()
Esempio n. 14
0
 def _datetime_str(self, v):
     if v:
         _dt = bptime.BPTime(v)
         return _dt.date_str() + ' ' + _dt.time_str()
     return ''
Esempio n. 15
0
 def _conv_date(self, v, _):
     return bptime.BPTime(v['value']).get()
Esempio n. 16
0
 def _conv_end_date(self, v, _):
     return bptime.BPTime(v['value']).get(default=(0, 0, 0, 23, 59))
Esempio n. 17
0
 def set_date_isostr(self, iso_string):
     n = bptime.BPTime(iso_string)
     self._data['date'] = n.date.strftime('%b %d, %Y') + n.time.strftime(
         ' %H:%M')
Esempio n. 18
0
 def _decode_date(self, dt_str):
     _date = bptime.BPTime(dt_str).mktime()
     return _date, time.strftime("%x %X", time.gmtime(_date))