forked from expo/troggle
153 lines
5.5 KiB
Python
153 lines
5.5 KiB
Python
from django.conf import settings
|
|
#from . import fileAbstraction
|
|
from django.shortcuts import render_to_response
|
|
from django.http import HttpResponse, Http404
|
|
import os, stat
|
|
import re
|
|
from troggle.core.models_survex import SurvexScansFolder, SurvexScanSingle, SurvexBlock, TunnelFile
|
|
import parsers.surveys
|
|
import urllib.request, urllib.parse, urllib.error
|
|
|
|
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 getMimeType(extension):
|
|
try:
|
|
return {"txt": "text/plain",
|
|
"html": "text/html",
|
|
}[extension]
|
|
except:
|
|
print("unknown file type")
|
|
return "text/plain"
|
|
|
|
def upload(request, path):
|
|
pass
|
|
|
|
def download(request, path):
|
|
#try:
|
|
|
|
return HttpResponse(fa_readFile(path), content_type=getMimeType(path.split(".")[-1]))
|
|
#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("\\", "/")
|
|
|
|
def surveyscansfolder(request, path):
|
|
#print [ s.walletname for s in SurvexScansFolder.objects.all() ]
|
|
survexscansfolder = SurvexScansFolder.objects.get(walletname=urllib.parse.unquote(path))
|
|
return render_to_response('survexscansfolder.html', { 'survexscansfolder':survexscansfolder, 'settings': settings })
|
|
|
|
def surveyscansingle(request, path, file):
|
|
survexscansfolder = SurvexScansFolder.objects.get(walletname=urllib.parse.unquote(path))
|
|
survexscansingle = SurvexScanSingle.objects.get(survexscansfolder=survexscansfolder, name=file)
|
|
return HttpResponse(content=open(survexscansingle.ffile,"rb"), content_type=getMimeType(path.split(".")[-1]))
|
|
#return render_to_response('survexscansfolder.html', { 'survexscansfolder':survexscansfolder, 'settings': settings })
|
|
|
|
def expofilessingle(request, filepath):
|
|
fn=urllib.parse.unquote(filepath)
|
|
return HttpResponse(content=open(settings.EXPOFILES+fn,"rb"))
|
|
|
|
def cssfilessingle(request, filepath):
|
|
fn=urllib.parse.unquote(filepath)
|
|
return HttpResponse(content=open(settings.MEDIA_ROOT+fn,"rb"),content_type="text/css")
|
|
|
|
def surveyscansfolders(request):
|
|
survexscansfolders = SurvexScansFolder.objects.all()
|
|
return render_to_response('survexscansfolders.html', { 'survexscansfolders':survexscansfolders, 'settings': settings })
|
|
|
|
|
|
def tunneldata(request):
|
|
tunnelfiles = TunnelFile.objects.all()
|
|
return render_to_response('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 tunnelfileupload(request, path):
|
|
tunnelfile = TunnelFile.objects.get(tunnelpath=urllib.parse.unquote(path))
|
|
tfile = os.path.join(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))
|
|
|
|
|
|
assert len(list(request.FILES.values())) == 1, "only one file to upload"
|
|
|
|
uploadedfile = list(request.FILES.values())[0]
|
|
|
|
if uploadedfile.field_name != "sketch":
|
|
return HttpResponse(content="Error: non-sketch file uploaded", content_type="text/plain")
|
|
if uploadedfile.content_type != "text/plain":
|
|
return HttpResponse(content="Error: non-plain content type", content_type="text/plain")
|
|
|
|
# could use this to add new files
|
|
if os.path.split(path)[1] != uploadedfile.name:
|
|
return HttpResponse(content="Error: name disagrees", content_type="text/plain")
|
|
|
|
orgsize = tunnelfile.filesize # = os.stat(tfile)[stat.ST_SIZE]
|
|
|
|
ttext = uploadedfile.read()
|
|
|
|
# could check that the user and projects agree here
|
|
|
|
fout = open(tfile, "w")
|
|
fout.write(ttext)
|
|
fout.close()
|
|
|
|
# redo its settings of
|
|
parsers.surveys.SetTunnelfileInfo(tunnelfile)
|
|
tunnelfile.save()
|
|
|
|
uploadedfile.close()
|
|
message = "File size %d overwritten with size %d" % (orgsize, tunnelfile.filesize)
|
|
return HttpResponse(content=message, content_type="text/plain")
|
|
|
|
|
|
|
|
|