Source code for openfisca_core.entities.group_entity
from openfisca_core.entities import Entity, Role
[docs]class GroupEntity(Entity):
"""Represents an entity containing several others with different roles.
A :class:`.GroupEntity` represents an :class:`.Entity` containing
several other :class:`.Entity` with different :class:`.Role`, and on
which calculations can be run.
Args:
key: A key to identify the group entity.
plural: The ``key``, pluralised.
label: A summary description.
doc: A full description.
roles: The list of :class:`.Role` of the group entity.
containing_entities: The list of keys of group entities whose members
are guaranteed to be a superset of this group's entities.
.. versionchanged:: 35.7.0
Added ``containing_entities``, that allows the defining of group
entities which entirely contain other group entities.
"""
def __init__(self, key, plural, label, doc, roles, containing_entities = ()):
super().__init__(key, plural, label, doc)
self.roles_description = roles
self.roles = []
for role_description in roles:
role = Role(role_description, self)
setattr(self, role.key.upper(), role)
self.roles.append(role)
if role_description.get('subroles'):
role.subroles = []
for subrole_key in role_description['subroles']:
subrole = Role({'key': subrole_key, 'max': 1}, self)
setattr(self, subrole.key.upper(), subrole)
role.subroles.append(subrole)
role.max = len(role.subroles)
self.flattened_roles = sum([role2.subroles or [role2] for role2 in self.roles], [])
self.is_person = False
self.containing_entities = containing_entities