From b10e82b3446a4fe1a9d9eaac8a81750e588af063 Mon Sep 17 00:00:00 2001 From: Markus Unterwaditzer Date: Fri, 20 Jan 2017 23:17:19 +0100 Subject: [PATCH] Clean up split_collections The additional function args aren't pretty, but I think this is easier to grasp. --- vdirsyncer/utils/vobject.py | 48 +++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/vdirsyncer/utils/vobject.py b/vdirsyncer/utils/vobject.py index e407fa5..a3fa30b 100644 --- a/vdirsyncer/utils/vobject.py +++ b/vdirsyncer/utils/vobject.py @@ -125,36 +125,38 @@ def split_collection(text): items = {} # uid => item ungrouped_items = [] - def inner(item, main): - if item.name == u'VTIMEZONE': - inline.append(item) - elif item.name == u'VCARD': - ungrouped_items.append(item) - elif item.name in (u'VTODO', u'VEVENT', u'VJOURNAL'): - uid = item.get(u'UID', u'') - wrapper = _Component(main.name, main.props[:], []) - - if uid.strip(): - wrapper = items.setdefault(uid, wrapper) - else: - ungrouped_items.append(wrapper) - - wrapper.subcomponents.append(item) - elif item.name in (u'VCALENDAR', u'VADDRESSBOOK'): - for subitem in item.subcomponents: - inner(subitem, item) - else: - raise ValueError('Unknown component: {}' - .format(item.name)) - for main in _Component.parse(text, multiple=True): - inner(main, main) + _split_collection_impl(main, main, inline, items, ungrouped_items) for item in chain(items.values(), ungrouped_items): item.subcomponents.extend(inline) yield u'\r\n'.join(item.dump_lines()) +def _split_collection_impl(item, main, inline, items, ungrouped_items): + if item.name == u'VTIMEZONE': + inline.append(item) + elif item.name == u'VCARD': + ungrouped_items.append(item) + elif item.name in (u'VTODO', u'VEVENT', u'VJOURNAL'): + uid = item.get(u'UID', u'') + wrapper = _Component(main.name, main.props[:], []) + + if uid.strip(): + wrapper = items.setdefault(uid, wrapper) + else: + ungrouped_items.append(wrapper) + + wrapper.subcomponents.append(item) + elif item.name in (u'VCALENDAR', u'VADDRESSBOOK'): + for subitem in item.subcomponents: + _split_collection_impl(subitem, item, inline, items, + ungrouped_items) + else: + raise ValueError('Unknown component: {}' + .format(item.name)) + + _default_join_wrappers = { u'VCALENDAR': u'VCALENDAR', u'VEVENT': u'VCALENDAR',