fix percentage handling (#1094)

* fix percentage handling

* add test

* fix lint errors

Co-authored-by: Samuel Sieb <samuel@sieb.net>
This commit is contained in:
Samuel Sieb 2020-06-19 16:59:19 -07:00 committed by GitHub
parent e2b655a6cc
commit f9a8629157
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 3 deletions

View File

@ -838,9 +838,16 @@ def percentage(value):
def possibly_negative_percentage(value): def possibly_negative_percentage(value):
has_percent_sign = isinstance(value, str) and value.endswith('%') has_percent_sign = False
if has_percent_sign: if isinstance(value, str):
value = float(value[:-1].rstrip()) / 100.0 try:
if value.endswith('%'):
has_percent_sign = False
value = float(value[:-1].rstrip()) / 100.0
else:
value = float(value)
except ValueError:
raise Invalid("invalid number")
if value > 1: if value > 1:
msg = "Percentage must not be higher than 100%." msg = "Percentage must not be higher than 100%."
if not has_percent_sign: if not has_percent_sign:

View File

@ -14,6 +14,8 @@ esphome:
substitutions: substitutions:
devicename: test3 devicename: test3
devicecomment: test3 device devicecomment: test3 device
min_sub: "0.03"
max_sub: "12.0%"
api: api:
port: 8000 port: 8000
@ -769,6 +771,8 @@ servo:
id: my_servo id: my_servo
output: out output: out
restore: true restore: true
min_level: $min_sub
max_level: $max_sub
ttp229_lsf: ttp229_lsf: