mirror of
https://github.com/esphome/esphome.git
synced 2025-09-04 04:12:23 +01:00
Store source package in Component for debugging (#2070)
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import logging
|
||||
|
||||
from esphome.const import (
|
||||
CONF_INVERTED,
|
||||
CONF_MODE,
|
||||
@@ -15,6 +17,9 @@ from esphome.cpp_types import App, GPIOPin
|
||||
from esphome.util import Registry, RegistryEntry
|
||||
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
async def gpio_pin_expression(conf):
|
||||
"""Generate an expression for the given pin option.
|
||||
|
||||
@@ -42,6 +47,8 @@ async def register_component(var, config):
|
||||
:param var: The variable representing the component.
|
||||
:param config: The configuration for the component.
|
||||
"""
|
||||
import inspect
|
||||
|
||||
id_ = str(var.base)
|
||||
if id_ not in CORE.component_ids:
|
||||
raise ValueError(
|
||||
@@ -54,6 +61,32 @@ async def register_component(var, config):
|
||||
add(var.set_setup_priority(config[CONF_SETUP_PRIORITY]))
|
||||
if CONF_UPDATE_INTERVAL in config:
|
||||
add(var.set_update_interval(config[CONF_UPDATE_INTERVAL]))
|
||||
|
||||
# Set component source by inspecting the stack and getting the callee module
|
||||
# https://stackoverflow.com/a/1095621
|
||||
name = None
|
||||
try:
|
||||
for frm in inspect.stack()[1:]:
|
||||
mod = inspect.getmodule(frm[0])
|
||||
if mod is None:
|
||||
continue
|
||||
name = mod.__name__
|
||||
if name.startswith("esphome.components."):
|
||||
name = name[len("esphome.components.") :]
|
||||
break
|
||||
if name == "esphome.automation":
|
||||
name = "automation"
|
||||
# continue looking further up in stack in case we find a better one
|
||||
if name == "esphome.coroutine":
|
||||
# Only works for async-await coroutine syntax
|
||||
break
|
||||
except (KeyError, AttributeError, IndexError) as e:
|
||||
_LOGGER.warning(
|
||||
"Error while finding name of component, please report this", exc_info=e
|
||||
)
|
||||
if name is not None:
|
||||
add(var.set_component_source(name))
|
||||
|
||||
add(App.register_component(var))
|
||||
return var
|
||||
|
||||
|
Reference in New Issue
Block a user