- QCG.start()
-
- form = JobDescriptionForm(request.POST)
- env_formset = EnvFormSet(request.POST)
-
- if form.is_valid() and env_formset.is_valid():
- print form.cleaned_data
- print env_formset.cleaned_data
-
- desc = JobDescription(Credential(request.session['proxy']))
-
- direct_map = ('arguments', 'note', 'grant', 'hosts', 'properties', 'queue', 'procs', 'wall_time', 'memory',
- 'memory_per_slot', 'modules', 'native', 'notify', 'preprocess', 'postprocess', 'persistent')
-
- for name in direct_map:
- if form.cleaned_data[name]:
- setattr(desc, name, form.cleaned_data[name])
-
- if form.cleaned_data['application']:
- desc.set_application(*form.cleaned_data['application'])
- if form.cleaned_data['nodes']:
- desc.set_nodes(*form.cleaned_data['nodes'])
- if form.cleaned_data['reservation']:
- desc.set_reservation(form.cleaned_data['reservation'])
- if form.cleaned_data['watch_output']:
- desc.set_watch_output(form.cleaned_data['watch_output'], form.cleaned_data['watch_output_pattern'])
- desc.env_variables += [(env['name'], env['value'])
- for env in env_formset.cleaned_data if env and not env['DELETE']]
- # TODO script
- # TODO executable
- # TODO input
- # TODO stage_in
- # TODO stage_out
- # TODO monitoring
-
- for prop in direct_map + ('application', 'nodes', 'env_variables', 'reservation', 'watch_output'):
- print prop, type(getattr(desc, prop)), repr(getattr(desc, prop))
-
- print desc.xml_description
-
- print repr(form.errors)
- print repr(env_formset.errors)
+ form = JobDescriptionForm(request.POST, initial=form_data)
+ env_formset = EnvFormSet(request.POST, initial=env_formset_data)
+ template_form = JobTemplateForm(request.POST, prefix='template', instance=template)
+
+ if form.is_valid() and env_formset.is_valid() and (not save_template or template_form.is_valid()):
+ params = form.cleaned_data
+ params['env_variables'] = [(env['name'], env['value'])
+ for env in env_formset.cleaned_data if env and not env['DELETE']]
+
+ # Generowanie pliku inputowego
+ md_input=generate_md_inputfile(params)
+ url=os.path.splitext(params['pdb_file'])[0]+'_MD_genarated.inp'
+ params['master_file']=url
+ params['stage_in'].append(params['pdb_file'])
+ # Upload
+ ftp = FTPOperation(request.session['proxy'])
+ ftp.put(url)
+ for chunk in chunks('\n'.join([str(i) for i in md_input] ), 4096):
+ ftp.stream.put(chunk)
+ ftp.stream.put(None)
+ ftp.wait()
+
+
+ params['persistent'] = True
+ # Debugging parametrów
+ #pprint(params)
+
+ job_desc = to_job_desc(params, request.session['proxy'])
+
+ if save_template:
+ template = template_form.save(commit=False)
+
+ template.owner = request.user
+ template.description = job_desc.xml_description
+ template.save()
+
+ return redirect(template)
+
+ job = job_desc.submit()
+
+ messages.success(request,
+ format_html('<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> '
+ u'Zlecono zadanie <em>{}</em>.', job.job_id))
+
+ return redirect('jobs')
+ else:
+ form = JobDescriptionForm(initial=form_data)
+ env_formset = EnvFormSet(initial=env_formset_data)
+ template_form = JobTemplateForm(prefix='template', instance=template)
+
+ errors = form.errors or (env_formset.is_bound and not env_formset.is_valid) or (
+ save_template and template_form.errors)
+
+ return render(request, 'qcg/job_submit.html', {'form': form, 'env_formset': env_formset, 'errors': errors,
+ 'template_form': template_form, 'template': template})
+
+
+@require_POST
+@login_required
+def job_cancel(request, job_id):
+ return obj_cancel(request, get_object_or_404(request.user.jobs, job_id=job_id))
+
+
+@require_POST
+@login_required
+def task_cancel(request, job_id, task_id):
+ return obj_cancel(request, get_object_or_404(request.user.tasks, job__job_id=job_id, task_id=task_id))
+
+
+def obj_cancel(request, obj):
+ try:
+ cancel(obj, request.session['proxy'])
+ except PyqcgException as e:
+ messages.error(request, format_html('<span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span> {}',
+ e.message))