from django.shortcuts import render, get_object_or_404, redirect, resolve_url from markdown2 import markdown from datetime import datetime from . import models, forms from .decorators import check_allowed import logging logger = logging.getLogger(__name__) def forbidden(request): return render(request, 'interface/forbidden.html', {}) def register(request): request.ensemble_id = request.session.get('ensemble') registered = request.session.setdefault('registered', {}) if request.method == "POST": form = forms.CodeForm(request.POST) if form.is_valid(): data = form.cleaned_data; ensemble = models.Ensemble.objects.get(code=data['code'].replace('-', '')) if ensemble.passphrase == data['passphrase']: request.session['ensemble'] = ensemble.pk registered[ensemble.code] = ensemble.pk return redirect('my_projects') else: form = forms.CodeForm(initial=request.GET) current = models.Ensemble.objects.filter(pk__in=registered.values()) return render(request, 'interface/register.html', {'form': form, 'current': current}) @check_allowed def my_projects(request): ensemble = get_object_or_404(models.Ensemble, pk=request.ensemble_id) context = {'ensemble': ensemble} return render(request, 'interface/project_list.html', context) @check_allowed def project_page(request, project_id): project = get_object_or_404(models.Project, pk=project_id, ensemble_id=request.ensemble_id) context = {'project': project} return render(request, 'interface/project.html', context) @check_allowed def wiki_page(request, project_id, wiki_id): wiki = get_object_or_404(models.WikiPage, pk=wiki_id, project=project_id, project__ensemble=request.ensemble_id) context = {'project': wiki.project, 'wiki': wiki, 'wiki_html': markdown(wiki.markdown)} return render(request, 'interface/wiki.html', context) @check_allowed def submission(request, project_id): project = get_object_or_404(models.Project, pk=project_id, ensemble=request.ensemble_id) if request.method == 'POST': form = forms.SubmissionForm(request.POST) if form.is_valid(): s = form.save(commit=False) s.project_id = project_id s.save() data = form.cleaned_data request.session['name'] = data['name'] request.session['instrument'] = data['instrument'] redirect = request.build_absolute_uri(resolve_url('complete_submission', project_id=project.pk, submission_id=s.pk)) upload = project.presigned_post(s.generate_key(), fields={'success_action_redirect': redirect}, conditions=[["starts-with", "$success_action_redirect", ""]]) context = {'upload': upload, 'project': project, 'submission': s} return render(request, 'interface/upload.html', context) else: initial = { k: request.session.get(k) for k in ('name', 'instrument') } form = forms.SubmissionForm(initial=initial) context = {'project': project, 'form': form} return render(request, 'interface/submission.html', context) @check_allowed def cancel_submission(request, project_id, submission_id): project = get_object_or_404(models.Project, pk=project_id, ensemble=request.ensemble_id) submission = project.all_submissions.get(pk=submission_id) submission.delete() return redirect('project', project_id=project_id) @check_allowed def complete_submission(request, project_id, submission_id): project = get_object_or_404(models.Project, pk=project_id, ensemble=request.ensemble_id) s = project.all_submissions.get(pk=submission_id) s.complete = True s.key = request.GET['key'] s.save() return redirect('project', project_id=project_id)