File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -12,6 +12,9 @@ pub struct Parameter {
1212
1313 #[ serde( default ) ]
1414 pub default : String ,
15+
16+ #[ serde( default ) ]
17+ pub secret : bool ,
1518}
1619
1720#[ derive( Deserialize , Serialize , Debug ) ]
@@ -122,6 +125,7 @@ impl Towerfile {
122125 name,
123126 description,
124127 default,
128+ secret : false ,
125129 } ) ;
126130 }
127131}
@@ -272,6 +276,26 @@ mod test {
272276 assert_eq ! ( towerfile. parameters. len( ) , 2 ) ;
273277 assert_eq ! ( towerfile. parameters[ 0 ] . name, "my_first_param" ) ;
274278 assert_eq ! ( towerfile. parameters[ 1 ] . name, "my_second_param" ) ;
279+ assert ! ( !towerfile. parameters[ 0 ] . secret) ;
280+ }
281+
282+ #[ test]
283+ fn test_parses_secret_parameters ( ) {
284+ let toml = r#"
285+ [app]
286+ name = "my-app"
287+ script = "./script.py"
288+ source = ["*.py"]
289+
290+ [[parameters]]
291+ name = "MY_PARAMETER"
292+ secret = true
293+ "# ;
294+
295+ let towerfile = crate :: Towerfile :: from_toml ( toml) . unwrap ( ) ;
296+ assert_eq ! ( towerfile. parameters. len( ) , 1 ) ;
297+ assert_eq ! ( towerfile. parameters[ 0 ] . name, "MY_PARAMETER" ) ;
298+ assert ! ( towerfile. parameters[ 0 ] . secret) ;
275299 }
276300
277301 #[ test]
Original file line number Diff line number Diff line change @@ -23,6 +23,9 @@ pub struct Parameter {
2323 #[ serde_as( as = "DefaultOnNull" ) ]
2424 #[ serde( rename = "name" ) ]
2525 pub name : String ,
26+ #[ serde( default ) ]
27+ #[ serde( rename = "secret" ) ]
28+ pub secret : bool ,
2629}
2730
2831impl Parameter {
@@ -31,6 +34,7 @@ impl Parameter {
3134 default,
3235 description,
3336 name,
37+ secret : false ,
3438 }
3539 }
3640}
Original file line number Diff line number Diff line change @@ -20,10 +20,17 @@ pub struct RunParameter {
2020 #[ serde_as( as = "DefaultOnNull" ) ]
2121 #[ serde( rename = "value" ) ]
2222 pub value : String ,
23+ #[ serde( default ) ]
24+ #[ serde( rename = "secret" ) ]
25+ pub secret : bool ,
2326}
2427
2528impl RunParameter {
2629 pub fn new ( name : String , value : String ) -> RunParameter {
27- RunParameter { name, value }
30+ RunParameter {
31+ name,
32+ value,
33+ secret : false ,
34+ }
2835 }
2936}
Original file line number Diff line number Diff line change @@ -840,7 +840,11 @@ pub async fn create_schedule(
840840 let run_parameters = parameters. map ( |params| {
841841 params
842842 . into_iter ( )
843- . map ( |( key, value) | RunParameter { name : key, value } )
843+ . map ( |( key, value) | RunParameter {
844+ name : key,
845+ value,
846+ secret : false ,
847+ } )
844848 . collect ( )
845849 } ) ;
846850
@@ -874,7 +878,11 @@ pub async fn update_schedule(
874878 let run_parameters = parameters. map ( |params| {
875879 params
876880 . into_iter ( )
877- . map ( |( key, value) | RunParameter { name : key, value } )
881+ . map ( |( key, value) | RunParameter {
882+ name : key,
883+ value,
884+ secret : false ,
885+ } )
878886 . collect ( )
879887 } ) ;
880888
Original file line number Diff line number Diff line change @@ -889,7 +889,22 @@ IMPORTANT REMINDERS:
889889 async fn tower_schedules_list ( & self ) -> Result < CallToolResult , McpError > {
890890 match api:: list_schedules ( & self . config , None , None ) . await {
891891 Ok ( response) => {
892- Self :: json_success ( serde_json:: json!( { "schedules" : response. schedules} ) )
892+ let schedules = response
893+ . schedules
894+ . into_iter ( )
895+ . map ( |mut schedule| {
896+ if let Some ( parameters) = schedule. parameters . as_mut ( ) {
897+ for parameter in parameters {
898+ if parameter. secret {
899+ parameter. value = "[hidden]" . to_string ( ) ;
900+ }
901+ }
902+ }
903+ schedule
904+ } )
905+ . collect :: < Vec < _ > > ( ) ;
906+
907+ Self :: json_success ( serde_json:: json!( { "schedules" : schedules} ) )
893908 }
894909 Err ( e) => Self :: error_result ( "Failed to list schedules" , e) ,
895910 }
Original file line number Diff line number Diff line change @@ -23,8 +23,8 @@ mod bindings {
2323
2424 let spec = PackageSpec :: from_towerfile ( & towerfile) ;
2525
26- let runtime = tokio :: runtime :: Runtime :: new ( )
27- . map_err ( |e| PyRuntimeError :: new_err ( e. to_string ( ) ) ) ?;
26+ let runtime =
27+ tokio :: runtime :: Runtime :: new ( ) . map_err ( |e| PyRuntimeError :: new_err ( e. to_string ( ) ) ) ?;
2828
2929 let output = PathBuf :: from ( output) ;
3030
@@ -40,8 +40,7 @@ mod bindings {
4040 . as_ref ( )
4141 . ok_or_else ( || PyRuntimeError :: new_err ( "package build produced no output file" ) ) ?;
4242
43- std:: fs:: copy ( src, & output)
44- . map_err ( |e| PyRuntimeError :: new_err ( e. to_string ( ) ) ) ?;
43+ std:: fs:: copy ( src, & output) . map_err ( |e| PyRuntimeError :: new_err ( e. to_string ( ) ) ) ?;
4544
4645 Ok ( ( ) )
4746 } )
@@ -53,8 +52,8 @@ mod bindings {
5352 /// args: Command line arguments (typically sys.argv).
5453 #[ pyfunction]
5554 fn _run_cli ( args : Vec < String > ) -> PyResult < ( ) > {
56- let runtime = tokio :: runtime :: Runtime :: new ( )
57- . map_err ( |e| PyRuntimeError :: new_err ( e. to_string ( ) ) ) ?;
55+ let runtime =
56+ tokio :: runtime :: Runtime :: new ( ) . map_err ( |e| PyRuntimeError :: new_err ( e. to_string ( ) ) ) ?;
5857
5958 // App::new_from_args() must run inside block_on because
6059 // Session::from_config_dir() requires an active tokio reactor.
You can’t perform that action at this time.
0 commit comments