"net/http"
"net/url"
"os"
+ "regexp"
"strings"
"time"
)
if err != nil {
return err
}
+ req.Header.Set("Content-type", "application/x-www-form-urlencoded")
return c.DoAndDecode(dst, req)
}
return c.dd, nil
}
-func (c *Client) PathForUUID(method, uuid string) (string, error) {
+var pdhRegexp = regexp.MustCompile(`^[0-9a-f]{32}\+\d+$`)
+
+func (c *Client) modelForUUID(dd *DiscoveryDocument, uuid string) (string, error) {
+ if pdhRegexp.MatchString(uuid) {
+ return "Collection", nil
+ }
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 {
}
}
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 {