cctool

A tool for managing contacts and calendars.
git clone https://git.ce9e.org/cctool.git

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())