Source code for ogstools.materiallib.core.property
# SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
# SPDX-License-Identifier: BSD-3-Clause
from typing import Any
[docs]
class MaterialProperty:
[docs]
def __init__(self, name: str, type_: str, value: Any = None, **extra: Any):
self.name = name
self.type = type_
self.value = value
self.extra = extra # e.g. unit, slope, source, ...
[docs]
def to_dict(self) -> dict:
d = {"name": self.name, "type": self.type}
if self.value is not None:
d["value"] = self.value
d.update(self.extra)
return d
def __repr__(self) -> str:
return f"{self.name} ({self.type})"
def __str__(self) -> str:
lines = [f"{self.name} ({self.type})", f" value: {self.value}"]
for k, v in self.extra.items():
lines.append(f" {k}: {v}")
return "\n".join(lines)
[docs]
def get(self, key: str, default: str | None = None) -> Any:
if key in ["name", "type", "value"]:
return getattr(self, key)
if key not in self.extra:
if default is None:
msg = f"Property {self.name} has no attribute called '{key}'."
raise KeyError(msg)
return default
return self.extra[key]