Created
May 4, 2021 11:23
-
-
Save rupython/d3be58034a69cc4b0c1104728499c1df to your computer and use it in GitHub Desktop.
From: Artyom
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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