コード例 #1
0
ファイル: client.py プロジェクト: carden24/cosmosid-cli
    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)
コード例 #2
0
ファイル: client.py プロジェクト: carden24/cosmosid-cli
 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
コード例 #3
0
ファイル: client.py プロジェクト: carden24/cosmosid-cli
 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
コード例 #4
0
ファイル: client.py プロジェクト: carden24/cosmosid-cli
 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
コード例 #5
0
ファイル: client.py プロジェクト: carden24/cosmosid-cli
    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)
コード例 #6
0
ファイル: client.py プロジェクト: carden24/cosmosid-cli
 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)
コード例 #7
0
ファイル: files.py プロジェクト: carden24/cosmosid-cli
 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)
コード例 #8
0
ファイル: files.py プロジェクト: carden24/cosmosid-cli
    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)
コード例 #9
0
ファイル: files.py プロジェクト: carden24/cosmosid-cli
 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)
コード例 #10
0
ファイル: files.py プロジェクト: carden24/cosmosid-cli
    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)
コード例 #11
0
ファイル: client.py プロジェクト: carden24/cosmosid-cli
 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)
コード例 #12
0
ファイル: client.py プロジェクト: carden24/cosmosid-cli
 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)
コード例 #13
0
ファイル: client.py プロジェクト: carden24/cosmosid-cli
 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)
コード例 #14
0
ファイル: files.py プロジェクト: carden24/cosmosid-cli
    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)