2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2024-11-25 00:31:55 +00:00

fixing bugs after wookey session

This commit is contained in:
Philip Sargent 2022-03-22 02:22:15 +00:00
parent 48171ae824
commit f1b206ad34
8 changed files with 41 additions and 57 deletions

View File

@ -11,7 +11,8 @@ from django.contrib.admin.widgets import AdminDateWidget
from troggle.core.models.troggle import Person, PersonExpedition, Expedition from troggle.core.models.troggle import Person, PersonExpedition, Expedition
from troggle.core.models.caves import Cave, LogbookEntry, QM, Entrance, CaveAndEntrance from troggle.core.models.caves import Cave, LogbookEntry, QM, Entrance, CaveAndEntrance
'''These are all the Forms used by troggle '''These are all the class-based Forms used by troggle.
There are other, simpler, upload forms in view/uploads.py
Some are not used and need renovating or destroying. Some are not used and need renovating or destroying.
''' '''

View File

@ -267,6 +267,7 @@ def cavepage(request, karea, subpath):
except Cave.DoesNotExist: except Cave.DoesNotExist:
# probably a link to text or an image e.g. 1623/161/l/rl89a.htm i.e. an expoweb page # probably a link to text or an image e.g. 1623/161/l/rl89a.htm i.e. an expoweb page
# cannot assume that this is a simple cave page, for a cave we don't know.
return expo.expopage(request, str(kpath)) return expo.expopage(request, str(kpath))
except Cave.MultipleObjectsReturned: except Cave.MultipleObjectsReturned:
caves = Cave.objects.filter(url = kpath) caves = Cave.objects.filter(url = kpath)
@ -276,20 +277,6 @@ def cavepage(request, karea, subpath):
message = f'Failed to find cave: {kpath}' message = f'Failed to find cave: {kpath}'
return render(request,'errors/generic.html', {'message': message}) return render(request,'errors/generic.html', {'message': message})
def cave(request, cave_id='', offical_name=''):
'''Displays a cave description page
accesssed by a fairly random id which might be anything
'''
try:
cave=getCave(cave_id)
except MultipleObjectsReturned:
caves = Cave.objects.filter(kataster_number=cave_id)
return render(request, 'svxcaveseveral.html', {'settings': settings, "caves":caves }) # not the right template, needs a specific one
except ObjectDoesNotExist:
return render(request, 'errors/svxcavesingle404.html', {'settings': settings, "cave":cave_id })
except:
return render(request, 'errors/svxcavesingle404.html', {'settings': settings })
return rendercave(request, cave, cave.slug(), cave_id=cave_id) return rendercave(request, cave, cave.slug(), cave_id=cave_id)
def caveEntrance(request, slug): def caveEntrance(request, slug):
@ -303,23 +290,13 @@ def caveEntrance(request, slug):
else: else:
return render(request,'cave_entrances.html', {'cave': cave}) return render(request,'cave_entrances.html', {'cave': cave})
# def caveDescription(request, slug):
# try:
# cave = Cave.objects.get(caveslug__slug = slug)
# except:
# return render(request,'errors/badslug.html', {'badslug': slug})
# if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated:
# return render(request,'nonpublic.html', {'instance': cave})
# else:
# return render(request,'cave_uground_description.html', {'cave': cave})
@login_required_if_public @login_required_if_public
def edit_cave(request, slug=None): def edit_cave(request, slug=None):
'''This is the form that edits all the cave data and writes out an XML file in the :expoweb: repo folder '''This is the form that edits all the cave data and writes out an XML file in the :expoweb: repo folder
The format for the file being saved is in templates/dataformat/cave.xml The format for the file being saved is in templates/dataformat/cave.xml
It does save the data into into the database directly, not by parsing the file. It does save the data into into the database directly, not by parsing the file.
It does NOT yet commit to the git repo
''' '''
message = "" message = ""
if slug is not None: if slug is not None:

View File

