arvados-cli 0.1.20140110131136 → 0.1.20140110141515
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/arv-tag +232 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f99e2294feefa5fd080e394da38de29f8393e9f8
|
4
|
+
data.tar.gz: ec1101e0bb738a3710ba4ca708e8030773c6591c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c045f37afa9245dec4c761b7d7ba5380ea68cd2a48f2cf4f8e59f2ac3a2fb529ce8f7cfe248b69bbf89ae74db0fe533dce284f50ea67aa6a09985b7efd2a0051
|
7
|
+
data.tar.gz: 4d5622d9b87430b4316032a43fffb5c930f3210d2c1dec472a2920450a9ac1b541841987d654371906268f59ac4a211001db1f24188c853ee4f8f11742b46ec4
|
data/bin/arv-tag
ADDED
@@ -0,0 +1,232 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
|
3
|
+
# arv tag usage:
|
4
|
+
# arv tag add tag1 [tag2 ...] --object obj_uuid1 [--object obj_uuid2 ...]
|
5
|
+
# arv tag remove tag1 [tag2 ...] --object obj_uuid1 [--object obj_uuid2 ...]
|
6
|
+
# arv tag remove tag1 [tag2 ...] --all
|
7
|
+
|
8
|
+
def usage
|
9
|
+
abort "Usage:\n" +
|
10
|
+
"arv tag add tag1 [tag2 ...] --objects object_uuid1 [object_uuid2...]\n" +
|
11
|
+
"arv tag remove tag1 [tag2 ...] --objects object_uuid1 [object_uuid2...]\n" +
|
12
|
+
"arv tag remove --all\n"
|
13
|
+
end
|
14
|
+
|
15
|
+
def api_call(method, parameters:{}, request_body:{})
|
16
|
+
request_body[:api_token] = ENV['ARVADOS_API_TOKEN']
|
17
|
+
result = $client.execute(:api_method => method,
|
18
|
+
:parameters => parameters,
|
19
|
+
:body => request_body,
|
20
|
+
:authenticated => false)
|
21
|
+
|
22
|
+
begin
|
23
|
+
results = JSON.parse result.body
|
24
|
+
rescue JSON::ParserError => e
|
25
|
+
abort "Failed to parse server response:\n" + e.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
if results["errors"]
|
29
|
+
abort "Error: #{results["errors"][0]}"
|
30
|
+
end
|
31
|
+
|
32
|
+
return results
|
33
|
+
end
|
34
|
+
|
35
|
+
def tag_add(tag, obj_uuid)
|
36
|
+
return api_call($arvados.links.create,
|
37
|
+
request_body: {
|
38
|
+
:link => {
|
39
|
+
:name => tag,
|
40
|
+
:link_class => :tag,
|
41
|
+
:head_uuid => obj_uuid,
|
42
|
+
}
|
43
|
+
})
|
44
|
+
end
|
45
|
+
|
46
|
+
def tag_remove(tag, obj_uuids=nil)
|
47
|
+
# If we got a list of objects to untag, look up the uuids for the
|
48
|
+
# links that need to be deleted.
|
49
|
+
link_uuids = []
|
50
|
+
if obj_uuids
|
51
|
+
obj_uuids.each do |uuid|
|
52
|
+
link = api_call($arvados.links.list,
|
53
|
+
request_body: {
|
54
|
+
:where => {
|
55
|
+
:link_class => :tag,
|
56
|
+
:name => tag,
|
57
|
+
:head_uuid => uuid,
|
58
|
+
}
|
59
|
+
})
|
60
|
+
if link['items_available'] > 0
|
61
|
+
link_uuids.push link['items'][0]['uuid']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
else
|
65
|
+
all_tag_links = api_call($arvados.links.list,
|
66
|
+
request_body: {
|
67
|
+
:where => {
|
68
|
+
:link_class => :tag,
|
69
|
+
:name => tag,
|
70
|
+
}
|
71
|
+
})
|
72
|
+
link_uuids = all_tag_links['items'].map { |obj| obj['uuid'] }
|
73
|
+
end
|
74
|
+
|
75
|
+
results = []
|
76
|
+
if link_uuids
|
77
|
+
link_uuids.each do |uuid|
|
78
|
+
results.push api_call($arvados.links.delete, parameters:{ :uuid => uuid })
|
79
|
+
end
|
80
|
+
else
|
81
|
+
$stderr.puts "no tags found to remove"
|
82
|
+
end
|
83
|
+
|
84
|
+
return {
|
85
|
+
'kind' => 'arvados#linkList',
|
86
|
+
'items_available' => results.length,
|
87
|
+
'items' => results,
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
if RUBY_VERSION < '1.9.3' then
|
92
|
+
abort <<-EOS
|
93
|
+
#{$0.gsub(/^\.\//,'')} requires Ruby version 1.9.3 or higher.
|
94
|
+
EOS
|
95
|
+
end
|
96
|
+
|
97
|
+
$arvados_api_version = ENV['ARVADOS_API_VERSION'] || 'v1'
|
98
|
+
$arvados_api_host = ENV['ARVADOS_API_HOST'] or
|
99
|
+
abort "#{$0}: fatal: ARVADOS_API_HOST environment variable not set."
|
100
|
+
$arvados_api_token = ENV['ARVADOS_API_TOKEN'] or
|
101
|
+
abort "#{$0}: fatal: ARVADOS_API_TOKEN environment variable not set."
|
102
|
+
$arvados_api_host_insecure = ENV['ARVADOS_API_HOST_INSECURE'] == 'yes'
|
103
|
+
|
104
|
+
begin
|
105
|
+
require 'rubygems'
|
106
|
+
require 'google/api_client'
|
107
|
+
require 'json'
|
108
|
+
require 'pp'
|
109
|
+
require 'oj'
|
110
|
+
require 'trollop'
|
111
|
+
rescue LoadError
|
112
|
+
abort <<-EOS
|
113
|
+
#{$0}: fatal: some runtime dependencies are missing.
|
114
|
+
Try: gem install pp google-api-client json trollop
|
115
|
+
EOS
|
116
|
+
end
|
117
|
+
|
118
|
+
def debuglog(message, verbosity=1)
|
119
|
+
$stderr.puts "#{File.split($0).last} #{$$}: #{message}" if $debuglevel >= verbosity
|
120
|
+
end
|
121
|
+
|
122
|
+
module Kernel
|
123
|
+
def suppress_warnings
|
124
|
+
original_verbosity = $VERBOSE
|
125
|
+
$VERBOSE = nil
|
126
|
+
result = yield
|
127
|
+
$VERBOSE = original_verbosity
|
128
|
+
return result
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
if $arvados_api_host_insecure or $arvados_api_host.match /local/
|
133
|
+
# You probably don't care about SSL certificate checks if you're
|
134
|
+
# testing with a dev server.
|
135
|
+
suppress_warnings { OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE }
|
136
|
+
end
|
137
|
+
|
138
|
+
class Google::APIClient
|
139
|
+
def discovery_document(api, version)
|
140
|
+
api = api.to_s
|
141
|
+
return @discovery_documents["#{api}:#{version}"] ||=
|
142
|
+
begin
|
143
|
+
response = self.execute!(
|
144
|
+
:http_method => :get,
|
145
|
+
:uri => self.discovery_uri(api, version),
|
146
|
+
:authenticated => false
|
147
|
+
)
|
148
|
+
response.body.class == String ? JSON.parse(response.body) : response.body
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
global_opts = Trollop::options do
|
154
|
+
banner "arvados cli client"
|
155
|
+
opt :dry_run, "Don't actually do anything", :short => "-n"
|
156
|
+
opt :verbose, "Print some things on stderr", :short => "-v"
|
157
|
+
opt :uuid, "Return the UUIDs of the objects in the response, one per line (default)", :short => nil
|
158
|
+
opt :json, "Return the entire response received from the API server, as a JSON object", :short => "-j"
|
159
|
+
opt :human, "Return the response received from the API server, as a JSON object with whitespace added for human consumption", :short => "-h"
|
160
|
+
opt :pretty, "Synonym of --human", :short => nil
|
161
|
+
opt :yaml, "Return the response received from the API server, in YAML format", :short => "-y"
|
162
|
+
stop_on ['add', 'remove']
|
163
|
+
end
|
164
|
+
|
165
|
+
p = Trollop::Parser.new do
|
166
|
+
opt(:all,
|
167
|
+
"Remove this tag from all objects under your ownership. Only valid with `tag remove'.",
|
168
|
+
:short => :none)
|
169
|
+
opt(:object,
|
170
|
+
"The UUID of an object to which this tag operation should be applied.",
|
171
|
+
:type => :string,
|
172
|
+
:multi => true,
|
173
|
+
:short => :o)
|
174
|
+
end
|
175
|
+
|
176
|
+
$options = Trollop::with_standard_exception_handling p do
|
177
|
+
p.parse ARGV
|
178
|
+
end
|
179
|
+
|
180
|
+
if $options[:all] and ARGV[0] != 'remove'
|
181
|
+
usage
|
182
|
+
end
|
183
|
+
|
184
|
+
# Set up the API client.
|
185
|
+
|
186
|
+
$client ||= Google::APIClient.
|
187
|
+
new(:host => $arvados_api_host,
|
188
|
+
:application_name => File.split($0).last,
|
189
|
+
:application_version => $application_version.to_s)
|
190
|
+
$arvados = $client.discovered_api('arvados', $arvados_api_version)
|
191
|
+
|
192
|
+
results = []
|
193
|
+
cmd = ARGV.shift
|
194
|
+
case cmd
|
195
|
+
when 'add'
|
196
|
+
ARGV.each do |tag|
|
197
|
+
$options[:object].each do |obj|
|
198
|
+
results.push(tag_add(tag, obj))
|
199
|
+
end
|
200
|
+
end
|
201
|
+
when 'remove'
|
202
|
+
ARGV.each do |tag|
|
203
|
+
if $options[:all] then
|
204
|
+
results.push(tag_remove(tag))
|
205
|
+
else
|
206
|
+
results.push(tag_remove(tag, $options[:object]))
|
207
|
+
end
|
208
|
+
end
|
209
|
+
else
|
210
|
+
usage
|
211
|
+
end
|
212
|
+
|
213
|
+
if global_opts[:human] or global_opts[:pretty] then
|
214
|
+
puts Oj.dump(results, :indent => 1)
|
215
|
+
elsif global_opts[:yaml] then
|
216
|
+
puts results.to_yaml
|
217
|
+
elsif global_opts[:json] then
|
218
|
+
puts Oj.dump(results)
|
219
|
+
else
|
220
|
+
results.each do |r|
|
221
|
+
next if r == nil
|
222
|
+
if r["items"] and r["kind"].match /list$/i
|
223
|
+
r['items'].each do |i| puts i['uuid'] end
|
224
|
+
elsif r['uuid'].nil?
|
225
|
+
abort("Response did not include a uuid:\n" +
|
226
|
+
Oj.dump(r, :indent => 1) +
|
227
|
+
"\n")
|
228
|
+
else
|
229
|
+
puts r['uuid']
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arvados-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.20140110141515
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arvados Authors
|
@@ -108,18 +108,20 @@ dependencies:
|
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0.8'
|
111
|
-
description: This is the Arvados SDK CLI gem, git revision
|
111
|
+
description: This is the Arvados SDK CLI gem, git revision 83f85a702927b37236b88ab9633d8e0e918e1218
|
112
112
|
email: gem-dev@clinicalfuture.com
|
113
113
|
executables:
|
114
114
|
- arv
|
115
115
|
- arv-run-pipeline-instance
|
116
116
|
- arv-crunch-job
|
117
|
+
- arv-tag
|
117
118
|
extensions: []
|
118
119
|
extra_rdoc_files: []
|
119
120
|
files:
|
120
121
|
- bin/arv
|
121
122
|
- bin/arv-run-pipeline-instance
|
122
123
|
- bin/arv-crunch-job
|
124
|
+
- bin/arv-tag
|
123
125
|
- bin/crunch-job
|
124
126
|
homepage: http://arvados.org
|
125
127
|
licenses:
|