def login(parsed_args, manager=None, dry_run=False, api_base=None, verbose=False): """ Login to authorize credentials. :param manager: API Manager :param dry_run: If true, will do a dry run with no actual execution of functionality. :return: """ if manager is None: manager = scp_api.SCPAPIManager(verbose=verbose) if parsed_args.user_agent: user_agent = get_user_agent() manager.login( token=parsed_args.token, dry_run=dry_run, api_base=api_base, user_agent=user_agent, ) else: manager.login(token=parsed_args.token, dry_run=dry_run, api_base=api_base) return manager
def test_get_studies(self, mock_get): studies = scp_api.SCPAPIManager().get_studies()['studies'] expected_studies = [ " Single nucleus RNA-seq of cell diversity in the adult mouse hippocampus (sNuc-Seq)", "Study only for unit test" ] self.assertEqual(studies, expected_studies)
def test_get_studies(self, mock_get): manager = scp_api.SCPAPIManager() manager.api_base = 'https://portals.broadinstitute.org/single_cell/api/v1/' manager.verify_https = True studies = manager.get_studies()['studies'] expected_studies = [ " Single nucleus RNA-seq of cell diversity in the adult mouse hippocampus (sNuc-Seq)", "Study only for unit test" ] self.assertEqual(studies, expected_studies)
def test_get_studies(self, mocked_requests_get): manager = scp_api.SCPAPIManager() manager.api_base = "https://singlecell.broadinstitute.org/single_cell/api/v1/" manager.verify_https = True manager.head = {"Accept": "application/json"} studies = manager.get_studies()["studies"] expected_studies = [ " Single nucleus RNA-seq of cell diversity in the adult mouse hippocampus (sNuc-Seq)", "Study only for unit test", ] self.assertEqual(studies, expected_studies)
def login(manager=None, dry_run=False): ''' Login to authorize credentials. :param manager: API Manager :param dry_run: If true, will do a dry run with no actual execution of functionality. :return: ''' if manager is None: manager = scp_api.SCPAPIManager() manager.login(token=parsed_args.token, dry_run=dry_run) return (manager)
def test_upload_cluster(self, mocked_requests_get, mocked_requests_post, mock_upload_via_gsutil): # manager = scp_api.SCPAPIManager(verbose=True) manager = scp_api.SCPAPIManager() manager.api_base = 'https://singlecell.broadinstitute.org/single_cell/api/v1/' manager.verify_https = True manager.login(dry_run=True) return_object = manager.upload_cluster( file='../tests/data/toy_cluster', study_name='Study only for unit test', cluster_name='Test', description='Test', x='X', y='Y', z='Z') # HTTP 204 indicates successful parse launch, per # https://singlecell.broadinstitute.org/single_cell/api/swagger_docs/v1#!/StudyFiles/parse_study_study_file_path self.assertEqual(return_object['code'], 204)
def test_ingest_version_mismatch(self, mocked_ingest_version_mismatch): manager = scp_api.SCPAPIManager() manager.api_base = "https://singlecell.broadinstitute.org/single_cell/api/v1/" manager.verify_https = True manager.head = { "Accept": "application/json", "User-Agent": "single-cell-portal/0.1.3rc1 (manage-study) scp-ingest-pipeline/0.9.12 (ingest_pipeline.py)", } # All SCP servers use single-cell-portal major release v1 or later, sending # User-Agent string with an outdated package version should fail with self.assertRaises(SystemExit) as cm: manager.get_study_attribute( study_name="Study only for unit test", attribute="accession" ) # 400 "incompatibile with server" response should trigger custom exit code 79 self.assertEqual( cm.exception.code, 79 ), "expect exit if ingest major version mismatch detected"
def test_upload_unprocessable_entity_study_bucket_false( self, mocked_requests_get, mocked_requests_post, mock_upload_via_gsutil_study_bucket_false, mock_delete_via_gsutil, ): manager = scp_api.SCPAPIManager() manager.api_base = "https://singlecell.broadinstitute.org/single_cell/api/v1/" manager.verify_https = True manager.login(dry_run=True) with self.assertRaises(SystemExit) as cm: manager.upload_study_file( file="gs://fc-36f39ea7-439e-4a49-ad10-6a5a4614300e/metadata.txt", file_type="Metadata", study_name=" Single nucleus RNA-seq of cell diversity in the adult mouse hippocampus (sNuc-Seq)", ) # when file_from_study_bucket = True, uploaded file is deleted from study bucket self.assertEqual(cm.exception.code, 83), "expect exit-uploaded-file-deleted"
def test_upload_unprocessable_entity_study_bucket_true( self, mock_upload_via_gsutil_study_bucket_true, mocked_requests_post, mocked_requests_get, ): manager = scp_api.SCPAPIManager() manager.api_base = "https://singlecell.broadinstitute.org/single_cell/api/v1/" manager.verify_https = True manager.login(dry_run=True) # 422 response (unprocessable entity) from server # causes script to exit during file upload request with self.assertRaises(SystemExit) as cm: manager.upload_study_file( file="fc-36f39ea7-1111-4a49-ad10-6a5a4614300e/foo.txt", file_type="Metadata", study_name=" Single nucleus RNA-seq of cell diversity in the adult mouse hippocampus (sNuc-Seq)", ) # when file_from_study_bucket = True, no cleanup in bucket occurs self.assertEqual(cm.exception.code, 84), "expect exit-no-file-cleanup-needed"
def test_upload_cluster( self, mocked_requests_get, mocked_requests_post, mock_upload_via_gsutil_study_bucket_true, ): # manager = scp_api.SCPAPIManager(verbose=True) manager = scp_api.SCPAPIManager() manager.api_base = "https://singlecell.broadinstitute.org/single_cell/api/v1/" manager.verify_https = True manager.login(dry_run=True) return_object = manager.upload_cluster( file="../tests/data/toy_cluster", study_name="Study only for unit test", cluster_name="Test", description="Test", x="X", y="Y", z="Z", ) # HTTP 204 indicates successful parse launch, per # https://singlecell.broadinstitute.org/single_cell/api/swagger_docs/v1#!/StudyFiles/parse_study_study_file_path self.assertEqual(return_object["code"], 204)