33// Licensed under MIT License, see License file for more details
44// git clone https://github.com/marcomq/tauri-plugin-python
55
6- use std:: path:: PathBuf ;
76use std:: sync:: atomic:: AtomicBool ;
87use std:: { collections:: HashSet , sync:: Mutex } ;
98
@@ -24,26 +23,6 @@ lazy_static! {
2423 static ref GLOBALS : rustpython_vm:: scope:: Scope = create_globals( ) ;
2524}
2625
27- pub fn init_python ( code : String , dir : PathBuf ) -> crate :: Result < ( ) > {
28- rustpython_vm:: Interpreter :: without_stdlib ( Default :: default ( ) ) . enter ( |vm| {
29- vm. import ( "sys" , 0 ) . unwrap ( ) ;
30- let path_import = format ! ( "sys.path.append('{}')" , dir. to_str( ) . unwrap( ) ) ;
31- let exec_python = |code : String | {
32- let code_obj = vm
33- . compile (
34- & code,
35- rustpython_vm:: compiler:: Mode :: Exec ,
36- "<embedded>" . to_owned ( ) ,
37- )
38- . map_err ( |err| vm. new_syntax_error ( & err, Some ( & code) ) ) ?;
39- vm. run_code_obj ( code_obj, GLOBALS . clone ( ) )
40- } ;
41- exec_python ( path_import) ?;
42- exec_python ( code)
43- } ) ?;
44- Ok ( ( ) )
45- }
46-
4726pub fn run_python ( payload : StringRequest ) -> crate :: Result < ( ) > {
4827 rustpython_vm:: Interpreter :: without_stdlib ( Default :: default ( ) ) . enter ( |vm| {
4928 let code_obj = vm
@@ -70,9 +49,13 @@ pub fn register_function_str(
7049 }
7150 rustpython_vm:: Interpreter :: without_stdlib ( Default :: default ( ) ) . enter ( |vm| {
7251 let var_dot_split: Vec < & str > = function_name. split ( "." ) . collect ( ) ;
73- let func = GLOBALS . globals . get_item ( var_dot_split[ 0 ] , vm) ?;
52+ let func = GLOBALS . globals . get_item ( var_dot_split[ 0 ] , vm) . unwrap_or_else ( |_| {
53+ panic ! ( "Cannot find '{}' in globals" , var_dot_split[ 0 ] ) ;
54+ } ) ;
7455 if var_dot_split. len ( ) > 1 {
75- func. get_item ( var_dot_split[ 1 ] , vm) ?;
56+ func. get_attr ( & vm. ctx . new_str ( var_dot_split[ 1 ] ) , vm) . unwrap_or_else ( |_| {
57+ panic ! ( "Cannot find sub function '{}' in '{}'" , var_dot_split[ 1 ] , var_dot_split[ 0 ] ) ;
58+ } ) ;
7659 }
7760
7861 if let Some ( num_args) = number_of_args {
@@ -119,7 +102,7 @@ pub fn call_function(payload: RunRequest) -> crate::Result<String> {
119102 let var_dot_split: Vec < & str > = function_name. split ( "." ) . collect ( ) ;
120103 let func = GLOBALS . globals . get_item ( var_dot_split[ 0 ] , vm) ?;
121104 Ok ( if var_dot_split. len ( ) > 1 {
122- func. get_item ( var_dot_split[ 1 ] , vm) ?
105+ func. get_attr ( & vm . ctx . new_str ( var_dot_split[ 1 ] ) , vm) ?
123106 } else {
124107 func
125108 }
@@ -134,7 +117,7 @@ pub fn read_variable(payload: StringRequest) -> crate::Result<String> {
134117 let var_dot_split: Vec < & str > = payload. value . split ( "." ) . collect ( ) ;
135118 let var = GLOBALS . globals . get_item ( var_dot_split[ 0 ] , vm) ?;
136119 Ok ( if var_dot_split. len ( ) > 1 {
137- var. get_item ( var_dot_split[ 1 ] , vm) ?
120+ var. get_attr ( & vm . ctx . new_str ( var_dot_split[ 1 ] ) , vm) ?
138121 } else {
139122 var
140123 }
0 commit comments