d1adccba00
* feat(serialization): cache bases on deserialize
allows the deserializer to return the same instance when encountering
objects with the same id
closes #191
* feat(serialization): cache bases on deserialize
allows the deserializer to return the same instance when encountering
objects with the same id
closes #191
* fix(serialization): check before accessing id
obj may not be detached and therefore might not have an id
* feat(serializer): cache w id from obj not base
* chore: update deps
* feat(operations): lil send helper
on send, if `transports` is just a transport, add it to a list.
i see this error a lot so just a friendly lil fix!
* feat(objects): breps omg!
* test(geometry): updates for breps
* test(geometry): more brep serialization tests
* refactor(test): formatting
* style: formatting
* test(geometry): clean up test file
* fix(test): brep trims test fix
* refactor(geometry): clean up encoding outputs
* feat(objects): allow kwargs in encoding
* feat(objects): align curve encodings w sharp
* test(geometry): new curve encodings
* feat(client): update stream permission mutation
guess this changed some time recently and i wasn't made aware of it
* fix(objects): brep face and edge encoding
* fix(geometry): breps units 'none' fix
* test(objects): fix 'none' units issue
* revert(486ea99): use `streamGrantPermission`
to be updated for next server release
64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
from warnings import warn
|
|
from specklepy.logging.exceptions import SpeckleException, SpeckleWarning
|
|
|
|
UNITS = ["mm", "cm", "m", "in", "ft", "yd", "mi"]
|
|
|
|
UNITS_STRINGS = {
|
|
"mm": ["mm", "mil", "millimeters", "millimetres"],
|
|
"cm": ["cm", "centimetre", "centimeter", "centimetres", "centimeters"],
|
|
"m": ["m", "meter", "meters", "metre", "metres"],
|
|
"km": ["km", "kilometer", "kilometre", "kilometers", "kilometres"],
|
|
"in": ["in", "inch", "inches"],
|
|
"ft": ["ft", "foot", "feet"],
|
|
"yd": ["yd", "yard", "yards"],
|
|
"mi": ["mi", "mile", "miles"],
|
|
"none": ["none", "null"],
|
|
}
|
|
|
|
UNITS_ENCODINGS = {
|
|
"none": 0,
|
|
None: 0,
|
|
"mm": 1,
|
|
"cm": 2,
|
|
"m": 3,
|
|
"km": 4,
|
|
"in": 5,
|
|
"ft": 6,
|
|
"yd": 7,
|
|
"mi": 8,
|
|
}
|
|
|
|
|
|
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:
|
|
return name
|
|
|
|
raise SpeckleException(
|
|
message=f"Could not understand what unit {unit} is referring to. Please enter a valid unit (eg {UNITS})."
|
|
)
|
|
|
|
|
|
def get_units_from_encoding(unit: int):
|
|
for name, encoding in UNITS_ENCODINGS.items():
|
|
if unit == encoding:
|
|
return name
|
|
|
|
raise SpeckleException(
|
|
message=f"Could not understand what unit {unit} is referring to. Please enter a valid unit encoding (eg {UNITS_ENCODINGS})."
|
|
)
|
|
|
|
|
|
def get_encoding_from_units(unit: str):
|
|
try:
|
|
return UNITS_ENCODINGS[unit]
|
|
except KeyError as e:
|
|
raise SpeckleException(message=f"No encoding exists for unit {unit}. Please enter a valid unit to encode (eg {UNITS_ENCODINGS}).") from e
|