Enhance python_script to support "_getitem_" (#8541)

* Enhance python_script to support "_getitem_"

In order to use dict / list structures in python scripts we need
_getitem_ allowed in the RestrictedPython environment. There is a
default_guarded_getitem included with RestrictedPython, which is a
pass through used in the Eval code paths.

* Add tests for dict/list support in python_scripts

* Lint
This commit is contained in:
Sean Dague
2017-07-20 01:56:24 -04:00
committed by Paulus Schoutsen
parent ee05a4ab89
commit 8d1999dc12
2 changed files with 18 additions and 0 deletions

View File

@@ -137,6 +137,22 @@ hass.async_stop()
assert "Not allowed to access async methods" in caplog.text
@asyncio.coroutine
def test_using_complex_structures(hass, caplog):
"""Test that dicts and lists work."""
caplog.set_level(logging.INFO)
source = """
mydict = {"a": 1, "b": 2}
mylist = [1, 2, 3, 4]
logger.info('Logging from inside script: %s %s' % (mydict["a"], mylist[2]))
"""
hass.async_add_job(execute, hass, 'test.py', source, {})
yield from hass.async_block_till_done()
assert "Logging from inside script: 1 3" in caplog.text
@asyncio.coroutine
def test_accessing_forbidden_methods(hass, caplog):
"""Test compile error logs error."""