Source code for snakia.utils.attrs

from typing import Any, TypeVar

T = TypeVar("T")


[docs] def get_or_set_attr(obj: Any, name: str, default: T) -> T: if not hasattr(obj, name): setattr(obj, name, default) attr = getattr(obj, name) if not isinstance(attr, type(default)): setattr(obj, name, default) return default return attr
[docs] def get_attrs( obj: Any, *, use_dir: bool = False, of_class: bool = False ) -> dict[str, Any]: if of_class and not isinstance(obj, type): obj = obj.__class__ if not use_dir: if hasattr(obj, "__dict__"): return obj.__dict__ # type: ignore if hasattr(obj, "__slots__"): return {k: getattr(obj, k) for k in obj.__slots__} raise NotImplementedError("Unknown layout") else: return {k: getattr(obj, k) for k in dir(obj)}