sdk/perl/blib
sdk/perl/pm_to_blib
*/vendor/bundle
-services/keep/bin
-services/keep/pkg
-services/keep/src/github.com
sdk/java/target
*.class
apps/workbench/vendor/bundle
- sdk/ruby/index.html.textile.liquid
- Java:
- sdk/java/index.html.textile.liquid
+ - Go:
+ - sdk/go/index.html.textile.liquid
- CLI:
- sdk/cli/index.html.textile.liquid
api:
--- /dev/null
+---
+layout: default
+navsection: sdk
+navmenu: Go
+title: "Go SDK"
+
+...
+
+The Go ("Golang":http://golang.org) SDK provides a generic set of wrappers so you can make API calls easily.
+
+h3. Installation
+
+You don't need to install anything. Just import the client like this. The go tools will fetch the relevant code and dependencies for you.
+
+<notextile>
+<pre><code class="userinput">import (
+ keepclient "git.curoverse.com/arvados.git/sdk/go/keepclient"
+ arvadosclient "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
+)
+</code></pre>
+</notextile>
+
+h3. Examples
+
+Import the module. (We import the log module here too, so we can use it in the subsequent examples.)
+
+<notextile>
+<pre><code class="userinput">import (
+ keepclient "git.curoverse.com/arvados.git/sdk/go/keepclient"
+ arvadosclient "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
+ "log"
+)
+</code></pre>
+</notextile>
+
+Set up an API client user agent:
+
+<notextile>
+<pre><code class="userinput"> arv, err := arvadosclient.MakeArvadosClient()
+ if err != nil {
+ log.Fatalf("Error setting up arvados client %s", err.Error())
+ }
+</code></pre>
+</notextile>
+
+Get the User object for the current user:
+
+<notextile>
+<pre><code class="userinput"> type user struct {
+ Uuid string `json:"uuid"`
+ FullName int `json:"full_name"`
+ }
+
+ var u user
+ err := arv.Call("GET", "users", "", "current", nil, &u)
+
+ if err != nil {
+ return err
+ }
+
+ log.Printf("Logged in as %s (uuid %s)", user.Uuid, user.FullName)
+</code></pre>
+</notextile>
+
+A few more usage examples can be found in the services/keepproxy and sdk/go/keepclient directories in the arvados source tree.
* "Perl SDK":{{site.baseurl}}/sdk/perl/index.html
* "Ruby SDK":{{site.baseurl}}/sdk/ruby/index.html
* "Java SDK":{{site.baseurl}}/sdk/java/index.html
+* "Go SDK":{{site.baseurl}}/sdk/go/index.html
* "Command line SDK":{{site.baseurl}}/sdk/cli/index.html ("arv")
SDKs not yet implemented:
+++ /dev/null
-#! /bin/sh
-
-# Wraps the 'go' executable with some environment setup. Sets GOPATH, creates
-# 'pkg' and 'bin' directories, automatically installs dependencies, then runs
-# the underlying 'go' executable with any command line parameters provided to
-# the script.
-
-rootdir=$(readlink -f $(dirname $0))
-GOPATH=$rootdir:$GOPATH
-export GOPATH
-
-mkdir -p $rootdir/pkg
-mkdir -p $rootdir/bin
-
-go get gopkg.in/check.v1
-
-go $*
package keepclient
import (
- "arvados.org/sdk"
- "arvados.org/streamer"
+ streamer "git.curoverse.com/arvados.git/sdk/go/streamer"
+ arvadosclient "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
"crypto/md5"
"errors"
"fmt"
// Information about Arvados and Keep servers.
type KeepClient struct {
- Arvados *sdk.ArvadosClient
+ Arvados *arvadosclient.ArvadosClient
Want_replicas int
Using_proxy bool
service_roots *[]string
// Create a new KeepClient. This will contact the API server to discover Keep
// servers.
-func MakeKeepClient(arv *sdk.ArvadosClient) (kc KeepClient, err error) {
+func MakeKeepClient(arv *arvadosclient.ArvadosClient) (kc KeepClient, err error) {
kc = KeepClient{
Arvados: arv,
Want_replicas: 2,
package keepclient
import (
- "arvados.org/streamer"
+ "git.curoverse.com/arvados.git/sdk/go/streamer"
"errors"
"fmt"
"io"
import arvados.api
import arvados.config
-ARV_API_SERVER_DIR = '../../../services/api'
-KEEP_SERVER_DIR = '../../../services/keep'
+SERVICES_SRC_DIR = os.path.join(MY_DIRNAME, '../../../services')
SERVER_PID_PATH = 'tmp/pids/webrick-test.pid'
WEBSOCKETS_SERVER_PID_PATH = 'tmp/pids/passenger-test.pid'
+os.environ['PATH'] = os.environ['GOPATH'] + '/bin:' + os.environ['PATH']
def find_server_pid(PID_PATH, wait=10):
now = time.time()
def run(websockets=False, reuse_server=False):
cwd = os.getcwd()
- os.chdir(os.path.join(MY_DIRNAME, ARV_API_SERVER_DIR))
+ os.chdir(os.path.join(SERVICES_SRC_DIR, 'api'))
if websockets:
pid_file = WEBSOCKETS_SERVER_PID_PATH
def stop():
cwd = os.getcwd()
- os.chdir(os.path.join(MY_DIRNAME, ARV_API_SERVER_DIR))
+ os.chdir(os.path.join(SERVICES_SRC_DIR, 'api'))
kill_server_pid(WEBSOCKETS_SERVER_PID_PATH, 0)
kill_server_pid(SERVER_PID_PATH, 0)
def _start_keep(n, keep_args):
keep0 = tempfile.mkdtemp()
- keep_cmd = ["bin/keep",
+ keep_cmd = ["keepstore",
"-volumes={}".format(keep0),
"-listen=:{}".format(25107+n),
"-pid={}".format("tmp/keep{}.pid".format(n))]
def run_keep(blob_signing_key=None, enforce_permissions=False):
stop_keep()
- cwd = os.getcwd()
- os.chdir(os.path.join(MY_DIRNAME, KEEP_SERVER_DIR))
- if os.environ.get('GOPATH') == None:
- os.environ["GOPATH"] = os.getcwd()
- else:
- os.environ["GOPATH"] = os.getcwd() + ":" + os.environ["GOPATH"]
-
- subprocess.call(["./go.sh", "install", "keep"])
-
if not os.path.exists("tmp"):
os.mkdir("tmp")
api.keep_disks().create(body={"keep_disk": {"keep_service_uuid": s1["uuid"] } }).execute()
api.keep_disks().create(body={"keep_disk": {"keep_service_uuid": s2["uuid"] } }).execute()
- os.chdir(cwd)
-
def _stop_keep(n):
kill_server_pid("tmp/keep{}.pid".format(n), 0)
if os.path.exists("tmp/keep{}.volume".format(n)):
os.remove("tmp/keep.blob_signing_key")
def stop_keep():
- cwd = os.getcwd()
- os.chdir(os.path.join(MY_DIRNAME, KEEP_SERVER_DIR))
-
_stop_keep(0)
_stop_keep(1)
- os.chdir(cwd)
-
def run_keep_proxy(auth):
stop_keep_proxy()
- cwd = os.getcwd()
- os.chdir(os.path.join(MY_DIRNAME, KEEP_SERVER_DIR))
- if os.environ.get('GOPATH') == None:
- os.environ["GOPATH"] = os.getcwd()
- else:
- os.environ["GOPATH"] = os.getcwd() + ":" + os.environ["GOPATH"]
-
- subprocess.call(["./go.sh", "install", "arvados.org/keepproxy"])
-
if not os.path.exists("tmp"):
os.mkdir("tmp")
os.environ["ARVADOS_API_HOST_INSECURE"] = "true"
os.environ["ARVADOS_API_TOKEN"] = fixture("api_client_authorizations")[auth]["api_token"]
- kp0 = subprocess.Popen(["bin/keepproxy", "-pid=tmp/keepproxy.pid", "-listen=:{}".format(25101)])
+ kp0 = subprocess.Popen(["keepproxy",
+ "-pid=tmp/keepproxy.pid", "-listen=:{}".format(25101)])
authorize_with("admin")
api = arvados.api('v1', cache=False)
arvados.config.settings()["ARVADOS_KEEP_PROXY"] = "http://localhost:25101"
- os.chdir(cwd)
-
def stop_keep_proxy():
- cwd = os.getcwd()
- os.chdir(os.path.join(MY_DIRNAME, KEEP_SERVER_DIR))
kill_server_pid("tmp/keepproxy.pid", 0)
- os.chdir(cwd)
def fixture(fix):
'''load a fixture yaml file'''
- with open(os.path.join(MY_DIRNAME, ARV_API_SERVER_DIR, "test", "fixtures",
+ with open(os.path.join(SERVICES_SRC_DIR, 'api', "test", "fixtures",
fix + ".yml")) as f:
return yaml.load(f.read())
# to provision the Keep server.
config_blob_signing_key = None
for config_file in ['application.yml', 'application.default.yml']:
- with open(os.path.join(os.path.dirname(__file__),
- run_test_server.ARV_API_SERVER_DIR,
- "config",
- config_file)) as f:
+ with open(os.path.join(run_test_server.SERVICES_SRC_DIR,
+ "api", "config", config_file)) as f:
rails_config = yaml.load(f.read())
for config_section in ['test', 'common']:
try:
+++ /dev/null
-#! /bin/sh
-
-# Wraps the 'go' executable with some environment setup. Sets GOPATH, creates
-# 'pkg' and 'bin' directories, automatically installs dependencies, then runs
-# the underlying 'go' executable with any command line parameters provided to
-# the script.
-
-rootdir=$(readlink -f $(dirname $0))
-GOPATH=$rootdir:$rootdir/../../sdk/go:$GOPATH
-export GOPATH
-
-mkdir -p $rootdir/pkg
-mkdir -p $rootdir/bin
-
-go $*
+++ /dev/null
-#! /bin/sh
-
-# Wraps the 'go' executable with some environment setup. Sets GOPATH, creates
-# 'pkg' and 'bin' directories, automatically installs dependencies, then runs
-# the underlying 'go' executable with any command line parameters provided to
-# the script.
-
-rootdir=$(readlink -f $(dirname $0))
-GOPATH=$rootdir:$rootdir/../../sdk/go:$GOPATH
-export GOPATH
-
-mkdir -p $rootdir/pkg
-mkdir -p $rootdir/bin
-
-go get github.com/gorilla/mux
-
-go $*
package main
import (
- "arvados.org/keepclient"
- "arvados.org/sdk"
+ keepclient "git.curoverse.com/arvados.git/sdk/go/keepclient"
+ arvadosclient "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
"flag"
"fmt"
"github.com/gorilla/mux"
flagset.Parse(os.Args[1:])
- arv, err := sdk.MakeArvadosClient()
+ arv, err := arvadosclient.MakeArvadosClient()
if err != nil {
log.Fatalf("Error setting up arvados client %s", err.Error())
}
package main
import (
- "arvados.org/keepclient"
- "arvados.org/sdk"
+ keepclient "git.curoverse.com/arvados.git/sdk/go/keepclient"
+ arvadosclient "git.curoverse.com/arvados.git/sdk/go/arvadosclient"
"crypto/md5"
"crypto/tls"
"fmt"
"net/url"
"os"
"os/exec"
- "strings"
"testing"
"time"
)
type ServerRequiredSuite struct{}
func pythonDir() string {
- gopath := os.Getenv("GOPATH")
- return fmt.Sprintf("%s/../../sdk/python/tests", strings.Split(gopath, ":")[0])
+ cwd, _ := os.Getwd()
+ return fmt.Sprintf("%s/../../sdk/python/tests", cwd)
}
func (s *ServerRequiredSuite) SetUpSuite(c *C) {
os.Setenv("ARVADOS_KEEP_PROXY", fmt.Sprintf("http://localhost:%v", port))
os.Setenv("ARVADOS_API_TOKEN", token)
- arv, err := sdk.MakeArvadosClient()
+ arv, err := arvadosclient.MakeArvadosClient()
kc, err := keepclient.MakeKeepClient(&arv)
c.Check(kc.Using_proxy, Equals, true)
c.Check(len(kc.ServiceRoots()), Equals, 1)
setupProxyService()
os.Setenv("ARVADOS_EXTERNAL_CLIENT", "true")
- arv, err := sdk.MakeArvadosClient()
+ arv, err := arvadosclient.MakeArvadosClient()
kc, err := keepclient.MakeKeepClient(&arv)
c.Check(kc.Arvados.External, Equals, true)
c.Check(kc.Using_proxy, Equals, true)
"os"
"path"
"regexp"
+ "sort"
+ "strings"
"testing"
)
vols[1].Put(TEST_HASH_2+".meta", []byte("metadata"))
index := vols[0].Index("") + vols[1].Index("")
- expected := `^` + TEST_HASH + `\+\d+ \d+\n` +
+ index_rows := strings.Split(index, "\n")
+ sort.Strings(index_rows)
+ sorted_index := strings.Join(index_rows, "\n")
+ expected := `^\n` + TEST_HASH + `\+\d+ \d+\n` +
TEST_HASH_3 + `\+\d+ \d+\n` +
- TEST_HASH_2 + `\+\d+ \d+\n$`
+ TEST_HASH_2 + `\+\d+ \d+$`
- match, err := regexp.MatchString(expected, index)
+ match, err := regexp.MatchString(expected, sorted_index)
if err == nil {
if !match {
t.Errorf("IndexLocators returned:\n%s", index)