diff --git a/core/TESTS/tests.py b/core/TESTS/tests.py
index aed66bb..4d22596 100644
--- a/core/TESTS/tests.py
+++ b/core/TESTS/tests.py
@@ -345,9 +345,9 @@ class PageTests(TestCase):
phmatch = re.search(ph, content)
self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph +"'")
- def test_page_tunneldataraw_empty(self):
+ def test_page_dwgdataraw_empty(self):
# this gets an empty page as the database has not been loaded
- response = self.client.get('/tunneldataraw/')
+ response = self.client.get('/dwgdataraw/')
self.assertEqual(response.status_code, 200)
content = response.content.decode()
ph = r"
Directory not found"
@@ -387,9 +387,9 @@ class PageTests(TestCase):
# self.assertEqual(response.status_code, 200)
# self.assertEqual(len(response.content), 823304) # fails, but is working manually!
- # def test_page_tunneldataraw_107sketch_xml(self):
+ # def test_page_dwgdataraw_107sketch_xml(self):
# # this has an error as the database has not been loaded yet in the tests
- # response = self.client.get('/tunneldataraw/107/107sketch-v2.xml')
+ # response = self.client.get('/dwgdataraw/107/107sketch-v2.xml')
# if response.status_code != 200:
# self.assertEqual(response.status_code, 302)
# if response.status_code != 302:
diff --git a/core/views/surveys.py b/core/views/surveys.py
index 22be7ec..2737a05 100644
--- a/core/views/surveys.py
+++ b/core/views/surveys.py
@@ -16,22 +16,30 @@ import parsers.surveys
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.
- need to check if inavlid query string is invalid, or produces multiple replies
- and render a user-friendly error page.
+need to check if inavlid query string is invalid, or produces multiple replies
+and render a user-friendly error page.
'''
def surveyscansfolder(request, path):
#print [ s.walletname for s in ScansFolder.objects.all() ]
- scansfolder = ScansFolder.objects.get(walletname=urlunquote(path)) # need to check if inavlid query string and produce friendly error
- return render(request, 'scansfolder.html', { 'scansfolder':scansfolder, 'settings': settings })
+ try:
+ scansfolder = ScansFolder.objects.get(walletname=urlunquote(path))
+ return render(request, 'scansfolder.html', { 'scansfolder':scansfolder, 'settings': settings })
+ except:
+ message = f'Scan folder error or not found \'{path}\' .'
+ return render(request, 'errors/generic.html', {'message': message})
def surveyscansingle(request, path, file):
- '''sends a single binary file to the user,
+ '''sends a single binary file to the user for display - browser decides how using mimetype
'''
- scansfolder = ScansFolder.objects.get(walletname=urlunquote(path)) # need to check if inavlid query string and produce friendly error
- singlescan = SingleScan.objects.get(scansfolder=scansfolder, name=file)
- # print(" - surveyscansingle {}:{}:{}:".format(path, file, getmimetype(file)))
- return HttpResponse(content=open(singlescan.ffile,"rb"), content_type=getmimetype(file)) # any type of image
+ try:
+ scansfolder = ScansFolder.objects.get(walletname=urlunquote(path))
+ singlescan = SingleScan.objects.get(scansfolder=scansfolder, name=file)
+ # print(" - surveyscansingle {}:{}:{}:".format(path, file, getmimetype(file)))
+ return HttpResponse(content=open(singlescan.ffile,"rb"), content_type=getmimetype(file)) # any type of image
+ except:
+ message = f'Scan folder or scan item error or not found \'{path}\' and \'{file}\'.'
+ return render(request, 'errors/generic.html', {'message': message})
def surveyscansfolders(request):
@@ -39,16 +47,23 @@ def surveyscansfolders(request):
return render(request, 'manyscansfolders.html', { 'manyscansfolders':manyscansfolders, 'settings': settings })
-def tunneldata(request):
+def dwgdata(request):
+ '''Report on all the drawing files in the system. These were loaded by parsing the entire directory tree
+ '''
tunnelfiles = TunnelFile.objects.all()
- return render(request, 'tunnelfiles.html', { 'tunnelfiles':tunnelfiles, 'settings': settings })
+ return render(request, 'dwgfiles.html', { 'tunnelfiles':tunnelfiles, 'settings': settings })
def dwgfilesingle(request, path):
'''sends a single binary file to the user, We should have a renderer that syntax-colours this Tunnel xml
but it might be a Therion file
'''
- tunnelfile = TunnelFile.objects.get(tunnelpath=urlunquote(path)) # need to check if invalid query string and produce friendly error
+ try:
+ tunnelfile = TunnelFile.objects.get(tunnelpath=urlunquote(path))
+ except:
+ message = f'Drawing file error or not found \'{path}\' .'
+ return render(request, 'errors/generic.html', {'message': message})
+
tfile = Path(settings.TUNNEL_DATA, tunnelfile.tunnelpath)
try: # for display not download
return HttpResponse(content=open(tfile, errors='strict'), content_type="text/xhtml")
@@ -63,12 +78,18 @@ def dwgfilesingle(request, path):
return HttpResponse(content="Unable to understand the encoding for this file: not UTF-8 nor iso-8859-1, or some other read error happened.")
-def tunnelfileupload(request, path):
- tunnelfile = TunnelFile.objects.get(tunnelpath=urlunquote(path)) # need to check if inavlid query string and produce friendly error
+def dwgfileupload(request, path):
+ '''uploads a drawing file, but where is the Form? This just processes POST info. Apparently unfinished?
+ '''
+ try:
+ tunnelfile = TunnelFile.objects.get(tunnelpath=urlunquote(path)) # need to check if inavlid query string and produce friendly error
+ except:
+ message = f'Drawing file error or not found \'{path}\' .'
+ return render(request, 'errors/generic.html', {'message': message})
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))
+ print(project, user, tunnelversion)
if not (len(list(request.FILES.values())) == 1): # "only one file to upload"
diff --git a/templates/base.html b/templates/base.html
index 31523d3..64ce3c6 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -32,7 +32,7 @@
Survex |
All Survex |
Scans |
- Drawing files |
+ Drawings |
290 (FGH) |
291 (GSH) |
204 (Steinbrucken) |
diff --git a/templates/tunnelfiles.html b/templates/dwgfiles.html
similarity index 100%
rename from templates/tunnelfiles.html
rename to templates/dwgfiles.html
diff --git a/templates/expowebbase.html b/templates/expowebbase.html
index 6cdace4..8d762cd 100644
--- a/templates/expowebbase.html
+++ b/templates/expowebbase.html
@@ -18,7 +18,7 @@
- All Survex
- Scans
-- Tunneldata
+- Drawings
- 290
- 291
- 359
diff --git a/urls.py b/urls.py
index f7c1b90..994b8ab 100644
--- a/urls.py
+++ b/urls.py
@@ -7,7 +7,8 @@ from django.contrib import admin
from django.contrib import auth
from django.urls import reverse, resolve
-from troggle.core.views import surveys, other, caves, statistics, survex
+from troggle.core.views import other, caves, statistics, survex
+from troggle.core.views.surveys import surveyscansingle, surveyscansfolder, surveyscansfolders, dwgdata, dwgfilesingle, dwgfileupload
from troggle.core.views.other import troggle404, frontpage
from troggle.core.views.caves import ent, cavepage
from troggle.core.views.logbooks import get_logbook_entries, logbookentry, logbookSearch
@@ -135,18 +136,18 @@ trogglepatterns = [
re_path(r'^survexfile/caves$', survex.survexcaveslist, name="survexcaveslist"), # auto slash not working
re_path(r'^survexfile/(?P.*)$', survex.survexcavesingle, name="survexcavessingle"),
- re_path(r'^survey_scans/$', surveys.surveyscansfolders, name="surveyscansfolders"),
- re_path(r'^survey_scans/(?P[^/]+)/$', surveys.surveyscansfolder, name="surveyscansfolder"),
+ re_path(r'^survey_scans/$', surveyscansfolders, name="surveyscansfolders"),
+ re_path(r'^survey_scans/(?P[^/]+)/$', surveyscansfolder, name="surveyscansfolder"),
re_path(r'^survey_scans/(?P[^/]+)/(?P[^/]+)$',
- surveys.surveyscansingle, name="surveyscansingle"),
+ surveyscansingle, name="surveyscansingle"),
# The tunnel and therion drawings files pages
- re_path(r'^tunneldata/$', surveys.tunneldata, name="tunneldata"),
- re_path(r'^tunneldataraw/(?P.+?\.xml)$', surveys.dwgfilesingle, name="dwgfilesingle"),
- re_path(r'^tunneldataraw/(?P.+?\.th)$', surveys.dwgfilesingle, name="dwgfilesingle"),
- re_path(r'^tunneldataraw/(?P.+?\.th2)$', surveys.dwgfilesingle, name="dwgfilesingle"),
-# re_path(r'^tunneldatainfo/(?P.+?\.xml)$', surveys.tunnelfileinfo, name="tunnelfileinfo"), # parses tunnel for info
- re_path(r'^tunneldataraw/(?P.+?\.xml)/upload$', surveys.tunnelfileupload, name="tunnelfileupload"),
+ re_path(r'^dwgdata/$', dwgdata, name="dwgdata"),
+ re_path(r'^dwgdataraw/(?P.+?\.xml)$', dwgfilesingle, name="dwgfilesingle"),
+ re_path(r'^dwgdataraw/(?P.+?\.th)$', dwgfilesingle, name="dwgfilesingle"),
+ re_path(r'^dwgdataraw/(?P.+?\.th2)$', dwgfilesingle, name="dwgfilesingle"),
+# re_path(r'^dwgdatainfo/(?P.+?\.xml)$', dwgfileinfo, name="dwgfileinfo"), # parses tunnel for info
+ re_path(r'^dwgdataraw/(?P.+?\.xml)/upload$', dwgfileupload, name="dwgfileupload"), # Not working
# QMs pages - must precede other /caves pages