Skip to content

Commit a6c6d0d

Browse files
prasmussen15claude
andauthored
Add NotImplementedError fallback for GraphOperationsInterface methods (#1154)
* Add NotImplementedError fallback for GraphOperationsInterface methods Allow GraphOperationsInterface to be used for selective method overriding by catching NotImplementedError and falling back to default behavior. This change wraps all GraphOperationsInterface calls in try/except blocks so that implementations can raise NotImplementedError for methods they don't need to customize, allowing the built-in default behavior to execute. Updated methods in nodes.py: - Node: delete, delete_by_group_id, delete_by_uuids - EpisodicNode: save, get_by_uuid, get_by_uuids, get_by_group_ids - EntityNode: load_name_embedding, save, get_by_uuid, get_by_uuids, get_by_group_ids - CommunityNode: save, get_by_uuid, get_by_uuids, get_by_group_ids - SagaNode: save, delete, get_by_uuid, get_by_uuids, get_by_group_ids Updated methods in edges.py: - Edge: delete, delete_by_uuids - EpisodicEdge: save, get_by_uuid, get_by_uuids, get_by_group_ids - EntityEdge: load_fact_embedding, save, get_by_uuid, get_by_uuids, get_by_group_ids - CommunityEdge: save, get_by_uuid, get_by_uuids, get_by_group_ids - HasEpisodeEdge: save, delete, get_by_uuid, get_by_uuids, get_by_group_ids - NextEpisodeEdge: save, delete, get_by_uuid, get_by_uuids, get_by_group_ids Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add missing GraphOperationsInterface method stubs Add method stubs for all node and edge CRUD operations that were missing from the interface: Node methods: - node_get_by_uuid, node_get_by_uuids, node_get_by_group_ids - episodic_node_get_by_uuid, episodic_node_get_by_uuids, episodic_node_get_by_group_ids - community_node_save, community_node_delete, community_node_save_bulk - community_node_delete_by_group_id, community_node_delete_by_uuids - community_node_get_by_uuid, community_node_get_by_uuids, community_node_get_by_group_ids - saga_node_save, saga_node_delete, saga_node_save_bulk - saga_node_delete_by_group_id, saga_node_delete_by_uuids - saga_node_get_by_uuid, saga_node_get_by_uuids, saga_node_get_by_group_ids Edge methods: - edge_get_by_uuid, edge_get_by_uuids, edge_get_by_group_ids - episodic_edge_save, episodic_edge_delete, episodic_edge_delete_by_uuids - episodic_edge_get_by_uuid, episodic_edge_get_by_uuids, episodic_edge_get_by_group_ids - community_edge_save, community_edge_delete, community_edge_delete_by_uuids - community_edge_get_by_uuid, community_edge_get_by_uuids, community_edge_get_by_group_ids - has_episode_edge_save, has_episode_edge_delete, has_episode_edge_save_bulk - has_episode_edge_delete_by_uuids, has_episode_edge_get_by_uuid - has_episode_edge_get_by_uuids, has_episode_edge_get_by_group_ids - next_episode_edge_save, next_episode_edge_delete, next_episode_edge_save_bulk - next_episode_edge_delete_by_uuids, next_episode_edge_get_by_uuid - next_episode_edge_get_by_uuids, next_episode_edge_get_by_group_ids Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * update --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
1 parent e35600c commit a6c6d0d

File tree

3 files changed

+612
-13
lines changed

3 files changed

+612
-13
lines changed

graphiti_core/driver/graph_operations/graph_operations.py

Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,29 @@ async def node_delete_by_uuids(
6565
) -> None:
6666
raise NotImplementedError
6767

68+
# -----------------
69+
# Node: Read
70+
# -----------------
71+
72+
async def node_get_by_uuid(self, _cls: Any, driver: Any, uuid: str) -> Any:
73+
"""Retrieve a single node by UUID."""
74+
raise NotImplementedError
75+
76+
async def node_get_by_uuids(self, _cls: Any, driver: Any, uuids: list[str]) -> list[Any]:
77+
"""Retrieve multiple nodes by UUIDs."""
78+
raise NotImplementedError
79+
80+
async def node_get_by_group_ids(
81+
self,
82+
_cls: Any,
83+
driver: Any,
84+
group_ids: list[str],
85+
limit: int | None = None,
86+
uuid_cursor: str | None = None,
87+
) -> list[Any]:
88+
"""Retrieve nodes by group IDs with optional pagination."""
89+
raise NotImplementedError
90+
6891
# --------------------------
6992
# Node: Embeddings (load)
7093
# --------------------------
@@ -138,6 +161,97 @@ async def episodic_node_delete_by_uuids(
138161
) -> None:
139162
raise NotImplementedError
140163

164+
# -----------------------
165+
# EpisodicNode: Read
166+
# -----------------------
167+
168+
async def episodic_node_get_by_uuid(self, _cls: Any, driver: Any, uuid: str) -> Any:
169+
"""Retrieve a single episodic node by UUID."""
170+
raise NotImplementedError
171+
172+
async def episodic_node_get_by_uuids(
173+
self, _cls: Any, driver: Any, uuids: list[str]
174+
) -> list[Any]:
175+
"""Retrieve multiple episodic nodes by UUIDs."""
176+
raise NotImplementedError
177+
178+
async def episodic_node_get_by_group_ids(
179+
self,
180+
_cls: Any,
181+
driver: Any,
182+
group_ids: list[str],
183+
limit: int | None = None,
184+
uuid_cursor: str | None = None,
185+
) -> list[Any]:
186+
"""Retrieve episodic nodes by group IDs with optional pagination."""
187+
raise NotImplementedError
188+
189+
# -----------------------
190+
# CommunityNode: Save/Delete
191+
# -----------------------
192+
193+
async def community_node_save(self, node: Any, driver: Any) -> None:
194+
"""Persist (create or update) a single community node."""
195+
raise NotImplementedError
196+
197+
async def community_node_delete(self, node: Any, driver: Any) -> None:
198+
raise NotImplementedError
199+
200+
async def community_node_save_bulk(
201+
self,
202+
_cls: Any,
203+
driver: Any,
204+
transaction: Any,
205+
nodes: list[Any],
206+
batch_size: int = 100,
207+
) -> None:
208+
"""Persist (create or update) many community nodes in batches."""
209+
raise NotImplementedError
210+
211+
async def community_node_delete_by_group_id(
212+
self,
213+
_cls: Any,
214+
driver: Any,
215+
group_id: str,
216+
batch_size: int = 100,
217+
) -> None:
218+
raise NotImplementedError
219+
220+
async def community_node_delete_by_uuids(
221+
self,
222+
_cls: Any,
223+
driver: Any,
224+
uuids: list[str],
225+
group_id: str | None = None,
226+
batch_size: int = 100,
227+
) -> None:
228+
raise NotImplementedError
229+
230+
# -----------------------
231+
# CommunityNode: Read
232+
# -----------------------
233+
234+
async def community_node_get_by_uuid(self, _cls: Any, driver: Any, uuid: str) -> Any:
235+
"""Retrieve a single community node by UUID."""
236+
raise NotImplementedError
237+
238+
async def community_node_get_by_uuids(
239+
self, _cls: Any, driver: Any, uuids: list[str]
240+
) -> list[Any]:
241+
"""Retrieve multiple community nodes by UUIDs."""
242+
raise NotImplementedError
243+
244+
async def community_node_get_by_group_ids(
245+
self,
246+
_cls: Any,
247+
driver: Any,
248+
group_ids: list[str],
249+
limit: int | None = None,
250+
uuid_cursor: str | None = None,
251+
) -> list[Any]:
252+
"""Retrieve community nodes by group IDs with optional pagination."""
253+
raise NotImplementedError
254+
141255
# -----------------------
142256
# SagaNode: Save/Delete
143257
# -----------------------
@@ -179,6 +293,29 @@ async def saga_node_delete_by_uuids(
179293
) -> None:
180294
raise NotImplementedError
181295

296+
# -----------------------
297+
# SagaNode: Read
298+
# -----------------------
299+
300+
async def saga_node_get_by_uuid(self, _cls: Any, driver: Any, uuid: str) -> Any:
301+
"""Retrieve a single saga node by UUID."""
302+
raise NotImplementedError
303+
304+
async def saga_node_get_by_uuids(self, _cls: Any, driver: Any, uuids: list[str]) -> list[Any]:
305+
"""Retrieve multiple saga nodes by UUIDs."""
306+
raise NotImplementedError
307+
308+
async def saga_node_get_by_group_ids(
309+
self,
310+
_cls: Any,
311+
driver: Any,
312+
group_ids: list[str],
313+
limit: int | None = None,
314+
uuid_cursor: str | None = None,
315+
) -> list[Any]:
316+
"""Retrieve saga nodes by group IDs with optional pagination."""
317+
raise NotImplementedError
318+
182319
# -----------------
183320
# Edge: Save/Delete
184321
# -----------------
@@ -210,6 +347,29 @@ async def edge_delete_by_uuids(
210347
) -> None:
211348
raise NotImplementedError
212349

350+
# -----------------
351+
# Edge: Read
352+
# -----------------
353+
354+
async def edge_get_by_uuid(self, _cls: Any, driver: Any, uuid: str) -> Any:
355+
"""Retrieve a single edge by UUID."""
356+
raise NotImplementedError
357+
358+
async def edge_get_by_uuids(self, _cls: Any, driver: Any, uuids: list[str]) -> list[Any]:
359+
"""Retrieve multiple edges by UUIDs."""
360+
raise NotImplementedError
361+
362+
async def edge_get_by_group_ids(
363+
self,
364+
_cls: Any,
365+
driver: Any,
366+
group_ids: list[str],
367+
limit: int | None = None,
368+
uuid_cursor: str | None = None,
369+
) -> list[Any]:
370+
"""Retrieve edges by group IDs with optional pagination."""
371+
raise NotImplementedError
372+
213373
# -----------------
214374
# Edge: Embeddings (load)
215375
# -----------------
@@ -231,6 +391,96 @@ async def edge_load_embeddings_bulk(
231391
"""
232392
raise NotImplementedError
233393

394+
# ---------------------------
395+
# EpisodicEdge: Save/Delete
396+
# ---------------------------
397+
398+
async def episodic_edge_save(self, edge: Any, driver: Any) -> None:
399+
"""Persist (create or update) a single episodic edge (MENTIONS)."""
400+
raise NotImplementedError
401+
402+
async def episodic_edge_delete(self, edge: Any, driver: Any) -> None:
403+
raise NotImplementedError
404+
405+
async def episodic_edge_delete_by_uuids(
406+
self,
407+
_cls: Any,
408+
driver: Any,
409+
uuids: list[str],
410+
group_id: str | None = None,
411+
) -> None:
412+
raise NotImplementedError
413+
414+
# ---------------------------
415+
# EpisodicEdge: Read
416+
# ---------------------------
417+
418+
async def episodic_edge_get_by_uuid(self, _cls: Any, driver: Any, uuid: str) -> Any:
419+
"""Retrieve a single episodic edge by UUID."""
420+
raise NotImplementedError
421+
422+
async def episodic_edge_get_by_uuids(
423+
self, _cls: Any, driver: Any, uuids: list[str]
424+
) -> list[Any]:
425+
"""Retrieve multiple episodic edges by UUIDs."""
426+
raise NotImplementedError
427+
428+
async def episodic_edge_get_by_group_ids(
429+
self,
430+
_cls: Any,
431+
driver: Any,
432+
group_ids: list[str],
433+
limit: int | None = None,
434+
uuid_cursor: str | None = None,
435+
) -> list[Any]:
436+
"""Retrieve episodic edges by group IDs with optional pagination."""
437+
raise NotImplementedError
438+
439+
# ---------------------------
440+
# CommunityEdge: Save/Delete
441+
# ---------------------------
442+
443+
async def community_edge_save(self, edge: Any, driver: Any) -> None:
444+
"""Persist (create or update) a single community edge (HAS_MEMBER)."""
445+
raise NotImplementedError
446+
447+
async def community_edge_delete(self, edge: Any, driver: Any) -> None:
448+
raise NotImplementedError
449+
450+
async def community_edge_delete_by_uuids(
451+
self,
452+
_cls: Any,
453+
driver: Any,
454+
uuids: list[str],
455+
group_id: str | None = None,
456+
) -> None:
457+
raise NotImplementedError
458+
459+
# ---------------------------
460+
# CommunityEdge: Read
461+
# ---------------------------
462+
463+
async def community_edge_get_by_uuid(self, _cls: Any, driver: Any, uuid: str) -> Any:
464+
"""Retrieve a single community edge by UUID."""
465+
raise NotImplementedError
466+
467+
async def community_edge_get_by_uuids(
468+
self, _cls: Any, driver: Any, uuids: list[str]
469+
) -> list[Any]:
470+
"""Retrieve multiple community edges by UUIDs."""
471+
raise NotImplementedError
472+
473+
async def community_edge_get_by_group_ids(
474+
self,
475+
_cls: Any,
476+
driver: Any,
477+
group_ids: list[str],
478+
limit: int | None = None,
479+
uuid_cursor: str | None = None,
480+
) -> list[Any]:
481+
"""Retrieve community edges by group IDs with optional pagination."""
482+
raise NotImplementedError
483+
234484
# ---------------------------
235485
# HasEpisodeEdge: Save/Delete
236486
# ---------------------------
@@ -262,6 +512,31 @@ async def has_episode_edge_delete_by_uuids(
262512
) -> None:
263513
raise NotImplementedError
264514

515+
# ---------------------------
516+
# HasEpisodeEdge: Read
517+
# ---------------------------
518+
519+
async def has_episode_edge_get_by_uuid(self, _cls: Any, driver: Any, uuid: str) -> Any:
520+
"""Retrieve a single has_episode edge by UUID."""
521+
raise NotImplementedError
522+
523+
async def has_episode_edge_get_by_uuids(
524+
self, _cls: Any, driver: Any, uuids: list[str]
525+
) -> list[Any]:
526+
"""Retrieve multiple has_episode edges by UUIDs."""
527+
raise NotImplementedError
528+
529+
async def has_episode_edge_get_by_group_ids(
530+
self,
531+
_cls: Any,
532+
driver: Any,
533+
group_ids: list[str],
534+
limit: int | None = None,
535+
uuid_cursor: str | None = None,
536+
) -> list[Any]:
537+
"""Retrieve has_episode edges by group IDs with optional pagination."""
538+
raise NotImplementedError
539+
265540
# ----------------------------
266541
# NextEpisodeEdge: Save/Delete
267542
# ----------------------------
@@ -292,3 +567,28 @@ async def next_episode_edge_delete_by_uuids(
292567
group_id: str | None = None,
293568
) -> None:
294569
raise NotImplementedError
570+
571+
# ----------------------------
572+
# NextEpisodeEdge: Read
573+
# ----------------------------
574+
575+
async def next_episode_edge_get_by_uuid(self, _cls: Any, driver: Any, uuid: str) -> Any:
576+
"""Retrieve a single next_episode edge by UUID."""
577+
raise NotImplementedError
578+
579+
async def next_episode_edge_get_by_uuids(
580+
self, _cls: Any, driver: Any, uuids: list[str]
581+
) -> list[Any]:
582+
"""Retrieve multiple next_episode edges by UUIDs."""
583+
raise NotImplementedError
584+
585+
async def next_episode_edge_get_by_group_ids(
586+
self,
587+
_cls: Any,
588+
driver: Any,
589+
group_ids: list[str],
590+
limit: int | None = None,
591+
uuid_cursor: str | None = None,
592+
) -> list[Any]:
593+
"""Retrieve next_episode edges by group IDs with optional pagination."""
594+
raise NotImplementedError

0 commit comments

Comments
 (0)