def own_handle(self, genome, handle_property, ctx): if not handle_property in genome: return token = ctx['token'] handle_id = genome[handle_property] hs = HandleService(self.handle_url, token=token) handles = hs.hids_to_handles([handle_id]) shock_id = handles[0]['id'] ## Copy from DataFileUtil.own_shock_node implementation: header = {'Authorization': 'Oauth {}'.format(token)} res = requests.get(self.shock_url + '/node/' + shock_id + '/acl/?verbosity=full', headers=header, allow_redirects=True) self.check_shock_response( res, 'Error getting ACLs for Shock node {}: '.format(shock_id)) owner = res.json()['data']['owner']['username'] if owner != ctx['user_id']: shock_id = self.copy_shock_node(ctx, shock_id) r = requests.get(self.shock_url + '/node/' + shock_id, headers=header, allow_redirects=True) errtxt = ('Error downloading attributes from shock ' + 'node {}: ').format(shock_id) self.check_shock_response(r, errtxt) shock_data = r.json()['data'] handle = {'id': shock_data['id'], 'type': 'shock', 'url': self.shock_url, 'file_name': shock_data['file']['name'], 'remote_md5': shock_data['file']['checksum']['md5'] } handle_id = hs.persist_handle(handle) genome[handle_property] = handle_id
def own_handle(self, genome, handle_property, ctx): if not handle_property in genome: return token = ctx['token'] handle_id = genome[handle_property] hs = HandleService(self.handle_url, token=token) handles = hs.hids_to_handles([handle_id]) shock_id = handles[0]['id'] ## Copy from DataFileUtil.own_shock_node implementation: header = {'Authorization': 'Oauth {}'.format(token)} res = requests.get(self.shock_url + '/node/' + shock_id + '/acl/?verbosity=full', headers=header, allow_redirects=True) self.check_shock_response( res, 'Error getting ACLs for Shock node {}: '.format(shock_id)) owner = res.json()['data']['owner']['username'] if owner != ctx['user_id']: shock_id = self.copy_shock_node(ctx, shock_id) r = requests.get(self.shock_url + '/node/' + shock_id, headers=header, allow_redirects=True) errtxt = ('Error downloading attributes from shock ' + 'node {}: ').format(shock_id) self.check_shock_response(r, errtxt) shock_data = r.json()['data'] handle = { 'id': shock_data['id'], 'type': 'shock', 'url': self.shock_url, 'file_name': shock_data['file']['name'], 'remote_md5': shock_data['file']['checksum']['md5'] } handle_id = hs.persist_handle(handle) genome[handle_property] = handle_id
def getPairedEndLibInfo(self): if hasattr(self.__class__, 'pairedEndLibInfo'): return self.__class__.pairedEndLibInfo # 1) upload files to shock token = self.ctx['token'] forward_shock_file = self.upload_file_to_shock( shock_service_url=self.shockURL, filePath='data/small.forward.fq', token=token) reverse_shock_file = self.upload_file_to_shock( shock_service_url=self.shockURL, filePath='data/small.reverse.fq', token=token) pprint(forward_shock_file) pprint(reverse_shock_file) # 2) create handle hs = HandleService(url=self.handleURL, token=token) handf = { 'id': forward_shock_file['id'], 'type': 'shock', 'url': self.shockURL, 'file_name': forward_shock_file['file']['name'], 'remote_md5': forward_shock_file['file']['checksum']['md5'] } forward_handle = hs.persist_handle(handf) handr = { 'id': reverse_shock_file['id'], 'type': 'shock', 'url': self.shockURL, 'file_name': reverse_shock_file['file']['name'], 'remote_md5': reverse_shock_file['file']['checksum']['md5'] } reverse_handle = hs.persist_handle(handr) # 3) save to WS paired_end_library = { 'lib1': { 'file': { 'hid': forward_handle, 'file_name': forward_shock_file['file']['name'], 'id': forward_shock_file['id'], 'url': self.shockURL, 'type': 'shock', 'remote_md5': forward_shock_file['file']['checksum']['md5'] }, 'encoding': 'UTF8', 'type': 'fastq', 'size': forward_shock_file['file']['size'] }, 'lib2': { 'file': { 'hid': reverse_handle, 'file_name': reverse_shock_file['file']['name'], 'id': reverse_shock_file['id'], 'url': self.shockURL, 'type': 'shock', 'remote_md5': reverse_shock_file['file']['checksum']['md5'] }, 'encoding': 'UTF8', 'type': 'fastq', 'size': reverse_shock_file['file']['size'] }, 'interleaved': 0, 'sequencing_tech': 'artificial reads', 'read_length_mean': 100, 'insert_size_mean': 250, 'insert_size_std_dev': 10, 'total_bases': 125000, 'read_orientation_outward': 1 } ws_obj = { 'workspace': self.getWsName(), 'objects': [ { 'type': 'KBaseFile.PairedEndLibrary', 'data': paired_end_library, 'name': 'test.pe.reads', 'meta': {}, 'provenance': [ { 'service': 'hipmer', 'method': 'test_hipmer' } ] }] } new_obj_info = self.ws.save_objects(ws_obj) self.__class__.pairedEndLibInfo = new_obj_info[0] return new_obj_info[0]