19296: Fix remove(recursive=True) for depth>1.
[arvados.git] / lib / controller / router / response.go
index e1fc2691a54c7783bd7044997d7011cbf0731121..42b34355935db015e72d7de3e8b7a6398ffc0680 100644 (file)
@@ -26,11 +26,18 @@ type responseOptions struct {
 func (rtr *router) responseOptions(opts interface{}) (responseOptions, error) {
        var rOpts responseOptions
        switch opts := opts.(type) {
+       case *arvados.CreateOptions:
+               rOpts.Select = opts.Select
+       case *arvados.UpdateOptions:
+               rOpts.Select = opts.Select
        case *arvados.GetOptions:
                rOpts.Select = opts.Select
        case *arvados.ListOptions:
                rOpts.Select = opts.Select
                rOpts.Count = opts.Count
+       case *arvados.GroupContentsOptions:
+               rOpts.Select = opts.Select
+               rOpts.Count = opts.Count
        }
        return rOpts, nil
 }
@@ -107,9 +114,9 @@ func (rtr *router) sendResponse(w http.ResponseWriter, req *http.Request, resp i
                                rtr.mungeItemFields(item)
                                slice[i] = item
                        }
-                       if opts.Count == "none" {
-                               delete(tmp, "items_available")
-                       }
+               }
+               if opts.Count == "none" {
+                       delete(tmp, "items_available")
                }
        } else {
                tmp = applySelectParam(opts.Select, tmp)
@@ -131,6 +138,7 @@ func (rtr *router) sendError(w http.ResponseWriter, err error) {
 }
 
 var infixMap = map[string]interface{}{
+       "gj3su": arvados.APIClientAuthorization{},
        "4zz18": arvados.Collection{},
        "xvhdp": arvados.ContainerRequest{},
        "dz642": arvados.Container{},
@@ -143,6 +151,11 @@ var infixMap = map[string]interface{}{
        "7fd4e": arvados.Workflow{},
 }
 
+var specialKindTransforms = map[string]string{
+       "arvados.APIClientAuthorization":     "arvados#apiClientAuthorization",
+       "arvados.APIClientAuthorizationList": "arvados#apiClientAuthorizationList",
+}
+
 var mungeKind = regexp.MustCompile(`\..`)
 
 func kind(resp interface{}) string {
@@ -150,6 +163,9 @@ func kind(resp interface{}) string {
        if !strings.HasPrefix(t, "arvados.") {
                return ""
        }
+       if k, ok := specialKindTransforms[t]; ok {
+               return k
+       }
        return mungeKind.ReplaceAllStringFunc(t, func(s string) string {
                // "arvados.CollectionList" => "arvados#collectionList"
                return "#" + strings.ToLower(s[1:])
@@ -192,7 +208,7 @@ func (rtr *router) mungeItemFields(tmp map[string]interface{}) {
                // they appear in responses as null, rather than a
                // zero value.
                switch k {
-               case "output_uuid", "output_name", "log_uuid", "description", "requesting_container_uuid", "container_uuid":
+               case "output_uuid", "output_name", "log_uuid", "description", "requesting_container_uuid", "container_uuid", "modified_by_client_uuid", "frozen_by_uuid":
                        if v == "" {
                                tmp[k] = nil
                        }