示例#1
0
    def test_create_build(self):
        project_uuid = uuid.uuid4().hex
        obj = BuildJobConfig(project=project_uuid)
        httpretty.register_uri(
            httpretty.POST,
            BaseApiHandler.build_url(
                self.api_config.base_url,
                '/',
                'user',
                'project',
                'builds'),
            body=json.dumps(obj.to_dict()),
            content_type='application/json',
            status=200)

        # Schema response
        result = self.api_handler.create_build('user', 'project', obj)
        assert result.to_dict() == obj.to_dict()

        # Raw response
        self.set_raw_response()
        result = self.api_handler.create_build('user', 'project', obj)
        assert result == obj.to_dict()

        # Async
        self.assert_async_call(
            api_handler_call=lambda: self.api_handler.create_build(
                'user', 'project', obj, background=True),
            method='post')

        # Test create experiment with dict
        httpretty.register_uri(
            httpretty.POST,
            BaseApiHandler.build_url(
                self.api_config.base_url,
                '/',
                'user',
                'project',
                'builds'),
            body=json.dumps(obj.to_dict()),
            content_type='application/json',
            status=200)

        # Schema response
        self.set_schema_response()
        result = self.api_handler.create_build('user', 'project', obj.to_dict())
        assert result.to_dict() == obj.to_dict()

        # Raw response
        self.set_raw_response()
        result = self.api_handler.create_build('user', 'project', obj.to_dict())
        assert result == obj.to_dict()

        # Async
        self.assert_async_call(
            api_handler_call=lambda: self.api_handler.create_build(
                'user', 'project', obj.to_dict(), background=True),
            method='post')
    def test_list_experiments(self):
        experiments = [
            ExperimentConfig(config={}).to_dict() for _ in range(10)
        ]
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/',
                                   'experiments'),
                               body=json.dumps({
                                   'results': experiments,
                                   'count': 10,
                                   'next': None
                               }),
                               content_type='application/json',
                               status=200)

        # Schema response
        response = self.api_handler.list_experiments()
        assert len(response['results']) == 10
        assert isinstance(response['results'][0], ExperimentConfig)

        # Raw response
        self.set_raw_response()
        response = self.api_handler.list_experiments()
        assert len(response['results']) == 10
        assert isinstance(response['results'][0], Mapping)
示例#3
0
    def test_update_project(self):
        obj = ProjectConfig('proj').to_dict()
        httpretty.register_uri(httpretty.PATCH,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'user',
                                   'project'),
                               body=json.dumps(obj),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.update_project('user', 'project',
                                                 {'name': 'new'})
        assert result.to_dict() == obj

        # Raw response
        self.set_raw_response()
        result = self.api_handler.update_project('user', 'project',
                                                 {'name': 'new'})
        assert result == obj

        # Async
        self.assert_async_call(
            api_handler_call=lambda: self.api_handler.update_project(
                'user', 'project', {'name': 'new'}, background=True),
            method='patch')
    def test_resume_experiment_with_config(self):
        exp = ExperimentConfig(config={}).to_dict()
        config = {'config': {'declarations': {'lr': 0.1}}}
        httpretty.register_uri(httpretty.POST,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'experiments', 1, 'resume'),
                               body=json.dumps(exp),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.resume('username', 'project_name', 1, config)
        assert result.to_dict() == exp

        # Raw response
        self.set_raw_response()
        result = self.api_handler.resume('username', 'project_name', 1, config)
        assert result == exp

        # Async
        self.assert_async_call(
            api_handler_call=lambda: self.api_handler.resume(
                'username', 'project_name', 1, config, background=True),
            method='post')
