Skip to content

Instantly share code, notes, and snippets.

@rupython
Created May 4, 2021 11:23
Show Gist options
  • Save rupython/d3be58034a69cc4b0c1104728499c1df to your computer and use it in GitHub Desktop.
Save rupython/d3be58034a69cc4b0c1104728499c1df to your computer and use it in GitHub Desktop.
From: Artyom
def save_all(*values: Any) -> List[Any]:
res = [] # not all cases have hashable objects
for i in values:
if i is not None and i not in res:
res.append(i)
return res
def submerge(*values: Any) -> List[Any]:
res = []
for value in values:
if value is not None:
if isinstance(value, (list, set, tuple)):
res.extend(value)
else:
res.append(value)
return res
handlers = {
cls.MERGE_TYPE_AVER: aver,
cls.MERGE_TYPE_ANY: _any,
cls.MERGE_TYPE_SAVE_ALL: save_all,
cls.MERGE_TYPE_SUBMERGE: submerge,
}
# fields that are described how to merge
explicit_merge_fields = {
field
for fields in field_merge_map.values()
for field in fields
}
# all unknown fields have merge type "any"
implicit_merge_fields = {
field
for page in pages
for field in page.data.keys()
if field not in explicit_merge_fields
}
if field_merge_map.get(cls.MERGE_TYPE_ANY):
implicit_merge_fields.update(field_merge_map[cls.MERGE_TYPE_ANY])
field_merge_map[cls.MERGE_TYPE_ANY] = implicit_merge_fields
merged_data = {}
for handler_type, fields in field_merge_map.items():
for field in fields:
field_values = [page.data[field] for page in pages if field in page.data]
handler = handlers[handler_type]
merged_data[field] = handler(*field_values)
return merged_data -остаток
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment