- commit
- 87f87d988c52f0399ea98036bdc7a11df6f2c075
- parent
- b2e46e6cea3bec155c9e8d41ce53f0b1d3a68eb0
- Author
- Tobias Bengfort <tobias.bengfort@gmx.net>
- Date
- 2015-05-08 17:35
implement event frequency
Diffstat
| M | cctool.py | 25 | ++++++++++++++++++------- |
1 files changed, 18 insertions, 7 deletions
diff --git a/cctool.py b/cctool.py
@@ -33,6 +33,7 @@ import argparse 33 33 import logging as log 34 34 from collections import OrderedDict 35 35 import json -1 36 from datetime import date 36 37 from datetime import datetime 37 38 import pickle 38 39 import codecs @@ -191,11 +192,16 @@ def map_keys(mdict, _map, reverse=False, exclusive=True): 191 192 192 193 193 194 def event2person(source, reverse=False):194 -1 return map_keys(source, {-1 195 target = map_keys(source, { 195 196 'summary': 'name', 196 197 'dtstart': 'bday', 197 198 }, reverse=reverse, exclusive=False) 198 199 -1 200 if reverse and 'bday' in source: -1 201 target.append('freq', ['yearly']) -1 202 -1 203 return target -1 204 199 205 200 206 class Format(object): 201 207 """Baseclass with an API similar to the marshal, pickle and json modules. @@ -230,11 +236,10 @@ class BSDCal(Format): 230 236 for item in data: 231 237 if u'dtstart' in item and u'summary' in item: 232 238 dt = item.first('dtstart')233 -1 if dt.year == datetime.today().year:-1 239 if 'yearly' in item['freq']: -1 240 _fh.write('%s\t%s\n' % (dt.strftime('%m/%d*'), item.join('summary'))) -1 241 elif dt.year == datetime.today().year: 234 242 _fh.write('%s\t%s\n' % (dt.strftime('%m/%d'), item.join('summary')))235 -1 if u'bday' in item and u'name' in item:236 -1 dt = item.first('bday')237 -1 _fh.write('%s\t%s\n' % (dt.strftime('%m/%d*'), item.join('name')))238 243 239 244 240 245 class ICal(Format): @@ -247,6 +252,7 @@ class ICal(Format): 247 252 'dtend': 'dtend', 248 253 'dtstart': 'dtstart', 249 254 'url': 'url', -1 255 'freq': 'freq', 250 256 } 251 257 252 258 @classmethod @@ -282,6 +288,8 @@ class ICal(Format): 282 288 283 289 for event in cls._iter_events(calendar): 284 290 d = MultiDict() -1 291 if 'RRULE' in event: -1 292 d['freq'] = [s.lower() for s in event['RRULE']['FREQ']] 285 293 for key, value in event.items(): 286 294 if key.lower() in cls.fields: 287 295 try: @@ -307,8 +315,11 @@ class ICal(Format): 307 315 event = map_keys(_event, cls.fields, reverse=True) 308 316 for key in event: 309 317 if key in cls.fields:310 -1 for value in event[key]:311 -1 vevent.add(key.upper(), value)-1 318 if key == 'freq': -1 319 vevent.add('RRULE', {'FREQ': event.first(key)}) -1 320 else: -1 321 for value in event[key]: -1 322 vevent.add(key.upper(), value) 312 323 calendar.add_component(vevent) 313 324 314 325 fh.write(calendar.to_ical())