示例#5
0
    def test_list_projects(self):
        projects = [
            ProjectConfig('proj_{}'.format(i)).to_dict() for i in range(10)
        ]
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'user'),
                               body=json.dumps({
                                   'results': projects,
                                   'count': 10,
                                   'next': None
                               }),
                               content_type='application/json',
                               status=200)

        # Schema response
        response = self.api_handler.list_projects('user')
        assert len(response['results']) == 10
        assert isinstance(response['results'][0], ProjectConfig)
        assert response['count'] == 10
        assert response['next'] is None
        assert response['previous'] is None

        # Raw response
        self.set_raw_response()
        response = self.api_handler.list_projects('user')
        assert len(response['results']) == 10
        assert isinstance(response['results'][0], Mapping)
        assert response['count'] == 10
        assert response['next'] is None
        assert response['previous'] is None
    def test_get_experiment_statuses_and_latest_code(self):
        exp = ExperimentStatusConfig(id=1,
                                     uuid=uuid.uuid4().hex,
                                     experiment=1,
                                     created_at=datetime.datetime.now(),
                                     status='Running').to_dict()
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'experiments', 1,
                                   'statuses'),
                               body=json.dumps({
                                   'results': [exp],
                                   'count': 1,
                                   'next': None
                               }),
                               content_type='application/json',
                               status=200)

        # Schema response
        response = self.api_handler.get_statuses('username', 'project_name', 1)
        assert len(response['results']) == 1
        assert isinstance(response['results'][0], ExperimentStatusConfig)

        # Raw response
        self.set_raw_response()
        response = self.api_handler.get_statuses('username', 'project_name', 1)
        assert len(response['results']) == 1
        assert isinstance(response['results'][0], Mapping)
示例#7
0
    def test_upload_and_sync_repo(self):
        httpretty.register_uri(httpretty.PUT,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'user',
                                   'project', 'repo', 'upload'),
                               content_type='application/json',
                               status=200)
        files = [('code', ('repo',
                           open('./tests/fixtures_static/repo.tar.gz',
                                'rb'), 'text/plain'))]
        result = self.api_handler.upload_repo('user',
                                              'project',
                                              files=files,
                                              files_size=10,
                                              sync=True)
        assert result.status_code == 200

        # Async
        self.assert_async_call(api_handler_call=lambda: self.api_handler.
                               upload_repo('user',
                                           'project',
                                           files=files,
                                           files_size=10,
                                           sync=True,
                                           background=True),
                               method='upload')
    def test_update_experiment(self):
        exp = ExperimentConfig(config={}).to_dict()
        httpretty.register_uri(httpretty.PATCH,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'experiments', 1),
                               body=json.dumps(exp),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.update_experiment('username', 'project_name',
                                                    1, {'name': 'new'})
        assert result.to_dict() == exp

        # Raw response
        self.set_raw_response()
        result = self.api_handler.update_experiment('username', 'project_name',
                                                    1, {'name': 'new'})
        assert result == exp

        # Async
        self.assert_async_call(api_handler_call=lambda: self.api_handler.
                               update_experiment('username',
                                                 'project_name',
                                                 1, {'name': 'new'},
                                                 background=True),
                               method='patch')
示例#9
0
    def test_login_notebook_impersonate_token(self):
        token = uuid.uuid4().hex
        httpretty.register_uri(httpretty.POST,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'user',
                                   'project', 'notebook', 'impersonatetoken'),
                               body=json.dumps({'token': token}),
                               content_type='application/json',
                               status=200)

        # Login without updating the token and without persistence
        if os.path.exists(settings.CONTEXT_AUTH_TOKEN_PATH):
            os.remove(settings.CONTEXT_AUTH_TOKEN_PATH)
        assert self.api_config.token == 'token'
        assert token == self.api_handler.login_notebook_impersonate_token(
            username='******',
            project_name='project',
            internal_token='foo',
            set_token=False,
            persist_token=False)
        assert self.api_config.token == 'token'
        assert os.path.exists(settings.CONTEXT_AUTH_TOKEN_PATH) is False

        # Login and update the token and persistence
        if os.path.exists(settings.CONTEXT_AUTH_TOKEN_PATH):
            os.remove(settings.CONTEXT_AUTH_TOKEN_PATH)
        assert self.api_config.token == 'token'
        assert token == self.api_handler.login_notebook_impersonate_token(
            username='******',
            project_name='project',
            internal_token='foo',
            set_token=True,
            persist_token=True)
        assert self.api_config.token == token
        assert os.path.exists(settings.CONTEXT_AUTH_TOKEN_PATH) is True