@ -125,8 +125,11 @@ def expowebpage(request, expowebpath, path):
print(f' - 404 error in expowebpage() {path}') print(f' - 404 error in expowebpage() {path}')
return render(request, 'pagenotfound.html', {'path': path}, status="404") return render(request, 'pagenotfound.html', {'path': path}, status="404")
with open(os.path.normpath(expowebpath / path), "r") as o: try:
html = o.read() with open(os.path.normpath(expowebpath / path), "r") as o:
html = o.read()
except:
return HttpResponse(default_head + html + '<h3>UTF-8 Parsing Failue:<br>Page could not be parsed using UTF-8:<br>failure detected in expowebpage in views.expo.py</h3> Please edit this <var>:expoweb:</var> page to replace dubious umlauts with HTML entitiies in the expected code. </body' )
m = re.search(r'(.*)<\s*head([^>]*)>(.*)<\s*/head\s*>(.*)<\s*body([^>]*)>(.*)<\s*/body\s*>(.*)', html, re.DOTALL + re.IGNORECASE) m = re.search(r'(.*)<\s*head([^>]*)>(.*)<\s*/head\s*>(.*)<\s*body([^>]*)>(.*)<\s*/body\s*>(.*)', html, re.DOTALL + re.IGNORECASE)
if m: if m:

View File

@ -109,7 +109,7 @@ class SvxForm(forms.Form):
filename = forms.CharField(widget=forms.TextInput(attrs={"readonly":True})) filename = forms.CharField(widget=forms.TextInput(attrs={"readonly":True}))
datetime = forms.DateTimeField(widget=forms.TextInput(attrs={"readonly":True})) datetime = forms.DateTimeField(widget=forms.TextInput(attrs={"readonly":True}))
outputtype = forms.CharField(widget=forms.TextInput(attrs={"readonly":True})) outputtype = forms.CharField(widget=forms.TextInput(attrs={"readonly":True}))
code = forms.CharField(widget=forms.Textarea(attrs={"cols":150, "rows":36})) code = forms.CharField(widget=forms.Textarea(attrs={"cols":140, "rows":36}))
template = False template = False

View File

@ -417,13 +417,13 @@ def readcave(filename):
if survex_file[0]: if survex_file[0]:
if not (Path(SURVEX_DATA) / survex_file[0]).is_file(): if not (Path(SURVEX_DATA) / survex_file[0]).is_file():
message = f' ! {slug:12} survex filename does not exist :LOSER:"{survex_file[0]}" in "{filename}"' message = f' ! {slug:12} survex filename does not exist :LOSER:"{survex_file[0]}" in "{filename}"'
DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}/edit/') DataIssue.objects.create(parser='caves', message=message, url=f'/{slug}_cave_edit/')
print(message) print(message)
if description_file[0]: # if not an empty string if description_file[0]: # if not an empty string
message = f' - {slug:12} complex description filename "{description_file[0]}" inside "{CAVEDESCRIPTIONS}/{filename}"' message = f' - {slug:12} complex description filename "{description_file[0]}" inside "{CAVEDESCRIPTIONS}/{filename}"'
DataIssue.objects.create(parser='caves ok', message=message, url=f'/cave/{slug}/edit/') DataIssue.objects.create(parser='caves ok', message=message, url=f'{slug}/edit/')
print(message) print(message)
if not (Path(EXPOWEB) / description_file[0]).is_file(): if not (Path(EXPOWEB) / description_file[0]).is_file():

View File

