@@ -375,6 +375,8 @@ def analysis_cache(self) -> KeyValueStore:
375375class DatabaseObject :
376376 def __init__ (self , handle ):
377377 self .handle = core .handle_of_type (handle , core .BNDatabaseObject )
378+ self ._children = None
379+ self ._dependencies = None
378380
379381 def __del__ (self ):
380382 core .BNFreeDatabaseObject (self .handle )
@@ -411,6 +413,11 @@ def parent(self) -> Optional['DatabaseObject']:
411413 @property
412414 def children (self ) -> Dict [str , 'DatabaseObject' ]:
413415 """Get dictionary of child objects (read-only)"""
416+ if self ._children is None :
417+ self ._children = self ._generate_children ()
418+ return self ._children
419+
420+ def _generate_children (self ) -> Dict [str , 'DatabaseObject' ]:
414421 names = ctypes .POINTER (ctypes .c_char_p )()
415422 objects = ctypes .POINTER (core .BNDatabaseObjectHandle )()
416423 count = core .BNGetDatabaseObjectChildren (
@@ -431,6 +438,11 @@ def children(self) -> Dict[str, 'DatabaseObject']:
431438 @property
432439 def dependencies (self ) -> List [str ]:
433440 """Get list of dependencies for this database object (read-only)"""
441+ if self ._dependencies is None :
442+ self ._dependencies = self ._generate_dependencies ()
443+ return self ._dependencies
444+
445+ def _generate_dependencies (self ) -> List [str ]:
434446 count = ctypes .c_size_t ()
435447 deps = core .BNGetDatabaseObjectDependencies (self .handle , ctypes .byref (count ))
436448 try :
@@ -503,10 +515,17 @@ def is_applied(self, object: 'DiffObject') -> bool:
503515class DiffObject :
504516 def __init__ (self , handle ):
505517 self .handle = core .handle_of_type (handle , core .BNDiffObject )
518+ self ._children = None
506519
507520 def __del__ (self ):
508521 core .BNFreeDiffObject (self .handle )
509522
523+ def __str__ (self ):
524+ return f"<diff { self .base } /{ self .left } /{ self .right } >"
525+
526+ def __repr__ (self ):
527+ return f"<diff { self .base } /{ self .left } /{ self .right } >"
528+
510529 @property
511530 def base (self ) -> Optional [str ]:
512531 """Get the base path for the diff object (read-only)"""
@@ -534,6 +553,11 @@ def right(self) -> Optional[str]:
534553 @property
535554 def children (self ) -> Dict [str , 'DiffObject' ]:
536555 """Get dictionary of child diff objects (read-only)"""
556+ if self ._children is None :
557+ self ._children = self ._generate_children ()
558+ return self ._children
559+
560+ def _generate_children (self ) -> Dict [str , 'DiffObject' ]:
537561 names = ctypes .POINTER (ctypes .c_char_p )()
538562 objects = ctypes .POINTER (ctypes .POINTER (core .BNDiffObject ))()
539563 count = core .BNGetDiffObjectChildren (
0 commit comments