示例#10
0
    def test_get_node(self):
        obj = ClusterNodeConfig(uuid=uuid.uuid4().hex,
                                name='name',
                                hostname='hostname',
                                role='Master',
                                docker_version='v1',
                                kubelet_version='v1',
                                os_image='image',
                                kernel_version='v1',
                                schedulable_taints=True,
                                schedulable_state=True,
                                memory=10,
                                cpu=2,
                                n_gpus=1,
                                status=1).to_dict()

        httpretty.register_uri(
            httpretty.GET,
            BaseApiHandler.build_url(
                self.api_config.base_url,
                '/nodes',
                1),
            body=json.dumps(obj),
            content_type='application/json',
            status=200)

        # Schema response
        result = self.api_handler.get_node(1)
        assert result.to_dict() == obj

        # Raw response
        self.set_raw_response()
        result = self.api_handler.get_node(1)
        assert result == obj
    def test_get_job(self):
        obj = ExperimentJobConfig(uuid=uuid.uuid4().hex,
                                  experiment=1,
                                  created_at=datetime.datetime.now(),
                                  updated_at=datetime.datetime.now(),
                                  definition={}).to_dict()
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'experiments', 1, 'jobs',
                                   'uuid'),
                               body=json.dumps(obj),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.get_job('username', 'project_name', 1,
                                          'uuid')
        assert result.to_dict() == obj

        # Raw response
        self.set_raw_response()
        result = self.api_handler.get_job('username', 'project_name', 1,
                                          'uuid')
        assert result == obj
示例#12
0
    def test_update_experiment_group(self):
        obj = ExperimentGroupConfig(content=faker.word(),
                                    uuid=uuid.uuid4().hex,
                                    project=uuid.uuid4().hex).to_dict()
        httpretty.register_uri(httpretty.PATCH,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'groups', 1),
                               body=json.dumps(obj),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.update_experiment_group(
            'username', 'project_name', 1, {'content': 'new'})
        assert result.to_dict() == obj

        # Raw response
        self.set_raw_response()
        result = self.api_handler.update_experiment_group(
            'username', 'project_name', 1, {'content': 'new'})
        assert result == obj

        # Async
        self.assert_async_call(api_handler_call=lambda: self.api_handler.
                               update_experiment_group('username',
                                                       'project_name',
                                                       1, {'content': 'new'},
                                                       background=True),
                               method='patch')
示例#13
0
    def test_get_bookmarked_projects(self):
        projects = [{
            'content_object': ProjectConfig('proj').to_dict()
        } for _ in range(10)]
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/bookmarks',
                                   'user', 'projects'),
                               body=json.dumps({
                                   'results': projects,
                                   'count': 10,
                                   'next': None
                               }),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.projects('user')
        assert len(result['results']) == 10
        assert isinstance(result['results'][0], ProjectConfig)

        # Raw response
        self.set_raw_response()
        result = self.api_handler.projects('user')
        assert len(result['results']) == 10
        assert isinstance(result['results'][0], Mapping)
示例#14
0
    def test_list_experiment_groups(self):
        project_uuid = uuid.uuid4().hex
        experiment_groups = [
            GroupConfig(content='text', project=project_uuid).to_dict()
            for _ in range(10)
        ]
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'user',
                                   'project', 'groups'),
                               body=json.dumps({
                                   'results': experiment_groups,
                                   'count': 10,
                                   'next': None
                               }),
                               content_type='application/json',
                               status=200)

        # Schema response
        response = self.api_handler.list_experiment_groups('user', 'project')
        assert len(response['results']) == 10
        assert isinstance(response['results'][0], GroupConfig)

        # Raw response
        self.set_raw_response()
        response = self.api_handler.list_experiment_groups('user', 'project')
        assert len(response['results']) == 10
        assert isinstance(response['results'][0], Mapping)
