From 037f59336335a5977a2cd2cf8ef261ee94f0911a Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 9 Nov 2023 16:57:48 -0600 Subject: [PATCH] Use YAML C loader when available This is borrowed from HA core https://github.com/home-assistant/core/blob/527a3dba9cd3eebd59257f6dd8be0e2ee95c630d/homeassistant/util/yaml/loader.py#L14 https://github.com/home-assistant/core/blob/527a3dba9cd3eebd59257f6dd8be0e2ee95c630d/homeassistant/util/yaml/dumper.py#L12 --- esphome/yaml_util.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/esphome/yaml_util.py b/esphome/yaml_util.py index 3d3fa8c5b4..567a3aec15 100644 --- a/esphome/yaml_util.py +++ b/esphome/yaml_util.py @@ -23,6 +23,18 @@ from esphome.core import ( from esphome.helpers import add_class_to_obj from esphome.util import OrderedDict, filter_yaml_files +try: + from yaml import CSafeLoader as FastestAvailableSafeLoader + from yaml import CSafeDumper as FastestAvailableSafeDumper +except ImportError: + from yaml import ( # type: ignore[assignment] + SafeLoader as FastestAvailableSafeLoader, + ) + from yaml import ( # type: ignore[assignment] + SafeDumper as FastestAvailableSafeDumper, + ) + + _LOGGER = logging.getLogger(__name__) # Mostly copied from Home Assistant because that code works fine and @@ -89,7 +101,7 @@ def _add_data_ref(fn): return wrapped -class ESPHomeLoader(yaml.SafeLoader): +class ESPHomeLoader(FastestAvailableSafeLoader): """Loader class that keeps track of line numbers.""" @_add_data_ref @@ -439,7 +451,7 @@ def is_secret(value): return None -class ESPHomeDumper(yaml.SafeDumper): +class ESPHomeDumper(FastestAvailableSafeDumper): def represent_mapping(self, tag, mapping, flow_style=None): value = [] node = yaml.MappingNode(tag, value, flow_style=flow_style)