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
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))
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'))
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']))
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 {}
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
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]) })
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()
def __get_configuration(self, **kwargs): try: return GetConfiguration(**kwargs).configuration except Exception as e: logger.exception(e) raise exceptions.APIException(_('Wrong configuration format'))