示例#15
0
    def test_get_log_handler(self):
        obj = LogHandlerConfig(dsn='test',
                               environment='staging',
                               tags={
                                   'cli_min_version': '0.0.1',
                                   'cli_latest_version': '0.0.2',
                                   'platform_min_version': '0.0.1',
                                   'platform_latest_version': '0.0.1',
                                   'chart_version': '0.0.1'
                               }).to_dict()
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/log_handler'),
                               body=json.dumps(obj),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.get_log_handler()
        assert result.to_dict() == obj

        # Raw response
        self.set_raw_response()
        result = self.api_handler.get_log_handler()
        assert result == obj
示例#16
0
    def test_get_bookmarked_experiments(self):
        project_uuid = uuid.uuid4().hex
        obj_uuid = uuid.uuid4().hex
        objs = [{
            'content_object':
            ExperimentConfig(config={}, uuid=obj_uuid,
                             project=project_uuid).to_dict()
        } for _ in range(10)]
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/bookmarks',
                                   'user', 'experiments'),
                               body=json.dumps({
                                   'results': objs,
                                   'count': 10,
                                   'next': None
                               }),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.experiments('user')
        assert len(result['results']) == 10
        assert isinstance(result['results'][0], ExperimentConfig)

        # Raw response
        self.set_raw_response()
        result = self.api_handler.experiments('user')
        assert len(result['results']) == 10
        assert isinstance(result['results'][0], Mapping)
示例#17
0
    def test_resume_job_with_config(self):
        job = JobConfig(config={}).to_dict()
        config = {'config': {'logging': {'level': 'error'}}}
        httpretty.register_uri(httpretty.POST,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'jobs', 1, 'resume'),
                               body=json.dumps(job),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.resume('username', 'project_name', 1, config)
        assert result.to_dict() == job

        # Raw response
        self.set_raw_response()
        result = self.api_handler.resume('username', 'project_name', 1, config)
        assert result == job

        # Async
        self.assert_async_call(
            api_handler_call=lambda: self.api_handler.resume(
                'username', 'project_name', 1, config, background=True),
            method='post')
示例#18
0
    def test_get_experiment_metrics(self):
        exp = ExperimentMetricConfig(id=1,
                                     uuid=uuid.uuid4().hex,
                                     experiment=1,
                                     created_at=datetime.datetime.now(),
                                     values={
                                         'accuracy': 0.9,
                                         'loss': np.float64(0.34),
                                         'step': 1
                                     }).to_dict()
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'experiments', 1,
                                   'metrics'),
                               body=json.dumps({
                                   'results': [exp],
                                   'count': 1,
                                   'next': None
                               }),
                               content_type='application/json',
                               status=200)

        # Schema response
        response = self.api_handler.get_metrics('username', 'project_name', 1)
        assert len(response['results']) == 1
        assert isinstance(response['results'][0], ExperimentMetricConfig)

        # Raw response
        self.set_raw_response()
        response = self.api_handler.get_metrics('username', 'project_name', 1)
        assert len(response['results']) == 1
        assert isinstance(response['results'][0], Mapping)
示例#19
0
    def test_revoke_superuser(self):
        httpretty.register_uri(httpretty.POST,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/superusers',
                                   'revoke', 'test-username'),
                               content_type='application/json',
                               status=200)

        response = self.api_handler.revoke_superuser('test-username')
        assert response.status_code == 200
示例#20
0
    def test_delete_user(self):
        httpretty.register_uri(httpretty.DELETE,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/users',
                                   'delete', 'test-username'),
                               content_type='application/json',
                               status=204)

        response = self.api_handler.delete_user('test-username')
        assert response.status_code == 204
示例#21
0
    def test_stop_experiment(self):
        httpretty.register_uri(httpretty.POST,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'experiments', 1, 'stop'),
                               content_type='application/json',
                               status=200)
        result = self.api_handler.stop('username', 'project_name', 1)
        assert result.status_code == 200

        # Async
        self.assert_async_call(api_handler_call=lambda: self.api_handler.stop(
            'username', 'project_name', 1, background=True),
                               method='post')
