Exemple #1
0
    def post(self, request, *args, **kwargs):
        ttl = self.request.data.get(RedisTTL.TTL_KEY)
        if ttl:
            try:
                ttl = RedisTTL.validate_ttl(ttl)
            except ValueError:
                raise ValidationError('ttl must be an integer.')

        auditor.record(event_type=self.event_type,
                       instance=self.job,
                       actor_id=self.request.user.id,
                       actor_name=self.request.user.username)

        description = None
        config = None
        update_code_reference = False
        if 'config' in request.data:
            spec = validate_job_spec_config(
                [self.job.specification.parsed_data, request.data['config']], raise_for_rest=True)
            config = spec.parsed_data
        if 'update_code' in request.data:
            try:
                update_code_reference = to_bool(request.data['update_code'])
            except TypeError:
                raise ValidationError('update_code should be a boolean')
        if 'description' in request.data:
            description = request.data['description']
        new_obj = self.clone(obj=self.job,
                             config=config,
                             update_code_reference=update_code_reference,
                             description=description)
        if ttl:
            RedisTTL.set_for_job(job_id=new_obj.id, value=ttl)
        serializer = self.get_serializer(new_obj)
        return Response(status=status.HTTP_201_CREATED, data=serializer.data)
Exemple #2
0
 def perform_create(self, serializer):
     ttl = self.request.data.get(RedisTTL.TTL_KEY)
     if ttl:
         try:
             ttl = RedisTTL.validate_ttl(ttl)
         except ValueError:
             raise ValidationError('ttl must be an integer.')
     instance = serializer.save(user=self.request.user,
                                project=self.project)
     if ttl:
         RedisTTL.set_for_job(job_id=instance.id, value=ttl)
Exemple #3
0
 def perform_create(self, serializer):
     ttl = self.request.data.get(RedisTTL.TTL_KEY)
     if ttl:
         try:
             ttl = RedisTTL.validate_ttl(ttl)
         except ValueError:
             raise ValidationError('ttl must be an integer.')
     instance = serializer.save(user=self.request.user,
                                project=get_permissible_project(view=self))
     auditor.record(event_type=JOB_CREATED, instance=instance)
     if ttl:
         RedisTTL.set_for_job(job_id=instance.id, value=ttl)
 def perform_create(self, serializer):
     ttl = self.request.data.get(RedisTTL.TTL_KEY)
     if ttl:
         try:
             ttl = RedisTTL.validate_ttl(ttl)
         except ValueError:
             raise ValidationError('ttl must be an integer.')
     project = get_permissible_project(view=self)
     group = self.request.data.get('experiment_group')
     if group and ExperimentGroup.objects.filter(
             id=group, project=project).count() == 0:
         raise ValidationError('Received an invalid group.')
     instance = serializer.save(user=self.request.user, project=project)
     auditor.record(event_type=EXPERIMENT_CREATED, instance=instance)
     if ttl:
         RedisTTL.set_for_experiment(experiment_id=instance.id, value=ttl)
Exemple #5
0
    def perform_create(self, serializer):
        ttl = self.request.data.get(RedisTTL.TTL_KEY)
        if ttl:
            try:
                ttl = RedisTTL.validate_ttl(ttl)
            except ValueError:
                raise ValidationError('ttl must be an integer.')

        instance = serializer.save(user=self.request.user,
                                   project=self.project)
        if ttl:
            RedisTTL.set_for_build(build_id=instance.id, value=ttl)
        # Trigger build scheduling
        celery_app.send_task(SchedulerCeleryTasks.BUILD_JOBS_START,
                             kwargs={'build_job_id': instance.id},
                             countdown=1)
Exemple #6
0
    def perform_create(self, serializer):
        ttl = self.request.data.get(RedisTTL.TTL_KEY)
        if ttl:
            try:
                ttl = RedisTTL.validate_ttl(ttl)
            except ValueError:
                raise ValidationError('ttl must be an integer.')

        project = get_permissible_project(view=self)
        code_reference = get_project_latest_code_reference(project=project)
        instance = serializer.save(user=self.request.user,
                                   project=project,
                                   code_reference=code_reference)
        auditor.record(event_type=BUILD_JOB_CREATED, instance=instance)
        if ttl:
            RedisTTL.set_for_build(build_id=instance.id, value=ttl)
        # Trigger build scheduling
        celery_app.send_task(SchedulerCeleryTasks.BUILD_JOBS_START,
                             kwargs={'build_job_id': instance.id},
                             countdown=1)
Exemple #7
0
    def perform_create(self, serializer):
        ttl = self.request.data.get(RedisTTL.TTL_KEY)
        if ttl:
            try:
                ttl = RedisTTL.validate_ttl(ttl)
            except ValueError:
                raise ValidationError('ttl must be an integer.')
        group = self.request.data.get('experiment_group')
        if group:
            try:
                group = ExperimentGroup.objects.get(id=group, project=self.project)
            except ExperimentGroup.DoesNotExist:
                raise ValidationError('Received an invalid group.')
            if group.is_selection:
                self.request.data.pop('experiment_group')

        instance = serializer.save(user=self.request.user, project=self.project)
        if group and group.is_selection:  # Add the experiment to the group selection
            group.selection_experiments.add(instance)
        if ttl:
            RedisTTL.set_for_experiment(experiment_id=instance.id, value=ttl)
Exemple #8
0
    def post(self, request, *args, **kwargs):
        ttl = self.request.data.get(RedisTTL.TTL_KEY)
        if ttl:
            try:
                ttl = RedisTTL.validate_ttl(ttl)
            except ValueError:
                raise ValidationError('ttl must be an integer.')

        obj = self.get_object()
        auditor.record(event_type=self.event_type,
                       instance=obj,
                       actor_id=self.request.user.id,
                       actor_name=self.request.user.username)

        description = None
        config = None
        declarations = None
        update_code_reference = False
        if 'config' in request.data:
            spec = validate_experiment_spec_config(
                [obj.specification.parsed_data, request.data['config']],
                raise_for_rest=True)
            config = spec.parsed_data
            declarations = spec.declarations
        if 'update_code' in request.data:
            update_code_reference = to_bool(request.data['update_code'],
                                            handle_none=True,
                                            exception=ValidationError)
        if 'description' in request.data:
            description = request.data['description']
        new_obj = self.clone(obj=obj,
                             config=config,
                             declarations=declarations,
                             update_code_reference=update_code_reference,
                             description=description)
        if ttl:
            RedisTTL.set_for_experiment(experiment_id=new_obj.id, value=ttl)
        serializer = self.get_serializer(new_obj)
        return Response(status=status.HTTP_201_CREATED, data=serializer.data)
    def test_validate_ttl(self):
        with self.assertRaises(ValueError):
            RedisTTL.validate_ttl(None)

        with self.assertRaises(ValueError):
            RedisTTL.validate_ttl('sdf')