Пример #1
0
def validate_configuration(conf_str):
    validated_data = {}

    # Get configuration
    if conf_str:
        try:
            configuration = GetConfiguration(user_conf=json.loads(conf_str)).for_json()
        except Exception as e:
            logger.exception(e)
            raise exceptions.ValidationError({'configuration': _('The configuration has wrong format')})
    else:
        configuration = GetConfiguration().for_json()

    validated_data['priority'] = configuration['priority']
    validated_data['weight'] = configuration['weight']

    # Validate task scheduler
    try:
        validated_data['scheduler'] = validate_scheduler(type=configuration['task scheduler'])
    except BridgeException as e:
        raise exceptions.ValidationError({'scheduler': str(e)})

    # Save configuration file
    conf_db = file_get_or_create(
        json.dumps(configuration, indent=2, sort_keys=True, ensure_ascii=False), 'configuration.json', JobFile
    )
    validated_data['configuration_id'] = conf_db.id

    return validated_data
Пример #2
0
 def retrieve(self, request, *args, **kwargs):
     instance = self.get_object()
     conf_data = GetConfiguration(
         file_conf=instance.configuration.file).for_html()
     template = loader.get_template('jobs/viewDecision/configuration.html')
     return HttpResponse(
         template.render({
             'conf': conf_data,
             'object': instance
         }, request))
Пример #3
0
 def post(self, request):
     conf_kwargs = {}
     if 'file_conf' in self.request.FILES:
         conf_kwargs = {'file_conf': request.FILES['file_conf']}
     elif 'decision' in self.request.data:
         decision = get_object_or_404(
             Decision.objects.select_related('configuration'),
             pk=self.request.data['decision'])
         conf_kwargs = {'file_conf': decision.configuration.file}
     elif 'conf_name' in self.request.data:
         conf_kwargs = {'conf_name': request.data['conf_name']}
     try:
         return Response(GetConfiguration(**conf_kwargs).configuration)
     except Exception as e:
         logger.exception(e)
         raise exceptions.APIException(_('Wrong configuration format'))
Пример #4
0
 def post(self, request):
     if 'file_conf' in self.request.FILES:
         return Response(
             self.__get_configuration(file_conf=request.FILES['file_conf']))
     if 'decision' in self.request.data:
         decision = get_object_or_404(
             Decision.objects.select_related('configuration').filter(
                 pk=self.request.data['decision']))
         return Response(
             GetConfiguration(
                 file_conf=decision.configuration.file).configuration)
     if self.request.data.get('conf_name', 'default') == 'default':
         return Response(
             get_default_configuration(self.request.user).configuration)
     return Response(
         self.__get_configuration(conf_name=request.data['conf_name']))
Пример #5
0
    def get_context_data(self, **kwargs):
        getconf_kwargs = {}

        # If self.request.POST['mode'] == 'fast' or any other then default configuration is used
        if self.request.POST['mode'] == 'data':
            getconf_kwargs['user_conf'] = json.loads(self.request.POST['data'])
        elif self.request.POST['mode'] == 'file_conf':
            getconf_kwargs['file_conf'] = self.request.FILES['file_conf']
        elif self.request.POST['mode'] == 'lastconf':
            last_run = RunHistory.objects.filter(job_id=self.kwargs['job_id']).order_by('date').last()
            if last_run is None:
                raise BridgeException(_('The job was not decided before'))
            getconf_kwargs['last_run'] = last_run
        elif self.request.POST['mode'] == 'default':
            getconf_kwargs['conf_name'] = self.request.POST['conf_name']

        StartJobDecision(self.request.user, self.kwargs['job_id'], GetConfiguration(**getconf_kwargs).configuration)
        return {}
Пример #6
0
    def validate(self, attrs):
        # Get configuration
        conf_str = attrs.pop('configuration')
        try:
            configuration = GetConfiguration(
                user_conf=json.loads(conf_str)).for_json()
        except Exception as e:
            logger.exception(e)
            raise exceptions.ValidationError(
                {'configuration': _('The configuration has wrong format')})

        # Save configuration file
        conf_db = file_get_or_create(
            json.dumps(configuration,
                       indent=2,
                       sort_keys=True,
                       ensure_ascii=False), 'configuration.json', JobFile)
        attrs['file_id'] = conf_db.id

        return attrs
Пример #7
0
    def post(self, request, **kwargs):
        try:
            job = self.get_job(**kwargs)

            if 'file_conf' in self.request.FILES:
                configuration = GetConfiguration(
                    file_conf=self.request.FILES['file_conf']).for_json()
            else:
                configuration = get_default_configuration(
                    self.request.user).for_json()

            decision = create_default_decision(request, job, configuration)
            decision_status_changed(decision)
        except Exception as e:
            logger.exception(e)
            raise exceptions.APIException(
                'Error occured for starting default decision')
        return Response({
            'id': decision.id,
            'identifier': str(decision.identifier),
            'url': reverse('jobs:decision', args=[decision.id])
        })
Пример #8
0
 def get_configuration(self):
     if 'file_conf' in self.request.FILES:
         return GetConfiguration(
             file_conf=self.request.FILES['file_conf']).for_json()
     return GetConfiguration().for_json()
Пример #9
0
 def __get_configuration(self, **kwargs):
     try:
         return GetConfiguration(**kwargs).configuration
     except Exception as e:
         logger.exception(e)
         raise exceptions.APIException(_('Wrong configuration format'))