Source code for pycognaize.common.field_collection

import logging
from collections import OrderedDict

from pycognaize.common.lazy_group_dict import LazyGroupDict
from pycognaize.document.field import Field


[docs] class FieldCollection(OrderedDict): """Contains fields included in the document by also providing functionality to group fields by group_name and group_key""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._groups = None self._groups_by_key = None @property def groups(self) -> dict: """Return Groups""" if self._groups is None: self._groups = LazyGroupDict(self).groups return self._groups @property def key_groups(self) -> dict: """Return Groups""" if self._groups_by_key is None: self._groups_by_key = LazyGroupDict(self).groups_by_key return self._groups_by_key
[docs] def groups_by_key(self, group_key: str) -> dict: """Returns groups that contain the given group_key""" if group_key in self.key_groups.keys(): return self.key_groups[group_key] else: raise KeyError
[docs] def groups_by_name(self, name: str) -> dict: """Returns fields that are contained in group with the given group name""" if name in self.groups.keys(): return self.groups[name] else: raise KeyError
[docs] def groups_by_field(self, field: Field) -> list: """Returns groups that contain the given field""" name_group = self.groups_by_name(field.group_name) if field.group_key in name_group: return name_group[field.group_key] else: logging.warning(f"Field {field} is not in any group") return []