Source code for pronto.entity.attributes

import typing
from typing import Iterable, Iterator

from ..utils.meta import typechecked
from . import Entity, EntitySet

if typing.TYPE_CHECKING:
    from ..relationship import Relationship

_E = typing.TypeVar("_E", bound=Entity)
_S = typing.TypeVar("_S", bound=EntitySet)


[docs] class Relationships(typing.MutableMapping["Relationship", _S], typing.Generic[_E, _S]): """A dedicated mutable mapping to manage the relationships of an entity.""" def __init__(self, entity: _E): self._inner = entity._data().relationships self._entity = entity self._ontology = entity._ontology() def __getitem__(self, item: "Relationship") -> _S: if item.id not in self._inner: raise KeyError(item) s = self._entity._Set() s._ids = self._inner[item.id] s._ontology = self._ontology return s def __delitem__(self, item: "Relationship"): if item.id not in self._inner: raise KeyError(item) del self._inner[item.id] def __len__(self) -> int: return len(self._inner) def __iter__(self) -> Iterator["Relationship"]: from ..relationship import Relationship return (self._ontology.get_relationship(id_) for id_ in self._inner) def __setitem__(self, key: "Relationship", entities: Iterable[_E]): if key._ontology() is not self._ontology: raise ValueError("cannot use a relationship from a different ontology") self._inner[key.id] = {entity.id for entity in entities}