Factories¶
create_merge_factory(merge_functions=None, key_order=None, post_processor=None)
¶
Create a merge function that merges arbitrarily nested dictionaries.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
merge_functions
|
dict[str, Callable[[Any, Any], Any]] | None
|
Dictionary of functions to use for merging specific keys |
None
|
key_order
|
list[str] | None
|
List of keys to determine the order of merging. |
None
|
post_processor
|
callable | None
|
Function to process the result after merging |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
Callable |
Callable[[dict, dict], dict]
|
Function that merges two arbitrarily nested dictionaries. |
Example
merge_with_custom_functions = create_merge_factory(
merge_functions={
"age": lambda o, u: min(o, u),
},
post_processor=lambda d: d.update({"name": d["name"].upper()})
)
original = {
"name": "Alice",
"age": 30,
"tags": ["user"],
}
updates = {
"age": 31,
"tags": ["editor"],
}
merged = merge_with_custom_functions(original, updates)
assert merged == {
"name": "ALICE",
"age": 30,
"tags": ["user", "editor"],
}
Source code in src/fuso/factories.py
create_merge_list_of_dicts_by_key_factory(key, default_key=None, merge_functions=None, object_key_order=None)
¶
Create a merge function that merges two lists of dictionaries by a specified key.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
key
|
str
|
Key to use for merging |
required |
default_key
|
str | None
|
Key to use for default updates |
None
|
merge_functions
|
dict[str, Callable[[Any, Any], Any]] | None
|
Dictionary of functions to use for merging specific keys |
None
|
object_key_order
|
list[str] | None
|
Non-exhaustive list of keys to sort objects by |
None
|
Returns:
| Name | Type | Description |
|---|---|---|
Callable |
Callable[[list[dict], list[dict]], list[dict]]
|
Function that merges two lists of dictionaries by a specified key. |
Example
merge_by_id = create_merge_list_of_dicts_by_key_factory(key="id")
values = [
{"id": 1, "name": "Alice", "tags": ["user"]},
{"id": 2, "name": "Bob", "tags": ["admin"]},
]
updates = [
{"id": 1, "tags": ["editor"]},
{"id": 3, "name": "Charlie", "tags": ["user"]},
]
merged = merge_by_id(values, updates)
assert merged == [
{"id": 1, "name": "Alice", "tags": ["user", "editor"]},
{"id": 2, "name": "Bob", "tags": ["admin"]},
{"id": 3, "name": "Charlie", "tags": ["user"]},
]