RPC: Hides optional fields when inputting JSON

This commit is contained in:
Milo Davis 2017-09-14 17:17:45 +02:00 committed by Benjamin Canou
parent e75112d8e2
commit 25bc6bfc96

View File

@ -28,7 +28,7 @@ type input = {
(* generic JSON generation from a schema with callback for random or (* generic JSON generation from a schema with callback for random or
interactive filling *) interactive filling *)
let fill_in input schema = let fill_in ?(show_optionals=true) input schema =
let rec element path { title ; kind }= let rec element path { title ; kind }=
match kind with match kind with
| Integer { minimum ; maximum } -> | Integer { minimum ; maximum } ->
@ -73,6 +73,10 @@ let fill_in input schema =
fill_loop [] 0 elts >>= fun acc -> fill_loop [] 0 elts >>= fun acc ->
Lwt.return (`A (List.rev acc)) Lwt.return (`A (List.rev acc))
| Object { properties } -> | Object { properties } ->
let properties =
if show_optionals
then properties
else (List.filter (fun (_, _, b, _) -> b) properties) in
let rec fill_loop acc ls = let rec fill_loop acc ls =
match ls with match ls with
| [] -> Lwt.return acc | [] -> Lwt.return acc
@ -101,7 +105,7 @@ let fill_in input schema =
in in
element [] (Json_schema.root schema) element [] (Json_schema.root schema)
let random_fill_in schema = let random_fill_in ?(show_optionals=true) schema =
let display _ = Lwt.return () in let display _ = Lwt.return () in
let int min max _ _ = let int min max _ _ =
let max = Int64.of_int max let max = Int64.of_int max
@ -115,7 +119,7 @@ let random_fill_in schema =
let continue _ _ = Lwt.return (Random.int 4 = 0) in let continue _ _ = Lwt.return (Random.int 4 = 0) in
Lwt.catch Lwt.catch
(fun () -> (fun () ->
fill_in fill_in ~show_optionals
{ int ; float ; string ; bool ; display ; continue } { int ; float ; string ; bool ; display ; continue }
schema >>= fun json -> schema >>= fun json ->
Lwt.return (Ok json)) Lwt.return (Ok json))
@ -123,11 +127,11 @@ let random_fill_in schema =
let msg = Printf.sprintf "Fill-in failed %s\n%!" (Printexc.to_string e) in let msg = Printf.sprintf "Fill-in failed %s\n%!" (Printexc.to_string e) in
Lwt.return (Error msg)) Lwt.return (Error msg))
let editor_fill_in schema = let editor_fill_in ?(show_optionals=true) schema =
let tmp = Filename.temp_file "tezos_rpc_call_" ".json" in let tmp = Filename.temp_file "tezos_rpc_call_" ".json" in
let rec init () = let rec init () =
(* write a temp file with instructions *) (* write a temp file with instructions *)
random_fill_in schema >>= function random_fill_in ~show_optionals schema >>= function
| Error msg -> Lwt.return (Error msg) | Error msg -> Lwt.return (Error msg)
| Ok json -> | Ok json ->
Lwt_io.(with_file ~mode:Output tmp (fun fp -> Lwt_io.(with_file ~mode:Output tmp (fun fp ->
@ -343,12 +347,12 @@ let format url (cctxt : #Client_commands.logging_rpcs) =
"No service found at this URL (but this is a valid prefix)\n%!" >>= fun () -> "No service found at this URL (but this is a valid prefix)\n%!" >>= fun () ->
return () return ()
let fill_in schema = let fill_in ?(show_optionals=true) schema =
let open Json_schema in let open Json_schema in
match (root schema).kind with match (root schema).kind with
| Null -> Lwt.return (Ok `Null) | Null -> Lwt.return (Ok `Null)
| Any | Object { properties = [] } -> Lwt.return (Ok (`O [])) | Any | Object { properties = [] } -> Lwt.return (Ok (`O []))
| _ -> editor_fill_in schema | _ -> editor_fill_in ~show_optionals schema
let display_answer (cctxt : #Client_commands.full_context) = function let display_answer (cctxt : #Client_commands.full_context) = function
| `Ok json -> | `Ok json ->
@ -376,7 +380,7 @@ let call raw_url (cctxt : #Client_commands.full_context) =
cctxt#generic_json_call `POST uri >>=? cctxt#generic_json_call `POST uri >>=?
display_answer cctxt display_answer cctxt
| { input = Some input } -> | { input = Some input } ->
fill_in input >>= function fill_in ~show_optionals:false input >>= function
| Error msg -> | Error msg ->
cctxt#error "%s" msg >>= fun () -> cctxt#error "%s" msg >>= fun () ->
return () return ()