def report(self, file_id=None, run_id=None, output_file=None, output_dir=None): """Upload single file.""" report = Reports(base_url=self.base_url, api_key=self.api_key, file_id=file_id, run_id=run_id) try: file_obj = Files(base_url=self.base_url, api_key=self.api_key) res = file_obj.get_file(file_id=file_id) if not res: raise CosmosidException('Response from service is empty ' 'for file id {}'.format(file_id)) results = report.save_report(out_file=output_file, out_dir=output_dir) if results['status']: return results else: raise CosmosidException('{} File id: {}'.format( results['message'], file_id)) except CosmosidException as err: self.logger.error('Save report error') utils.log_traceback(err)
def profile(self): """"Get profile information for current user""" try: return auth.get_profile(self.base_url, self.api_key) except Exception as err: self.logger.error('Client exception occured') utils.log_traceback(err) raise
def __auth(self): """Read api_key for authentication.""" api_key = None try: auth = ApiKeyAuth() api_key = auth() if api_key is None: raise ValidationError("Api Key is empty") except (KeyError, ValueError) as err: self.logger.info("Can't get Cosmosid Api Key") utils.log_traceback(err) return api_key
def __init__(self, api_key=None, base_url=BASE_URL): """Initialize a client with the given params.""" try: if not api_key: api_key = self.__auth() api_key = utils.key_len(api_key) except ValidationError as err: utils.log_traceback(err) base_url = base_url if base_url else self.BASE_URL if base_url != self.BASE_URL: self.logger.info("Using base URL: %s", base_url) self.base_url = base_url self.api_key = api_key
def pricing(self, data): """Get pricing information for the given list of samples and their sizes data: [ { "sample_key": "sample_name", "extension": "bam", "file_sizes": [100, 300]}, ... ] """ try: return upload.pricing(data=data, base_url=self.base_url, api_key=self.api_key) except Exception as err: self.logger.error(err) utils.log_traceback(err)
def upload_files(self, files, file_type, parent_id=None): """Upload single file.""" error_msg = '\nError occurred on File upload: {}'.format(files) try: upload_res = upload.upload_and_save(files=files, parent_id=parent_id, file_type=file_type, base_url=self.base_url, api_key=self.api_key) if upload_res: return upload_res['id'] else: self.logger.error(error_msg) except UploadException as err: self.logger.error(error_msg) utils.log_traceback(err)
def get_file(self, file_id=None): request_url = self.request_url + "/" + file_id results = {} try: results = requests.get(request_url, headers=self.auth_header) if results.status_code == 400: if json.loads(results.text)['error_code'] == 'NotUUID': raise NotFound('Wrong ID.') if results.status_code == 404: results = results.json() results.update({'status': 0}) return results if results.status_code == 403: raise AuthenticationFailed('Authentication Failed. ' 'Wrong API Key.') results.raise_for_status() if requests.codes.ok: results = results.json()['items'].pop() results.update({'status': 1}) return results except AuthenticationFailed as err: self.logger.error('AuthenticationFailed') utils.log_traceback(err) except NotFound as err: self.logger.error('Not Found') utils.log_traceback(err) except requests.exceptions.RequestException as err: self.logger.error('Error occured during request') self.logger.error('Response Status Code: %s', results.status_code) utils.log_traceback(err)
def get_list(self, parent_id=None): data = {'folder_id': parent_id} if parent_id else {} results = {} try: results = requests.get(self.request_url, headers=self.auth_header, params=data) if results.status_code == 400: if json.loads(results.text)['error_code'] == 'NotUUID': raise NotFound('Wrong ID.') if results.status_code == 404: results = results.json() results.update({'status': 0}) return results if results.status_code == 403: raise AuthenticationFailed('Authentication Failed. ' 'Wrong API Key.') results.raise_for_status() if requests.codes.ok: results = results.json() results.update({'status': 1}) #microbiom standart doesnt have an export TODO:export var results['items'] = [ i for i in results['items'] if i['content_type'] != 7 ] return results except AuthenticationFailed as err: utils.log_traceback(err) except NotFound as err: utils.log_traceback(err) except requests.exceptions.RequestException as err: self.logger.error('Error occured during request') utils.log_traceback(err)
def get_single_run(self, run_id): run_metadata_url = "{}{}".format( self.base_url, self.__single_run_path.format(run_id=run_id)) results = {} try: results = requests.get(run_metadata_url, headers=self.auth_header) if results.status_code == 400: if json.loads(results.text)['error_code'] == 'NotUUID': raise NotFound('Wrong ID.') if results.status_code == 404: results = results.json() results.update({'status': 0}) return results if results.status_code == 403: raise AuthenticationFailed('Authentication Failed. ' 'Wrong API Key.') results.raise_for_status() if requests.codes.ok: results = results.json() results.update({'status': 1}) return results except AuthenticationFailed as err: utils.log_traceback(err) except NotFound as err: utils.log_traceback(err) except requests.exceptions.RequestException as err: self.logger.error('Error occured during request') self.logger.error('Response Status Code: %s', results.status_code) utils.log_traceback(err)
def get_last_run_for_file(self, file_id): try: runs_list = self.get_runs_list(file_id=file_id) if not runs_list: raise CosmosidException('Error occurred on get list of runs ' 'for a File: {}'.format(file_id)) if not runs_list['status']: raise NotFoundException(runs_list['message']) sorted_runs_list = sorted(runs_list['runs'], key=itemgetter('created'), reverse=True) return sorted_runs_list[0] except NotFoundException as err: self.logger.error('NotFound') utils.log_traceback(err) except CosmosidException: self.logger.error('Runs list exception.') return None except Exception as err: self.logger.error('Client exception occured') utils.log_traceback(err)
def directory_list(self, parent): """"get listing of appropriate directory.""" file_obj = Files(base_url=self.base_url, api_key=self.api_key) try: res = file_obj.get_list(parent_id=parent) if res: if res['status']: return res else: raise NotFoundException(res['message']) else: raise CosmosidException('Response from service is empty ' 'for directory {}'.format(parent)) except NotFoundException as err: utils.log_traceback(err) except CosmosidException as err: self.logger.error('Get directory list exception') utils.log_traceback(err) except Exception as err: self.logger.error("Failed to get listing of directory %s", parent) utils.log_traceback(err)
def sample_run_list(self, file_id): """Get list of runs for a given file id.""" sample_runs = Runs(base_url=self.base_url, api_key=self.api_key) try: sample_run_list = sample_runs.get_runs_list(file_id=file_id) if sample_run_list: if sample_run_list['status']: return sample_run_list else: raise NotFoundException(sample_run_list['message']) else: raise CosmosidException('Error occurred on get list of runs ' 'for a File: %s' % file_id) except NotFoundException as err: self.logger.error('NotFound') utils.log_traceback(err) except CosmosidException as err: self.logger.error('Get runs list exception') utils.log_traceback(err) except Exception as err: self.logger.error('Client exception occured') utils.log_traceback(err)
def analysis_list(self, file_id=None, run_id=None): """Get list of analysis for a given file id.""" analysis = Analysis(base_url=self.base_url, api_key=self.api_key) try: analysis_list = analysis.get_list(file_id=file_id, run_id=run_id) if analysis_list: if analysis_list['status']: return analysis_list else: raise NotFoundException(analysis_list['message']) else: raise CosmosidException('Error occurred on get list of ' 'analysis for a File: %s' % file_id) except NotFoundException as err: self.logger.error('NotFound') utils.log_traceback(err) except CosmosidException as err: self.logger.error('Get analysis list exception') utils.log_traceback(err) except Exception as err: self.logger.error('Client exception occured') utils.log_traceback(err)
def get_runs_list(self, file_id=None): sample_runs_url = "{}{}".format( self.base_url, self.__resource_path.format(file_id=file_id)) results = {} try: file_metadata = self.get_file(file_id) if not file_metadata: raise CosmosidException('Response from service is empty ' 'for file id {}'.format(file_id)) if not file_metadata['status']: raise NotFoundException(file_metadata['message']) results = requests.get(sample_runs_url, headers=self.auth_header) if results.status_code == 400: if json.loads(results.text)['error_code'] == 'NotUUID': raise NotFound('Wrong ID.') if results.status_code == 404: results = results.json() results.update({'status': 0}) results.update({'file_name': file_metadata['name']}) return results if results.status_code == 403: raise AuthenticationFailed('Authentication Failed. ' 'Wrong API Key.') results.raise_for_status() if requests.codes.ok: results = results.json() results.update({'status': 1}) results.update({'file_name': file_metadata['name']}) return results except AuthenticationFailed as err: utils.log_traceback(err) except NotFound as err: utils.log_traceback(err) except requests.exceptions.RequestException as err: self.logger.error('Error occured during request') self.logger.error('Response Status Code: %s', results.status_code) utils.log_traceback(err) except NotFoundException as err: utils.log_traceback(err) except CosmosidException as err: self.logger.error('Got runs list exception') utils.log_traceback(err) except Exception as err: self.logger.error('Client exception occured') utils.log_traceback(err)