67 lines
2 KiB
Python
67 lines
2 KiB
Python
import json
|
|
|
|
from django.shortcuts import render
|
|
from django.http import HttpResponse, HttpResponseRedirect
|
|
from django.urls import reverse
|
|
|
|
from .models import GURPSCharacter
|
|
from .forms import UploadFileForm
|
|
|
|
def index(request):
|
|
characters = GURPSCharacter.objects.all()
|
|
context = {"characters":characters}
|
|
|
|
if request.method == "POST":
|
|
form = UploadFileForm(request.POST, request.FILES)
|
|
if form.is_valid():
|
|
handle_uploaded_file(request.FILES["file"])
|
|
return HttpResponseRedirect(reverse("index"))
|
|
else:
|
|
form = UploadFileForm()
|
|
|
|
context['form'] = form
|
|
return render(request, "characters/list.html", context)
|
|
|
|
def details(request, uuid):
|
|
character = GURPSCharacter.objects.get(uuid=uuid)
|
|
|
|
context = {"character": character}
|
|
#import bpdb;bpdb.set_trace()
|
|
|
|
return render(request, "characters/embedded.html", context)
|
|
|
|
|
|
def upload_file(request):
|
|
if request.method == "POST":
|
|
form = UploadFileForm(request.POST, request.FILES)
|
|
if form.is_valid():
|
|
handle_uploaded_file(request.FILES["file"])
|
|
return HttpResponseRedirect("/success/url/")
|
|
else:
|
|
form = UploadFileForm()
|
|
return render(request, "characters/upload.html", {"form": form})
|
|
|
|
def handle_uploaded_file(f):
|
|
import bpdb;bpdb.set_trace()
|
|
f.seek(0) # We read the file in the validator
|
|
data = json.loads(f.read())
|
|
|
|
uuid = data['id']
|
|
name = data["profile"]["name"]
|
|
|
|
|
|
try:
|
|
character = GURPSCharacter.objects.get(uuid=uuid)
|
|
character.details = data
|
|
character.name = name
|
|
character.save()
|
|
except GURPSCharacter.DoesNotExist:
|
|
character = GURPSCharacter(uuid=uuid, name=name, details = data)
|
|
character.save()
|
|
|
|
def download(irequest, uuid):
|
|
mime_type = "application/x-gcs-gcs"
|
|
character = GURPSCharacter.objects.get(uuid=uuid)
|
|
response = HttpResponse(json.dumps(character.details), content_type=mime_type)
|
|
response['Content-Disposition'] = "attachment; filename=%s.gcs" % character.name
|
|
return response
|