cctool

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

commit
a195789c02a10a5aab907f1b8f9cc53c860d7a91
parent
002469eed1b8226f375a7087a1621422eafd2c9c
Author
Tobias Bengfort <tobias.bengfort@gmx.net>
Date
2014-04-20 22:27
better datetime conversion

Diffstat

M cctool.py 36 +++++++++++++++++++++++++++++++-----

1 files changed, 31 insertions, 5 deletions


diff --git a/cctool.py b/cctool.py

@@ -38,6 +38,7 @@ import logging as log
   38    38 from StringIO import StringIO
   39    39 from ConfigParser import RawConfigParser as ConfigParser
   40    40 import json
   -1    41 from datetime import datetime
   41    42 
   42    43 try:
   43    44 	import ldif
@@ -116,9 +117,11 @@ class BSDCal(Format):
  116   117 	def dump(cls, data, fh):
  117   118 		for item in data:
  118   119 			if u'dtstart' in item and u'summary' in item:
  119    -1 				fh.write('%s\t%s\n' % (item.first('dtstart'), item.join('summary')))
   -1   120 				dt = item.first('dtstart').strftime('%m/%d')
   -1   121 				fh.write('%s\t%s\n' % (dt, item.join('summary')))
  120   122 			if u'bday' in item and u'name' in item:
  121    -1 				fh.write('%s\t%s\n' % (item.first('bday'), item.join('name')))
   -1   123 				dt = item.first('bday').strftime('%m/%d*')
   -1   124 				fh.write('%s\t%s\n' % (dt, item.join('name')))
  122   125 
  123   126 
  124   127 class ICal(Format):
@@ -159,7 +162,15 @@ class ABook(Format):
  159   162 		cp.readfp(fh)
  160   163 		for section in cp.sections():
  161   164 			if section != u'format':
  162    -1 				yield MultiDict({k: v.split(',') for (k, v) in cp.items(section)})
   -1   165 				d = MultiDict()
   -1   166 				for key, value in cp.items(section):
   -1   167 					if key == 'bday':
   -1   168 						if value[0] == '-':
   -1   169 							value = '1900' + value[1:]
   -1   170 						d[key] = [datetime.strptime(value, '%Y-%m-%d')]
   -1   171 					else:
   -1   172 						d[key] = value.split(u',')
   -1   173 				yield d
  163   174 
  164   175 	@classmethod
  165   176 	def dump(cls, data, fh):
@@ -169,7 +180,14 @@ class ABook(Format):
  169   180 			section = unicode(i)
  170   181 			cp.add_section(section)
  171   182 			for key in item:
  172    -1 				if key in cls.fields:
   -1   183 				if key == 'bday':
   -1   184 					dt = item.first(key)
   -1   185 					if dt.year == 1900:
   -1   186 						value = dt.strftime('--%m-%d')
   -1   187 					else:
   -1   188 						value = dt.strftime('%Y-%m-%d')
   -1   189 					cp.set(section, key, value)
   -1   190 				elif key in cls.fields:
  173   191 					cp.set(section, key, item.join(key))
  174   192 				elif key in ['mail']:
  175   193 					cp.set(section, 'email', item.join(key))
@@ -236,6 +254,14 @@ class VCard(Format):
  236   254 			vcard.serialize(fh)
  237   255 
  238   256 
   -1   257 class DateTimeJSONEncoder(json.JSONEncoder):
   -1   258 	def default(self, obj):
   -1   259 		if isinstance(obj, datetime):
   -1   260 			return obj.isoformat()
   -1   261 		else:
   -1   262 			return super(DateTimeJSONEncoder, self).default(obj)
   -1   263 
   -1   264 
  239   265 class JSON(Format):
  240   266 	@classmethod
  241   267 	def load(cls, fh):
@@ -243,7 +269,7 @@ class JSON(Format):
  243   269 
  244   270 	@classmethod
  245   271 	def dump(cls, data, fh):
  246    -1 		json.dump(list(data), fh, indent=4)
   -1   272 		json.dump(list(data), fh, indent=4, cls=DateTimeJSONEncoder)
  247   273 
  248   274 
  249   275 if __name__ == '__main__':