Ejemplo n.º 1
0
 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')
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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()
Ejemplo n.º 7
0
 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)
Ejemplo n.º 8
0
    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)
Ejemplo n.º 9
0
    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
Ejemplo n.º 10
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')
Ejemplo n.º 11
0
 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()
Ejemplo n.º 12
0
 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)
Ejemplo n.º 13
0
    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')
Ejemplo n.º 14
0
 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()
Ejemplo n.º 15
0
    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)
Ejemplo n.º 16
0
 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)
Ejemplo n.º 17
0
 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
Ejemplo n.º 18
0
 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
Ejemplo n.º 19
0
    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
Ejemplo n.º 20
0
    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)
Ejemplo n.º 21
0
 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
Ejemplo n.º 22
0
 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)
Ejemplo n.º 23
0
 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()
Ejemplo n.º 24
0
    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)
Ejemplo n.º 25
0
 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)
Ejemplo n.º 26
0
 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)
Ejemplo n.º 27
0
 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')
Ejemplo n.º 28
0
 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,
     }
Ejemplo n.º 29
0
    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)
Ejemplo n.º 30
0
 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()