Exemple #1
0
 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)
Exemple #2
0
 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
Exemple #3
0
 def clear(self) -> None:
     for key in revert.match_keys(f'{self.__binding__}'):
         revert.delete(key)
     ogm.update_node(self.__instance__)
Exemple #4
0
 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
Exemple #5
0
 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