Skip to content

Commit 9a0220e

Browse files
authored
Merge pull request #12 from Summersweet-Software/staging
Main to Staging for quick release
2 parents bcb856d + 2b9db0c commit 9a0220e

6 files changed

Lines changed: 28 additions & 23 deletions

File tree

comprehensiveconfig/json.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def dump_value(cls, node: spec.AnyConfigField, value):
3131
return value.name
3232
case spec.ConfigEnum(_, False):
3333
return value.value
34-
case str() | int() | float() | datetime() | dict() | None:
34+
case str() | int() | float() | bool() | datetime() | dict() | None:
3535
return value
3636
case _:
3737
# magic method to make writing new field types possible

comprehensiveconfig/spec.py

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -321,27 +321,6 @@ def nullable(self):
321321
return False
322322

323323

324-
class Float(ConfigurationField):
325-
"""Floating point field"""
326-
327-
__slots__ = ()
328-
329-
_holds: float
330-
331-
def __get__(self, instance, owner) -> float:
332-
return super().__get__(instance, owner)
333-
334-
def __set__(self, instance, value: float):
335-
super().__set__(instance, value)
336-
337-
def _validate_value(self, value: Any, name: str | None = None, /):
338-
super()._validate_value(value)
339-
if not isinstance(value, (float, int)):
340-
raise ValueError(
341-
f"Field: {name or self._name}\nValue was not a valid number: {repr(value)}"
342-
)
343-
344-
345324
class List[T](ConfigurationField):
346325
"""List field"""
347326

@@ -583,6 +562,27 @@ def _validate_value(self, value: Any, name: str | None = None, /):
583562
self.inner_type._validate_value(item, f"{name or self._name}[{c}]")
584563

585564

565+
class Boolean(ConfigurationField):
566+
"""Boolean (true/false) field"""
567+
568+
__slots__ = ()
569+
570+
_holds: bool
571+
572+
def __get__(self, instance, owner) -> bool:
573+
return super().__get__(instance, owner)
574+
575+
def __set__(self, instance, value: bool):
576+
super().__set__(instance, value)
577+
578+
def _validate_value(self, value: Any, name: str | None = None, /):
579+
super()._validate_value(value)
580+
if not isinstance(value, bool):
581+
raise ValueError(
582+
f"Field: {name or self._name}\nValue was not a valid boolean: {repr(value)}"
583+
)
584+
585+
586586
class Float(ConfigurationField):
587587
"""Floating point field"""
588588

@@ -840,6 +840,7 @@ def _validate_value(self, value: Any, name: str | None = None, /):
840840
"NoDefaultValue",
841841
"_NoDefaultValueT",
842842
"Section",
843+
"Boolean",
843844
"Float",
844845
"Integer",
845846
"Number",

comprehensiveconfig/toml.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ def format_value(cls, field, value) -> str:
7474
match value:
7575
case int() | float():
7676
return str(value)
77+
case bool():
78+
return "true" if value else "false"
7779
case str():
7880
return f'"{escape(value)}"'
7981
case list():

comprehensiveconfig/utility.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class Bar(comprehensiveconfig.spec.Section, name="burger"):
2626
)
2727
test_int = comprehensiveconfig.spec.Integer(20)
2828
test_float = comprehensiveconfig.spec.Float(20.20)
29+
test_bool = comprehensiveconfig.spec.Boolean(True)
2930
test_dict = comprehensiveconfig.spec.Table(
3031
{10: "burgers"},
3132
key_type=comprehensiveconfig.spec.Integer(),

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "comprehensiveconfig"
3-
version = "1.1.0"
3+
version = "1.1.1"
44
description = "A library to create ergonomic, auto-validated configuration models with great support for static type annotations."
55
readme = "readme.md"
66
requires-python = ">=3.12"

tests/test_fields.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ class Bar(comprehensiveconfig.spec.Section, name="burger"):
398398
)
399399
test_int = comprehensiveconfig.spec.Integer(20)
400400
test_float = comprehensiveconfig.spec.Float(20.20)
401+
test_bool = comprehensiveconfig.spec.Boolean(True)
401402
test_dict = comprehensiveconfig.spec.Table(
402403
{10: "burgers"},
403404
key_type=comprehensiveconfig.spec.Integer(),

0 commit comments

Comments
 (0)