Esempio n. 1
0
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if not form.is_valid():
            return self.json_response(form.errors, status=404)
        data = form.cleaned_data
        task_names = set([i.split('_')[0] for i in data if i != 'parse'])
        custom_task_names = task_names & self.custom_tasks
        lexnlp_task_names = task_names - self.custom_tasks

        # custom tasks
        rejected_tasks = []
        started_tasks = []
        for task_name in custom_task_names:
            kwargs = {k.replace('%s_' % task_name, ''): v for k, v in data.items()
                      if k.startswith(task_name)}
            if any(kwargs.values()):
                kwargs['user_id'] = request.user.pk
                if Task.disallow_start(task_name):
                    rejected_tasks.append(task_name)
                else:
                    started_tasks.append(task_name)
                    locator_result_link = self.locator_result_links_map.get(task_name)
                    if locator_result_link:
                        kwargs['metadata'] = {'result_links': [locator_result_link]}
                    call_task(task_name, **kwargs)

        # lexnlp tasks
        lexnlp_task_data = dict()
        for task_name in lexnlp_task_names:
            kwargs = {k.replace('%s_' % task_name, ''): v for k, v in data.items()
                      if k.startswith(task_name)}
            if any(kwargs.values()):
                lexnlp_task_data[task_name] = kwargs

        if lexnlp_task_data:
            if Task.disallow_start('Locate'):
                rejected_tasks.append('Locate')
            else:
                started_tasks.append('Locate')
                call_task('Locate',
                          tasks=lexnlp_task_data,
                          parse=data['parse'],
                          user_id=request.user.pk,
                          metadata={
                              'description': [i for i, j in lexnlp_task_data.items()
                                              if j.get('locate')],
                              'result_links': [self.locator_result_links_map[i]
                                               for i, j in lexnlp_task_data.items()
                                               if j.get('locate')]})

        response_text = ''
        if started_tasks:
            response_text += 'The Task is started. It can take a while.<br />'
            response_text += 'Started tasks: [{}].<br />'.format(', '.join(started_tasks))
        if rejected_tasks:
            response_text += 'Some tasks were rejected (already started).<br />'
            response_text += 'Rejected Tasks: [{}]'.format(', '.join(rejected_tasks))
        return self.json_response(response_text)
Esempio n. 2
0
    def post(self, request, *args, **kwargs):
        data = request.POST.dict()
        if not data:
            return self.json_response('error', status=404)
        data['user_id'] = request.user.pk

        rejected_tasks = []
        started_tasks = []
        for task_alias, metadata in self.tasks_map.items():
            task_name = metadata['task_name']
            if Task.disallow_start(task_name):
                rejected_tasks.append(task_name)
                continue
            repo_paths = [
                '{}/{}/{}'.format(settings.GIT_DATA_REPO_ROOT,
                                  j.replace('{}_locale_'.format(i), ''),
                                  self.paths_map[i]) for i in data
                if i.startswith(task_alias) and i in self.paths_map
                for j in data if j.startswith('{}_locale_'.format(i))
            ]
            file_path = data.get('{}_file_path'.format(task_alias)) or None
            delete = '{}_delete'.format(task_alias) in data
            if any([repo_paths, file_path, delete]):
                call_task(task_name,
                          repo_paths=repo_paths,
                          file_path=file_path,
                          delete=delete,
                          metadata=metadata)
                started_tasks.append(task_name)
        return self.json_response('The task is started. It can take a while.')
Esempio n. 3
0
    def post(self, request, *args, **kwargs):
        data = request.POST.dict()
        if not data:
            return self.json_response('error', status=404)
        data['user_id'] = request.user.pk

        rejected_tasks = []
        started_tasks = []
        for task_alias, metadata in self.tasks_map.items():
            task_name = metadata['task_name']
            if Task.disallow_start(task_name):
                rejected_tasks.append(task_name)
                continue
            repo_paths = [
                '{}/{}/{}'.format(settings.GIT_DATA_REPO_ROOT,
                                  j.replace('{}_locale_'.format(i), ''),
                                  DICTIONARY_DATA_URL_MAP[i]) for i in data
                if i.startswith(task_alias) and i in DICTIONARY_DATA_URL_MAP
                for j in data if j.startswith('{}_locale_'.format(i))
            ]
            file_path = data.get('{}_file_path'.format(task_alias)) or None
            delete = '{}_delete'.format(task_alias) in data
            if any([repo_paths, file_path, delete]):
                try:
                    call_task(task_name,
                              repo_paths=repo_paths,
                              file_path=file_path,
                              delete=delete,
                              metadata=metadata)
                except Exception as e:
                    return self.json_response(str(e), status=400)
                started_tasks.append(task_name)
        return self.json_response(TASK_STARTED_MESSAGE)
