| # Copyright 2020 The Flutter Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Helper functions for Flutter LUCI configs.""" |
| |
| def _merge_dicts(a, b): |
| """Returns a new dictionary from the result of merging a and b. |
| |
| If matching values are both dicts or both lists, they will be merged (non-recursively). |
| |
| Args: |
| a: first dict. |
| b: second dict (takes priority). |
| |
| Returns: |
| Merged dict. |
| """ |
| new_dict = dict() |
| a = dict(a) |
| for k, av in a.items(): |
| new_dict[k] = av |
| for k, bv in b.items(): |
| av = a.get(k) |
| if type(av) == "dict" and type(bv) == "dict": |
| new_dict[k] = dict(av) |
| new_dict[k].update(bv) |
| elif type(av) == "list" and type(bv) == "list": |
| new_dict[k] = av + bv |
| else: |
| new_dict[k] = bv |
| return new_dict |
| |
| def _merge_lists(a, b): |
| """Return the result of merging two lists. |
| |
| Args: |
| a: first list. |
| b: second list (takes priority). |
| |
| Returns: |
| Merged list. |
| """ |
| merged = [] |
| for item in b: |
| merged.append(item) |
| for item in a: |
| if item not in merged: |
| merged.append(item) |
| return merged |
| |
| helpers = struct(merge_dicts = _merge_dicts, merge_lists = _merge_lists) |