@@ -155,9 +155,8 @@ var actionInvokeCmd = &cobra.Command{
155155 PreRunE : SetupClientConfig ,
156156 RunE : func (cmd * cobra.Command , args []string ) error {
157157 var err error
158- var parameters interface {}
159158 var qualifiedName = new (QualifiedName )
160- var paramArgs [] string
159+ var parameters interface {}
161160
162161 if whiskErr := CheckArgs (
163162 args ,
@@ -172,65 +171,79 @@ var actionInvokeCmd = &cobra.Command{
172171 return NewQualifiedNameError (args [0 ], err )
173172 }
174173
175- Client .Namespace = qualifiedName .GetNamespace ()
176- paramArgs = Flags .common .param
174+ parameters = getParameters (Flags .common .param , false , false )
175+ blocking := Flags .common .blocking || Flags .action .result
176+ resultOnly := Flags .action .result
177+ header := ! resultOnly
177178
178- if len (paramArgs ) > 0 {
179- if parameters , err = getJSONFromStrings (paramArgs , false ); err != nil {
180- return getJSONFromStringsParamError (paramArgs , false , err )
181- }
182- }
183- if Flags .action .result {
184- Flags .common .blocking = true
185- }
186-
187- res , _ , err := Client .Actions .Invoke (
188- qualifiedName .GetEntityName (),
179+ res , err := invokeAction (
180+ * qualifiedName ,
189181 parameters ,
190- Flags . common . blocking ,
191- Flags . action . result )
182+ blocking ,
183+ resultOnly )
192184
193- return handleInvocationResponse (* qualifiedName , parameters , res , err )
185+ return printInvocationResponse (* qualifiedName , blocking , header , res , err )
194186 },
195187}
196188
197- func handleInvocationResponse (
189+ func invokeAction (
198190 qualifiedName QualifiedName ,
199191 parameters interface {},
192+ blocking bool ,
193+ result bool ) (map [string ]interface {}, error ) {
194+ // TODO remove all global modifiers
195+ Client .Namespace = qualifiedName .GetNamespace ()
196+ res , _ , err := Client .Actions .Invoke (
197+ qualifiedName .GetEntityName (),
198+ parameters ,
199+ blocking ,
200+ result )
201+ return res , err
202+ }
203+
204+ func printInvocationResponse (
205+ qualifiedName QualifiedName ,
206+ blocking bool ,
207+ header bool ,
200208 result map [string ]interface {},
201209 err error ) error {
202210 if err == nil {
203- printInvocationMsg (
204- qualifiedName .GetNamespace (),
205- qualifiedName .GetEntityName (),
206- getValueFromJSONResponse (ACTIVATION_ID , result ),
207- result ,
208- color .Output )
211+ printInvocationMsg (qualifiedName , blocking , header , result , color .Output )
209212 } else {
210- if ! Flags . common . blocking {
211- return handleInvocationError (err , qualifiedName .GetEntityName (), parameters )
213+ if ! blocking {
214+ return handleInvocationError (err , qualifiedName .GetEntityName ())
212215 } else {
213- if isBlockingTimeout (err ) {
214- printBlockingTimeoutMsg (
215- qualifiedName .GetNamespace (),
216- qualifiedName .GetEntityName (),
217- getValueFromJSONResponse (ACTIVATION_ID , result ))
218- } else if isApplicationError (err ) {
219- printInvocationMsg (
220- qualifiedName .GetNamespace (),
221- qualifiedName .GetEntityName (),
222- getValueFromJSONResponse (ACTIVATION_ID , result ),
223- result ,
224- colorable .NewColorableStderr ())
225- } else {
226- return handleInvocationError (err , qualifiedName .GetEntityName (), parameters )
227- }
216+ return printFailedBlockingInvocationResponse (qualifiedName , header , result , err )
228217 }
229218 }
230219
231220 return err
232221}
233222
223+ func printFailedBlockingInvocationResponse (
224+ qualifiedName QualifiedName ,
225+ header bool ,
226+ result map [string ]interface {},
227+ err error ) error {
228+ if isBlockingTimeout (err ) {
229+ printBlockingTimeoutMsg (
230+ qualifiedName .GetNamespace (),
231+ qualifiedName .GetEntityName (),
232+ getValueFromJSONResponse (ACTIVATION_ID , result ))
233+ return err
234+ } else if isApplicationError (err ) {
235+ printInvocationMsg (
236+ qualifiedName ,
237+ true ,
238+ header ,
239+ result ,
240+ colorable .NewColorableStderr ())
241+ return err
242+ } else {
243+ return handleInvocationError (err , qualifiedName .GetEntityName ())
244+ }
245+ }
246+
234247var actionGetCmd = & cobra.Command {
235248 Use : "get ACTION_NAME [FIELD_FILTER | --summary | --url]" ,
236249 Short : wski18n .T ("get action" ),
@@ -987,12 +1000,11 @@ func actionGetError(entityName string, fetchCode bool, err error) error {
9871000 return nestedError (errMsg , err )
9881001}
9891002
990- func handleInvocationError (err error , entityName string , parameters interface {} ) error {
1003+ func handleInvocationError (err error , entityName string ) error {
9911004 whisk .Debug (
9921005 whisk .DbgError ,
993- "Client.Actions.Invoke(%s, %s, %t) error: %s\n " ,
994- entityName , parameters ,
995- Flags .common .blocking ,
1006+ "Client.Actions.Invoke(%s, %t) error: %s\n " ,
1007+ entityName ,
9961008 err )
9971009
9981010 errMsg := wski18n .T (
@@ -1113,25 +1125,25 @@ func printBlockingTimeoutMsg(namespace string, entityName string, activationID i
11131125}
11141126
11151127func printInvocationMsg (
1116- namespace string ,
1117- entityName string ,
1118- activationID interface {} ,
1128+ qualifiedName QualifiedName ,
1129+ blocking bool ,
1130+ header bool ,
11191131 response map [string ]interface {},
11201132 outputStream io.Writer ) {
1121- if ! Flags . action . result {
1133+ if header {
11221134 fmt .Fprintf (
11231135 outputStream ,
11241136 wski18n .T (
11251137 "{{.ok}} invoked /{{.namespace}}/{{.name}} with id {{.id}}\n " ,
11261138 map [string ]interface {}{
11271139 "ok" : color .GreenString ("ok:" ),
1128- "namespace" : boldString (namespace ),
1129- "name" : boldString (entityName ),
1130- "id" : boldString (activationID ),
1140+ "namespace" : boldString (qualifiedName . GetNamespace () ),
1141+ "name" : boldString (qualifiedName . GetEntityName () ),
1142+ "id" : boldString (getValueFromJSONResponse ( ACTIVATION_ID , response ) ),
11311143 }))
11321144 }
11331145
1134- if Flags . common . blocking {
1146+ if blocking {
11351147 printJSON (response , outputStream )
11361148 }
11371149}
0 commit comments