summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/views_survex.py80
-rw-r--r--flatpages/views.py10
-rw-r--r--parsers/survex.py4
-rw-r--r--settings.py2
-rw-r--r--templates/svxfilecavelist.html4
5 files changed, 69 insertions, 31 deletions
diff --git a/core/views_survex.py b/core/views_survex.py
index 76b4851..31b9583 100644
--- a/core/views_survex.py
+++ b/core/views_survex.py
@@ -2,15 +2,17 @@ import re
import os
import datetime
import difflib
+from pathlib import Path
from django import forms
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render_to_response, render
#from django.core.context_processors import csrf
from django.template.context_processors import csrf
-from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponse, Http404
+from django.core.exceptions import ObjectDoesNotExist
+
import troggle.settings as settings
import parsers.survex
from troggle.core.models import Expedition, Person, PersonExpedition
@@ -18,6 +20,7 @@ from troggle.core.models_survex import SurvexBlock, SurvexPersonRole, SurvexFile
from troggle.core.models_caves import Cave, PersonTrip, LogbookEntry
from troggle.parsers.people import GetPersonExpeditionNameLookup
+survexdatasetpath = Path(settings.SURVEX_DATA)
survextemplatefile = """; *** THIS IS A TEMPLATE FILE NOT WHAT YOU MIGHT BE EXPECTING ***
@@ -99,8 +102,9 @@ class SvxForm(forms.Form):
code = forms.CharField(widget=forms.Textarea(attrs={"cols":150, "rows":36}))
def GetDiscCode(self):
- fname = settings.SURVEX_DATA + self.data['filename'] + ".svx"
+ fname = survexdatasetpath / (self.data['filename'] + ".svx")
if not os.path.isfile(fname):
+ print(">>> >>> WARNING - svx file not found, showiung TEMPLATE SVX",fname, flush=True)
return survextemplatefile
fin = open(fname, "rt",encoding='utf8',newline='')
svxtext = fin.read()
@@ -114,7 +118,7 @@ class SvxForm(forms.Form):
return difflist
def SaveCode(self, rcode):
- fname = settings.SURVEX_DATA + self.data['filename'] + ".svx"
+ fname = survexdatasetpath / (self.data['filename'] + ".svx")
if not os.path.isfile(fname):
if re.search(r"\[|\]", rcode):
return "Error: remove all []s from the text. They are only template guidance."
@@ -129,7 +133,7 @@ class SvxForm(forms.Form):
fout = open(fname, "wt", encoding='utf8',newline='\n')
except FileNotFoundError:
pth = os.path.dirname(self.data['filename'])
- newpath = os.path.join(settings.SURVEX_DATA, pth)
+ newpath = survexdatasetpath / pth
if not os.path.exists(newpath):
os.makedirs(newpath)
fout = open(fname, "wt", encoding='utf8',newline='\n')
@@ -141,11 +145,13 @@ class SvxForm(forms.Form):
def Process(self):
print("....\n\n\n....Processing\n\n\n")
+ froox = os.fspath(survexdatasetpath / (self.data['filename'] + ".svx"))
+ froog = os.fspath(survexdatasetpath / (self.data['filename'] + ".log"))
cwd = os.getcwd()
- os.chdir(os.path.split(settings.SURVEX_DATA + self.data['filename'])[0])
- os.system(settings.CAVERN + " --log " + settings.SURVEX_DATA + self.data['filename'] + ".svx")
+ os.chdir(os.path.split(froox)[0])
+ os.system(settings.CAVERN + " --log " + froox )
os.chdir(cwd)
- fin = open(settings.SURVEX_DATA + self.data['filename'] + ".log", "rt",encoding='utf8')
+ fin = open(froog, "rt",encoding='utf8')
log = fin.read()
fin.close()
log = re.sub("(?s).*?(Survey contains)", "\\1", log)
@@ -206,7 +212,7 @@ def svx(request, survex_file):
svxincludes = re.findall(r'\*include\s+(\S+)(?i)', form.data['code'] or "")
vmap = {'settings': settings,
- 'has_3d': os.path.isfile(settings.SURVEX_DATA + survex_file + ".3d"),
+ 'has_3d': os.path.isfile(survexdatasetpath / survex_file / ".3d"),
'title': survex_file,
'svxincludes': svxincludes,
'difflist': difflist,
@@ -218,37 +224,37 @@ def svx(request, survex_file):
return render_to_response('svxfile.html', vmap)
def svxraw(request, survex_file):
- svx = open(os.path.join(settings.SURVEX_DATA, survex_file+".svx"), "rt",encoding='utf8')
+ svx = open(os.path.join(survexdatasetpath / survex_file / ".svx"), "rt",encoding='utf8')
return HttpResponse(svx, content_type="text")
# The cavern running function
def process(survex_file):
cwd = os.getcwd()
- os.chdir(os.path.split(settings.SURVEX_DATA + survex_file)[0])
- os.system(settings.CAVERN + " --log " + settings.SURVEX_DATA + survex_file + ".svx")
+ os.chdir(os.path.split(os.fspath(survexdatasetpath / survex_file))[0])
+ os.system(settings.CAVERN + " --log " + survexdatasetpath / survex_file / ".svx")
os.chdir(cwd)
def threed(request, survex_file):
process(survex_file)
try:
- threed = open(settings.SURVEX_DATA + survex_file + ".3d", "rt",encoding='utf8')
+ threed = open(survexdatasetpath / survex_file / ".3d", "rt",encoding='utf8')
return HttpResponse(threed, content_type="model/3d")
except:
- log = open(settings.SURVEX_DATA + survex_file + ".log", "rt",encoding='utf8')
+ log = open(survexdatasetpath / survex_file / ".log", "rt",encoding='utf8')
return HttpResponse(log, content_type="text")
def log(request, survex_file):
process(survex_file)
- log = open(settings.SURVEX_DATA + survex_file + ".log", "rt",encoding='utf8')
+ log = open(survexdatasetpath / survex_file / ".log", "rt",encoding='utf8')
return HttpResponse(log, content_type="text")
def err(request, survex_file):
process(survex_file)
- err = open(settings.SURVEX_DATA + survex_file + ".err", "rt",encoding='utf8')
+ err = open(survexdatasetpath / survex_file / ".err", "rt",encoding='utf8')
return HttpResponse(err, content_type="text")
@@ -292,12 +298,36 @@ def identifycavedircontents(gcavedir):
subsvx.insert(0, primesvx)
return subdirs, subsvx
+def check_cave_registered(survex_cave):
+ '''Checks whether a cave has been properly registered when it is found in the Loser repo
+ This should be called by Databasereset not here in a view
+ Currently Caves are only registered if they are listed in :expoweb: settings.CAVEDESCRIPTIONS
+ so we need to add in any mroe here.
+ '''
+ try:
+ cave = Cave.objects.get(kataster_number=survex_cave)
+ return survex_cave
+ except ObjectDoesNotExist:
+ pass
+ try:
+ cave = Cave.objects.get(unofficial_number=survex_cave)
+ if cave.kataster_number:
+ return cave.kataster_number
+ else:
+ return None
+ except ObjectDoesNotExist:
+ pass
+
# direct local non-database browsing through the svx file repositories
# perhaps should use the database and have a reload button for it
# why is caves-1623 HARD CODED here ?! That must be wrong..
def survexcaveslist(request):
- cavesdir = os.path.join(settings.SURVEX_DATA, "caves-1623")
+ '''This reads the entire list of caves in the Loser repo directory and produces a complete report.
+ It can find caves which have not yet been properly registered in the system by Databasereset.py because
+ someone may have uploaded the survex files without doing the rest of the integration process.
+ '''
+ cavesdir = survexdatasetpath / "caves-1623"
#cavesdircontents = { }
onefilecaves = [ ]
@@ -307,21 +337,25 @@ def survexcaveslist(request):
# first sort the file list
fnumlist = sorted([ (-int(re.match(r"\d*", f).group(0) or "0"), f) for f in os.listdir(cavesdir) ])
- print(fnumlist)
+ #print(fnumlist)
# go through the list and identify the contents of each cave directory
for num, cavedir in fnumlist:
# these have sub dirs /cucc/ /arge/ /old/ but that is no reason to hide them in this webpage
- # so these are now treated the same as 142 and 113 which also had a /cucc/ sub dir
+ # so these are now treated the same as 142 and 113 which also have a /cucc/ sub dir
#if cavedir in ["144", "40"]:
# continue
-
+
+ # This all assumes that the first .svx file has the same name as the cave name,
+ # which usually but not always true. e.g. caves-1623/78/allkaese.svx not caves-1623/78/78.svx
+ # which is why we now also pass through the cavedir
gcavedir = os.path.join(cavesdir, cavedir)
if os.path.isdir(gcavedir) and cavedir[0] != ".":
subdirs, subsvx = identifycavedircontents(gcavedir)
- survdirobj = [ ]
+ katast = check_cave_registered(cavedir) # should do this only once per database load or it will be slow
+ survdirobj = [ ]
for lsubsvx in subsvx:
survdirobj.append(("caves-1623/"+cavedir+"/"+lsubsvx, lsubsvx))
@@ -340,7 +374,7 @@ def survexcaveslist(request):
# multifile caves
elif len(survdirobj) > 1:
- multifilecaves.append((survdirobj[0], survdirobj[1:]))
+ multifilecaves.append((survdirobj[0], cavedir, survdirobj[1:]))
# single file caves
elif len(survdirobj) == 1:
onefilecaves.append(survdirobj[0])
@@ -349,16 +383,18 @@ def survexcaveslist(request):
# parsing all the survex files of a single cave and showing that it's consistent and can find all the files and people
-# doesn't use recursion. just writes it twice
# currently not showing Explorers or Titles. link test from SurvexFile page is "dates and explorers"
# Should explicity fix the kataster number thing.
def survexcavesingle(request, survex_cave):
+ print(">>>", survex_cave)
breload = False
if breload:
parsers.survex.ReloadSurvexCave(survex_cave) # does not exit now, needs re-writing to work.
try:
cave = Cave.objects.get(kataster_number=survex_cave)
+ for survexdirectory in cave.survexdirectory_set.all:
+ print(">>> >>>", survexdirectory, flush=True)
return render_to_response('svxcavesingle.html', {'settings': settings, "cave":cave })
except ObjectDoesNotExist:
# can get here if the survex file is in a directory labelled with unofficial number not kataster number.
diff --git a/flatpages/views.py b/flatpages/views.py
index 518b157..aa1793d 100644
--- a/flatpages/views.py
+++ b/flatpages/views.py
@@ -1,5 +1,6 @@
import os
import re
+from pathlib import Path
from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpResponseRedirect, Http404
@@ -52,15 +53,16 @@ def flatpage(request, path):
print(("flat path noinfo", path))
return HttpResponseRedirect(reverse("auth_login") + '?next=%s' % request.path)
+ expowebpath = Path(settings.EXPOWEB)
if path.endswith("/") or path == "":
#print(" - FLATPAGES the file: {} ENDSWITH ...".format(path))
try:
- o = open(os.path.normpath(settings.EXPOWEB + path + "index.html"), "rb")
+ o = open(os.path.normpath(expowebpath / path / "index.html"), "rb")
path = path + "index.html"
except IOError:
try:
- o = open(os.path.normpath(settings.EXPOWEB + path + "index.htm"), "rb")
+ o = open(os.path.normpath(expowebpath / path / "index.htm"), "rb")
path = path + "index.htm"
except IOError:
return render(request, 'pagenotfound.html', {'path': path})
@@ -77,8 +79,8 @@ def flatpage(request, path):
path = path.replace("static", settings.MEDIA_ROOT)
filetobeopened = os.path.normpath(path)
else:
- #print(" - NO _ROOT: {} ...".format(settings.EXPOWEB))
- filetobeopened = os.path.normpath(settings.EXPOWEB + path)
+ #print(" - NO _ROOT: {} ...".format(expowebpath))
+ filetobeopened = os.path.normpath(expowebpath / path)
#print(" - FLATPAGES full path : {} ...".format(filetobeopened))
o = open(filetobeopened, "rb")
diff --git a/parsers/survex.py b/parsers/survex.py
index 2ca2f1d..6fdf046 100644
--- a/parsers/survex.py
+++ b/parsers/survex.py
@@ -4,7 +4,7 @@ import re
import time
import copy
-from unipath import Path
+from pathlib import Path
from datetime import datetime, timedelta
from subprocess import call, run
@@ -1257,7 +1257,7 @@ def LoadPositions():
print(" - Regenerating {} {}.3d in {}".format(settings.SURVEXPORT, topdata, settings.SURVEX_DATA))
call([settings.SURVEXPORT, '--pos', '{}.3d'.format(topdata)], cwd = settings.SURVEX_DATA)
- topdata = settings.SURVEX_DATA.child(settings.SURVEX_TOPNAME)
+ topdata = os.fspath(Path(settings.SURVEX_DATA) / settings.SURVEX_TOPNAME)
print((' - Generating a list of Pos from %s.svx and then loading...' % (topdata)))
found = 0
diff --git a/settings.py b/settings.py
index df5268e..024be70 100644
--- a/settings.py
+++ b/settings.py
@@ -27,7 +27,7 @@ print("* importing troggle/settings.py")
# read https://docs.djangoproject.com/en/3.0/topics/settings/
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
-BASE_DIR = os.path.dirname(os.path.dirname(__file__))
+#BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# Django settings for troggle project.
diff --git a/templates/svxfilecavelist.html b/templates/svxfilecavelist.html
index 3eb0701..59f177f 100644
--- a/templates/svxfilecavelist.html
+++ b/templates/svxfilecavelist.html
@@ -41,10 +41,10 @@
<h2 id="cmult">Caves of multiple files</h2>
<table>
<tr><th>Dates and explorers</th><th>Survex files</th></tr>
-{% for primarycavefile, subcavefiles in multifilecaves %}
+{% for primarycavefile, cavedir, subcavefiles in multifilecaves %}
<tr>
<td>
- <a href="{% url "survexcavessingle" primarycavefile.1 %}">{{primarycavefile.1}}</a>
+ <a href="{% url "survexcavessingle" cavedir %}">{{cavedir}}</a> <!-- formerly primarycavefile.1 -->
</td>
<td>
<a href="{% url "svx" primarycavefile.0 %}">{{primarycavefile.1}}</a> -