X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=qcg%2Fviews.py;h=c34af9bb06e1ce0c707f22d84baf2f27664ba28e;hb=cc336624de8fa227d247f0e71bd24f829802deb6;hp=ed9eed49b2471462569b08c39e9dd98004ea726c;hpb=4a6594602329d9b7689ca9d1fc82778d7c18b0be;p=qcg-portal.git diff --git a/qcg/views.py b/qcg/views.py index ed9eed4..c34af9b 100644 --- a/qcg/views.py +++ b/qcg/views.py @@ -12,6 +12,8 @@ from django.utils.timezone import UTC from django_openid_auth.views import make_consumer from openid.extensions import ax from pyqcg import QCG +from pyqcg.description import JobDescription +from pyqcg.utils import Credential from qcg.forms import FiltersForm, ColumnsForm, JobDescriptionForm, EnvFormSet from qcg.utils import update_user_data, paginator_context @@ -140,6 +142,7 @@ def job_details(request, job_id): return render(request, 'qcg/job.html', {'job': job}) +@login_required def task_details(request, job_id, task_id): task = get_object_or_404(request.user.tasks.select_related('job').prefetch_related('allocations'), job__job_id=job_id, task_id=task_id) @@ -147,5 +150,69 @@ def task_details(request, job_id, task_id): return render(request, 'qcg/task.html', {'task': task}) +@login_required def job_new(request): - return render(request, 'qcg/job_new.html', {'form': JobDescriptionForm(), 'env_formset': EnvFormSet()}) + if request.method == 'POST': + QCG.start() + + form = JobDescriptionForm(request.POST) + env_formset = EnvFormSet(request.POST) + + if form.is_valid() and env_formset.is_valid(): + print form.cleaned_data + + desc = JobDescription(Credential(request.session['proxy'])) + + application = form.cleaned_data['application'] + if '/' in application: + app, ver = application.split('1', 1) + desc.application.set_name(app) + desc.application.set_version(ver) + else: + desc.application.set_name(application) + + # TODO script + # TODO executable + desc.arguments = form.cleaned_data['arguments'] + desc.note = form.cleaned_data['note'] + desc.grant = form.cleaned_data['grant'] + desc.host_candidates = [(form.cleaned_data['host'], 'type?')] # FIXME WTF ?!? + desc.properties = form.cleaned_data['properties'] + # TODO queue + # TODO procs + # TODO nodes + desc.wall_time = timedelta(seconds=form.cleaned_data['wall_time']) # FIXME odpowiedni typ pola + desc.memory = form.cleaned_data['memory'] + desc.memory_per_slot = form.cleaned_data['memory_per_slot'] + desc.variable = [(env['name'], env['value']) for env in env_formset.cleaned_data if not env['DELETE']] + desc.modules = form.cleaned_data['modules'] + desc.natives = form.cleaned_data['native'] + desc.reservation = ("LOCAL", form.cleaned_data['reservation']) + # TODO input + # TODO stage_in + # TODO stage_out + # TODO monitoring + # TODO notify_type + # TODO notify_address + # TODO watch_output_type + # TODO watch_output_address + # TODO watch_output_pattern + # TODO preprocess_type + # TODO preprocess_cmd + # TODO preprocess_script + # TODO postprocess_type + # TODO postprocess_cmd + # TODO postprocess_script + desc.persistent = form.cleaned_data['persistent'] + + for prop in ('arguments', 'note', 'grant', 'host_candidates', 'wall_time', 'memory', + 'memory_per_slot', 'properties', 'variable', 'modules', 'natives', 'persistent', 'reservation'): + print prop, type(getattr(desc, prop)), repr(getattr(desc, prop)) + + print desc.xml_description + + else: + form = JobDescriptionForm() + env_formset = EnvFormSet() + + return render(request, 'qcg/job_new.html', {'form': form, 'env_formset': env_formset})