from typing import Dict

class _Entity:
    def __init__(self, entity_uuid : str, parent=None):
        if entity_uuid is None:
            raise AttributeError('entity_uuid is None')
        if (parent is None) or (not isinstance(parent, _Entity)):
            raise AttributeError('parent must be an instance of _Entity')
        self._entity_uuid = entity_uuid
        self._parent = parent

    @property
    def parent(self) -> '_Entity': return self._parent

    @property
    def database_engine(self) -> object: return self._parent.database_engine

    def load(self):
        raise NotImplementedError()

    def create(self):
        raise NotImplementedError()

    def delete(self):
        raise NotImplementedError()

    def dump_id(self) -> Dict:
        raise NotImplementedError()

    def dump(self) -> Dict:
        raise NotImplementedError()
