@@ -657,31 +657,39 @@ cdef class SearchIter(OperationContext):
657
657
"""Iterate a search for objects on a session."""
658
658
659
659
cdef AttributeList template
660
+ cdef CK_ULONG batch_size
660
661
661
- def __init__ (self , session , attrs ):
662
+ def __init__ (self , session , attrs , batch_size ):
662
663
cdef AttributeList template = AttributeList (attrs )
663
664
self .template = template
665
+ self .batch_size = batch_size
664
666
super ().__init__ (session )
665
667
666
668
def __iter__ (self ):
667
669
return self
668
670
671
+ def _batch_iter (self , results , count ):
672
+ for ix in range (count ):
673
+ yield make_object (self .session , results [ix ])
674
+
669
675
def __next__ (self ):
670
- """Get the next object ."""
676
+ """Get the next batch of objects ."""
671
677
cdef CK_SESSION_HANDLE handle = self .session .handle
672
678
cdef CK_OBJECT_HANDLE obj
673
679
cdef CK_ULONG count
674
680
cdef CK_RV retval
675
681
682
+ cdef CK_OBJECT_HANDLE [:] results = CK_ULONG_buffer (self .batch_size )
683
+
676
684
with nogil :
677
- retval = self .session .funclist .C_FindObjects (handle , & obj , 1 , & count )
685
+ retval = self .session .funclist .C_FindObjects (handle , & results [ 0 ], self . batch_size , & count )
678
686
assertRV (retval )
679
687
680
688
if count == 0 :
681
689
self ._finalize ()
682
690
raise StopIteration ()
683
691
else :
684
- return make_object ( self .session , obj )
692
+ return self ._batch_iter ( results , count )
685
693
686
694
def _initiate (self ):
687
695
cdef CK_SESSION_HANDLE handle = self .session .handle
@@ -830,9 +838,10 @@ cdef class Session(HasFuncList, types.Session):
830
838
retval = self .funclist .C_CloseSession (handle )
831
839
assertRV (retval )
832
840
833
- def get_objects (self , attrs = None ):
834
- with SearchIter (self , attrs or {}) as op :
835
- yield from op
841
+ def get_objects (self , attrs = None , batch_size = 10 ):
842
+ with SearchIter (self , attrs or {}, batch_size ) as op :
843
+ for batch in op :
844
+ yield from batch
836
845
837
846
def reaffirm_credentials (self , pin ):
838
847
cdef CK_UTF8CHAR * pin_data
0 commit comments