Пример #1
0
 def __init__(self, iterable, properties):
     Walkable.__init__(self, iterable)
     PropertyDict.__init__(self, properties)
     uuid = str(uuid4())
     while "0" <= uuid[-7] <= "9":
         uuid = str(uuid4())
     self.__uuid__ = uuid
Пример #2
0
 def test_inequality(self):
     first = PropertyDict({
         "name": "Alice",
         "age": 33,
         "colours": ["red", "purple"]
     })
     second = PropertyDict({
         "name": "Bob",
         "age": 44,
         "colours": ["blue", "purple"]
     })
     assert first != second
Пример #3
0
    def node_entry(self, key, entry):
        def add_labels(*labels_):
            for label in labels_:
                self._nodes_by_label.setdefault(label, set()).add(key)

        def remove_labels(*labels_):
            for label in labels_:
                try:
                    self._nodes_by_label[label].discard(key)
                except KeyError:
                    pass

        labels, properties = entry
        return NodeEntry(
            ReactiveSet(labels, on_add=add_labels, on_remove=remove_labels),
            PropertyDict(properties))
Пример #4
0
 def __db_pull__(self, tx):
     related_objects = {}
     for r in tx.graph.match(**self.__match_args):
         nodes = []
         n = self.node
         a = r.start_node
         b = r.end_node
         if a == b:
             nodes.append(a)
         else:
             if self.__start_node and a != n:
                 nodes.append(r.start_node)
             if self.__end_node and b != n:
                 nodes.append(r.end_node)
         for node in nodes:
             related_object = self.related_class.wrap(node)
             related_objects[node] = (related_object, PropertyDict(r))
     self._related_objects[:] = related_objects.values()
Пример #5
0
    def add(self, obj, properties=None, **kwproperties):
        """ Add or update a related object.

        :param obj: the :py:class:`.Model` to relate
        :param properties: dictionary of properties to attach to the relationship (optional)
        :param kwproperties: additional keyword properties (optional)
        """
        if not isinstance(obj, Model):
            raise TypeError("Related objects must be Model instances")
        related_objects = self._related_objects
        properties = dict(properties or {}, **kwproperties)
        added = False
        for i, (related_object, p) in enumerate(related_objects):
            if related_object == obj:
                related_objects[i] = (obj, PropertyDict(p, **properties))
                added = True
        if not added:
            related_objects.append((obj, properties))
Пример #6
0
 def test_deleter(self):
     properties = PropertyDict({"name": "Alice", "age": 33})
     del properties["age"]
     assert properties == {"name": "Alice"}
Пример #7
0
 def test_setdefault_with_default_with_non_existent(self):
     properties = PropertyDict({"name": "Alice"})
     value = properties.setdefault("age", 33)
     assert properties == {"name": "Alice", "age": 33}
     assert value == 33
Пример #8
0
 def test_setdefault_without_default_with_non_existent(self):
     properties = PropertyDict({"name": "Alice"})
     value = properties.setdefault("age")
     assert properties == {"name": "Alice"}
     assert value is None
Пример #9
0
 def test_setdefault_without_default_with_existing(self):
     properties = PropertyDict({"name": "Alice", "age": 33})
     value = properties.setdefault("age")
     assert properties == {"name": "Alice", "age": 33}
     assert value == 33
Пример #10
0
 def test_setter_with_none_for_non_existent(self):
     properties = PropertyDict({"name": "Alice"})
     properties["age"] = None
     assert properties == {"name": "Alice"}
Пример #11
0
 def test_setter_with_none(self):
     properties = PropertyDict({"name": "Alice", "age": 33})
     properties["age"] = None
     assert properties == {"name": "Alice"}
Пример #12
0
 def test_setter(self):
     properties = PropertyDict({"name": "Alice"})
     properties["age"] = 33
     assert properties == {"name": "Alice", "age": 33}
Пример #13
0
 def test_getter_with_none(self):
     properties = PropertyDict({"name": "Alice"})
     assert properties["age"] is None
Пример #14
0
 def test_getter(self):
     properties = PropertyDict({"name": "Alice"})
     assert properties["name"] == "Alice"
Пример #15
0
 def relationship_entry(cls, entry):
     type_, nodes, properties = entry
     return RelationshipEntry(type_, tuple(nodes), PropertyDict(properties))