def setUp(self): super().setUp() self.project = ProjectFactory(user=self.auth_client.user) self.url = '/{}/{}/{}/builds/'.format(API_V1, self.project.user, self.project.name) self.objects = [ self.factory_class(project=self.project) for _ in range(self.num_objects) ] self.queryset = self.model_class.objects.all() self.queryset = self.queryset.order_by('-updated_at')
def test_experiment_group_without_spec_and_hptuning(self, _): # Create group without params and spec works project = ProjectFactory() experiment_group = ExperimentGroup.objects.create(user=project.user, project=project) assert experiment_group.specification is None assert experiment_group.hptuning is None assert experiment_group.hptuning_config is None assert experiment_group.concurrency is None assert experiment_group.search_algorithm is None assert experiment_group.early_stopping is None
def setUp(self): super().setUp() self.project = ProjectFactory(user=self.auth_client.user) self.object = self.factory_class(user=self.auth_client.user, project=self.project) tensorboard = TensorboardJobFactory(project=self.project, experiment=self.object) tensorboard.set_status(status=JobLifeCycle.RUNNING) self.url = '/{}/{}/{}/experiments/{}/tensorboard/stop'.format( API_V1, self.project.user.username, self.project.name, self.object.id) self.queryset = TensorboardJob.objects.all()
def test_project_requests_tensorboard_url(self): project = ProjectFactory(user=self.auth_client.user) experiment = ExperimentFactory(project=project) tensorboard = TensorboardJobFactory(project=project, experiment=experiment) tensorboard.set_status(status=JobLifeCycle.RUNNING) with patch('scheduler.tensorboard_scheduler.get_tensorboard_url' ) as mock_fct: response = self.auth_client.get(self._get_url(project, experiment)) assert mock_fct.call_count == 1 assert response.status_code == 200
def setUp(self): super().setUp() project = ProjectFactory(user=self.auth_client.user) self.logs = [] self.job = BuildJobFactory(project=project) self.url = '/{}/{}/{}/builds/{}/logs'.format(API_V1, project.user.username, project.name, self.job.id) self.stream_url = '/{}/{}/{}/builds/{}/logs/stream'.format( API_V1, project.user.username, project.name, self.job.id) self.ws_url = '/{}/{}/{}/builds/{}/logs'.format( WS_V1, project.user.username, project.name, self.job.id)
def setUp(self): super().setUp() project = ProjectFactory(user=self.auth_client.user) self.experiment = ExperimentFactory(project=project) self.url = '/{}/{}/{}/experiments/{}/jobs/'.format( API_V1, project.user.username, project.name, self.experiment.sequence) self.objects = [ self.factory_class(experiment=self.experiment) for _ in range(self.num_objects) ] self.queryset = self.model_class.objects.all()
def setUp(self): super().setUp() self.project = ProjectFactory(user=self.auth_client.user) self.object = self.factory_class(project=self.project) self.unauthorised_object = self.factory_class() self.url = '/{}/{}/{}/repo'.format(API_V1, self.project.user.username, self.project.name) self.unauthorised_url = '/{}/{}/{}/repo'.format( API_V1, self.unauthorised_object.project.user.username, self.unauthorised_object.project.name)
def setUp(self): super().setUp() project = ProjectFactory(user=self.auth_client.user) job = JobFactory(project=project) self.url = '/{}/{}/{}/jobs/{}/outputs/files'.format( API_V1, project.user.username, project.name, job.id) outputs_path = stores.get_job_outputs_path( persistence=job.persistence_outputs, job_name=job.unique_name) stores.create_job_outputs_path(persistence=job.persistence_outputs, job_name=job.unique_name) self.create_paths(path=outputs_path, url=self.url)
def test_project_deletion_cascade_to_notebook_job(self): assert NotebookJob.objects.count() == 0 project = ProjectFactory() NotebookJobFactory(project=project) assert NotebookJob.objects.count() == 1 with patch('scheduler.tensorboard_scheduler.stop_tensorboard' ) as _: # noqa with patch( 'scheduler.notebook_scheduler.stop_notebook') as _: # noqa project.delete() assert NotebookJob.objects.count() == 0
def setUp(self): super().setUp() project = ProjectFactory(user=self.auth_client.user) self.group = ExperimentGroupFactory(project=project) self.url = '/{}/{}/{}/groups/{}/chartviews/'.format(API_V1, project.user.username, project.name, self.group.id) self.objects = [self.factory_class(experiment_group=self.group, name='view{}'.format(i)) for i in range(self.num_objects)] self.queryset = self.model_class.objects.all() self.queryset = self.queryset.order_by('created_at')
def setUp(self): super().setUp() self.project = ProjectFactory() self.user = self.project.user auditor.validate() auditor.setup() tracker.validate() tracker.setup() activitylogs.validate() activitylogs.setup() notifier.validate() notifier.setup()
def setUp(self): super().setUp() self.project = ProjectFactory(user=self.auth_client.user) self.url = '/{}/{}/{}/repo/sync'.format(API_V1, self.project.user.username, self.project.name) self.set_url = '/{}/{}/{}/repo/external'.format(API_V1, self.project.user.username, self.project.name) self.enable_url = '/{}/{}/{}/ci'.format(API_V1, self.project.user.username, self.project.name)
def setUp(self): super().setUp() self.project = ProjectFactory(user=self.auth_client.user) self.other_project = ProjectFactory() self.url = '/{}/searches/{}/{}/{}'.format(API_V1, self.project.user.username, self.project.name, self.entity) self.other_url = '/{}/searches/{}/{}/{}'.format(API_V1, self.other_project.user.username, self.other_project.name, self.entity) self.objects = [ self.factory_class(user=self.auth_client.user, project=self.project, content_type=self.content_type) for _ in range(self.num_objects)] # Other objects that do not belong to the filter self.factory_class(project=self.other_project, content_type=self.content_type) self.queryset = self.model_class.objects.filter(project=self.project) self.queryset = self.queryset.order_by('-updated_at')
def setUp(self): super().setUp() self.project = ProjectFactory(user=self.auth_client.user) self.group = ExperimentGroupFactory(project=self.project) self.object = self.factory_class(experiment_group=self.group) self.url = '/{}/{}/{}/groups/{}/chartviews/{}/'.format( API_V1, self.group.project.user.username, self.group.project.name, self.group.id, self.object.id) self.queryset = self.model_class.objects.all()
def setUp(self): super().setUp() project = ProjectFactory(user=self.auth_client.user) self.object = self.factory_class(project=project) self.url = '/{}/{}/{}/groups/{}/'.format(API_V1, project.user.username, project.name, self.object.sequence) self.queryset = self.model_class.objects.all() # Add 2 experiments for _ in range(2): ExperimentFactory(experiment_group=self.object)
def setUp(self): super().setUp() self.project = ProjectFactory(user=self.auth_client.user) self.object = ExternalRepo.objects.create( project=self.project, git_url='https://github.com/polyaxon/empty.git') self.unauthorised_object = self.factory_class( git_url='https://github.com/polyaxon/empty.git') self.url = '/{}/{}/{}/repo'.format(API_V1, self.project.user.username, self.project.name) self.unauthorised_url = '/{}/{}/{}/repo'.format( API_V1, self.unauthorised_object.project.user.username, self.unauthorised_object.project.name)
def setUp(self): super().setUp() self.project = ProjectFactory(user=self.auth_client.user) self.job = self.factory_class(project=self.project) self.download_url = '/{}/{}/{}/jobs/{}/outputs/download'.format( API_V1, self.project.user.username, self.project.name, self.job.id) self.job_outputs_path = stores.get_job_outputs_path( persistence=self.job.persistence_outputs, job_name=self.job.unique_name) self.url = self.download_url
def test_experiment_group_with_spec_create_params(self): # Create group with spec creates params project = ProjectFactory() experiment_group = ExperimentGroup.objects.create( user=project.user, project=project, content=experiment_group_spec_content_early_stopping) assert isinstance(experiment_group.specification, GroupSpecification) assert experiment_group.params == experiment_group.specification.settings.to_dict() assert isinstance(experiment_group.params_config, SettingsConfig) assert experiment_group.concurrency == 2 assert experiment_group.search_algorithm == SearchAlgorithms.RANDOM assert len(experiment_group.early_stopping) == 2
def test_project_requests_notebook_url(self): project = ProjectFactory(user=self.auth_client.user) notebook = NotebookJobFactory(project=project) notebook.set_status(status=JobLifeCycle.RUNNING) with patch('scheduler.notebook_scheduler.get_notebook_url' ) as mock_url_fct: with patch('scheduler.notebook_scheduler.get_notebook_token' ) as mock_token_fct: response = self.auth_client.get(self._get_url(project)) assert mock_url_fct.call_count == 1 assert mock_token_fct.call_count == 1 assert response.status_code == 200
def setUp(self): super().setUp() self.project = ProjectFactory(user=self.auth_client.user) self.other_project = ProjectFactory() self.url = '/{}/{}/{}/groups/'.format(API_V1, self.project.user.username, self.project.name) self.other_url = '/{}/{}/{}/groups/'.format( API_V1, self.other_project.user.username, self.other_project.name) with patch('runner.dockerizer.builders.experiments.build_experiment' ) as _: # noqa with patch( 'runner.schedulers.experiment_scheduler.start_experiment' ) as _: # noqa self.objects = [ self.factory_class(project=self.project) for _ in range(self.num_objects) ] self.queryset = self.model_class.objects.filter(project=self.project) # Other objects self.other_object = self.factory_class(project=self.other_project)
def test_status_update_results_in_new_updated_at_datetime_notebook(self): project = ProjectFactory() job = NotebookJobFactory(project=project) updated_at = job.updated_at # Create new status NotebookJobStatus.objects.create(job=job, status=JobLifeCycle.BUILDING) job.refresh_from_db() assert updated_at < job.updated_at updated_at = job.updated_at # Create status Using set_status job.set_status(JobLifeCycle.RUNNING) job.refresh_from_db() assert updated_at < job.updated_at
def setUp(self): super().setUp() project = ProjectFactory(user=self.auth_client.user) with patch('projects.tasks.start_group_experiments.apply_async') as _: self.object = self.factory_class(project=project) # Add a running experiment experiment = ExperimentFactory(experiment_group=self.object) ExperimentStatusFactory(experiment=experiment, status=ExperimentLifeCycle.RUNNING) self.url = '/{}/{}/{}/groups/{}/stop'.format(API_V1, project.user.username, project.name, self.object.sequence)
def setUp(self): super().setUp() with patch.object(Experiment, 'set_status') as _: with patch('experiments.tasks.start_experiment.delay') as _: project = ProjectFactory(user=self.auth_client.user) self.experiment = ExperimentFactory(project=project) self.url = '/{}/{}/{}/experiments/{}/metrics/'.format(API_V1, project.user.username, project.name, self.experiment.sequence) self.objects = [self.factory_class(experiment=self.experiment, values = {'accuracy': i/10}) for i in range(self.num_objects)] self.queryset = self.model_class.objects.all()
def setUp(self): super().setUp() project = ProjectFactory(user=self.auth_client.user) self.object = self.factory_class(project=project) self.url = '/{}/{}/{}/experiments/{}/'.format(API_V1, project.user.username, project.name, self.object.sequence) self.queryset = self.model_class.objects.all() # Create related fields for _ in range(2): ExperimentJobFactory(experiment=self.object)
def set_objects(self): self.user = self.auth_client.user self.project = ProjectFactory(user=self.user) activitylogs.record(event_type=PROJECT_DELETED_TRIGGERED, instance=self.project, actor_id=self.user.id) self.experiment = ExperimentFactory(project=self.project) activitylogs.record(event_type=EXPERIMENT_DELETED_TRIGGERED, instance=self.experiment, actor_id=self.user.id) self.job = JobFactory(project=self.project) activitylogs.record(event_type=JOB_VIEWED, instance=self.job, actor_id=self.user.id)
def setUp(self): super().setUp() with patch('experiments.tasks.start_experiment.delay') as _: with patch.object(ExperimentJob, 'set_status') as _: project = ProjectFactory(user=self.auth_client.user) experiment = ExperimentFactory(project=project) self.experiment_job = ExperimentJobFactory( experiment=experiment) self.object = self.factory_class(job=self.experiment_job) self.url = '/{}/{}/{}/experiments/{}/jobs/{}/statuses/{}'.format( API_V1, project.user.username, project.name, experiment.sequence, self.experiment_job.sequence, self.object.uuid.hex) self.queryset = self.model_class.objects.filter( job=self.experiment_job)
def setUp(self): super().setUp() project = ProjectFactory(user=self.auth_client.user) with patch.object(ExperimentGroup, 'set_status') as _: # noqa self.experiment_group = ExperimentGroupFactory(project=project) self.url = '/{}/{}/{}/groups/{}/statuses/'.format(API_V1, project.user.username, project.name, self.experiment_group.id) self.objects = [self.factory_class(experiment_group=self.experiment_group, status=ExperimentGroupLifeCycle.CHOICES[i][0]) for i in range(self.num_objects)] self.queryset = self.model_class.objects.filter(experiment_group=self.experiment_group) self.queryset = self.queryset.order_by('created_at')
def setUp(self): super().setUp() self.project = ProjectFactory() self.user = self.project.user self.tested_events = { searches_events.SEARCH_CREATED, searches_events.SEARCH_CREATED, searches_events.SEARCH_CREATED, searches_events.SEARCH_CREATED, searches_events.SEARCH_DELETED, searches_events.SEARCH_DELETED, searches_events.SEARCH_DELETED, searches_events.SEARCH_DELETED, }
def setUp(self): super().setUp() project = ProjectFactory(user=self.auth_client.user) with patch('experiment_groups.tasks.start_group_experiments.apply_async') as mock_fct: self.object = self.factory_class(project=project) self.url = '/{}/{}/{}/groups/{}/'.format(API_V1, project.user.username, project.name, self.object.sequence) self.queryset = self.model_class.objects.all() # Add 2 more experiments for i in range(2): ExperimentFactory(experiment_group=self.object)
def setUp(self): super().setUp() with patch.object(Job, 'set_status') as _: with patch('scheduler.tasks.jobs.jobs_build.apply_async' ) as _: # noqa project = ProjectFactory(user=self.auth_client.user) self.job = JobFactory(project=project) self.url = '/{}/{}/{}/jobs/{}/statuses/'.format( API_V1, project.user.username, project.name, self.job.id) self.objects = [ self.factory_class(job=self.job, status=JobLifeCycle.CHOICES[i][0]) for i in range(self.num_objects) ] self.queryset = self.model_class.objects.all()