Source code for openfisca_core.entities.role
from __future__ import annotations
from collections.abc import Iterable
from . import types as t
from ._description import _Description
[docs]
class Role:
"""The role of an ``Entity`` within a ``GroupEntity``.
Each ``Entity`` related to a ``GroupEntity`` has a ``Role``. For example,
if you have a family, its roles could include a parent, a child, and so on.
Or if you have a tax household, its roles could include the taxpayer, a
spouse, several dependents, and the like.
Args:
description: A description of the Role.
entity: The Entity to which the Role belongs.
Examples:
>>> from openfisca_core import entities
>>> entity = entities.GroupEntity("key", "plural", "label", "doc", [])
>>> role = entities.Role({"key": "parent"}, entity)
>>> repr(entities.Role)
"<class 'openfisca_core.entities.role.Role'>"
>>> repr(role)
'Role(parent)'
>>> str(role)
'Role(parent)'
>>> {role}
{Role(parent)}
>>> role.key
'parent'
"""
#: The ``GroupEntity`` the Role belongs to.
entity: t.GroupEntity
#: A description of the ``Role``.
description: _Description
#: Max number of members.
max: None | int = None
#: A list of subroles.
subroles: None | Iterable[Role] = None
@property
def key(self) -> t.RoleKey:
"""A key to identify the ``Role``."""
return t.RoleKey(self.description.key)
@property
def plural(self) -> None | t.RolePlural:
"""The ``key`` pluralised."""
if (plural := self.description.plural) is None:
return None
return t.RolePlural(plural)
@property
def label(self) -> None | str:
"""A summary description."""
return self.description.label
@property
def doc(self) -> None | str:
"""A full description, non-indented."""
return self.description.doc
def __init__(self, description: t.RoleParams, entity: t.GroupEntity) -> None:
self.description = _Description(
key=description["key"],
plural=description.get("plural"),
label=description.get("label"),
doc=description.get("doc"),
)
self.entity = entity
self.max = description.get("max")
def __repr__(self) -> str:
return f"Role({self.key})"
__all__ = ["Role"]