def flow_display( flow_id: str = typer.Argument("", show_default=False), flow_definition: str = typer.Option( "", help= ("JSON or YAML representation of the Flow to display. May be provided as a filename " "or a raw string representing a JSON object or YAML definition."), callback=input_validator, show_default=False, ), output_format: ImageOutputFormat = typer.Option( ImageOutputFormat.json, "--format", "-f", help="Output display format.", case_sensitive=False, show_default=True, ), flows_endpoint: str = flows_env_var_option, ): """ Visualize a local or deployed Flow defintion. If providing a Flows's ID, You must have either created the Flow or be present in the Flow's "flow_viewers" list to view it. """ if not flow_definition and not flow_id: raise typer.BadParameter( "Either FLOW_ID or --flow_definition should be set.") if flow_definition and flow_id: raise typer.BadParameter( "Only one of FLOW_ID or --flow_definition should be set.") fc = create_flows_client(CLIENT_ID, flows_endpoint) rr = RequestRunner( functools.partial(fc.get_flow, flow_id), format=output_format, verbose=False, watch=False, ) if flow_id: result = rr.run() if result.is_api_error: rr.format = (output_format if output_format in { ImageOutputFormat.json, ImageOutputFormat.yaml } else ImageOutputFormat.json) rr.render(result) raise typer.Exit(1) else: flow_dict = result.data["definition"] else: flow_dict = process_input(flow_definition) if output_format in {ImageOutputFormat.json, ImageOutputFormat.yaml}: rr.render_as_result(flow_dict) else: output_format.visualize(flow_dict)
def flow_action_log( action_id: str = typer.Argument(...), flow_id: str = typer.Option( ..., help="The ID for the Flow which triggered the Action.", prompt=True, ), flow_scope: str = typer.Option( None, help="The scope this Flow uses to authenticate requests.", callback=url_validator_callback, ), reverse: bool = typer.Option( # Defaulting to any boolean value will reverse output - so we use None None, "--reverse", help= "Display logs starting from most recent and proceeding in reverse chronological order", ), limit: int = typer.Option( None, help="Set a maximum number of events from the log to return", min=0, max=100, ), marker: str = typer.Option( None, "--marker", "-m", help="A pagination token for iterating through returned data.", ), per_page: int = typer.Option( None, "--per-page", "-p", help= "The page size to return. Only valid when used without providing a marker.", min=1, max=50, ), output_format: RunLogOutputFormat = typer.Option( RunLogOutputFormat.table, "--format", "-f", help="Output display format.", case_sensitive=False, show_default=True, ), watch: bool = typer.Option( False, "--watch", "-w", help="Continuously poll this Action until it reaches a completed state. " "Using this option will report only the latest state available." "Only JSON and YAML output formats are supported.", show_default=True, ), flows_endpoint: str = flows_env_var_option, verbose: bool = verbosity_option, ): """ Get a log of the steps executed by a Flow definition's invocation. """ fc = create_flows_client(CLIENT_ID, flows_endpoint) method = functools.partial( fc.flow_action_log, flow_id, flow_scope, action_id, limit, reverse, marker, per_page, ) rr = RequestRunner( method, format=output_format, verbose=verbose, watch=watch, fields=RunLogDisplayFields, detetector=LogCompletionDetetector, ) with live_content: if output_format in { RunLogOutputFormat.json, RunLogOutputFormat.yaml, RunLogOutputFormat.table, }: rr.run_and_render() else: result = rr.run() if not result.is_api_error: flow_def = fc.get_flow(flow_id) output_format.visualize(result.result, flow_def) else: rr.format = RunLogOutputFormat.json rr.render(result)