- 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__':