示例#22
0
    def test_disable_ci(self):
        httpretty.register_uri(httpretty.DELETE,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'ci'),
                               content_type='application/json',
                               status=204)
        result = self.api_handler.disable_ci('username', 'project_name')
        assert result.status_code == 204

        # Async
        self.assert_async_call(api_handler_call=lambda: self.api_handler.
                               disable_ci('user', 'project', background=True),
                               method='delete')
示例#23
0
    def test_experiment_logs(self):
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'experiments', 1, 'logs'),
                               body='some text',
                               content_type='text/plain',
                               status=200)

        response = self.api_handler.logs('username',
                                         'project_name',
                                         1,
                                         stream=False)
        assert response.content.decode() == 'some text'
示例#24
0
    def test_unbookmark_job(self):
        httpretty.register_uri(httpretty.DELETE,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'jobs', 1, 'unbookmark'),
                               content_type='application/json',
                               status=200)
        result = self.api_handler.unbookmark('username', 'project_name', 1)
        assert result.status_code == 200

        # Async
        self.assert_async_call(
            api_handler_call=lambda: self.api_handler.unbookmark(
                'username', 'project_name', 1, background=True),
            method='delete')
示例#25
0
    def test_get_user(self):
        user = UserConfig('user', '*****@*****.**').to_dict()
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/users'),
                               body=json.dumps(user),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.get_user('token_value')
        assert result.to_dict() == user

        # Raw response
        self.set_raw_response()
        result = self.api_handler.get_user('token_value')
        assert result == user
示例#26
0
    def test_set_git_repo(self):
        obj = {'git': 'https://github.com/foo/bar'}
        httpretty.register_uri(httpretty.POST,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'repo', 'external'),
                               body=json.dumps(obj),
                               content_type='application/json',
                               status=201)
        result = self.api_handler.set_repo('username', 'project_name', obj)
        assert result.status_code == 201

        # Async
        self.assert_async_call(
            api_handler_call=lambda: self.api_handler.set_repo(
                'user', 'project', obj, background=True),
            method='post')
示例#27
0
    def test_create_project(self):
        obj = ProjectConfig('proj').to_dict()
        httpretty.register_uri(httpretty.POST,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, 'projects'),
                               body=json.dumps(obj),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.create_project(obj)
        assert result.to_dict() == obj

        # Raw response
        self.set_raw_response()
        result = self.api_handler.create_project(obj)
        assert result == obj
示例#28
0
    def test_get_experiment(self):
        exp = ExperimentConfig(config={}).to_dict()
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'experiments', 1),
                               body=json.dumps(exp),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.get_experiment('username', 'project_name', 1)
        assert result.to_dict() == exp

        # Raw response
        self.set_raw_response()
        result = self.api_handler.get_experiment('username', 'project_name', 1)
        assert result == exp
示例#29
0
    def test_get_job(self):
        job = JobConfig().to_dict()
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/', 'username',
                                   'project_name', 'jobs', 1),
                               body=json.dumps(job),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.get_job('username', 'project_name', 1)
        assert result.to_dict() == job

        # Raw response
        self.set_raw_response()
        result = self.api_handler.get_job('username', 'project_name', 1)
        assert result == job
示例#30
0
    def test_get_chart_version(self):
        obj = ChartVersionConfig(version='1.0').to_dict()
        httpretty.register_uri(httpretty.GET,
                               BaseApiHandler.build_url(
                                   self.api_config.base_url, '/versions/',
                                   'chart'),
                               body=json.dumps(obj),
                               content_type='application/json',
                               status=200)

        # Schema response
        result = self.api_handler.get_chart_version()
        assert result.to_dict() == obj

        # Raw response
        self.set_raw_response()
        result = self.api_handler.get_chart_version()
        assert result == obj