diff options
author | Philip Sargent <philip.sargent@klebos.com> | 2021-03-28 03:48:04 +0100 |
---|---|---|
committer | Philip Sargent <philip.sargent@klebos.com> | 2021-03-28 03:48:04 +0100 |
commit | a4c892b696d2855d84df3848ad08a9a1db126bbe (patch) | |
tree | b80f020a2663898c1f5985cc69d20f41840764dc /core/view_surveys.py | |
parent | c4cd2178f7057a206590ada82af066e7d7e7ea0a (diff) | |
download | troggle-a4c892b696d2855d84df3848ad08a9a1db126bbe.tar.gz troggle-a4c892b696d2855d84df3848ad08a9a1db126bbe.tar.bz2 troggle-a4c892b696d2855d84df3848ad08a9a1db126bbe.zip |
fixed serving expofiles from test server
Diffstat (limited to 'core/view_surveys.py')
-rw-r--r-- | core/view_surveys.py | 107 |
1 files changed, 25 insertions, 82 deletions
diff --git a/core/view_surveys.py b/core/view_surveys.py index dae6f31..a70fa3d 100644 --- a/core/view_surveys.py +++ b/core/view_surveys.py @@ -1,113 +1,56 @@ import os, stat import re -import urllib.request, urllib.parse, urllib.error +from pathlib import Path +from urllib.parse import urljoin, unquote as urlunquote +from urllib.request import urlopen from django.conf import settings -from django.shortcuts import render_to_response +from django.shortcuts import render from django.http import HttpResponse, Http404 from troggle.core.models_survex import ScansFolder, SingleScan, SurvexBlock, TunnelFile from troggle.flatpages import views as flatviews import parsers.surveys - - -def fa_readFile(*path): - try: - f = open(os.path.join(settings.FILES, *path)) - except: - f = urllib.request.urlopen(settings.FILES+"download/") - return f.read() - -def upload(request, path): - pass - -def download(request, path): - #try: - - return HttpResponse(fa_readFile(path), content_type=flatviews.getmimetype(path)) - #except: - # raise Http404 - -def UniqueFile(fname): - while True: - if not os.path.exists(fname): - break - mname = re.match("(.*?)(?:-(\d+))?\.(png|jpg|jpeg)$(?i)", fname) - if mname: - fname = "%s-%d.%s" % (mname.group(1), int(mname.group(2) or "0") + 1, mname.group(3)) - return fname - - -# join it all up and then split them off for the directories that don't exist -# anyway, this mkdir doesn't work -def SaveImageInDir(name, imgdir, project, fdata, bbinary): - print(("hihihihi", fdata, settings.SURVEYS)) - fimgdir = os.path.join(settings.SURVEYS, imgdir) - if not os.path.isdir(fimgdir): - print("*** Making directory", fimgdir) - os.path.mkdir(fimgdir) - fprojdir = os.path.join(fimgdir, project) - if not os.path.isdir(fprojdir): - print("*** Making directory", fprojdir) - os.path.mkdir(fprojdir) - print("hhh") - - fname = os.path.join(fprojdir, name) - print(fname, "fff") - fname = UniqueFile(fname) - - p2, p1 = os.path.split(fname) - p3, p2 = os.path.split(p2) - p4, p3 = os.path.split(p3) - res = os.path.join(p3, p2, p1) - - print("saving file", fname) - fout = open(fname, (bbinary and "wb" or "w")) - fout.write(fdata.read()) - fout.close() - res = os.path.join(imgdir, name) - return res.replace("\\", "/") +'''Some of these views serve files as binary blobs, and simply set the mime type based on the file extension, +as does the urls.py dispatcher which sends them here. Here they should actually have the filetype checked +by looking inside the file before being served. +''' def surveyscansfolder(request, path): #print [ s.walletname for s in ScansFolder.objects.all() ] - scansfolder = ScansFolder.objects.get(walletname=urllib.parse.unquote(path)) - return render_to_response('scansfolder.html', { 'scansfolder':scansfolder, 'settings': settings }) + scansfolder = ScansFolder.objects.get(walletname=urlunquote(path)) + return render(request, 'scansfolder.html', { 'scansfolder':scansfolder, 'settings': settings }) def surveyscansingle(request, path, file): - scansfolder = ScansFolder.objects.get(walletname=urllib.parse.unquote(path)) + '''sends a single binary file to the user, + ''' + scansfolder = ScansFolder.objects.get(walletname=urlunquote(path)) singlescan = SingleScan.objects.get(scansfolder=scansfolder, name=file) - print("SSS {} {} :{}:".format(path, file, flatviews.getmimetype(file))) - return HttpResponse(content=open(singlescan.ffile,"rb"), content_type=flatviews.getmimetype(file)) - #return render_to_response('scansfolder.html', { 'scansfolder':scansfolder, 'settings': settings }) - -def expofilessingle(request, filepath): - # defaults to content_type="text/pain" needs fixing for PDFs - fn=urllib.parse.unquote(filepath) - return HttpResponse(content=open(settings.EXPOFILES+fn,"rb")) + # print(" - surveyscansingle {}:{}:{}:".format(path, file, flatviews.getmimetype(file))) + return HttpResponse(content=open(singlescan.ffile,"rb"), content_type=flatviews.getmimetype(file)) # any type of image -def cssfilessingle(request, filepath): - fn=urllib.parse.unquote(filepath) - return HttpResponse(content=open(settings.MEDIA_ROOT+fn,"r"),content_type="text/css") def surveyscansfolders(request): manyscansfolders = ScansFolder.objects.all() - return render_to_response('manyscansfolders.html', { 'manyscansfolders':manyscansfolders, 'settings': settings }) + return render(request, 'manyscansfolders.html', { 'manyscansfolders':manyscansfolders, 'settings': settings }) def tunneldata(request): tunnelfiles = TunnelFile.objects.all() - return render_to_response('tunnelfiles.html', { 'tunnelfiles':tunnelfiles, 'settings': settings }) + return render(request, 'tunnelfiles.html', { 'tunnelfiles':tunnelfiles, 'settings': settings }) -def tunnelfile(request, path): - tunnelfile = TunnelFile.objects.get(tunnelpath=urllib.parse.unquote(path)) - tfile = os.path.join(settings.TUNNEL_DATA, tunnelfile.tunnelpath) - return HttpResponse(content=open(tfile), content_type="text/plain") +def tunnelfilesingle(request, path): + '''sends a single binary file to the user, We should have a renderer that syntax-colours this Tunnel xml + ''' + tunnelfile = TunnelFile.objects.get(tunnelpath=urlunquote(path)) + tfile = Path(settings.TUNNEL_DATA, tunnelfile.tunnelpath) + return HttpResponse(content=open(tfile), content_type="text/xhtml") # for display not download def tunnelfileupload(request, path): - tunnelfile = TunnelFile.objects.get(tunnelpath=urllib.parse.unquote(path)) - tfile = os.path.join(settings.TUNNEL_DATA, tunnelfile.tunnelpath) + tunnelfile = TunnelFile.objects.get(tunnelpath=urlunquote(path)) + tfile = Path(settings.TUNNEL_DATA, tunnelfile.tunnelpath) project, user, password, tunnelversion = request.POST["tunnelproject"], request.POST["tunneluser"], request.POST["tunnelpassword"], request.POST["tunnelversion"] print((project, user, tunnelversion)) |