6235: Add method to get parameters from API discovery document.
authorPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 3 Jun 2015 20:40:50 +0000 (16:40 -0400)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Wed, 3 Jun 2015 20:40:50 +0000 (16:40 -0400)
sdk/go/arvadosclient/arvadosclient.go
sdk/go/arvadosclient/arvadosclient_test.go

index ae40a89a2b6bc9e033828e06fdf1364b0719d490..62eda5b054d59a9f82c330207ffdb61f1918d589 100644 (file)
@@ -68,6 +68,9 @@ type ArvadosClient struct {
        // If true, sets the X-External-Client header to indicate
        // the client is outside the cluster.
        External bool
+
+       // Discovery document
+       DiscoveryDoc Dict
 }
 
 // Create a new ArvadosClient, initialized with standard Arvados environment
@@ -114,7 +117,9 @@ func (this ArvadosClient) CallRaw(method string, resource string, uuid string, a
                Scheme: "https",
                Host:   this.ApiServer}
 
-       u.Path = "/arvados/v1"
+       if resource != API_DISCOVERY_RESOURCE {
+               u.Path = "/arvados/v1"
+       }
 
        if resource != "" {
                u.Path = u.Path + "/" + resource
@@ -275,3 +280,23 @@ func (this ArvadosClient) Update(resource string, uuid string, parameters Dict,
 func (this ArvadosClient) List(resource string, parameters Dict, output interface{}) (err error) {
        return this.Call("GET", resource, "", "", parameters, output)
 }
+
+// API Discovery
+//
+//   parameter - name of parameter to be discovered
+// return
+//   valueMap - Dict key value pair of the discovered parameter
+//   err - error accessing the resource, or nil if no error
+var API_DISCOVERY_RESOURCE string = "discovery/v1/apis/arvados/v1/rest"
+
+func (this *ArvadosClient) Discovery(parameter string) (valueMap Dict, err error) {
+       if len(this.DiscoveryDoc) == 0 {
+               this.DiscoveryDoc = make(Dict)
+               err = this.Call("GET", API_DISCOVERY_RESOURCE, "", "", nil, &this.DiscoveryDoc)
+       }
+
+       valueMap = make(Dict)
+       valueMap[parameter] = this.DiscoveryDoc[parameter]
+
+       return valueMap, err
+}
index 21eff20355d21ce3befabfdff4087a9b7357ee89..17911c6e21c8e64ec4aaea718ed49e3dc440c0d2 100644 (file)
@@ -102,3 +102,17 @@ func (s *ServerRequiredSuite) TestErrorResponse(c *C) {
                c.Assert(err.(APIServerError).HttpStatusCode, Equals, 404)
        }
 }
+
+func (s *ServerRequiredSuite) TestAPIDiscovery_Get_defaultCollectionReplication(c *C) {
+       arv, err := MakeArvadosClient()
+       valueMap, err := arv.Discovery("defaultCollectionReplication")
+       c.Assert(err, IsNil)
+       c.Assert(valueMap["defaultCollectionReplication"], NotNil)
+}
+
+func (s *ServerRequiredSuite) TestAPIDiscovery_Get_noSuchParameter(c *C) {
+       arv, err := MakeArvadosClient()
+       valueMap, err := arv.Discovery("noSuchParameter")
+       c.Assert(err, IsNil)
+       c.Assert(valueMap["noSuchParameter"], IsNil)
+}