Dereferencing GraphItems¶
GraphItems use properties with implicit registry access::
edge.predecessor # returns Node via self.graph.get()
edge.successor # property, no args
Records don’t have self.graph, so they use methods with explicit registry parameter::
record.origin(registry) # returns Entity via passed registry
Collections & Queries return fresh iterators::
subgraph.members # Iterator[GraphItem], not cached
node.edges_in() # Iterator[Edge], fresh lookup
registry.find_all(Selector(label='x')) # Iterator[Entity], filtered
All iterators are single-use. Materialize explicitly if multiple passes needed::
# Single iteration: direct use
for member in subgraph.members:
process(member)
# Multiple iterations: materialize first
members = list(subgraph.members)
first_pass(members)
second_pass(members)
This pattern ensures queries always reflect current state and avoids hidden cache invalidation complexity.