Add template filter timedelta_seconds to create a timedelta from seconds (#39608)
parent
719aa0f317
commit
9b49ca3820
|
@ -1,7 +1,7 @@
|
||||||
"""Template helper methods for rendering strings with Home Assistant data."""
|
"""Template helper methods for rendering strings with Home Assistant data."""
|
||||||
import base64
|
import base64
|
||||||
import collections.abc
|
import collections.abc
|
||||||
from datetime import datetime
|
from datetime import datetime, timedelta
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
@ -1102,6 +1102,7 @@ class TemplateEnvironment(ImmutableSandboxedEnvironment):
|
||||||
self.globals["utcnow"] = dt_util.utcnow
|
self.globals["utcnow"] = dt_util.utcnow
|
||||||
self.globals["as_timestamp"] = forgiving_as_timestamp
|
self.globals["as_timestamp"] = forgiving_as_timestamp
|
||||||
self.globals["relative_time"] = relative_time
|
self.globals["relative_time"] = relative_time
|
||||||
|
self.globals["timedelta"] = timedelta
|
||||||
self.globals["strptime"] = strptime
|
self.globals["strptime"] = strptime
|
||||||
self.globals["urlencode"] = urlencode
|
self.globals["urlencode"] = urlencode
|
||||||
if hass is None:
|
if hass is None:
|
||||||
|
|
|
@ -892,6 +892,65 @@ def test_relative_time(mock_is_safe, hass):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@patch(
|
||||||
|
"homeassistant.helpers.template.TemplateEnvironment.is_safe_callable",
|
||||||
|
return_value=True,
|
||||||
|
)
|
||||||
|
def test_timedelta(mock_is_safe, hass):
|
||||||
|
"""Test relative_time method."""
|
||||||
|
now = datetime.strptime("2000-01-01 10:00:00 +00:00", "%Y-%m-%d %H:%M:%S %z")
|
||||||
|
with patch("homeassistant.util.dt.now", return_value=now):
|
||||||
|
assert (
|
||||||
|
"0:02:00"
|
||||||
|
== template.Template(
|
||||||
|
"{{timedelta(seconds=120)}}",
|
||||||
|
hass,
|
||||||
|
).async_render()
|
||||||
|
)
|
||||||
|
assert (
|
||||||
|
"1 day, 0:00:00"
|
||||||
|
== template.Template(
|
||||||
|
"{{timedelta(seconds=86400)}}",
|
||||||
|
hass,
|
||||||
|
).async_render()
|
||||||
|
)
|
||||||
|
assert (
|
||||||
|
"1 day, 4:00:00"
|
||||||
|
== template.Template(
|
||||||
|
"{{timedelta(days=1, hours=4)}}",
|
||||||
|
hass,
|
||||||
|
).async_render()
|
||||||
|
)
|
||||||
|
assert (
|
||||||
|
"1 hour"
|
||||||
|
== template.Template(
|
||||||
|
"{{relative_time(now() - timedelta(seconds=3600))}}",
|
||||||
|
hass,
|
||||||
|
).async_render()
|
||||||
|
)
|
||||||
|
assert (
|
||||||
|
"1 day"
|
||||||
|
== template.Template(
|
||||||
|
"{{relative_time(now() - timedelta(seconds=86400))}}",
|
||||||
|
hass,
|
||||||
|
).async_render()
|
||||||
|
)
|
||||||
|
assert (
|
||||||
|
"1 day"
|
||||||
|
== template.Template(
|
||||||
|
"{{relative_time(now() - timedelta(seconds=86401))}}",
|
||||||
|
hass,
|
||||||
|
).async_render()
|
||||||
|
)
|
||||||
|
assert (
|
||||||
|
"15 days"
|
||||||
|
== template.Template(
|
||||||
|
"{{relative_time(now() - timedelta(weeks=2, days=1))}}",
|
||||||
|
hass,
|
||||||
|
).async_render()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@patch(
|
@patch(
|
||||||
"homeassistant.helpers.template.TemplateEnvironment.is_safe_callable",
|
"homeassistant.helpers.template.TemplateEnvironment.is_safe_callable",
|
||||||
return_value=True,
|
return_value=True,
|
||||||
|
|
Loading…
Reference in New Issue