I have used swagger CLI to generate go code to call my flask app. swagger codegen converts fields.Raw
type defined with flask_restplus
model to *interface{}
in go
assigning the value to the field with *interface{} type in go returns back
prog.go:18:26: cannot use notebook_spec_secrets (type map[string]string) as type *interface {} in assignment: *interface {} is pointer to interface, not interface
You can test it here https://play.golang.org/p/sFE9Qr-72_G
A quick and dirty fix will be changing the generated code by swagger cli and change
NotebookSpec *interface{}
to
NotebookSpec interface{}
Is it possible to cast dictionary to *interface{} in go? (my google search shows a pointer to the interface in go is invalid and logically is not correct )
How to define a dictionary field with flask-restplus
run_definition = api.model('Run definition',
{
'notebook_spec_secrets':
fields.Raw(required=False,
example={
"eventhub_source_cs": "Endpoint=sb://xxxx.servicebus.windows.net/;SharedAccessKeyName=xxxx;SharedAccessKey=xxxx=;EntityPath=sourceeh",
"eventhub_destination_cs": "Endpoint=sb://xxxx.servicebus.windows.net/;SharedAccessKeyName=xxxx;SharedAccessKey=xxxx=;EntityPath=desteh",
"adl2_destination_oauth2_clientid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"adl2_destination_oauth2_clientsecret": "xxxx=",
"adl2_destination_oauth2_tenantid": "xxxx=",
"adl2_destination_cs": "abfss://<file-system-name>@<storage-account-name>.dfs.core.windows.net/folder1",
})})
I'm not sure why it generates a pointer to an interface, but can still assign to it by explicitly casting your map to interface{}
and then taking the address of
that:
notebook_spec_secrets := map[string]string{
"eventhub_source_cs": "1",
"eventhub_destination_cs": "2",
"adl2_destination_oauth2_clientid": "3",
"adl2_destination_oauth2_clientsecret": "4",
"adl2_destination_oauth2_tenantid": "5",
"adl2_destination_cs": "6",
}
var nssi interface{} = notebook_spec_secrets
definition.NotebookSpec = &nssi