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)
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)
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_set_for_experiment(self): RedisTTL.set_for_experiment(experiment_id=1, value=10) assert RedisTTL.get_for_experiment(experiment_id=1) == 10 assert RedisTTL.get_for_experiment( experiment_id=2) == conf.get('GLOBAL_COUNTDOWN') assert RedisTTL(experiment=10).get_value() is None
def test_set_for_experiment(self): RedisTTL.set_for_experiment(experiment_id=1, value=10) assert RedisTTL.get_for_experiment(experiment_id=1) == 10 assert RedisTTL.get_for_experiment(experiment_id=2) == 2 assert RedisTTL(experiment=10).get_value() is None