bio-basespace-sdk 0.1.2 → 0.1.3
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.
Potentially problematic release.
This version of bio-basespace-sdk might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/Gemfile +1 -1
- data/README.md +19 -7
- data/VERSION +1 -1
- data/examples/0_app_triggering.rb +1 -1
- data/examples/1_authentication.rb +1 -1
- data/examples/2_browsing.rb +1 -1
- data/examples/3_accessing_files.rb +1 -1
- data/examples/4_app_result_upload.rb +1 -1
- data/examples/5_purchasing.rb +1 -1
- data/lib/basespace/model/multipart_upload.rb +83 -66
- data/lib/{basespace.rb → bio-basespace-sdk.rb} +0 -0
- data/spec/basespaceapi_spec.rb +1 -1
- data/spec/basespaceerror_spec.rb +1 -1
- data/spec/basespacemodel_spec.rb +1 -1
- metadata +23 -45
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 92cef1459a52d87689eb5ce456fc464292de4019
|
4
|
+
data.tar.gz: a123635b332ca349729b113e307e171819c725a6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 32b9ea9d704f55d3c6496d33cd353b5eff3e7ad213cd4658eeee6e212aa40231bedd445e41b2b55a2048f1e53581ecf0a53f302e27491a3da036ac6e2105af9d
|
7
|
+
data.tar.gz: 9affe81766270bb7631cde418188d31cb62b7f6ef4046fda52f2aab72cfc9d8e165a93e87ed4b8dba9398451fcbcb6ae4a00c7dd8a5a557840dfafb1fb79aeb9
|
data/Gemfile
CHANGED
@@ -8,7 +8,7 @@ gem "addressable", ">= 2.3.2"
|
|
8
8
|
# Add dependencies to develop your gem here.
|
9
9
|
# Include everything needed to run rake, tests, features, etc.
|
10
10
|
group :development do
|
11
|
-
gem "rspec", "~> 2.
|
11
|
+
gem "rspec", "~> 2.14.1"
|
12
12
|
gem "bundler", ">= 1.1.5"
|
13
13
|
gem "jeweler", "~> 1.8.4"
|
14
14
|
gem "bio", ">= 1.4.2"
|
data/README.md
CHANGED
@@ -8,7 +8,19 @@ The primary purpose of the SDK is to provide an easy-to-use Ruby environment ena
|
|
8
8
|
|
9
9
|
## Availability
|
10
10
|
|
11
|
-
|
11
|
+
*Note:* We are still testing our code. Please take the production-ready gem with a pinch of salt.
|
12
|
+
|
13
|
+
The production environment version of ``Bio::BaseSpace`` is available as a Ruby gem:
|
14
|
+
|
15
|
+
gem install bio-basespace-sdk
|
16
|
+
|
17
|
+
Depending on your Ruby installation, it might be necessary to install the Ruby gem with superuser permissions:
|
18
|
+
|
19
|
+
sudo gem install bio-basespace-sdk
|
20
|
+
|
21
|
+
### Pre-Release Version
|
22
|
+
|
23
|
+
The pre-release version of ``Bio::BaseSpace`` can be checked out here:
|
12
24
|
|
13
25
|
git clone https://github.com/joejimbo/basespace-ruby-sdk.git
|
14
26
|
|
@@ -16,7 +28,7 @@ or by,
|
|
16
28
|
|
17
29
|
git clone git@github.com:joejimbo/basespace-ruby-sdk.git
|
18
30
|
|
19
|
-
|
31
|
+
Status: [](https://travis-ci.org/joejimbo/basespace-ruby-sdk)
|
20
32
|
|
21
33
|
## Setup
|
22
34
|
|
@@ -33,7 +45,7 @@ or add it to your Ruby scripts using Bio::BaseSpace:
|
|
33
45
|
To test that everything is working as expected, launch a Interactive Ruby and try importing 'Bio::BaseSpace':
|
34
46
|
|
35
47
|
$ irb
|
36
|
-
>> require 'basespace'
|
48
|
+
>> require 'bio-basespace-sdk'
|
37
49
|
>> include Bio::BaseSpace
|
38
50
|
|
39
51
|
## Application triggering
|
@@ -46,7 +58,7 @@ we are able to obtain information about the user who launched the App and the da
|
|
46
58
|
First, we instantiate a BaseSpaceAPI object using the ``client_key`` and ``client_secret`` codes provided on the BaseSpace developer's website when registering our App, as well as the ``AppSessionId`` generated from the app-triggering:
|
47
59
|
|
48
60
|
|
49
|
-
require 'basespace'
|
61
|
+
require 'bio-basespace-sdk'
|
50
62
|
|
51
63
|
include Bio::BaseSpace
|
52
64
|
|
@@ -184,7 +196,7 @@ Here we demonstrate the basic BaseSpace authentication process. The work-flow ou
|
|
184
196
|
|
185
197
|
Again, we will start out by initializing a ``BaseSpaceAPI`` object:
|
186
198
|
|
187
|
-
require 'basespace'
|
199
|
+
require 'bio-basespace-sdk'
|
188
200
|
include Bio::BaseSpace
|
189
201
|
|
190
202
|
client_id = 'my client key'
|
@@ -266,7 +278,7 @@ a ``user`` instance we can use it to retrieve all project belonging to that user
|
|
266
278
|
|
267
279
|
First we will initialize a ``BaseSpaceAPI`` using our access-token for ``global browse``:
|
268
280
|
|
269
|
-
require 'basespace'
|
281
|
+
require 'bio-basespace-sdk'
|
270
282
|
include Bio::BaseSpace
|
271
283
|
|
272
284
|
# REST server information and user access_token
|
@@ -372,7 +384,7 @@ In addition, we take a look at some of the special queuring methods associated w
|
|
372
384
|
Again, start out by initializing a ``BaseSpaceAPI`` instance and retrieving all projects belonging to the current user:
|
373
385
|
|
374
386
|
# First, create a client for making calls for this user session
|
375
|
-
require 'basespace'
|
387
|
+
require 'bio-basespace-sdk'
|
376
388
|
include Bio::BaseSpace
|
377
389
|
|
378
390
|
client_id = 'my client key'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
@@ -16,7 +16,7 @@
|
|
16
16
|
# Requesting an access-token for data browsing
|
17
17
|
# https://developer.basespace.illumina.com/docs/content/documentation/sdk-samples/python-sdk-overview#Requesting_an_access-token_for_data_browsing
|
18
18
|
|
19
|
-
require 'basespace'
|
19
|
+
require 'bio-basespace-sdk'
|
20
20
|
|
21
21
|
include Bio::BaseSpace
|
22
22
|
|
data/examples/2_browsing.rb
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
# Browsing data with global browse access
|
17
17
|
# https://developer.basespace.illumina.com/docs/content/documentation/sdk-samples/python-sdk-overview#Browsing_data_with_global_browse_access
|
18
18
|
|
19
|
-
require 'basespace'
|
19
|
+
require 'bio-basespace-sdk'
|
20
20
|
|
21
21
|
include Bio::BaseSpace
|
22
22
|
|
@@ -16,7 +16,7 @@
|
|
16
16
|
# Accessing file-trees and querying BAM or VCF files
|
17
17
|
# https://developer.basespace.illumina.com/docs/content/documentation/sdk-samples/python-sdk-overview#Accessing_file-trees_and_querying_BAM_or_VCF_files
|
18
18
|
|
19
|
-
require 'basespace'
|
19
|
+
require 'bio-basespace-sdk'
|
20
20
|
|
21
21
|
include Bio::BaseSpace
|
22
22
|
|
@@ -16,7 +16,7 @@
|
|
16
16
|
# Creating an AppResult and uploading files
|
17
17
|
# https://developer.basespace.illumina.com/docs/content/documentation/sdk-samples/python-sdk-overview#Creating_an_AppResult_and_uploading_files
|
18
18
|
|
19
|
-
require 'basespace'
|
19
|
+
require 'bio-basespace-sdk'
|
20
20
|
|
21
21
|
include Bio::BaseSpace
|
22
22
|
|
data/examples/5_purchasing.rb
CHANGED
@@ -31,7 +31,7 @@ class UploadTask
|
|
31
31
|
# +total+:: Total number of parts in the multi-part upload.
|
32
32
|
# +myfile+:: Local file to be uploaded.
|
33
33
|
# +attempt+:: Number of attempts that the file was previously uploaded (upload tries).
|
34
|
-
def initialize(
|
34
|
+
def initialize(api, bs_file_id, part, total, myfile, attempt)
|
35
35
|
@api = api
|
36
36
|
@part = part # part number
|
37
37
|
@total = total # out of total part count
|
@@ -75,12 +75,17 @@ class UploadTask
|
|
75
75
|
end
|
76
76
|
|
77
77
|
end # class UploadTask
|
78
|
-
|
79
|
-
|
78
|
+
|
79
|
+
# Multipart file upload consumer class.
|
80
|
+
#
|
81
|
+
# TODO This file is not yet ported as the multipartFileUpload class is
|
82
|
+
# just mentioned in the comment section of the BaseSpaceAPI file.
|
83
|
+
class Consumer
|
84
|
+
|
80
85
|
def initialize(task_queue, result_queue, pause_event, halt_event)
|
81
|
-
#
|
82
|
-
#
|
83
|
-
#
|
86
|
+
# TODO http://stackoverflow.com/questions/710785/working-with-multiple-processes-in-ruby
|
87
|
+
# http://stackoverflow.com/questions/855805/please-introduce-a-multi-processing-library-in-perl-or-ruby
|
88
|
+
# http://docs.python.jp/2.6/library/multiprocessing.html
|
84
89
|
#multiprocessing.Process.__init__(self)
|
85
90
|
@task_queue = task_queue
|
86
91
|
@result_queue = result_queue
|
@@ -88,43 +93,46 @@ class Consumer # [TODO] inherit multiprocessing.Process
|
|
88
93
|
@halt = haltEvent
|
89
94
|
end
|
90
95
|
|
91
|
-
#
|
96
|
+
# TODO
|
92
97
|
def run
|
93
98
|
proc_name = self.name
|
94
|
-
while True
|
99
|
+
while True
|
95
100
|
unless self.pause.is_set()
|
96
101
|
next_task = self.task_queue.get()
|
97
102
|
end
|
98
103
|
|
99
|
-
if next_task is None or self.halt.is_set()
|
104
|
+
if next_task is None or self.halt.is_set() # check if we are out of jobs or have been halted
|
100
105
|
# Poison pill means shutdown
|
101
|
-
|
106
|
+
puts "#{proc_name}: Exiting"
|
102
107
|
self.task_queue.task_done()
|
103
108
|
break
|
104
|
-
elsif self.pause.is_set()
|
105
|
-
|
109
|
+
elsif self.pause.is_set() # if we have been paused, sleep for a bit then check back
|
110
|
+
puts "#{proc_name}: Paused"
|
106
111
|
time.sleep(3)
|
107
|
-
else
|
108
|
-
|
112
|
+
else # do some work
|
113
|
+
puts "#{proc_name}: #{next_task}"
|
109
114
|
answer = next_task()
|
110
115
|
self.task_queue.task_done()
|
111
|
-
if answer.state == 1
|
116
|
+
if answer.state == 1 # case everything went well
|
112
117
|
self.result_queue.put(answer)
|
113
|
-
else
|
114
|
-
if next_task.attempt < 3
|
118
|
+
else # case something sent wrong
|
119
|
+
if next_task.attempt < 3
|
115
120
|
self.task_queue.put(next_task) # queue the guy for a retry
|
116
|
-
else
|
121
|
+
else # problems, shutting down this party
|
117
122
|
self.halt.set() # halt all other process
|
118
123
|
end
|
119
124
|
end
|
120
125
|
end
|
121
126
|
end
|
122
|
-
return
|
123
127
|
end
|
124
128
|
end # class Consumer
|
125
129
|
|
130
|
+
# Multipart file upload class.
|
131
|
+
#
|
132
|
+
# TODO This file is not yet ported as the multipartFileUpload class is
|
133
|
+
# just mentioned in the comment section of the BaseSpaceAPI file.
|
134
|
+
class MultipartUpload
|
126
135
|
|
127
|
-
class MultipartUpload:
|
128
136
|
def initialize(api, a_id, local_file, file_object, cpu_count, part_size, temp_dir, verbose)
|
129
137
|
@api = api
|
130
138
|
@analysis_id = a_id
|
@@ -141,13 +149,14 @@ class MultipartUpload:
|
|
141
149
|
end
|
142
150
|
|
143
151
|
def to_s
|
144
|
-
#
|
152
|
+
# TODO fix this.
|
153
|
+
# NOTE Python sublist notation [:5] already changed to Ruby [0..4]
|
145
154
|
return "MPU - Stat: " + @status + ", LiveThread: " + str(self.getRunningThreadCount()) + \
|
146
|
-
", RunTime: " + str(self.getRunningTime())[
|
155
|
+
", RunTime: " + str(self.getRunningTime())[0..4] + 's' + \
|
147
156
|
", Q-size " + str(self.tasks.qsize()) + \
|
148
157
|
", Completed " + str(self.getProgressRatio()) + \
|
149
158
|
", AVG TransferRate " + self.getTransRate() + \
|
150
|
-
", Data transfered " + str(self.getTotalTransfered())[
|
159
|
+
", Data transfered " + str(self.getTotalTransfered())[0..4] + 'Gb'
|
151
160
|
end
|
152
161
|
|
153
162
|
def to_str
|
@@ -165,7 +174,7 @@ class MultipartUpload:
|
|
165
174
|
totalSize = os.path.getsize(self.localFile)
|
166
175
|
fileCount = int(math.ceil(totalSize/(self.partSize*1024.0*1000)))
|
167
176
|
|
168
|
-
if self.verbose
|
177
|
+
if self.verbose
|
169
178
|
print "TotalSize " + str(totalSize)
|
170
179
|
print "Using split size " + str(self.partSize) +"Mb"
|
171
180
|
print "Filecount " + str(fileCount)
|
@@ -175,110 +184,118 @@ class MultipartUpload:
|
|
175
184
|
# Establish communication queues
|
176
185
|
self.tasks = multiprocessing.JoinableQueue()
|
177
186
|
self.completedPool = multiprocessing.Queue()
|
178
|
-
|
179
|
-
t = uploadTask(self.api,self.remoteFile.Id,i, fileCount, self.localFile, 0)
|
187
|
+
[1..fileCount].each { |i| # set up the task queue
|
188
|
+
t = uploadTask(self.api,self.remoteFile.Id, i, fileCount, self.localFile, 0)
|
180
189
|
self.tasks.put(t)
|
181
|
-
|
190
|
+
}
|
182
191
|
self.totalTask = self.tasks.qsize()
|
183
192
|
|
184
193
|
# create consumers
|
185
194
|
self.pauseEvent = multiprocessing.Event()
|
186
195
|
self.haltEvent = multiprocessing.Event()
|
187
|
-
if self.verbose
|
196
|
+
if self.verbose
|
188
197
|
print 'Creating %d consumers' % self.cpuCount
|
189
198
|
print "queue size " + str(self.tasks.qsize())
|
190
199
|
end
|
191
|
-
|
192
|
-
|
193
|
-
|
200
|
+
# NOTE Original code -- note the strange indent. Variables i and c not used. Buggy code?
|
201
|
+
# self.consumers = [ Consumer(self.tasks, self.completedPool,self.pauseEvent,self.haltEvent) for i in xrange(self.cpuCount) ]
|
202
|
+
# for c in self.consumers: self.tasks.put(None) # add poisson pill
|
203
|
+
self.consumers = [0..self.cpuCount].map { |i| Consumer(self.tasks, self.completedPool, self.pauseEvent, self.haltEvent) }
|
204
|
+
self.consumers.each { |c| self.tasks.put(nil) }
|
194
205
|
end
|
195
206
|
|
196
|
-
def __cleanUp__
|
207
|
+
def __cleanUp__
|
197
208
|
self.stats[0] += 1
|
198
209
|
end
|
199
210
|
|
200
|
-
def startUpload(
|
201
|
-
if self.Status=='Terminated' or self.Status=='Completed'
|
202
|
-
raise Exception('Cannot resume a ' + self.Status + ' multi-part upload session.')
|
211
|
+
def startUpload(returnOnFinish = 0, testInterval = 5)
|
212
|
+
raise Exception('Cannot resume a ' + self.Status + ' multi-part upload session.') if self.Status == 'Terminated' or self.Status == 'Completed'
|
203
213
|
|
204
|
-
if self.Status == 'Initialized'
|
214
|
+
if self.Status == 'Initialized'
|
205
215
|
self.StartTime = time.time()
|
206
|
-
|
216
|
+
self.consumers.each { |w|
|
207
217
|
w.start()
|
208
|
-
|
218
|
+
}
|
219
|
+
elsif self.Status == 'Paused'
|
209
220
|
self.pauseEvent.clear()
|
221
|
+
end
|
210
222
|
self.Status = 'Running'
|
211
223
|
|
212
224
|
# If returnOnFinish is set
|
213
|
-
if returnOnFinish
|
225
|
+
if returnOnFinish
|
214
226
|
i=0
|
215
|
-
while not self.hasFinished()
|
216
|
-
|
227
|
+
while not self.hasFinished()
|
228
|
+
print str(i) + ': ' + str(self) if self.verbose and i
|
217
229
|
time.sleep(testInterval)
|
218
230
|
i+=1
|
231
|
+
end
|
219
232
|
self.finalize()
|
220
233
|
return 1
|
221
|
-
else
|
234
|
+
else
|
222
235
|
return 1
|
223
236
|
end
|
224
237
|
end
|
225
238
|
|
226
|
-
def finalize
|
227
|
-
if self.getRunningThreadCount()
|
228
|
-
|
229
|
-
if self.Status=='Running':
|
239
|
+
def finalize
|
240
|
+
raise Exception('Cannot finalize a transfer with running threads.') if self.getRunningThreadCount()
|
241
|
+
if self.Status=='Running'
|
230
242
|
# code here for
|
231
243
|
self.Status=='Completed'
|
232
|
-
else
|
244
|
+
else
|
233
245
|
raise Exception('To finalize the status of the transfer must be "Running."')
|
234
246
|
end
|
235
247
|
end
|
236
248
|
|
237
|
-
def hasFinished
|
238
|
-
if self.Status == 'Initialized'
|
239
|
-
return
|
249
|
+
def hasFinished
|
250
|
+
return 0 if self.Status == 'Initialized'
|
251
|
+
return !(self.getRunningThreadCount() > 0)
|
240
252
|
end
|
241
253
|
|
242
|
-
def pauseUpload
|
254
|
+
def pauseUpload
|
243
255
|
self.pauseEvent.set()
|
244
256
|
self.Status = 'Paused'
|
245
257
|
end
|
246
258
|
|
247
|
-
def haltUpload
|
248
|
-
|
259
|
+
def haltUpload
|
260
|
+
self.consumers.each { |c| c.terminate() }
|
249
261
|
self.Status = 'Terminated'
|
250
262
|
end
|
251
263
|
|
252
|
-
def getStatus
|
264
|
+
def getStatus
|
253
265
|
return self.Status
|
254
266
|
end
|
255
267
|
|
256
|
-
def getFileResponse
|
268
|
+
def getFileResponse
|
257
269
|
return self.remoteFile
|
258
270
|
end
|
259
271
|
|
260
|
-
def getRunningThreadCount
|
261
|
-
return sum(
|
272
|
+
def getRunningThreadCount
|
273
|
+
return sum(self.consumers.map { |c| c.is_alive() })
|
262
274
|
end
|
263
275
|
|
264
|
-
def getTransRate
|
276
|
+
def getTransRate
|
265
277
|
# tasks completed size of file-parts
|
266
|
-
|
278
|
+
# NOTE Python sublist [:6] already ported to Ruby [0..5]
|
279
|
+
return str((self.totalTask - self.tasks.qsize())*self.partSize/self.getRunningTime())[0..5] + ' mb/s'
|
267
280
|
end
|
268
281
|
|
269
|
-
def getRunningTime
|
270
|
-
if self.StartTime==-1
|
271
|
-
|
282
|
+
def getRunningTime
|
283
|
+
if self.StartTime==-1
|
284
|
+
return 0
|
285
|
+
else
|
286
|
+
return time.time() - self.StartTime
|
287
|
+
end
|
272
288
|
end
|
273
289
|
|
274
290
|
# Returns the total data amoun transfered in Gb
|
275
|
-
def getTotalTransfered
|
276
|
-
return float((self.totalTask - self.tasks.qsize())*self.partSize)/1000.0
|
291
|
+
def getTotalTransfered
|
292
|
+
return float((self.totalTask - self.tasks.qsize())*self.partSize) / 1000.0
|
277
293
|
end
|
278
294
|
|
279
|
-
def getProgressRatio
|
295
|
+
def getProgressRatio
|
280
296
|
currentQ = float(self.tasks.qsize() - len(self.consumers))
|
281
|
-
|
297
|
+
# NOTE Python sublist [:6] already ported to Ruby [0..5]
|
298
|
+
return str(float(self.totalTask - currentQ) / self.totalTask)[0..5]
|
282
299
|
end
|
283
300
|
|
284
301
|
end # class MultipartUpload
|
File without changes
|
data/spec/basespaceapi_spec.rb
CHANGED
data/spec/basespaceerror_spec.rb
CHANGED
data/spec/basespacemodel_spec.rb
CHANGED
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bio-basespace-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Joachim Baran
|
@@ -18,71 +17,62 @@ dependencies:
|
|
18
17
|
- !ruby/object:Gem::Dependency
|
19
18
|
name: getopt
|
20
19
|
requirement: !ruby/object:Gem::Requirement
|
21
|
-
none: false
|
22
20
|
requirements:
|
23
|
-
- -
|
21
|
+
- - '>='
|
24
22
|
- !ruby/object:Gem::Version
|
25
23
|
version: 1.4.1
|
26
24
|
type: :runtime
|
27
25
|
prerelease: false
|
28
26
|
version_requirements: !ruby/object:Gem::Requirement
|
29
|
-
none: false
|
30
27
|
requirements:
|
31
|
-
- -
|
28
|
+
- - '>='
|
32
29
|
- !ruby/object:Gem::Version
|
33
30
|
version: 1.4.1
|
34
31
|
- !ruby/object:Gem::Dependency
|
35
32
|
name: addressable
|
36
33
|
requirement: !ruby/object:Gem::Requirement
|
37
|
-
none: false
|
38
34
|
requirements:
|
39
|
-
- -
|
35
|
+
- - '>='
|
40
36
|
- !ruby/object:Gem::Version
|
41
37
|
version: 2.3.2
|
42
38
|
type: :runtime
|
43
39
|
prerelease: false
|
44
40
|
version_requirements: !ruby/object:Gem::Requirement
|
45
|
-
none: false
|
46
41
|
requirements:
|
47
|
-
- -
|
42
|
+
- - '>='
|
48
43
|
- !ruby/object:Gem::Version
|
49
44
|
version: 2.3.2
|
50
45
|
- !ruby/object:Gem::Dependency
|
51
46
|
name: rspec
|
52
47
|
requirement: !ruby/object:Gem::Requirement
|
53
|
-
none: false
|
54
48
|
requirements:
|
55
49
|
- - ~>
|
56
50
|
- !ruby/object:Gem::Version
|
57
|
-
version: 2.
|
51
|
+
version: 2.14.1
|
58
52
|
type: :development
|
59
53
|
prerelease: false
|
60
54
|
version_requirements: !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
55
|
requirements:
|
63
56
|
- - ~>
|
64
57
|
- !ruby/object:Gem::Version
|
65
|
-
version: 2.
|
58
|
+
version: 2.14.1
|
66
59
|
- !ruby/object:Gem::Dependency
|
67
60
|
name: bundler
|
68
61
|
requirement: !ruby/object:Gem::Requirement
|
69
|
-
none: false
|
70
62
|
requirements:
|
71
|
-
- -
|
63
|
+
- - '>='
|
72
64
|
- !ruby/object:Gem::Version
|
73
65
|
version: 1.1.5
|
74
66
|
type: :development
|
75
67
|
prerelease: false
|
76
68
|
version_requirements: !ruby/object:Gem::Requirement
|
77
|
-
none: false
|
78
69
|
requirements:
|
79
|
-
- -
|
70
|
+
- - '>='
|
80
71
|
- !ruby/object:Gem::Version
|
81
72
|
version: 1.1.5
|
82
73
|
- !ruby/object:Gem::Dependency
|
83
74
|
name: jeweler
|
84
75
|
requirement: !ruby/object:Gem::Requirement
|
85
|
-
none: false
|
86
76
|
requirements:
|
87
77
|
- - ~>
|
88
78
|
- !ruby/object:Gem::Version
|
@@ -90,7 +80,6 @@ dependencies:
|
|
90
80
|
type: :development
|
91
81
|
prerelease: false
|
92
82
|
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
none: false
|
94
83
|
requirements:
|
95
84
|
- - ~>
|
96
85
|
- !ruby/object:Gem::Version
|
@@ -98,23 +87,20 @@ dependencies:
|
|
98
87
|
- !ruby/object:Gem::Dependency
|
99
88
|
name: bio
|
100
89
|
requirement: !ruby/object:Gem::Requirement
|
101
|
-
none: false
|
102
90
|
requirements:
|
103
|
-
- -
|
91
|
+
- - '>='
|
104
92
|
- !ruby/object:Gem::Version
|
105
93
|
version: 1.4.2
|
106
94
|
type: :development
|
107
95
|
prerelease: false
|
108
96
|
version_requirements: !ruby/object:Gem::Requirement
|
109
|
-
none: false
|
110
97
|
requirements:
|
111
|
-
- -
|
98
|
+
- - '>='
|
112
99
|
- !ruby/object:Gem::Version
|
113
100
|
version: 1.4.2
|
114
101
|
- !ruby/object:Gem::Dependency
|
115
102
|
name: rdoc
|
116
103
|
requirement: !ruby/object:Gem::Requirement
|
117
|
-
none: false
|
118
104
|
requirements:
|
119
105
|
- - ~>
|
120
106
|
- !ruby/object:Gem::Version
|
@@ -122,20 +108,16 @@ dependencies:
|
|
122
108
|
type: :development
|
123
109
|
prerelease: false
|
124
110
|
version_requirements: !ruby/object:Gem::Requirement
|
125
|
-
none: false
|
126
111
|
requirements:
|
127
112
|
- - ~>
|
128
113
|
- !ruby/object:Gem::Version
|
129
114
|
version: '3.12'
|
130
|
-
description:
|
131
|
-
SDK to be used in the development of Apps and scripts for working with Illumina's
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
familiarize yourself with the general BaseSpace developers documentation (https://developer.basespace.illumina.com/)
|
137
|
-
and create a new BaseSpace App to be used when working through the examples provided
|
138
|
-
in 'examples' folder."
|
115
|
+
description: |-
|
116
|
+
Bio::BaseSpace is a Ruby based SDK ported from the Python based BaseSpacePy SDK to be used in the development of Apps and scripts for working with Illumina's BaseSpace cloud-computing solution for next-gen sequencing data analysis.
|
117
|
+
|
118
|
+
The primary purpose of the SDK is to provide an easy-to-use Ruby environment enabling developers to authenticate a user, retrieve data, and upload data/results from their own analysis to BaseSpace.
|
119
|
+
|
120
|
+
If you haven't already done so, you may wish to familiarize yourself with the general BaseSpace developers documentation (https://developer.basespace.illumina.com/) and create a new BaseSpace App to be used when working through the examples provided in 'examples' folder.
|
139
121
|
email: joachim.baran@gmail.com
|
140
122
|
executables: []
|
141
123
|
extensions: []
|
@@ -156,7 +138,6 @@ files:
|
|
156
138
|
- examples/3_accessing_files.rb
|
157
139
|
- examples/4_app_result_upload.rb
|
158
140
|
- examples/5_purchasing.rb
|
159
|
-
- lib/basespace.rb
|
160
141
|
- lib/basespace/api/api_client.rb
|
161
142
|
- lib/basespace/api/base_api.rb
|
162
143
|
- lib/basespace/api/basespace_api.rb
|
@@ -203,36 +184,33 @@ files:
|
|
203
184
|
- lib/basespace/model/variant_header.rb
|
204
185
|
- lib/basespace/model/variant_info.rb
|
205
186
|
- lib/basespace/model/variants_header_response.rb
|
187
|
+
- lib/bio-basespace-sdk.rb
|
206
188
|
- spec/basespaceapi_spec.rb
|
207
189
|
- spec/basespaceerror_spec.rb
|
208
190
|
- spec/basespacemodel_spec.rb
|
209
191
|
homepage: https://github.com/joejimbo/basespace-ruby-sdk
|
210
192
|
licenses:
|
211
193
|
- Apache, Version 2.0
|
194
|
+
metadata: {}
|
212
195
|
post_install_message:
|
213
196
|
rdoc_options: []
|
214
197
|
require_paths:
|
215
198
|
- lib
|
216
199
|
required_ruby_version: !ruby/object:Gem::Requirement
|
217
|
-
none: false
|
218
200
|
requirements:
|
219
|
-
- -
|
201
|
+
- - '>='
|
220
202
|
- !ruby/object:Gem::Version
|
221
203
|
version: '0'
|
222
|
-
segments:
|
223
|
-
- 0
|
224
|
-
hash: -907772599930210264
|
225
204
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
226
|
-
none: false
|
227
205
|
requirements:
|
228
|
-
- -
|
206
|
+
- - '>='
|
229
207
|
- !ruby/object:Gem::Version
|
230
208
|
version: '0'
|
231
209
|
requirements: []
|
232
210
|
rubyforge_project:
|
233
|
-
rubygems_version:
|
211
|
+
rubygems_version: 2.0.5
|
234
212
|
signing_key:
|
235
|
-
specification_version:
|
213
|
+
specification_version: 4
|
236
214
|
summary: Bio::BaseSpace is a Ruby based SDK to be used in the development of Apps
|
237
215
|
and scripts for working with Illumina's BaseSpace cloud-computing solution for next-gen
|
238
216
|
sequencing data analysis.
|