bio-basespace-sdk 0.1.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bio-basespace-sdk might be problematic. Click here for more details.

Files changed (65) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/.travis.yml +11 -0
  4. data/Gemfile +16 -0
  5. data/License.txt +275 -0
  6. data/README.md +671 -0
  7. data/Rakefile +54 -0
  8. data/VERSION +1 -0
  9. data/examples/0_app_triggering.rb +135 -0
  10. data/examples/1_authentication.rb +156 -0
  11. data/examples/2_browsing.rb +84 -0
  12. data/examples/3_accessing_files.rb +129 -0
  13. data/examples/4_app_result_upload.rb +102 -0
  14. data/examples/5_purchasing.rb +119 -0
  15. data/lib/basespace.rb +126 -0
  16. data/lib/basespace/api/api_client.rb +313 -0
  17. data/lib/basespace/api/base_api.rb +242 -0
  18. data/lib/basespace/api/basespace_api.rb +789 -0
  19. data/lib/basespace/api/basespace_error.rb +80 -0
  20. data/lib/basespace/api/billing_api.rb +115 -0
  21. data/lib/basespace/model.rb +78 -0
  22. data/lib/basespace/model/app_result.rb +158 -0
  23. data/lib/basespace/model/app_result_response.rb +40 -0
  24. data/lib/basespace/model/app_session.rb +99 -0
  25. data/lib/basespace/model/app_session_compact.rb +43 -0
  26. data/lib/basespace/model/app_session_launch_object.rb +58 -0
  27. data/lib/basespace/model/app_session_response.rb +41 -0
  28. data/lib/basespace/model/application.rb +47 -0
  29. data/lib/basespace/model/application_compact.rb +44 -0
  30. data/lib/basespace/model/basespace_model.rb +60 -0
  31. data/lib/basespace/model/coverage.rb +48 -0
  32. data/lib/basespace/model/coverage_meta_response.rb +40 -0
  33. data/lib/basespace/model/coverage_metadata.rb +43 -0
  34. data/lib/basespace/model/coverage_response.rb +40 -0
  35. data/lib/basespace/model/file.rb +172 -0
  36. data/lib/basespace/model/file_response.rb +40 -0
  37. data/lib/basespace/model/genome_response.rb +40 -0
  38. data/lib/basespace/model/genome_v1.rb +56 -0
  39. data/lib/basespace/model/list_response.rb +53 -0
  40. data/lib/basespace/model/multipart_upload.rb +288 -0
  41. data/lib/basespace/model/product.rb +50 -0
  42. data/lib/basespace/model/project.rb +103 -0
  43. data/lib/basespace/model/project_response.rb +40 -0
  44. data/lib/basespace/model/purchase.rb +89 -0
  45. data/lib/basespace/model/purchase_response.rb +39 -0
  46. data/lib/basespace/model/purchased_product.rb +56 -0
  47. data/lib/basespace/model/query_parameters.rb +86 -0
  48. data/lib/basespace/model/query_parameters_purchased_product.rb +67 -0
  49. data/lib/basespace/model/refund_purchase_response.rb +40 -0
  50. data/lib/basespace/model/resource_list.rb +48 -0
  51. data/lib/basespace/model/response_status.rb +42 -0
  52. data/lib/basespace/model/run_compact.rb +55 -0
  53. data/lib/basespace/model/sample.rb +127 -0
  54. data/lib/basespace/model/sample_response.rb +40 -0
  55. data/lib/basespace/model/user.rb +80 -0
  56. data/lib/basespace/model/user_compact.rb +45 -0
  57. data/lib/basespace/model/user_response.rb +40 -0
  58. data/lib/basespace/model/variant.rb +57 -0
  59. data/lib/basespace/model/variant_header.rb +44 -0
  60. data/lib/basespace/model/variant_info.rb +48 -0
  61. data/lib/basespace/model/variants_header_response.rb +40 -0
  62. data/spec/basespaceapi_spec.rb +26 -0
  63. data/spec/basespaceerror_spec.rb +87 -0
  64. data/spec/basespacemodel_spec.rb +57 -0
  65. metadata +239 -0
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "bio-basespace-sdk"
18
+ gem.homepage = "https://github.com/joejimbo/basespace-ruby-sdk"
19
+ gem.license = "Apache, Version 2.0"
20
+ gem.summary = %Q{Bio::BaseSpace is a Ruby based 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.}
21
+ gem.description = %Q{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.
22
+
23
+ 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.
24
+
25
+ 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.}
26
+ gem.email = "joachim.baran@gmail.com"
27
+ gem.authors = ["Joachim Baran", "Raoul Bonnal", "Eri Kibukawa", "Francesco Strozzi", "Toshiaki Katayama"]
28
+ # gem.executable = 'basespace-ruby'
29
+ # dependencies defined in Gemfile
30
+ end
31
+ Jeweler::RubygemsDotOrgTasks.new
32
+
33
+ require 'rspec/core'
34
+ require 'rspec/core/rake_task'
35
+ RSpec::Core::RakeTask.new(:spec) do |spec|
36
+ spec.pattern = FileList['spec/**/*_spec.rb']
37
+ end
38
+
39
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
40
+ spec.pattern = 'spec/**/*_spec.rb'
41
+ spec.rcov = true
42
+ end
43
+
44
+ task :default => :spec
45
+
46
+ require 'rdoc/task'
47
+ Rake::RDocTask.new do |rdoc|
48
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "BaseSpace Ruby SDK #{version}"
52
+ # rdoc.rdoc_files.include('README*')
53
+ rdoc.rdoc_files.include('lib/**/*.rb')
54
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.2
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2013 Toshiaki Katayama, Joachim Baran
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ # Application triggering
17
+ # https://developer.basespace.illumina.com/docs/content/documentation/sdk-samples/python-sdk-overview#Application_triggering
18
+
19
+ require 'basespace'
20
+
21
+ include Bio::BaseSpace
22
+
23
+ # This script demonstrates how to retrieve the AppSession object produced
24
+ # when a user initiates an app. Further it's demonstrated how to automatically
25
+ # generate the scope strings to request access to the data object (a project or a sample)
26
+ # that the app was triggered to analyze.
27
+ #
28
+ # NOTE: You will need to fill in client values for your app below
29
+
30
+ # Initialize an authentication object using the key and secret from your app.
31
+ opts = {
32
+ # FILL IN WITH YOUR APP VALUES HERE!
33
+ 'client_id' => '<your client key>',
34
+ 'client_secret' => '<your client secret>',
35
+ 'access_token' => '<your access token>',
36
+ 'app_session_id' => '<app session id>',
37
+ 'basespace_url' => 'https://api.basespace.illumina.com/',
38
+ 'api_version' => 'v1pre3',
39
+ }
40
+
41
+ # Test if client variables have been set.
42
+ unless opts.select{|k,v| v[/^<.*>$/]}.empty?
43
+ opts = Bio::BaseSpace.load_credentials
44
+ exit 1 unless opts
45
+ end
46
+
47
+ # First we will initialize a BaseSpace API object using our app information and the appSessionId.
48
+ bs_api = BaseSpaceAPI.new(opts['client_id'], opts['client_secret'], opts['basespace_url'], opts['api_version'], opts['app_session_id'])
49
+
50
+ # Using the bmy_app_session.spaceApi we can request the appSession object corresponding to the AppSession id supplied.
51
+ my_app_session = bs_api.get_app_session
52
+ puts my_app_session
53
+
54
+ # An app session contains a referal to one or more appLaunchObjects which reference the data module
55
+ # the user launched the app on. This can be a list of projects, samples, or a mixture of objects.
56
+ puts "Type of data the app was triggered on can be seen in 'references'"
57
+ puts my_app_session.references.inspect # same as my_app_session.get_attr('References') inspect is used to put surrounding []
58
+ puts
59
+
60
+ # We can also get a handle to the user who started the AppSession.
61
+ puts "We can get a handle for the user who triggered the app"
62
+ puts my_app_session.user_created_by # same as my_app_session.get_attr('UserCreatedBy')
63
+ puts
64
+
65
+ # Let's have a closer look at the appSessionLaunchObject.
66
+ my_reference = my_app_session.references.first
67
+
68
+ puts "We can get out information such as the href to the launch object:"
69
+ puts my_reference.href_content # same as my_reference.get_attr('HrefContent')
70
+ puts
71
+ puts "and the specific type of that object:"
72
+ puts my_reference.type # same as my_reference.get_attr('Type')
73
+ puts
74
+
75
+ # Now we will want to ask for more permission for the specific reference object.
76
+ my_reference_content = my_reference.content
77
+
78
+ puts "We can get out the specific project objects by using 'content':"
79
+ puts my_reference_content
80
+ puts
81
+
82
+ puts "The scope string for requesting write access to the reference object is:"
83
+ puts my_reference_content.get_access_str('write')
84
+ puts
85
+
86
+ # We can easily request write access to the reference object, so that our App can start contributing analysis.
87
+ # By default, we ask for write permission and authentication for a device.
88
+ access_map = bs_api.get_access(my_reference_content, 'write')
89
+ # We may limit our request to read access only if that's all that is needed
90
+ read_access_map = bs_api.get_access(my_reference_content, 'read')
91
+
92
+ puts "We get the following access map for the write request"
93
+ puts access_map
94
+ puts
95
+
96
+ # NOTE You'll need to use a writable project for the following code.
97
+ # It will fail if the session is read only (e.g., demo projects).
98
+
99
+ ## PAUSE HERE
100
+ # Have the user visit the verification uri to grant us access.
101
+ puts "Please visit the following URL within 15 seconds and grant access"
102
+ puts access_map['verification_with_code_uri']
103
+
104
+ link = access_map['verification_with_code_uri']
105
+ host = RbConfig::CONFIG['host_os']
106
+ case host
107
+ when /mswin|mingw|cygwin/
108
+ system("start #{link}")
109
+ when /darwin/
110
+ system("open #{link}")
111
+ when /linux/
112
+ system("xdg-open #{link}")
113
+ end
114
+ # BaseSpace exception: authorization_pending - User has not yet approved the access request (RuntimeError).
115
+ sleep(15)
116
+ ## PAUSE HERE
117
+
118
+ # Once the user has granted us the access to the object we requested we can get
119
+ # the basespace access token and start browsing simply by calling updatePriviliges
120
+ # on the BaseSpaceAPI instance.
121
+ code = access_map['device_code']
122
+ bs_api.update_privileges(code)
123
+ puts "The BaseSpaceAPI instance was update with write privileges"
124
+ puts bs_api
125
+ puts
126
+
127
+ # for more details on access-requests and authentication and an example of the web-based case
128
+ # see example 1_authentication.rb
129
+
130
+
131
+
132
+
133
+
134
+
135
+
@@ -0,0 +1,156 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2013 Toshiaki Katayama, Joachim Baran
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ # Requesting an access-token for data browsing
17
+ # https://developer.basespace.illumina.com/docs/content/documentation/sdk-samples/python-sdk-overview#Requesting_an_access-token_for_data_browsing
18
+
19
+ require 'basespace'
20
+
21
+ include Bio::BaseSpace
22
+
23
+ # Demonstrates the basic BaseSpace authentication process The work-flow is as follows:
24
+ # scope-request -> user grants access -> browsing data. The scenario is demonstrated both for device and web-based apps.
25
+ #
26
+ # Further we demonstrate how a BaseSpaceAPI instance may be preserved across multiple
27
+ # http-request for the same app session using Python's pickle module.
28
+ #
29
+ # NOTE You will need to fill client values for your app below!
30
+
31
+ opts = {
32
+ # FILL IN WITH YOUR APP VALUES HERE!
33
+ 'client_id' => '<your client key>',
34
+ 'client_secret' => '<your client secret>',
35
+ 'access_token' => '<your access token>',
36
+ 'app_session_id' => '<app session id>',
37
+ 'basespace_url' => 'https://api.basespace.illumina.com/',
38
+ 'api_version' => 'v1pre3',
39
+ }
40
+
41
+ # Test if client variables have been set.
42
+ unless opts.select{|k,v| v[/^<.*>$/]}.empty?
43
+ opts = Bio::BaseSpace.load_credentials
44
+ exit 1 unless opts
45
+ end
46
+
47
+ bs_api = BaseSpaceAPI.new(opts['client_id'], opts['client_secret'], opts['basespace_url'], opts['api_version'], opts['app_session_id'])
48
+
49
+ # First, get the verification code and uri for scope 'browse global'.
50
+ device_info = bs_api.get_verification_code('browse global')
51
+
52
+ ## PAUSE HERE
53
+ # Have the user visit the verification uri to grant us access.
54
+ puts "Please visit the following URL within 15 seconds and grant access"
55
+ puts device_info['verification_with_code_uri']
56
+
57
+ link = device_info['verification_with_code_uri']
58
+ host = RbConfig::CONFIG['host_os']
59
+ case host
60
+ when /mswin|mingw|cygwin/
61
+ system("start #{link}")
62
+ when /darwin/
63
+ system("open #{link}")
64
+ when /linux/
65
+ system("xdg-open #{link}")
66
+ end
67
+ sleep(15)
68
+ ## PAUSE HERE
69
+
70
+ # Once the user has granted us access to objects we requested, we can get
71
+ # the basespace access token and start browsing simply by calling updatePriviliges
72
+ # on the baseSpaceApi instance.
73
+ code = device_info['device_code']
74
+ bs_api.update_privileges(code)
75
+
76
+ # As a reference the provided access-token can be obtained from the BaseSpaceAPI object.
77
+ puts "My Access-token: #{bs_api.get_access_token}"
78
+ puts
79
+
80
+ # Let's try and grab all available genomes with our new api!
81
+ all_genomes = bs_api.get_available_genomes
82
+ puts "Genomes: #{all_genomes}"
83
+ puts
84
+
85
+ # If at a later stage we wish to initialize a BaseSpaceAPI object when we already have
86
+ # an access-token from a previous sessions, this may simply be done by initializing the BaseSpaceAPI
87
+ # object using the key-word AccessToken.
88
+ my_token = bs_api.get_access_token
89
+ bs_api = BaseSpaceAPI.new(opts['client_id'], opts['client_secret'], opts['basespace_url'], opts['api_version'], opts['app_session_id'], my_token)
90
+ puts "A BaseSpaceAPI instance initialized with an access-token:"
91
+ puts bs_api
92
+ puts
93
+
94
+ #################### Web-based verification #################################
95
+ # The scenario where the authentication is done through a web-browser.
96
+
97
+ bs_api_web = BaseSpaceAPI.new(opts['client_id'], opts['client_secret'], opts['basespace_url'], opts['api_version'], opts['app_session_id'])
98
+ user_url= bs_api_web.get_web_verification_code('browse global', 'http://localhost', 'myState')
99
+
100
+ puts "Have the user visit:"
101
+ puts user_url
102
+ puts
103
+
104
+ link = user_url
105
+ host = RbConfig::CONFIG['host_os']
106
+ case host
107
+ when /mswin|mingw|cygwin/
108
+ system("start #{link}")
109
+ when /darwin/
110
+ system("open #{link}")
111
+ when /linux/
112
+ system("xdg-open #{link}")
113
+ end
114
+
115
+ # Once the grant has been given you will be redirected to a url looking something like this
116
+ # http://localhost/?code=<MY DEVICE CODE FROM REDICRECT>&state=myState&action=oauthv2authorization
117
+ # By getting the code parameter from the above http request we can now get our access-token.
118
+
119
+ my_code = '<MY DEVICE CODE FROM REDICRECT>'
120
+ #bs_api_web.update_privileges(my_code)
121
+
122
+ user = bs_api.get_user_by_id('current')
123
+ puts "Get current user"
124
+ puts user
125
+ puts bs_api
126
+ puts
127
+
128
+ #### Carry on with the work...
129
+
130
+ # Now we wish to store the API object for the next time we get a request in this session
131
+ # make a file to store the BaseSpaceAPI instance in. For easy identification we will name
132
+ # this by any id that may be used for identifying the session again.
133
+ my_session_id = bs_api.app_session_id + '.marshal'
134
+ File.open(my_session_id, 'w') do |f|
135
+ Marshal.dump(bs_api, f)
136
+ end
137
+
138
+ # Imagine the current request is done, we will simulate this by deleting the api instance.
139
+ bs_api = nil
140
+ puts "Try printing the removed API, we get: '#{bs_api}' (<-- should be empty)"
141
+ puts
142
+
143
+ # Next request in the session with id = id123 comes in.
144
+ # We will check if there is already a BaseSpaceAPI stored for the session.
145
+ if File.exists?(my_session_id)
146
+ File.open(my_session_id) do |f|
147
+ bs_api = Marshal.load(f)
148
+ end
149
+ puts
150
+ puts "We got the API back!"
151
+ puts bs_api
152
+ else
153
+ puts "Looks like we haven't stored anything for this session yet"
154
+ # create a BaseSpaceAPI for the first time
155
+ end
156
+
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2013 Toshiaki Katayama, Joachim Baran
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ # Browsing data with global browse access
17
+ # https://developer.basespace.illumina.com/docs/content/documentation/sdk-samples/python-sdk-overview#Browsing_data_with_global_browse_access
18
+
19
+ require 'basespace'
20
+
21
+ include Bio::BaseSpace
22
+
23
+ # This script demonstrates basic browsing of BaseSpace objects once an access-token
24
+ # for global browsing has been obtained.
25
+
26
+ opts = {
27
+ # FILL IN WITH YOUR APP VALUES HERE!
28
+ 'client_id' => '<your client key>',
29
+ 'client_secret' => '<your client secret>',
30
+ 'access_token' => '<your access token>',
31
+ 'app_session_id' => '<app session id>',
32
+ 'basespace_url' => 'https://api.basespace.illumina.com/',
33
+ 'api_version' => 'v1pre3',
34
+ }
35
+
36
+ # Test if client variables have been set.
37
+ unless opts.select{|k,v| v[/^<.*>$/]}.empty?
38
+ opts = Bio::BaseSpace.load_credentials
39
+ exit 1 unless opts
40
+ end
41
+
42
+ # First, create a client for making calls for this user session.
43
+ my_api = BaseSpaceAPI.new(opts['client_id'], opts['client_secret'], opts['basespace_url'], opts['api_version'], opts['app_session_id'], opts['access_token'])
44
+
45
+ # Now let's grab the genome with id=4.
46
+ my_genome = my_api.get_genome_by_id('4')
47
+ puts "The Genome is #{my_genome}"
48
+ puts "We can get more information from the genome object"
49
+ puts "Id: #{my_genome.id}"
50
+ puts "Href: #{my_genome.href}"
51
+ puts "DisplayName: #{my_genome.display_name}"
52
+ puts
53
+
54
+ # Get a list of all genomes.
55
+ all_genomes = my_api.get_available_genomes
56
+ puts "Genomes: #{all_genomes}"
57
+ puts
58
+
59
+ # Let's have a look at the current user.
60
+ user = my_api.get_user_by_id('current')
61
+ puts "The current user is #{user}"
62
+ puts
63
+
64
+ # Now list the projects for this user.
65
+ my_projects = my_api.get_project_by_user('current')
66
+ puts "The projects for this user are #{my_projects}"
67
+ puts
68
+
69
+ # We can also achieve this by making a call using the 'user instance'.
70
+ my_projects2 = user.get_projects(my_api)
71
+ puts "Projects retrieved from the user instance #{my_projects2}"
72
+ puts
73
+
74
+ # List the runs available for the current user.
75
+ runs = user.get_runs(my_api)
76
+ puts "The runs for this user are #{runs}"
77
+ puts
78
+
79
+ =begin [NOTE] commented out as this example is same as the above (bug in Python version?)
80
+ # In the same manner we can get a list of accessible user runs
81
+ runs = user.get_runs(my_api)
82
+ print "Runs retrieved from user instance #{runs}"
83
+ puts
84
+ =end
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2013 Toshiaki Katayama, Joachim Baran
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ # Accessing file-trees and querying BAM or VCF files
17
+ # https://developer.basespace.illumina.com/docs/content/documentation/sdk-samples/python-sdk-overview#Accessing_file-trees_and_querying_BAM_or_VCF_files
18
+
19
+ require 'basespace'
20
+
21
+ include Bio::BaseSpace
22
+
23
+ # This script demonstrates how to access Samples and AppResults from a projects and
24
+ # how to work with the available file data for such instances.
25
+
26
+ opts = {
27
+ # FILL IN WITH YOUR APP VALUES HERE!
28
+ 'client_id' => '<your client key>',
29
+ 'client_secret' => '<your client secret>',
30
+ 'access_token' => '<your access token>',
31
+ 'app_session_id' => '<app session id>',
32
+ 'basespace_url' => 'https://api.basespace.illumina.com/',
33
+ 'api_version' => 'v1pre3',
34
+ }
35
+
36
+ # Test if client variables have been set.
37
+ unless opts.select{|k,v| v[/^<.*>$/]}.empty?
38
+ opts = Bio::BaseSpace.load_credentials
39
+ exit 1 unless opts
40
+ end
41
+
42
+ # First, create a client for making calls for this user session.
43
+ my_api = BaseSpaceAPI.new(opts['client_id'], opts['client_secret'], opts['basespace_url'], opts['api_version'], opts['app_session_id'], opts['access_token'])
44
+ user = my_api.get_user_by_id('current')
45
+ my_projects = my_api.get_project_by_user('current')
46
+
47
+ app_results = nil
48
+ samples = nil
49
+
50
+ # Let's list all the AppResults and samples for these projects.
51
+ my_projects.each do |single_project|
52
+ puts "# Project: #{single_project}"
53
+
54
+ app_results = single_project.get_app_results(my_api)
55
+ puts " The App results for project #{single_project} are"
56
+ puts " #{app_results}"
57
+
58
+ # app_results.each do |app_res|
59
+ # puts " # AppResult: #{app_res.id}"
60
+ # files = app_res.get_files(my_api)
61
+ # puts files
62
+ # end
63
+
64
+ samples = single_project.get_samples(my_api)
65
+ puts " The samples for project #{single_project} are"
66
+ puts " #{samples}"
67
+
68
+ # samples.each do |sample|
69
+ # puts " # Sample: #{sample}"
70
+ # files = sample.get_files(my_api)
71
+ # puts files
72
+ # end
73
+ end
74
+
75
+ # We will take a further look at the files belonging to the sample and
76
+ # analysis from the last project in the loop above.
77
+ app_results.each do |app_res|
78
+ puts "# AppResult: #{app_res.id}"
79
+ files = app_res.get_files(my_api)
80
+ puts files
81
+ end
82
+ samples.each do |sample|
83
+ puts "# Sample: #{sample}"
84
+ files = sample.get_files(my_api)
85
+ puts files
86
+ end
87
+
88
+ # [TODO] We need to identify file IDs for BAM and VCF which can be accessed by everyone (for testing)
89
+ # The BAM file 2150156 and the VCF file 2150158 are not available for public
90
+ # => Forbidden: Sorry but this requires READ access to this resource.
91
+ #
92
+ # https://basespace.illumina.com/datacentral
93
+ #
94
+ # Project: Cancer Sequencing Demo - id=4
95
+ # AppResult: 31193
96
+ # L2I_S1.bam - id: '5595005', size: '673519149'
97
+ #
98
+ # Project: ResequencingPhixRun - id=12
99
+ # AppResult: 6522
100
+ # Indels.1.vcf - id: '3360125', size: '747'
101
+ # Project: BaseSpaceDemo - id=2
102
+ # AppResult: 1031
103
+ # Indels.1.vcf - id: '535594', size: '5214'
104
+ #
105
+
106
+ #
107
+ # Working with files.
108
+ #
109
+
110
+ # We grab a BAM by id and get the coverage for an interval + accompanying meta-data.
111
+ my_bam = my_api.get_file_by_id('5595005') # [TODO] What file ID to use?
112
+ puts "# BAM: #{my_bam}"
113
+ cov_meta = my_bam.get_coverage_meta(my_api, 'chr2')
114
+ puts cov_meta
115
+ cov = my_bam.get_interval_coverage(my_api, 'chr2', '1', '20000') # [TODO] What seqname and position to use?
116
+ puts cov
117
+
118
+ # and a vcf file
119
+ #my_vcf = my_api.get_file_by_id('3360125') # [TODO] What file ID to use?
120
+ my_vcf = my_api.get_file_by_id('44153695') # Public data >> Resequencing >> HiSeq 2500 2x150 Human Genome Demo
121
+ puts "# VCF: #{my_vcf}"
122
+ # Let's get the variant meta info
123
+ var_meta = my_vcf.get_variant_meta(my_api)
124
+ puts var_meta
125
+ #var = my_vcf.filter_variant(my_api, 'phix', '1', '5386') # [TODO] What seqname and position to use?
126
+ var = my_vcf.filter_variant(my_api, '2', '1', '11000')
127
+ puts var
128
+
129
+