Source code for BAC0.core.proprietary_objects.object
from typing import Any, Dict
from bacpypes.object import (
Object,
Property,
register_object_type,
registered_object_types,
)
# Prochaine étape : créer une focntion qui va lire "all" et se redéfinir dynamiquement
[docs]def create_proprietary_object(params: Dict[str, Any]) -> None:
try:
_validate_params(params)
except:
raise
# Prevent breaking change for existing code, since issue #311
try:
props = [
Property(v["obj_id"], v["datatype"], mutable=v["mutable"])
for k, v in params["properties"].items()
]
except KeyError:
props = [
Property(v["obj_id"], v["primitive"], mutable=v["mutable"])
for k, v in params["properties"].items()
]
new_class = type(
params["name"],
(params["bacpypes_type"],),
{"objectType": params["objectType"], "properties": props},
)
register_object_type(new_class, vendor_id=params["vendor_id"])
if "BAC0" not in registered_object_types.keys():
registered_object_types["BAC0"] = {}
registered_object_types["BAC0"][params["name"]] = params["properties"]
def _validate_params(params: Dict[str, Any]) -> bool:
if not params["name"]:
raise ValueError(
"Proprietary definition dict must contains a name key with a custom class name"
)
if not params["vendor_id"]:
raise ValueError("Vendor ID is mandatory")
if not isinstance(params["properties"], dict):
raise TypeError(
"The definition must include a dict of properties. It can be empty."
)
if not issubclass(params["bacpypes_type"], Object):
raise TypeError("bacpypes_type must be a subclass of bacpypes.object.Object")
return True