Merge branch '10538-trash-delete' closes #10538
[arvados.git] / sdk / go / arvados / client.go
index 0c18d38974f8be6ce99460ef2713e220a2cff403..fc937494e5a679728aea021dbe80a95231582d72 100644 (file)
@@ -241,14 +241,10 @@ func (c *Client) DiscoveryDocument() (*DiscoveryDocument, error) {
        return c.dd, nil
 }
 
-func (c *Client) PathForUUID(method, uuid string) (string, error) {
+func (c *Client) modelForUUID(dd *DiscoveryDocument, uuid string) (string, error) {
        if len(uuid) != 27 {
                return "", fmt.Errorf("invalid UUID: %q", uuid)
        }
-       dd, err := c.DiscoveryDocument()
-       if err != nil {
-               return "", err
-       }
        infix := uuid[6:11]
        var model string
        for m, s := range dd.Schemas {
@@ -258,7 +254,31 @@ func (c *Client) PathForUUID(method, uuid string) (string, error) {
                }
        }
        if model == "" {
-               return "", fmt.Errorf("unrecognized UUID infix: %q", infix)
+               return "", fmt.Errorf("unrecognized type portion %q in UUID %q", infix, uuid)
+       }
+       return model, nil
+}
+
+func (c *Client) KindForUUID(uuid string) (string, error) {
+       dd, err := c.DiscoveryDocument()
+       if err != nil {
+               return "", err
+       }
+       model, err := c.modelForUUID(dd, uuid)
+       if err != nil {
+               return "", err
+       }
+       return "arvados#" + strings.ToLower(model[:1]) + model[1:], nil
+}
+
+func (c *Client) PathForUUID(method, uuid string) (string, error) {
+       dd, err := c.DiscoveryDocument()
+       if err != nil {
+               return "", err
+       }
+       model, err := c.modelForUUID(dd, uuid)
+       if err != nil {
+               return "", err
        }
        var resource string
        for r, rsc := range dd.Resources {