Skip to content

Commit 66b3a9b

Browse files
authored
Support update flags in summary message (#571)
`Summary.counters.contains_updates` and `.contains_system_updates` will use the values provided by the server if present. Else, the driver falls back to the previous behavior (computing the values). This change will also make the driver ignore unknown counter names in the summary message's 'stats' field.
1 parent 6bae978 commit 66b3a9b

File tree

1 file changed

+36
-8
lines changed

1 file changed

+36
-8
lines changed

neo4j/work/summary.py

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -129,24 +129,52 @@ class SummaryCounters:
129129
#:
130130
system_updates = 0
131131

132+
_contains_updates = None
133+
_contains_system_updates = None
134+
132135
def __init__(self, statistics):
136+
key_to_attr_name = {
137+
"nodes-created": "nodes_created",
138+
"nodes-deleted": "nodes_deleted",
139+
"relationships-created": "relationships_created",
140+
"relationships-deleted": "relationships_deleted",
141+
"properties-set": "properties_set",
142+
"labels-added": "labels_added",
143+
"labels-removed": "labels_removed",
144+
"indexes-added": "indexes_added",
145+
"indexes-removed": "indexes_removed",
146+
"constraints-added": "constraints_added",
147+
"constraints-removed": "constraints_removed",
148+
"system-updates": "system_updates",
149+
"contains-updates": "_contains_updates",
150+
"contains-system-updates": "_contains_system_updates",
151+
}
133152
for key, value in dict(statistics).items():
134-
key = key.replace("-", "_")
135-
setattr(self, key, value)
153+
attr_name = key_to_attr_name.get(key)
154+
if attr_name:
155+
setattr(self, attr_name, value)
136156

137157
def __repr__(self):
138158
return repr(vars(self))
139159

140160
@property
141161
def contains_updates(self):
142-
"""True if any of the counters except for system_updates, are greater than 0. Otherwise False."""
143-
return bool(self.nodes_created or self.nodes_deleted or
144-
self.relationships_created or self.relationships_deleted or
145-
self.properties_set or self.labels_added or self.labels_removed or
146-
self.indexes_added or self.indexes_removed or
147-
self.constraints_added or self.constraints_removed)
162+
"""True if any of the counters except for system_updates, are greater
163+
than 0. Otherwise False."""
164+
if self._contains_updates is not None:
165+
return self._contains_updates
166+
return bool(
167+
self.nodes_created or self.nodes_deleted
168+
or self.relationships_created or self.relationships_deleted
169+
or self.properties_set or self.labels_added
170+
or self.labels_removed or self.indexes_added
171+
or self.indexes_removed or self.constraints_added
172+
or self.constraints_removed
173+
)
148174

149175
@property
150176
def contains_system_updates(self):
151177
"""True if the system database was updated, otherwise False."""
178+
if self._contains_system_updates is not None:
179+
return self._contains_system_updates
152180
return self.system_updates > 0

0 commit comments

Comments
 (0)