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
示例#2
0
 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)
示例#4
0
 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)
示例#6
0
 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)
示例#7
0
    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"
示例#8
0
    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"
示例#9
0
    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"
示例#10
0
 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)