@@ -237,25 +237,35 @@ class CoreException(Exception):
237237        10502 : "FILE_CORRUPT" 
238238    }
239239
240-     def  __init__ (self , code ):
240+     def  __init__ (self , code :  int ):
241241        self .code  =  code 
242242        self .message  =  py_str (C .obx_last_error_message ())
243243        name  =  self .codes [code ] if  code  in  self .codes  else  "n/a" 
244-         super (CoreException , self ).__init__ (
245-             "%d (%s) - %s"  %  (code , name , self .message ))
244+         super (CoreException , self ).__init__ ("%d (%s) - %s"  %  (code , name , self .message ))
245+ 
246+     @staticmethod  
247+     def  last ():
248+         """ Creates a CoreException of the last error that was generated in core. """ 
249+         return  CoreException (C .obx_last_error ())
246250
247251
248252class  NotFoundException (Exception ):
249253    pass 
250254
251255
252- # assert the the returned obx_err is empty 
253256def  check_obx_err (code : obx_err , func , args ) ->  obx_err :
257+     """ Raises an exception if obx_err is not successful. """ 
254258    if  code  ==  404 :
255259        raise  NotFoundException ()
256260    elif  code  !=  0 :
257261        raise  CoreException (code )
262+     return  code 
258263
264+ 
265+ def  check_obx_qb_cond (code : obx_qb_cond , func , args ) ->  obx_qb_cond :
266+     """ Raises an exception if obx_qb_cond is not successful. """ 
267+     if  code  ==  0 :
268+         raise  CoreException (code )
259269    return  code 
260270
261271
@@ -279,11 +289,19 @@ def c_fn(name: str, restype: Optional[type], argtypes):
279289
280290# like c_fn, but for functions returning obx_err 
281291def  c_fn_rc (name : str , argtypes ):
292+     """ Like c_fn, but for functions returning obx_err (checks obx_err validity). """ 
282293    func  =  C .__getattr__ (name )
283294    func .argtypes  =  argtypes 
284295    func .restype  =  obx_err 
285296    func .errcheck  =  check_obx_err 
297+     return  func 
286298
299+ def  c_fn_qb_cond (name : str , argtypes ):
300+     """ Like c_fn, but for functions returning obx_qb_cond (checks obx_qb_cond validity). """ 
301+     func  =  C .__getattr__ (name )
302+     func .argtypes  =  argtypes 
303+     func .restype  =  obx_qb_cond 
304+     func .errcheck  =  check_obx_qb_cond 
287305    return  func 
288306
289307def  py_str (ptr : ctypes .c_char_p ) ->  str :
@@ -430,8 +448,7 @@ def c_voidp_as_bytes(voidp, size):
430448                         OBX_box_p , ctypes .c_uint64 , ctypes .POINTER (obx_id )])
431449
432450# obx_err (OBX_box* box, obx_id id, const void* data, size_t size); 
433- obx_box_put  =  c_fn_rc ('obx_box_put' , [
434-                  OBX_box_p , obx_id , ctypes .c_void_p , ctypes .c_size_t ])
451+ obx_box_put  =  c_fn_rc ('obx_box_put' , [OBX_box_p , obx_id , ctypes .c_void_p , ctypes .c_size_t ])
435452
436453# obx_err (OBX_box* box, const OBX_bytes_array* objects, const obx_id* ids, OBXPutMode mode); 
437454obx_box_put_many  =  c_fn_rc ('obx_box_put_many' , [
@@ -620,9 +637,7 @@ def c_voidp_as_bytes(voidp, size):
620637obx_qb_order  =  c_fn_rc ('obx_qb_order' , [OBX_query_builder_p , obx_schema_id , OBXOrderFlags ])
621638
622639# OBX_C_API obx_qb_cond obx_qb_nearest_neighbors_f32(OBX_query_builder* builder, obx_schema_id vector_property_id, const float* query_vector, size_t max_result_count) 
623- obx_qb_nearest_neighbors_f32  =  \
624-     c_fn ('obx_qb_nearest_neighbors_f32' , obx_qb_cond , [OBX_query_builder_p , obx_schema_id ,
625-                                                        ctypes .pointer (ctypes .c_float ), ctypes .c_size_t ])
640+ obx_qb_nearest_neighbors_f32  =  c_fn_qb_cond ('obx_qb_nearest_neighbors_f32' , [OBX_query_builder_p , obx_schema_id , ctypes .POINTER (ctypes .c_float ), ctypes .c_size_t ])
626641
627642# OBX_C_API OBX_query* obx_query(OBX_query_builder* builder); 
628643obx_query  =  c_fn ('obx_query' , OBX_query_p , [OBX_query_builder_p ])
@@ -687,6 +702,9 @@ def c_voidp_as_bytes(voidp, size):
687702# void (OBX_bytes_array * array); 
688703obx_bytes_array_free  =  c_fn ('obx_bytes_array_free' , None , [OBX_bytes_array_p ])
689704
705+ # OBX_C_API void obx_id_array_free(OBX_id_array* array); 
706+ obx_id_array_free  =  c_fn ('obx_id_array_free' , None , [OBX_id_array_p ])
707+ 
690708# OBX_C_API void obx_bytes_score_array_free(OBX_bytes_score_array* array) 
691709obx_bytes_score_array_free  =  c_fn ('obx_bytes_score_array_free' , None , [OBX_bytes_score_array_p ])
692710
0 commit comments