summaryrefslogtreecommitdiffstats
path: root/core/view_surveys.py
diff options
context:
space:
mode:
authorPhilip Sargent <philip.sargent@klebos.com>2021-03-28 03:48:04 +0100
committerPhilip Sargent <philip.sargent@klebos.com>2021-03-28 03:48:04 +0100
commita4c892b696d2855d84df3848ad08a9a1db126bbe (patch)
treeb80f020a2663898c1f5985cc69d20f41840764dc /core/view_surveys.py
parentc4cd2178f7057a206590ada82af066e7d7e7ea0a (diff)
downloadtroggle-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.py107
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))