Clean up split_collections

The additional function args aren't pretty, but I think this is easier
to grasp.
This commit is contained in:
Markus Unterwaditzer 2017-01-20 23:17:19 +01:00
parent 9c417248de
commit b10e82b344

View file

@ -125,7 +125,15 @@ def split_collection(text):
items = {} # uid => item items = {} # uid => item
ungrouped_items = [] ungrouped_items = []
def inner(item, main): for main in _Component.parse(text, multiple=True):
_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': if item.name == u'VTIMEZONE':
inline.append(item) inline.append(item)
elif item.name == u'VCARD': elif item.name == u'VCARD':
@ -142,18 +150,12 @@ def split_collection(text):
wrapper.subcomponents.append(item) wrapper.subcomponents.append(item)
elif item.name in (u'VCALENDAR', u'VADDRESSBOOK'): elif item.name in (u'VCALENDAR', u'VADDRESSBOOK'):
for subitem in item.subcomponents: for subitem in item.subcomponents:
inner(subitem, item) _split_collection_impl(subitem, item, inline, items,
ungrouped_items)
else: else:
raise ValueError('Unknown component: {}' raise ValueError('Unknown component: {}'
.format(item.name)) .format(item.name))
for main in _Component.parse(text, multiple=True):
inner(main, main)
for item in chain(items.values(), ungrouped_items):
item.subcomponents.extend(inline)
yield u'\r\n'.join(item.dump_lines())
_default_join_wrappers = { _default_join_wrappers = {
u'VCALENDAR': u'VCALENDAR', u'VCALENDAR': u'VCALENDAR',