@ -114,7 +114,7 @@ class LoadingSurvex():
rx_names = re.compile(r'(?i)names') rx_names = re.compile(r'(?i)names')
rx_flagsnot= re.compile(r"not\s") rx_flagsnot= re.compile(r"not\s")
rx_linelen = re.compile(r"[\d\-+.]+$") rx_linelen = re.compile(r"[\d\-+.]+$")
instruments = "(waiting_patiently|slacker|Useless|nagging|unknown|Inst|instrument|rig|rigger|rigging|helper|something| compass|comp|clino|Notes|sketch|book|Tape|Dog|Pics|photo|drawing|Helper|GPS|Disto|Distox|Distox2|topodroid|point|Consultant|nail|polish|varnish|bitch|monkey|PowerDrill|drill)" instruments = "(waiting_patiently|slacker|Useless|nagging|unknown|Inst|instrument|rig|rigger|rigging|helper|something| compass|comp|clino|Notes|sketch|book|Tape|Dog|Pics|photo|drawing|Helper|GPS|Disto|Distox|Distox2|topodroid|point|Consultant|nail|polish|nail_polish_bitch|nail_polish_monkey|varnish|nail_polish|nail_varnish|bitch|monkey|PowerDrill|drill)"
rx_teammem = re.compile(r"(?i)"+instruments+"?(?:es|s)?\s+(.*)"+instruments+"?(?:es|s)?$") rx_teammem = re.compile(r"(?i)"+instruments+"?(?:es|s)?\s+(.*)"+instruments+"?(?:es|s)?$")
rx_person = re.compile(r"(?i) and | / |, | & | \+ |^both$|^none$") rx_person = re.compile(r"(?i) and | / |, | & | \+ |^both$|^none$")
rx_qm = re.compile(r'(?i)^\s*QM(\d)\s+?([a-dA-DxX])\s+([\w\-]+)\.(\d+)\s+(([\w\-]+)\.(\d+)|\-)\s+(.+)$') rx_qm = re.compile(r'(?i)^\s*QM(\d)\s+?([a-dA-DxX])\s+([\w\-]+)\.(\d+)\s+(([\w\-]+)\.(\d+)|\-)\s+(.+)$')
@ -448,27 +448,27 @@ class LoadingSurvex():
def LoadSurvexRef(self, survexblock, args): def LoadSurvexRef(self, survexblock, args):
#print(self.insp+ "*REF ---- '"+ args +"'") #print(self.insp+ "*REF ---- '"+ args +"'")
url=f'/survexfile/{survexblock.survexfile.path}'
# *REF but also ; Ref years from 1960 to 2039 # *REF but also ; Ref years from 1960 to 2039
refline = self.rx_ref_text.match(args) refline = self.rx_ref_text.match(args)
if refline: if refline:
# a textual reference such as "1996-1999 Not-KH survey book pp 92-95" # a textual reference such as "1996-1999 Not-KH survey book pp 92-95"
# print(self.insp+ "*REF quoted text so ignored:"+ args) print(self.insp+ "*REF quoted text so ignored:"+ args)
return return
if len(args)< 4: if len(args)< 4:
message = " ! Empty or BAD *REF statement '{}' in '{}'".format(args, survexblock.survexfile.path) message = " ! Empty or BAD *REF statement '{}' in '{}'".format(args, survexblock.survexfile.path)
print((self.insp+message)) print((self.insp+message))
DataIssue.objects.create(parser='survex', message=message) DataIssue.objects.create(parser='survex', message=message, url=url)
return return
argsgps = self.rx_argsref.match(args) argsgps = self.rx_argsref.match(args)
if argsgps: if argsgps:
yr, letterx, wallet = argsgps.groups() yr, letterx, wallet = argsgps.groups()
else: else:
message = " ! BAD *REF statement '{}' in '{}'".format(args, survexblock.survexfile.path) message = " ! Wallet *REF '{}' in '{}' ".format(args, survexblock.survexfile.path)
print(self.insp+message) print(self.insp+message)
DataIssue.objects.create(parser='survex', message=message) DataIssue.objects.create(parser='survex', message=message, url=url)
return return
if not letterx: if not letterx:
@ -480,31 +480,31 @@ class LoadingSurvex():
if not (int(yr)>1960 and int(yr)<2039): if not (int(yr)>1960 and int(yr)<2039):
message = " ! Wallet year out of bounds {yr} '{refscan}' {survexblock.survexfile.path}" message = " ! Wallet year out of bounds {yr} '{refscan}' {survexblock.survexfile.path}"
print((self.insp+message)) print((self.insp+message))
DataIssue.objects.create(parser='survex', message=message) DataIssue.objects.create(parser='survex', message=message, url=url)
refscan = "%s#%s%s" % (yr, letterx, wallet) refscan = "%s#%s%s" % (yr, letterx, wallet)
try: try:
if int(wallet)>100: if int(wallet)>100:
message = " ! Wallet *REF {} - too big in '{}'".format(refscan, survexblock.survexfile.path) message = " ! Wallet *REF {} - too big in '{}'".format(refscan, survexblock.survexfile.path)
print((self.insp+message)) print((self.insp+message))
DataIssue.objects.create(parser='survex', message=message) DataIssue.objects.create(parser='survex', message=message, url=url)
except: except:
message = " ! Wallet *REF {} - not numeric in '{}'".format(refscan, survexblock.survexfile.path) message = " ! Wallet *REF {} - not numeric in '{}' -- parsing continues".format(refscan, survexblock.survexfile.path)
print((self.insp+message)) print((self.insp+message))
DataIssue.objects.create(parser='survex', message=message) DataIssue.objects.create(parser='survex', message=message, url=url)
manywallets = Wallet.objects.filter(walletname=refscan) manywallets = Wallet.objects.filter(walletname=refscan)
if manywallets: if manywallets:
survexblock.scanswallet = manywallets[0] # this is a ForeignKey field survexblock.scanswallet = manywallets[0] # this is a ForeignKey field
print(manywallets[0]) print(manywallets[0])
survexblock.save() survexblock.save()
if len(manywallets) > 1: if len(manywallets) > 1:
message = " ! Wallet *REF {} - {} scan folders from DB search in {}".format(refscan, len(manywallets), survexblock.survexfile.path) message = " ! Wallet *REF {} - {} scan folders from DB search in {} -- parsing continues".format(refscan, len(manywallets), survexblock.survexfile.path)
print((self.insp+message)) print((self.insp+message))
DataIssue.objects.create(parser='survex', message=message) DataIssue.objects.create(parser='survex', message=message, url=url)
else: else:
message = " ! Wallet *REF '{}' - NOT found in DB search '{}'".format(refscan, survexblock.survexfile.path) message = " ! Wallet *REF '{}' - NOT found in DB search '{}' -- parsing continues".format(refscan, survexblock.survexfile.path)
print((self.insp+message)) print((self.insp+message))
DataIssue.objects.create(parser='survex', message=message) DataIssue.objects.create(parser='survex', message=message, url=url)
def LoadSurvexQM(self, survexblock, qmline): def LoadSurvexQM(self, survexblock, qmline):
insp = self.insp insp = self.insp
@ -668,7 +668,7 @@ class LoadingSurvex():
return self.svxdirs[headpath.lower()] return self.svxdirs[headpath.lower()]
def ReportNonCaveIncludes(self, headpath, includelabel): def ReportNonCaveIncludes(self, headpath, includelabel):
"""Ignore surface, kataser and gps *include survex files """Ignore surface, kataser and gpx *include survex files
""" """
if headpath in self.ignorenoncave: if headpath in self.ignorenoncave:
#message = f" - {headpath} is <ignorenoncave> (while creating '{includelabel}' sfile & sdirectory)" #message = f" - {headpath} is <ignorenoncave> (while creating '{includelabel}' sfile & sdirectory)"
@ -677,11 +677,12 @@ class LoadingSurvex():
return return
for i in self.ignoreprefix: for i in self.ignoreprefix:
if headpath.startswith(i): if headpath.startswith(i):
#message = f" - {headpath} starts with <ignoreprefix> (while creating '{includelabel}' sfile & sdirectory)" message = f" - {headpath} starts with <ignoreprefix> (while creating '{includelabel}' sfile & sdirectory)"
#print("\n"+message) print("\n"+message)
#print("\n"+message,file=sys.stderr) #print("\n"+message,file=sys.stderr)
return return
message = f" ! Error: '{headpath}' not a cave or in the ignore list of surface surveys. (while creating '{includelabel}')" message = f" ! Error: '{headpath}' not a cave or in the ignore list of surface surveys. (while creating '{includelabel}' in db)"
# getting this triggered for gpx/2018 but not for gpx/2017 ?!
print("\n"+message) print("\n"+message)
print("\n"+message,file=sys.stderr) print("\n"+message,file=sys.stderr)
DataIssue.objects.create(parser='survex', message=message) DataIssue.objects.create(parser='survex', message=message)
@ -725,7 +726,7 @@ class LoadingSurvex():
if cave: if cave:
newdirectory.cave = cave newdirectory.cave = cave
newfile.cave = cave newfile.cave = cave
#print("\n"+str(newdirectory.cave),file=sys.stderr) print("\n"+str(newdirectory.cave),file=sys.stderr)
else: # probably a surface survey else: # probably a surface survey
self.ReportNonCaveIncludes(headpath, svxid) self.ReportNonCaveIncludes(headpath, svxid)
@ -1215,7 +1216,8 @@ class LoadingSurvex():
capture_output=True, check=False, text=True) capture_output=True, check=False, text=True)
if sp.returncode != 0: if sp.returncode != 0:
message = f' ! Error running {settings.CAVERN}: {fullpath}' message = f' ! Error running {settings.CAVERN}: {fullpath}'
DataIssue.objects.create(parser='entrances', message=message) url = f'/survexfile{fullpath}.svx'.replace(settings.SURVEX_DATA, "")
DataIssue.objects.create(parser='xEntrances', message=message, url=url)
print(message) print(message)
print(f'stderr:\n\n' + str(sp.stderr) + '\n\n' + str(sp.stdout) + '\n\nreturn code: ' + str(sp.returncode)) print(f'stderr:\n\n' + str(sp.stderr) + '\n\n' + str(sp.stdout) + '\n\nreturn code: ' + str(sp.returncode))
self.caverncount += 1 self.caverncount += 1
@ -1408,6 +1410,7 @@ def LoadSurvexBlocks():
DataIssue.objects.filter(parser='survexleg').delete() DataIssue.objects.filter(parser='survexleg').delete()
DataIssue.objects.filter(parser='survexunits').delete() DataIssue.objects.filter(parser='survexunits').delete()
DataIssue.objects.filter(parser='entrances').delete() DataIssue.objects.filter(parser='entrances').delete()
DataIssue.objects.filter(parser='xEntrances').delete()
survexfileroot = MakeSurvexFileRoot() survexfileroot = MakeSurvexFileRoot()
# this next makes a block_object assciated with a file_object.path = SURVEX_TOPNAME # this next makes a block_object assciated with a file_object.path = SURVEX_TOPNAME

