mirror of
https://github.com/samsonjs/vdirsyncer.git
synced 2026-04-27 14:57:41 +00:00
parent
d37d85dc26
commit
e80f10aa99
1 changed files with 19 additions and 6 deletions
|
|
@ -134,7 +134,6 @@ _default_join_wrappers = {
|
||||||
u'VCARD': u'VADDRESSBOOK'
|
u'VCARD': u'VADDRESSBOOK'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def join_collection(items, wrappers=_default_join_wrappers):
|
def join_collection(items, wrappers=_default_join_wrappers):
|
||||||
'''
|
'''
|
||||||
:param wrappers: {
|
:param wrappers: {
|
||||||
|
|
@ -145,22 +144,32 @@ def join_collection(items, wrappers=_default_join_wrappers):
|
||||||
items1, items2 = tee((_Component.parse(x)
|
items1, items2 = tee((_Component.parse(x)
|
||||||
for x in items), 2)
|
for x in items), 2)
|
||||||
item_type, wrapper_type = _get_item_type(items1, wrappers)
|
item_type, wrapper_type = _get_item_type(items1, wrappers)
|
||||||
|
wrapper_props = []
|
||||||
|
|
||||||
def _get_item_components(x):
|
def _get_item_components(x):
|
||||||
return x.name == wrapper_type and x.subcomponents or [x]
|
if x.name == wrapper_type:
|
||||||
|
wrapper_props.extend(x.props)
|
||||||
|
return x.subcomponents
|
||||||
|
else:
|
||||||
|
return [x]
|
||||||
|
|
||||||
components = chain(*(_get_item_components(x) for x in items2))
|
components = chain(*(_get_item_components(x) for x in items2))
|
||||||
lines = chain(*uniq(tuple(x.dump_lines()) for x in components))
|
lines = chain(*uniq(tuple(x.dump_lines()) for x in components))
|
||||||
|
|
||||||
if wrapper_type is not None:
|
if wrapper_type is not None:
|
||||||
start = [u'BEGIN:{}'.format(wrapper_type)]
|
lines = chain(*(
|
||||||
end = [u'END:{}'.format(wrapper_type)]
|
[u'BEGIN:{}'.format(wrapper_type)],
|
||||||
lines = chain(start, lines, end)
|
uniq(wrapper_props),
|
||||||
|
lines,
|
||||||
|
[u'END:{}'.format(wrapper_type)]
|
||||||
|
))
|
||||||
return u''.join(line + u'\r\n' for line in lines)
|
return u''.join(line + u'\r\n' for line in lines)
|
||||||
|
|
||||||
|
|
||||||
def _get_item_type(components, wrappers):
|
def _get_item_type(components, wrappers):
|
||||||
|
i = 0
|
||||||
for component in components:
|
for component in components:
|
||||||
|
i += 1
|
||||||
try:
|
try:
|
||||||
item_type = component.name
|
item_type = component.name
|
||||||
wrapper_type = wrappers[item_type]
|
wrapper_type = wrappers[item_type]
|
||||||
|
|
@ -168,7 +177,11 @@ def _get_item_type(components, wrappers):
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
return item_type, wrapper_type
|
return item_type, wrapper_type
|
||||||
return None, None
|
|
||||||
|
if not i:
|
||||||
|
return None, None
|
||||||
|
else:
|
||||||
|
raise ValueError('Not sure how to join components.')
|
||||||
|
|
||||||
|
|
||||||
class _Component(object):
|
class _Component(object):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue