1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-28 08:02:23 +01:00

Add magic value REPLACEME (#881)

* Add magic value REPLACEME

* Lint
This commit is contained in:
Otto Winter
2019-12-04 15:58:40 +01:00
committed by GitHub
parent 31d964c16a
commit b7dff4bbab
4 changed files with 95 additions and 57 deletions

View File

@@ -2,6 +2,7 @@ from __future__ import print_function
import fnmatch
import functools
import inspect
import logging
import math
import os
@@ -13,6 +14,7 @@ import yaml.constructor
from esphome import core
from esphome.config_helpers import read_config_file
from esphome.core import EsphomeError, IPAddress, Lambda, MACAddress, TimePeriod, DocumentRange
from esphome.helpers import add_class_to_obj
from esphome.py_compat import text_type, IS_PY2
from esphome.util import OrderedDict, filter_yaml_files
@@ -26,14 +28,6 @@ _SECRET_CACHE = {}
_SECRET_VALUES = {}
class NodeListClass(list):
pass
class NodeStrClass(text_type):
pass
class ESPHomeDataBase(object):
@property
def esp_range(self):
@@ -44,56 +38,25 @@ class ESPHomeDataBase(object):
self._esp_range = DocumentRange.from_marks(node.start_mark, node.end_mark)
class ESPInt(int, ESPHomeDataBase):
class ESPForceValue(object):
pass
class ESPFloat(float, ESPHomeDataBase):
pass
class ESPStr(str, ESPHomeDataBase):
pass
class ESPDict(OrderedDict, ESPHomeDataBase):
pass
class ESPList(list, ESPHomeDataBase):
pass
class ESPLambda(Lambda, ESPHomeDataBase):
pass
ESP_TYPES = {
int: ESPInt,
float: ESPFloat,
str: ESPStr,
dict: ESPDict,
list: ESPList,
Lambda: ESPLambda,
}
if IS_PY2:
class ESPUnicode(unicode, ESPHomeDataBase):
pass
ESP_TYPES[unicode] = ESPUnicode
def make_data_base(value):
for typ, cons in ESP_TYPES.items():
if isinstance(value, typ):
return cons(value)
return value
return add_class_to_obj(value, ESPHomeDataBase)
def _add_data_ref(fn):
@functools.wraps(fn)
def wrapped(loader, node):
res = fn(loader, node)
# newer PyYAML versions use generators, resolve them
if inspect.isgenerator(res):
generator = res
res = next(generator)
# Let generator finish
for _ in generator:
pass
res = make_data_base(res)
if isinstance(res, ESPHomeDataBase):
res.from_node(node)
@@ -296,6 +259,11 @@ class ESPHomeLoader(yaml.SafeLoader): # pylint: disable=too-many-ancestors
def construct_lambda(self, node):
return Lambda(text_type(node.value))
@_add_data_ref
def construct_force(self, node):
obj = self.construct_scalar(node)
return add_class_to_obj(obj, ESPForceValue)
ESPHomeLoader.add_constructor(u'tag:yaml.org,2002:int', ESPHomeLoader.construct_yaml_int)
ESPHomeLoader.add_constructor(u'tag:yaml.org,2002:float', ESPHomeLoader.construct_yaml_float)
@@ -314,6 +282,7 @@ ESPHomeLoader.add_constructor('!include_dir_named', ESPHomeLoader.construct_incl
ESPHomeLoader.add_constructor('!include_dir_merge_named',
ESPHomeLoader.construct_include_dir_merge_named)
ESPHomeLoader.add_constructor('!lambda', ESPHomeLoader.construct_lambda)
ESPHomeLoader.add_constructor('!force', ESPHomeLoader.construct_force)
def load_yaml(fname):