コード例 #1
0
    def mutate_and_get_payload(cls,
                               root,
                               info,
                               owner,
                               labbook_name,
                               remote_url,
                               client_mutation_id=None):
        username = get_logged_in_username()
        logger.info(f"Importing remote labbook from {remote_url}")
        lb = LabBook(author=get_logged_in_author())

        # TODO: Future work will look up remote in LabBook data, allowing user to select remote.
        default_remote = lb.labmanager_config.config['git']['default_remote']
        admin_service = None
        for remote in lb.labmanager_config.config['git']['remotes']:
            if default_remote == remote:
                admin_service = lb.labmanager_config.config['git']['remotes'][
                    remote]['admin_service']
                break

        # Extract valid Bearer token
        if hasattr(info.context, 'headers'
                   ) and "HTTP_AUTHORIZATION" in info.context.headers.environ:
            token = parse_token(
                info.context.headers.environ["HTTP_AUTHORIZATION"])
        else:
            raise ValueError(
                "Authorization header not provided. Must have a valid session to query for collaborators"
            )

        mgr = GitLabManager(default_remote, admin_service, token)
        mgr.configure_git_credentials(default_remote, username)

        lb.from_remote(remote_url, username, owner, labbook_name)
        return ImportRemoteLabbook(active_branch=lb.active_branch)
    def test_sync_1(self, remote_bare_repo, mock_create_labbooks_no_lfs,
                    mock_config_file):

        # Setup responses mock for this test
        responses.add(responses.GET,
                      'https://usersrv.gigantum.io/key',
                      json={'key': 'afaketoken'},
                      status=200)

        test_user_lb = LabBook(mock_create_labbooks_no_lfs[0])
        test_user_lb.from_name('default', 'default', 'labbook1')
        test_user_wf = GitWorkflow(test_user_lb)
        test_user_wf.publish('default')

        # Mock the request context so a fake authorization header is present
        builder = EnvironBuilder(path='/labbook',
                                 method='POST',
                                 headers={'Authorization': 'Bearer AJDFHASD'})
        env = builder.get_environ()
        req = Request(environ=env)

        remote_url = test_user_lb.root_dir
        assert remote_url

        sally_lb = LabBook(mock_config_file[0])
        sally_lb.from_remote(remote_url,
                             username="******",
                             owner="default",
                             labbook_name="labbook1")
        sally_wf = GitWorkflow(sally_lb)
        assert sally_lb.active_branch == "gm.workspace-sally"
        sally_lb.makedir(relative_path='code/sally-dir',
                         create_activity_record=True)
        sally_wf.sync('sally')

        sync_query = """
        mutation x {
            syncLabbook(input: {
                labbookName: "labbook1",
                owner: "default"
            }) {
                updateCount
                updatedLabbook {
                    isRepoClean
                }
            }
        }
        """
        r = mock_create_labbooks_no_lfs[2].execute(sync_query,
                                                   context_value=req)

        assert 'errors' not in r
        assert r['data']['syncLabbook']['updateCount'] == 1
        assert r['data']['syncLabbook']['updatedLabbook']['isRepoClean'] is True
        assert test_user_lb.active_branch == 'gm.workspace-default'