cornsnake.util_yaml

Utility functions for YAML-like data structures.

Documentation

 1"""
 2Utility functions for YAML-like data structures.
 3
 4[Documentation](http://docs.mrseanryan.cornsnake.s3-website-eu-west-1.amazonaws.com/cornsnake/util_yaml.html)
 5"""
 6
 7import json
 8from typing import Any, Dict, List, Union
 9
10YAMLType = Union[Dict[str, Any], List[Any], str, int, float, bool, None]
11
12
13def deep_sort(data: YAMLType) -> YAMLType:
14    """
15    Recursively sort a YAML-like object (dict, list, etc.) by its keys and values.
16    - why: for consistenct comparison.
17
18    Args:
19        data (YAMLType): The YAML-like object to sort.
20
21    Returns:
22        YAMLType: The sorted YAML-like object.
23    """
24    if isinstance(data, dict):
25        return {k: deep_sort(data[k]) for k in sorted(data)}
26    elif isinstance(data, list):
27        # sort list items by their JSON string representation
28        return sorted(
29            (deep_sort(x) for x in data), key=lambda v: json.dumps(v, sort_keys=True)
30        )
31    else:
32        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]:
14def deep_sort(data: YAMLType) -> YAMLType:
15    """
16    Recursively sort a YAML-like object (dict, list, etc.) by its keys and values.
17    - why: for consistenct comparison.
18
19    Args:
20        data (YAMLType): The YAML-like object to sort.
21
22    Returns:
23        YAMLType: The sorted YAML-like object.
24    """
25    if isinstance(data, dict):
26        return {k: deep_sort(data[k]) for k in sorted(data)}
27    elif isinstance(data, list):
28        # sort list items by their JSON string representation
29        return sorted(
30            (deep_sort(x) for x in data), key=lambda v: json.dumps(v, sort_keys=True)
31        )
32    else:
33        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.