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
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
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))
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()
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))
def test_deleter(self): properties = PropertyDict({"name": "Alice", "age": 33}) del properties["age"] assert properties == {"name": "Alice"}
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
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
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
def test_setter_with_none_for_non_existent(self): properties = PropertyDict({"name": "Alice"}) properties["age"] = None assert properties == {"name": "Alice"}
def test_setter_with_none(self): properties = PropertyDict({"name": "Alice", "age": 33}) properties["age"] = None assert properties == {"name": "Alice"}
def test_setter(self): properties = PropertyDict({"name": "Alice"}) properties["age"] = 33 assert properties == {"name": "Alice", "age": 33}
def test_getter_with_none(self): properties = PropertyDict({"name": "Alice"}) assert properties["age"] is None
def test_getter(self): properties = PropertyDict({"name": "Alice"}) assert properties["name"] == "Alice"
def relationship_entry(cls, entry): type_, nodes, properties = entry return RelationshipEntry(type_, tuple(nodes), PropertyDict(properties))