diff options
-rw-r--r-- | core/TESTS/tests.py | 8 | ||||
-rw-r--r-- | core/views/surveys.py | 51 | ||||
-rw-r--r-- | templates/base.html | 2 | ||||
-rw-r--r-- | templates/dwgfiles.html (renamed from templates/tunnelfiles.html) | 0 | ||||
-rw-r--r-- | templates/expowebbase.html | 2 | ||||
-rw-r--r-- | urls.py | 21 |
6 files changed, 53 insertions, 31 deletions
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"<h1>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 @@ <a href="/survexfile/">Survex</a> | <a href="{% url "survexcaveslist" %}">All Survex</a> | <a href="{% url "surveyscansfolders" %}">Scans</a> | - <a href="{% url "tunneldata" %}">Drawing files</a> | + <a href="{% url "dwgdata" %}">Drawings</a> | <a href="/1623/290/290.html">290 (FGH)</a> | <a href="/1623/291/291">291 (GSH)</a> | <a href="/1623/204/204.html">204 (Steinbrucken)</a> | diff --git a/templates/tunnelfiles.html b/templates/dwgfiles.html index 23fa314..23fa314 100644 --- a/templates/tunnelfiles.html +++ b/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 @@ <ul> <li><a href="{% url "survexcaveslist" %}">All Survex</a></li> <li><a href="{% url "surveyscansfolders" %}">Scans</a></li> -<li><a href="{% url "tunneldata" %}">Tunneldata</a></li> +<li><a href="{% url "dwgdata" %}">Drawings</a></li> <li><a href="{% url "survexcavessingle" "caves-1623/290/290.svx" %}">290</a></li> <li><a href="{% url "survexcavessingle" "caves-1623/291/291.svx" %}">291</a></li> <li><a href="{% url "survexcavessingle" "caves-1626/359/359.svx" %}">359</a></li> @@ -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_cave>.*)$', survex.survexcavesingle, name="survexcavessingle"), - re_path(r'^survey_scans/$', surveys.surveyscansfolders, name="surveyscansfolders"), - re_path(r'^survey_scans/(?P<path>[^/]+)/$', surveys.surveyscansfolder, name="surveyscansfolder"), + re_path(r'^survey_scans/$', surveyscansfolders, name="surveyscansfolders"), + re_path(r'^survey_scans/(?P<path>[^/]+)/$', surveyscansfolder, name="surveyscansfolder"), re_path(r'^survey_scans/(?P<path>[^/]+)/(?P<file>[^/]+)$', - 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<path>.+?\.xml)$', surveys.dwgfilesingle, name="dwgfilesingle"), - re_path(r'^tunneldataraw/(?P<path>.+?\.th)$', surveys.dwgfilesingle, name="dwgfilesingle"), - re_path(r'^tunneldataraw/(?P<path>.+?\.th2)$', surveys.dwgfilesingle, name="dwgfilesingle"), -# re_path(r'^tunneldatainfo/(?P<path>.+?\.xml)$', surveys.tunnelfileinfo, name="tunnelfileinfo"), # parses tunnel for info - re_path(r'^tunneldataraw/(?P<path>.+?\.xml)/upload$', surveys.tunnelfileupload, name="tunnelfileupload"), + re_path(r'^dwgdata/$', dwgdata, name="dwgdata"), + re_path(r'^dwgdataraw/(?P<path>.+?\.xml)$', dwgfilesingle, name="dwgfilesingle"), + re_path(r'^dwgdataraw/(?P<path>.+?\.th)$', dwgfilesingle, name="dwgfilesingle"), + re_path(r'^dwgdataraw/(?P<path>.+?\.th2)$', dwgfilesingle, name="dwgfilesingle"), +# re_path(r'^dwgdatainfo/(?P<path>.+?\.xml)$', dwgfileinfo, name="dwgfileinfo"), # parses tunnel for info + re_path(r'^dwgdataraw/(?P<path>.+?\.xml)/upload$', dwgfileupload, name="dwgfileupload"), # Not working # QMs pages - must precede other /caves pages |