Fix command line sensors removing quotes with template (#35559)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
e13f206a06
commit
c65e72886c
2 changed files with 18 additions and 2 deletions
|
@ -3,7 +3,6 @@ from collections.abc import Mapping
|
|||
from datetime import timedelta
|
||||
import json
|
||||
import logging
|
||||
import shlex
|
||||
import subprocess
|
||||
|
||||
import voluptuous as vol
|
||||
|
@ -171,7 +170,7 @@ class CommandSensorData:
|
|||
pass
|
||||
else:
|
||||
# Template used. Construct the string used in the shell
|
||||
command = str(" ".join([prog] + shlex.split(rendered_args)))
|
||||
command = f"{prog} {rendered_args}"
|
||||
try:
|
||||
_LOGGER.debug("Running command: %s", command)
|
||||
return_value = subprocess.check_output(
|
||||
|
|
|
@ -70,6 +70,23 @@ class TestCommandSensorSensor(unittest.TestCase):
|
|||
|
||||
assert data.value == "Works"
|
||||
|
||||
def test_template_render_with_quote(self):
|
||||
"""Ensure command with templates and quotes get rendered properly."""
|
||||
self.hass.states.set("sensor.test_state", "Works 2")
|
||||
with patch(
|
||||
"homeassistant.components.command_line.sensor.subprocess.check_output",
|
||||
return_value=b"Works\n",
|
||||
) as check_output:
|
||||
data = command_line.CommandSensorData(
|
||||
self.hass, 'echo "{{ states.sensor.test_state.state }}" "3 4"', 15,
|
||||
)
|
||||
data.update()
|
||||
|
||||
assert data.value == "Works"
|
||||
check_output.assert_called_once_with(
|
||||
'echo "Works 2" "3 4"', shell=True, timeout=15 # nosec # shell by design
|
||||
)
|
||||
|
||||
def test_bad_command(self):
|
||||
"""Test bad command."""
|
||||
data = command_line.CommandSensorData(self.hass, "asdfasdf", 15)
|
||||
|
|
Loading…
Add table
Reference in a new issue