Esempio n. 4
0
 def get(self, request, *args, **kwargs):
     if Task.disallow_start(self.task_name):
         return HttpResponseForbidden(
             'Forbidden. Task "%s" is already started.' % self.task_name)
     else:
         form = self.form_class()
         data = dict(header=form.header,
                     form_class=self.html_form_class,
                     form_data=form.as_p())
     return self.json_response(data)
Esempio n. 5
0
 def post(self, request, *args, **kwargs):
     if Task.disallow_start(self.task_name):
         return HttpResponseForbidden(
             'Forbidden. Such task is already started.')
     if self.form_class is None:
         data = request.POST.dict()
     else:
         form = self.form_class(request.POST)
         if not form.is_valid():
             return self.json_response(form.errors, status=400)
         data = form.cleaned_data
     data['user_id'] = request.user.pk
     data['metadata'] = self.get_metadata()
     call_task(self.task_name, **data)
     return self.json_response('The task is started. It can take a while.')
Esempio n. 6
0
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if not form.is_valid():
            return self.json_response(form.errors, status=400)
        data = form.cleaned_data

        project_id = None
        project_ref = data.get('project')
        if project_ref:
            del data['project']
            project_id = project_ref.pk

        task_names = set([i.split('_')[0] for i in data if i != 'parse'])
        custom_task_names = task_names & self.custom_tasks
        lexnlp_task_names = task_names - self.custom_tasks

        # custom tasks
        rejected_tasks = []
        started_tasks = []
        for task_name in custom_task_names:
            kwargs = {
                k.replace('%s_' % task_name, ''): v
                for k, v in data.items() if k.startswith(task_name)
            }
            if any(kwargs.values()):
                kwargs['user_id'] = request.user.pk
                if Task.disallow_start(task_name):
                    rejected_tasks.append(task_name)
                else:
                    started_tasks.append(task_name)
                    locator_result_link = self.locator_result_links_map.get(
                        task_name)
                    if locator_result_link:
                        kwargs['metadata'] = {
                            'result_links': [locator_result_link]
                        }
                    try:
                        call_task(task_name, **kwargs)
                    except Exception as e:
                        return self.json_response(str(e), status=400)

        # lexnlp tasks
        lexnlp_task_data = dict()
        for task_name in lexnlp_task_names:
            kwargs = {
                k.replace('%s_' % task_name, ''): v
                for k, v in data.items() if k.startswith(task_name)
            }
            if any(kwargs.values()):
                lexnlp_task_data[task_name] = kwargs

        if lexnlp_task_data:
            # allow to start "Locate" task anytime
            started_tasks.append('Locate({})'.format(', '.join(
                lexnlp_task_data.keys())))
            try:
                call_task('Locate',
                          tasks=lexnlp_task_data,
                          parse=data['parse'],
                          user_id=request.user.pk,
                          project_id=project_id,
                          metadata={
                              'description': [
                                  i for i, j in lexnlp_task_data.items()
                                  if j.get('locate')
                              ],
                              'result_links': [
                                  self.locator_result_links_map[i]
                                  for i, j in lexnlp_task_data.items()
                                  if j.get('locate')
                              ]
                          })
            except Exception as e:
                return self.json_response(str(e), status=400)

        response_text = ''
        if started_tasks:
            response_text += f'{TASK_STARTED_MESSAGE}<br /><br />'
            response_text += 'Started tasks: [{}].<br />'.format(
                ', '.join(started_tasks))
        if rejected_tasks:
            response_text += 'Some tasks were rejected (already started).<br />'
            response_text += 'Rejected Tasks: [{}]'.format(
                ', '.join(rejected_tasks))
        return self.json_response(response_text)
Esempio n. 7
0
 def disallow_start(self):
     return Task.disallow_start(self.task_name)