bio-basespace-sdk 0.1.2

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.

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
+