def delete(self) -> None: for edge in set(self.edges()): edge.delete() uid = object.__getattribute__(self, '__uid__') for key in revert.match_keys(f'{config.base}/objects/{uid}'): revert.delete(key) for cls in self.__class__.mro(): if issubclass(cls, Node): # todo: use set # todo: don't use raw revert stuff anywhere. Always use bindings revert.delete( f'{config.base}/classes/{cls.class_reference()}/objects/{uid}' ) ogm.delete_node(self)
def edges(self, with_node: Optional[Node] = None, edge_type: Optional[Type[Edge]] = None) -> Iterable[Edge]: if edge_type is None: edge_type = Edge if with_node is None: for key in revert.match_keys( f'{config.base}/parent_edges/{encode(self)}/'): with_node = ogm.get_node(key.split('/')[3]) yield from self.edges(with_node) for key in revert.match_keys( f'{config.base}/child_edges/{encode(self)}/'): with_node = ogm.get_node(key.split('/')[3]) yield from self.edges(with_node) for key in revert.match_keys( f'{config.base}/bi_edges/{encode(self)}/'): with_node = ogm.get_node(key.split('/')[3]) yield from self.edges(with_node) return for key in revert.match_keys( f'{config.base}/parent_edges/{encode(self)}/{encode(with_node)}/{edge_type.class_reference()}/' ): cls: Type[Edge] = ogm.edge_classes[key.split('/')[-1].strip()] edge: Edge = object.__new__(cls) object.__setattr__(edge, '__parent__', self) object.__setattr__(edge, '__child__', with_node) yield edge for key in revert.match_keys( f'{config.base}/child_edges/{encode(self)}/{encode(with_node)}/{edge_type.class_reference()}/' ): cls: Type[Edge] = ogm.edge_classes[key.split('/')[-1].strip()] edge: Edge = object.__new__(cls) object.__setattr__(edge, '__parent__', with_node) object.__setattr__(edge, '__child__', edge) yield edge for key in revert.match_keys( f'{config.base}/bi_edges/{encode(self)}/{encode(with_node)}/{edge_type.class_reference()}/' ): cls: Type[Edge] = ogm.edge_classes[key.split('/')[-1].strip()] edge: Edge = object.__new__(cls) object.__setattr__(edge, '__node_1__', self) object.__setattr__(edge, '__node_2__', with_node) yield edge
def clear(self) -> None: for key in revert.match_keys(f'{self.__binding__}'): revert.delete(key) ogm.update_node(self.__instance__)
def __iter__(self) -> Iterator[TVal]: pattern = f'{self.__binding__}' start = len(pattern) + 1 for key in revert.match_keys(pattern): value = ogm.decode(key[start:]) yield value
def keys(self) -> AbstractSet[TKey]: pattern = f'{self.__binding__}' start = len(pattern) + 1 for key in revert.match_keys(pattern): k = ogm.decode(key[start:]) yield k