Fragments and views
Map a node with a NodeFragment, and compose fragments and relationships into a GraphView, which loads in one
statement:
from typing import Annotated
from drivine import GraphView, NodeFragment, NodeId, Relationship, RelationshipFragment, Root, TargetNode
class Person(NodeFragment, labels=["Person"]): uuid: Annotated[str, NodeId()] name: str bio: str | None = None
class Organization(NodeFragment, labels=["Organization"]): uuid: Annotated[str, NodeId()] name: str
class WorkHistory(RelationshipFragment): # a relationship's properties, and the node it leads to start_date: str role: str target: Annotated[Organization, TargetNode()]
class PersonCareer(GraphView): person: Annotated[Person, Root()] employment_history: Annotated[list[WorkHistory], Relationship("WORKS_FOR")] = []gom = drivine.graph_object_manager() # from DrivineAssembly, or StatelessGraphObjectManager(pm)
career = await gom.load(PersonCareer, uuid)leads = await gom.load_all(PersonCareer, "n.bio CONTAINS $text", {"text": "Lead"}) # Cypher over the root, ntotal = await gom.count(Person)