View File

@ -1,6 +1,6 @@
{% extends "cavebase.html" %} {% extends "cavebase.html" %}
<!-- cave.html - this text visible because this template has been included -->
{% block extraheaders %} {% block extraheaders %}
<!-- cave.html - this text visible because this template has been included -->
{% if cave.survex_file %} {% if cave.survex_file %}
<!-- <!--
@ -527,7 +527,7 @@ div#scene {
<p><a href="https://aardgoose.github.io/CaveView.js/">CaveView</a> display of the .3d file is temporarily disabled while we fix things (Nov.2021). See <a href="/handbook/computing/todo.html">/handbook/computing/todo.html</a>. <p><a href="https://aardgoose.github.io/CaveView.js/">CaveView</a> display of the .3d file is temporarily disabled while we fix things (Nov.2021). See <a href="/handbook/computing/todo.html">/handbook/computing/todo.html</a>.
<a href="/survexfile">All survex files</a> &nbsp;&nbsp;&nbsp; <a href="/survexfile">All survex files</a> &nbsp;&nbsp;&nbsp;
<a href="{% if cave.kataster_number %}{% url "cave3d" cave.kataster_number %}{% else %}{% url "cave3d" cave.unofficial_number %}{% endif %}">3d file download</a>&nbsp;&nbsp;&nbsp; <a href="{% if cave.kataster_number %}{% url "cave3d" cave.kataster_number %}{% else %}{% url "cave3d" cave.unofficial_number %}{% endif %}">3d file download</a>&nbsp;&nbsp;&nbsp;
<a href="{% url "svx" svxstem %}">This survex file</a> &nbsp;&nbsp;&nbsp; <a href="{% url "survexcavessingle" cave.kataster_number %}">This survex file</a> &nbsp;&nbsp;&nbsp;
<div id='scene'></div> <div id='scene'></div>
{% endif %} {% endif %}

View File

@ -50,13 +50,13 @@ Test VERY CAREFULLY for each change. It is fragile.
if settings.EXPOFILESREMOTE: if settings.EXPOFILESREMOTE:
expofilesurls = [ expofilesurls = [
path('/<path:filepath>', expofiles_redirect, name="expofiles_redirect"), # to http://expo.survex.com/expofiles path('<path:filepath>', expofiles_redirect, name="expofiles_redirect"), # to http://expo.survex.com/expofiles
path('', expofiles_redirect, {'filepath': ""}, name="expofiles_redirect"), path('', expofiles_redirect, {'filepath': ""}, name="expofiles_redirect"),
] ]
else: else:
expofilesurls = [ expofilesurls = [
path('/<path:filepath>', expofilessingle, name="single"), # local copy of EXPOFILES
path('', expofilessingle, {'filepath': ""}, name="single"), path('', expofilessingle, {'filepath': ""}, name="single"),
path('<path:filepath>', expofilessingle, name="single"), # local copy of EXPOFILES
] ]
# see https://docs.djangoproject.com/en/dev/topics/auth/default/ # see https://docs.djangoproject.com/en/dev/topics/auth/default/