From 939d1b5ff6a2649956d1186a087fa5752357916a Mon Sep 17 00:00:00 2001 From: Tom Waters Date: Sun, 7 Jan 2018 00:50:55 +0000 Subject: [PATCH] Fix time functions would throw errors in python scripts (#11414) * Fix time functions would throw errors in python scripts * Added unit test for time.strptime, change variable name to satisfy lint * Added docstring for time attribute wrapper method to satisfy lint * Fixed line too long lint problem --- homeassistant/components/python_script.py | 9 ++++++++- tests/components/test_python_script.py | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/python_script.py b/homeassistant/components/python_script.py index 85f12a18afd..a56b40f3064 100644 --- a/homeassistant/components/python_script.py +++ b/homeassistant/components/python_script.py @@ -202,4 +202,11 @@ class TimeWrapper: def __getattr__(self, attr): """Fetch an attribute from Time module.""" - return getattr(time, attr) + attribute = getattr(time, attr) + if callable(attribute): + def wrapper(*args, **kw): + """Wrapper to return callable method if callable.""" + return attribute(*args, **kw) + return wrapper + else: + return attribute diff --git a/tests/components/test_python_script.py b/tests/components/test_python_script.py index 8a7f94d7dcd..c0b7df158c5 100644 --- a/tests/components/test_python_script.py +++ b/tests/components/test_python_script.py @@ -236,6 +236,8 @@ def test_exposed_modules(hass, caplog): caplog.set_level(logging.ERROR) source = """ hass.states.set('module.time', time.strftime('%Y', time.gmtime(521276400))) +hass.states.set('module.time_strptime', + time.strftime('%H:%M', time.strptime('12:34', '%H:%M'))) hass.states.set('module.datetime', datetime.timedelta(minutes=1).total_seconds()) """ @@ -244,6 +246,7 @@ hass.states.set('module.datetime', yield from hass.async_block_till_done() assert hass.states.is_state('module.time', '1986') + assert hass.states.is_state('module.time_strptime', '12:34') assert hass.states.is_state('module.datetime', '60.0') # No errors logged = good