cornsnake.util_yaml
1import json 2from typing import Any, Dict, List, Union 3 4YAMLType = Union[Dict[str, Any], List[Any], str, int, float, bool, None] 5 6 7def deep_sort(data: YAMLType) -> YAMLType: 8 """ 9 Recursively sort a YAML-like object (dict, list, etc.) by its keys and values. 10 - why: for consistenct comparison. 11 12 Args: 13 data (YAMLType): The YAML-like object to sort. 14 15 Returns: 16 YAMLType: The sorted YAML-like object. 17 """ 18 if isinstance(data, dict): 19 return {k: deep_sort(data[k]) for k in sorted(data)} 20 elif isinstance(data, list): 21 # sort list items by their JSON string representation 22 return sorted( 23 (deep_sort(x) for x in data), key=lambda v: json.dumps(v, sort_keys=True) 24 ) 25 else: 26 return data
YAMLType =
typing.Union[typing.Dict[str, typing.Any], typing.List[typing.Any], str, int, float, bool, NoneType]
def
deep_sort( data: Union[Dict[str, Any], List[Any], str, int, float, bool, NoneType]) -> Union[Dict[str, Any], List[Any], str, int, float, bool, NoneType]:
8def deep_sort(data: YAMLType) -> YAMLType: 9 """ 10 Recursively sort a YAML-like object (dict, list, etc.) by its keys and values. 11 - why: for consistenct comparison. 12 13 Args: 14 data (YAMLType): The YAML-like object to sort. 15 16 Returns: 17 YAMLType: The sorted YAML-like object. 18 """ 19 if isinstance(data, dict): 20 return {k: deep_sort(data[k]) for k in sorted(data)} 21 elif isinstance(data, list): 22 # sort list items by their JSON string representation 23 return sorted( 24 (deep_sort(x) for x in data), key=lambda v: json.dumps(v, sort_keys=True) 25 ) 26 else: 27 return data
Recursively sort a YAML-like object (dict, list, etc.) by its keys and values.
- why: for consistenct comparison.
Args: data (YAMLType): The YAML-like object to sort.
Returns: YAMLType: The sorted YAML-like object.