Compare commits

..

3 Commits

Author SHA1 Message Date
izzy lyseggen f7ae62ade2 Merge pull request #149 from specklesystems/izzy/null-units-hotfix
fix(units): warn and don't set for invalid args
2021-12-22 09:07:40 +00:00
izzy lyseggen 38ffbc27b7 test(units): goddamnit codecov 2021-12-22 09:06:28 +00:00
izzy lyseggen 8cebccf250 fix(units): warn and don't set for invalid args 2021-12-22 09:00:39 +00:00
3 changed files with 23 additions and 2 deletions
+3 -1
View File
@@ -313,7 +313,9 @@ class Base(_RegisteringBase):
@units.setter
def units(self, value: str):
self._units = get_units_from_string(value)
units = get_units_from_string(value)
if units:
self._units = units
def get_member_names(self) -> List[str]:
"""Get all of the property names on this object, dynamic or not"""
+8 -1
View File
@@ -1,4 +1,5 @@
from specklepy.logging.exceptions import SpeckleException
from warnings import warn
from specklepy.logging.exceptions import SpeckleException, SpeckleWarning
UNITS = ["mm", "cm", "m", "in", "ft", "yd", "mi"]
@@ -28,6 +29,12 @@ UNITS_ENCODINGS = {
def get_units_from_string(unit: str):
if not isinstance(unit, str):
warn(
f"Invalid units: expected type str but received {type(unit)} ({unit}). Skipping - no units will be set.",
SpeckleWarning,
)
return
unit = str.lower(unit)
for name, alternates in UNITS_STRINGS.items():
if unit in alternates:
+12
View File
@@ -77,6 +77,18 @@ def test_speckle_type_cannot_be_set(base: Base) -> None:
assert base.speckle_type == "Base"
def test_setting_units():
b = Base(units="foot")
assert b.units == "ft"
with pytest.raises(SpeckleException):
b.units = "big"
b.units = None # invalid args are skipped
b.units = 7
assert b.units == "ft"
def test_base_of_custom_speckle_type() -> None:
b1 = Base.of_type("BirdHouse", name="Tweety's Crib")
assert b1.speckle_type == "BirdHouse"