11use pyo3:: exceptions:: { PyRuntimeError , PyTypeError , PyValueError } ;
22use pyo3:: prelude:: * ;
3+ use pyo3:: pyclass:: PyClassGuardError ;
34use pyo3:: types:: * ;
45use rayon:: iter:: { IntoParallelIterator , ParallelIterator } ;
56use std:: ops:: FnOnce ;
@@ -45,7 +46,7 @@ impl PyAnnotationStore {
4546 if let Some ( kwargs) = kwargs {
4647 let mut config = PyDict :: new ( py) ;
4748 for ( key, value) in kwargs. iter ( ) {
48- match key. downcast ( ) ?. extract ( ) ? {
49+ match key. cast ( ) ?. extract ( ) ? {
4950 "config" => {
5051 if let Ok ( Some ( value) ) = value. extract ( ) {
5152 config = value;
@@ -55,10 +56,10 @@ impl PyAnnotationStore {
5556 }
5657 }
5758 for ( key, value) in kwargs. iter ( ) {
58- match key. downcast ( ) ?. extract ( ) ? {
59+ match key. cast ( ) ?. extract ( ) ? {
5960 "config" => continue , //already handled
6061 "file" => {
61- let value = value. downcast ( ) ?. extract ( ) ?;
62+ let value = value. cast ( ) ?. extract ( ) ?;
6263 return match AnnotationStore :: from_file ( value, get_config ( & config) ?) {
6364 Ok ( store) => Ok ( PyAnnotationStore {
6465 store : Arc :: new ( RwLock :: new ( store) ) ,
@@ -67,7 +68,7 @@ impl PyAnnotationStore {
6768 } ;
6869 }
6970 "string" => {
70- let value = value. downcast ( ) ?. extract ( ) ?;
71+ let value = value. cast ( ) ?. extract ( ) ?;
7172 return match AnnotationStore :: from_str ( value, get_config ( & config) ?) {
7273 Ok ( store) => Ok ( PyAnnotationStore {
7374 store : Arc :: new ( RwLock :: new ( store) ) ,
@@ -76,7 +77,7 @@ impl PyAnnotationStore {
7677 } ;
7778 }
7879 "id" => {
79- let value: String = value. downcast ( ) ?. extract ( ) ?;
80+ let value: String = value. cast ( ) ?. extract ( ) ?;
8081 return Ok ( PyAnnotationStore {
8182 store : Arc :: new ( RwLock :: new (
8283 AnnotationStore :: default ( )
@@ -284,7 +285,7 @@ impl PyAnnotationStore {
284285 }
285286 builder = builder. with_target ( target. build ( ) ) ;
286287 if data. is_instance_of :: < PyList > ( ) {
287- let data: Bound < ' py , PyList > = data. downcast ( ) ?. clone ( ) ;
288+ let data: Bound < ' py , PyList > = data. cast ( ) ?. clone ( ) ;
288289 for databuilder in data. iter ( ) {
289290 let databuilder = annotationdata_builder ( databuilder) ?;
290291 builder = builder. with_data_builder ( databuilder) ;
@@ -420,51 +421,51 @@ impl PyAnnotationStore {
420421 if let Some ( kwargs) = kwargs {
421422 //bind keyword arguments as variables in the query
422423 for ( varname, value) in kwargs. iter ( ) {
423- if let Ok ( varname) = varname. downcast :: < PyString > ( ) {
424+ if let Ok ( varname) = varname. cast :: < PyString > ( ) {
424425 if let Ok ( varname) = varname. to_str ( ) {
425426 if value. is_instance_of :: < PyAnnotation > ( ) {
426427 let annotation: PyResult < PyRef < ' py , PyAnnotation > > =
427- value. extract ( ) ;
428+ value. extract ( ) . map_err ( | e : PyClassGuardError < ' _ , ' py > | e . into ( ) ) ;
428429 if let Ok ( annotation) = annotation {
429430 let annotation =
430431 store. annotation ( annotation. handle ) . or_fail ( ) ?;
431432 query. bind_annotationvar ( varname, & annotation) ;
432433 }
433434 } else if value. is_instance_of :: < PyAnnotationData > ( ) {
434435 let data: PyResult < PyRef < ' py , PyAnnotationData > > =
435- value. extract ( ) ;
436+ value. extract ( ) . map_err ( | e : PyClassGuardError < ' _ , ' py > | e . into ( ) ) ;
436437 if let Ok ( data) = data {
437438 let data =
438439 store. annotationdata ( data. set , data. handle ) . or_fail ( ) ?;
439440 query. bind_datavar ( varname, & data) ;
440441 }
441442 } else if value. is_instance_of :: < PyDataKey > ( ) {
442443 let key: PyResult < PyRef < ' py , PyDataKey > > =
443- value. extract ( ) ;
444+ value. extract ( ) . map_err ( | e : PyClassGuardError < ' _ , ' py > | e . into ( ) ) ;
444445 if let Ok ( key) = key {
445446 let key =
446447 store. key ( key. set , key. handle ) . or_fail ( ) ?;
447448 query. bind_keyvar ( varname, & key) ;
448449 }
449450 } else if value. is_instance_of :: < PyTextResource > ( ) {
450451 let resource: PyResult < PyRef < ' py , PyTextResource > > =
451- value. extract ( ) ;
452+ value. extract ( ) . map_err ( | e : PyClassGuardError < ' _ , ' py > | e . into ( ) ) ;
452453 if let Ok ( resource) = resource {
453454 let resource =
454455 store. resource ( resource. handle ) . or_fail ( ) ?;
455456 query. bind_resourcevar ( varname, & resource) ;
456457 }
457458 } else if value. is_instance_of :: < PyAnnotationDataSet > ( ) {
458459 let dataset: PyResult < PyRef < ' py , PyAnnotationDataSet > > =
459- value. extract ( ) ;
460+ value. extract ( ) . map_err ( | e : PyClassGuardError < ' _ , ' py > | e . into ( ) ) ;
460461 if let Ok ( dataset) = dataset {
461462 let dataset =
462463 store. dataset ( dataset. handle ) . or_fail ( ) ?;
463464 query. bind_datasetvar ( varname, & dataset) ;
464465 }
465466 } else if value. is_instance_of :: < PyTextSelection > ( ) {
466467 let textselection: PyResult < PyRef < ' py , PyTextSelection > > =
467- value. extract ( ) ;
468+ value. extract ( ) . map_err ( | e : PyClassGuardError < ' _ , ' py > | e . into ( ) ) ;
468469 if let Ok ( textselection) = textselection {
469470 if let Some ( handle) = textselection. textselection . handle ( ) {
470471 if let Some ( textselection) =
0 commit comments