MCPcopy Create free account
hub / github.com/apache/openwhisk-cli / parseSwaggerApi

Function parseSwaggerApi

commands/api.go:942–1010  ·  view source on GitHub ↗
(configfile string, namespace string)

Source from the content-addressed store, hash-verified

940}
941
942func parseSwaggerApi(configfile string, namespace string) (*whisk.Api, error) {
943 // Test is for completeness, but this situation should only arise due to an internal error
944 if len(configfile) == 0 {
945 whisk.Debug(whisk.DbgError, "No swagger file is specified\n")
946 errMsg := wski18n.T("A configuration file was not specified.")
947 whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL,
948 whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
949 return nil, whiskErr
950 }
951
952 swagger, err := ReadFile(configfile)
953 if err != nil {
954 whisk.Debug(whisk.DbgError, "readFile(%s) error: %s\n", configfile, err)
955 errMsg := wski18n.T("Error reading swagger file '{{.name}}': {{.err}}",
956 map[string]interface{}{"name": configfile, "err": err})
957 whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXIT_CODE_ERR_GENERAL,
958 whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
959 return nil, whiskErr
960 }
961
962 // Check if this swagger is in JSON or YAML format
963 isYaml := strings.HasSuffix(configfile, yamlFileExtension) || strings.HasSuffix(configfile, ymlFileExtension)
964 if isYaml {
965 whisk.Debug(whisk.DbgInfo, "Converting YAML formated API configuration into JSON\n")
966 jsonbytes, err := yaml.YAMLToJSON([]byte(swagger))
967 if err != nil {
968 whisk.Debug(whisk.DbgError, "yaml.YAMLToJSON() error: %s\n", err)
969 errMsg := wski18n.T("Unable to parse YAML configuration file: {{.err}}", map[string]interface{}{"err": err})
970 whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL,
971 whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
972 return nil, whiskErr
973 }
974 swagger = string(jsonbytes)
975 }
976
977 // Parse the JSON into a swagger object
978 swaggerObj := new(whisk.ApiSwagger)
979 err = json.Unmarshal([]byte(swagger), swaggerObj)
980 if err != nil {
981 whisk.Debug(whisk.DbgError, "JSON parse of '%s' error: %s\n", configfile, err)
982 errMsg := wski18n.T("Error parsing swagger file '{{.name}}': {{.err}}",
983 map[string]interface{}{"name": configfile, "err": err})
984 whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXIT_CODE_ERR_GENERAL,
985 whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
986 return nil, whiskErr
987 }
988
989 if swaggerObj.BasePath == "" || swaggerObj.SwaggerName == "" || swaggerObj.Info == nil || swaggerObj.Paths == nil {
990 whisk.Debug(whisk.DbgError, "Swagger file is invalid.\n")
991 errMsg := wski18n.T("Swagger file is invalid (missing basePath, info, paths, or swagger fields)")
992 whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL,
993 whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
994 return nil, whiskErr
995 }
996
997 if _, ok := isValidBasepath(swaggerObj.BasePath); !ok {
998 whisk.Debug(whisk.DbgError, "Swagger file basePath is invalid.\n")
999 errMsg := wski18n.T("Swagger file basePath must start with a leading slash (/)")

Callers 1

api.goFile · 0.85

Calls 2

isValidBasepathFunction · 0.85
ReadFileFunction · 0.70

Tested by

no test coverage detected