forked from platformio/platformio-core
Improve type converting for config options
This commit is contained in:
@@ -185,7 +185,7 @@ class ProjectConfig(object):
|
|||||||
option_meta = ProjectOptions.get(
|
option_meta = ProjectOptions.get(
|
||||||
"%s.%s" % (section.split(":", 1)[0], option))
|
"%s.%s" % (section.split(":", 1)[0], option))
|
||||||
if not option_meta:
|
if not option_meta:
|
||||||
return default
|
return value or default
|
||||||
|
|
||||||
if value and option_meta.multiple:
|
if value and option_meta.multiple:
|
||||||
value = self.parse_multi_values(value)
|
value = self.parse_multi_values(value)
|
||||||
@@ -207,19 +207,21 @@ class ProjectConfig(object):
|
|||||||
if value is None:
|
if value is None:
|
||||||
return default
|
return default
|
||||||
|
|
||||||
# cast types
|
return self._covert_value(value, option_meta.type)
|
||||||
if not isinstance(value, (list, tuple)):
|
|
||||||
value = [value]
|
|
||||||
for i, v in enumerate(value):
|
|
||||||
if option_meta.type == bool:
|
|
||||||
value[i] = v in ("1", "true", "yes")
|
|
||||||
elif option_meta.type == int:
|
|
||||||
value[i] = int(v)
|
|
||||||
elif option_meta.type == float:
|
|
||||||
value[i] = float(v)
|
|
||||||
value = value if option_meta.multiple else value[0]
|
|
||||||
|
|
||||||
return value
|
@staticmethod
|
||||||
|
def _covert_value(value, to_type):
|
||||||
|
items = value
|
||||||
|
if not isinstance(value, (list, tuple)):
|
||||||
|
items = [value]
|
||||||
|
for i, v in enumerate(items):
|
||||||
|
if to_type == bool:
|
||||||
|
items[i] = v in ("1", "true", "yes", "y")
|
||||||
|
elif to_type == int:
|
||||||
|
items[i] = int(v)
|
||||||
|
elif to_type == float:
|
||||||
|
items[i] = float(v)
|
||||||
|
return items if isinstance(value, (list, tuple)) else items[0]
|
||||||
|
|
||||||
def envs(self):
|
def envs(self):
|
||||||
return [s[4:] for s in self._parser.sections() if s.startswith("env:")]
|
return [s[4:] for s in self._parser.sections() if s.startswith("env:")]
|
||||||
|
@@ -150,8 +150,7 @@ ProjectOptions = OrderedDict([
|
|||||||
|
|
||||||
# Monitor
|
# Monitor
|
||||||
ConfigEnvOption(name="monitor_port"),
|
ConfigEnvOption(name="monitor_port"),
|
||||||
ConfigEnvOption(
|
ConfigEnvOption(name="monitor_speed", oldnames=["monitor_baud"]),
|
||||||
name="monitor_speed", oldnames=["monitor_baud"]),
|
|
||||||
ConfigEnvOption(name="monitor_rts"),
|
ConfigEnvOption(name="monitor_rts"),
|
||||||
ConfigEnvOption(name="monitor_dtr"),
|
ConfigEnvOption(name="monitor_dtr"),
|
||||||
ConfigEnvOption(name="monitor_flags", multiple=True),
|
ConfigEnvOption(name="monitor_flags", multiple=True),
|
||||||
|
@@ -102,7 +102,7 @@ def test_real_config(tmpdir):
|
|||||||
assert not config.has_option("custom", "monitor_speed")
|
assert not config.has_option("custom", "monitor_speed")
|
||||||
|
|
||||||
# sysenv
|
# sysenv
|
||||||
assert config.get("custom", "extra_flags") == ""
|
assert config.get("custom", "extra_flags") is None
|
||||||
assert config.get("env:base", "build_flags") == ["-D DEBUG=1"]
|
assert config.get("env:base", "build_flags") == ["-D DEBUG=1"]
|
||||||
assert config.get("env:base", "upload_port") is None
|
assert config.get("env:base", "upload_port") is None
|
||||||
assert config.get("env:extra_2", "upload_port") == "/dev/extra_2/port"
|
assert config.get("env:extra_2", "upload_port") == "/dev/extra_2/port"
|
||||||
|
Reference in New Issue
Block a user