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.