from django.http import HttpResponse
from django.shortcuts import render
from django.core.exceptions import RequestDataTooBig
from django.views.decorators.csrf import csrf_exempt
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django import forms
from .models import Activity
from .services import UPLOAD_MAX_SIZE, create_activity
from .tasks import process_update_activity
from . import graph
import datetime
import hashlib
import logging
logger = logging.getLogger(__name__)
class UploadFileForm(forms.Form):
title = forms.CharField(max_length=1024, required=False)
content = forms.FileField()
@login_required
def index(request):
return render(request, 'upload.html')
@login_required
def profile(request):
return render(request, 'profile.html')
@login_required
def health(request):
return render(request, 'health.html')
def schedule(request):
unprocessed = Activity.objects.filter(status='PENDING').all()[:1000]
for act in unprocessed:
process_update_activity.delay(act.id)
return HttpResponse('done')
@login_required
def overview(request):
user_activities = request.user.activity_set.order_by('-start_date')
context = {'activities': user_activities}
return render(request, 'overview.html', context)
@login_required
def summary(request, activity_id):
act = request.user.activity_set.get(id=activity_id)
context = {'act': act}
return render(request, 'details.html', context)
@login_required
def graph_hr_zones(request, activity_id):
act = request.user.activity_set.get(id=activity_id)
return HttpResponse(graph.hr_zones(act), content_type='image/svg+xml')
@login_required
def upload(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
uploaded = request.FILES['content']
if uploaded.size > UPLOAD_MAX_SIZE:
raise RequestDataTooBig()
filename = uploaded.name
body = b''
for chunk in uploaded.chunks():
body += chunk
title = request.POST['title']
act = create_activity(request.user, title, body)
act.orig_upload.save()
act.save()
process_update_activity.delay(act.id)
return HttpResponse('upload OK')
else:
print(f'form invalid: {form.errors}')
else:
return render(request, 'upload.html')