2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2025-03-22 10:11:51 +00:00

debugging ticklist

This commit is contained in:
Philip Sargent 2022-08-01 02:50:19 +03:00
parent 5da1fce41f
commit 129ea3cc5b
5 changed files with 180 additions and 16 deletions

@ -1,8 +1,10 @@
import os import os
import re import re
import json import json
import operator
from urllib.parse import urljoin from urllib.parse import urljoin
from pathlib import Path from pathlib import Path
from functools import reduce
from django.db import models from django.db import models
from django.conf import settings from django.conf import settings
@ -177,7 +179,7 @@ class Wallet(models.Model):
def get_json(self): def get_json(self):
jsonfile = Path(self.fpath, 'contents.json') jsonfile = Path(self.fpath, 'contents.json')
if not Path(jsonfile).is_file(): if not Path(jsonfile).is_file():
print(f'{jsonfile} is not a file') #print(f'{jsonfile} is not a file')
return None return None
else: else:
with open(jsonfile) as json_f: with open(jsonfile) as json_f:
@ -186,7 +188,7 @@ class Wallet(models.Model):
except: except:
wurl = f"/scanupload/{self.walletname}" # .replace('#', ':') wurl = f"/scanupload/{self.walletname}" # .replace('#', ':')
message = f"! {str(self.walletname)} Failed to load {jsonfile} JSON file" message = f"! {str(self.walletname)} Failed to load {jsonfile} JSON file"
print(message) #print(message)
raise raise
return waldata return waldata
@ -225,7 +227,118 @@ class Wallet(models.Model):
return None return None
jsondata = self.get_json() jsondata = self.get_json()
return jsondata["name"] return jsondata["name"]
def get_fnames(self):
'''Filenames without the suffix, i.e. without the ".jpg"
'''
dirpath = Path(settings.SCANS_ROOT, self.fpath)
files = []
if dirpath.is_dir():
try:
for f in dirpath.iterdir():
if f.is_file():
if f.name != 'contents.json' and f.name != 'walletindex.html':
files.append(Path(f.name).stem)
except FileNotFoundError:
pass
return files
def get_ticks(self):
waldata = self.get_json()
if not waldata:
return {}
ticks = {}
# Initially, are there any required survex files present ?
survexok = "red"
ticks["S"] = "red"
if waldata["survex not required"]:
survexok = "green"
ticks["S"] = "green"
else:
if waldata["survex file"]:
if not type(waldata["survex file"])==list: # a string also is a sequence type, so do it this way
waldata["survex file"] = [waldata["survex file"]]
ngood = 0
nbad = 0
ticks["S"] = "lightblue"
for svx in waldata["survex file"]:
if svx !="":
if (Path(settings.SURVEX_DATA) / svx).is_file():
ngood += 1
else:
nbad += 1
if nbad == 0 and ngood >= 1:
ticks["S"] = "green"
if nbad >= 1 and ngood >= 1:
ticks["S"] = "orange"
if nbad >= 1 and ngood == 0:
ticks["S"] = "red"
# Cave Description
if waldata["description written"]:
ticks["C"] = "green"
else:
ticks["C"] = survexok
# QMs
if waldata["qms written"]:
ticks["Q"] = "green"
else:
ticks["Q"] = survexok
# Notes, Plan, Elevation; Tunnel
if waldata["electronic survey"]:
ticks["N"] = "green"
ticks["P"] = "green"
ticks["E"] = "green"
ticks["T"] = "green"
else:
files = self.get_fnames()
print(self.walletname,files)
# Notes required
notes_scanned = reduce(operator.or_, [f.startswith("note") for f in files], False)
notes_scanned = reduce(operator.or_, [f.endswith("notes") for f in files], notes_scanned)
if notes_scanned:
ticks["N"] = "green"
else:
ticks["N"] = "red"
# Plan drawing required
plan_scanned = reduce(operator.or_, [f.startswith("plan") for f in files], False)
plan_scanned = reduce(operator.or_, [f.endswith("plan") for f in files], plan_scanned)
plan_drawing_required = not (plan_scanned or waldata["plan drawn"] or waldata["plan not required"])
if plan_drawing_required:
ticks["P"] = "red"
else:
ticks["P"] = "green"
# Elev drawing required
elev_scanned = reduce(operator.or_, [f.startswith("elev") for f in files], False)
elev_scanned = reduce(operator.or_, [f.endswith("elev") for f in files], elev_scanned)
elev_scanned = reduce(operator.or_, [f.endswith("elevation") for f in files], elev_scanned)
elev_drawing_required = not (elev_scanned or waldata["elev drawn"] or waldata["elev not required"])
if elev_drawing_required:
ticks["E"] = "red"
else:
ticks["E"] = "green"
# Tunnel / Therion
if elev_drawing_required or plan_drawing_required:
ticks["T"] = "red"
else:
ticks["T"] = "green"
# Website
if waldata["website updated"]:
ticks["W"] = "green"
else:
ticks["W"] = "red"
return ticks
def __str__(self): def __str__(self):
return "[" + str(self.walletname) + " (Wallet)]" return "[" + str(self.walletname) + " (Wallet)]"

@ -85,11 +85,13 @@ def walletslistperson(request, first_name, last_name):
#personyear = GetPersonExpeditionNameLookup(expedition).get(tripperson.lower()) #personyear = GetPersonExpeditionNameLookup(expedition).get(tripperson.lower())
earliest = datetime.datetime.now().date() earliest = datetime.datetime.now().date()
manywallets = [] manywallets = []
wallets = Wallet.objects.all() wallets = Wallet.objects.all()
for w in wallets: for w in wallets:
w.persons = w.people() # ephemeral attribute for web page w.persons = w.people() # ephemeral attribute for web page
w.ticks = {} # ephemeral tick boxes display
# check if there is a json # check if there is a json
if not w.get_json(): if not w.get_json():
populatewallet(w) populatewallet(w)
@ -102,18 +104,20 @@ def walletslistperson(request, first_name, last_name):
nobody = wp[0].lower() nobody = wp[0].lower()
if nobody == 'unknown' or nobody == 'nobody' or nobody == ' ': if nobody == 'unknown' or nobody == 'nobody' or nobody == ' ':
populatewallet(w) populatewallet(w)
if w.persons:
if p.fullname in w.persons: if p.fullname in w.persons:
#found person #found person
manywallets.append(w) manywallets.append(w)
if not w.date(): if not w.date():
datewallet(w, earliest) datewallet(w, earliest)
c = w.cave() c = w.cave()
if not c: if not c:
caveifywallet(w) caveifywallet(w)
w.ticks = w.get_ticks() # the complaints in colour form
return render(request, 'personwallets.html', { 'manywallets':manywallets, 'settings': settings, 'person': p}) return render(request, 'personwallets.html', { 'manywallets':manywallets, 'settings': settings, 'person': p})
def walletslistyear(request, year): def walletslistyear(request, year):

@ -100,6 +100,9 @@ xlate = {"url": "description url",
def get_complaints(complaints, waldata, svxfiles, files, wallet, wurl): def get_complaints(complaints, waldata, svxfiles, files, wallet, wurl):
'''Taken from old script wallets.py and edited to make more comprehensible '''Taken from old script wallets.py and edited to make more comprehensible
Loads the survex files names and processes all complaints Loads the survex files names and processes all complaints
All needs to be restructred to use the get_ticks() function on the Wallets class in core/models/survex.py
which does the same thing
''' '''
# Date # Date
if not waldata["date"]: if not waldata["date"]:
@ -134,20 +137,21 @@ def get_complaints(complaints, waldata, svxfiles, files, wallet, wurl):
# Notes required # Notes required
if not waldata["electronic survey"]: if not waldata["electronic survey"]:
notes_scanned = reduce(operator.or_, [f.startswith("note") for f in files], False) notes_scanned = reduce(operator.or_, [f.startswith("note") for f in files], False)
notes_scanned = reduce(operator.or_, [f.endswith("note") for f in files], notes_scanned) notes_scanned = reduce(operator.or_, [Path(f).stem.endswith("notes") for f in files], notes_scanned)
if not notes_scanned: if not notes_scanned:
complaints.append("The notes needs scanning (or renaming): no noteNN.jpg or XXnote.jpg file found; and this is not an electronic survey.") complaints.append("The notes needs scanning (or renaming): no noteNN.jpg or XXnote.jpg file found; and this is not an electronic survey.")
# Plan drawing required # Plan drawing required
plan_scanned = reduce(operator.or_, [f.startswith("plan") for f in files], False) plan_scanned = reduce(operator.or_, [f.startswith("plan") for f in files], False)
plan_scanned = reduce(operator.or_, [f.endswith("plan") for f in files], plan_scanned) plan_scanned = reduce(operator.or_, [Path(f).stem.endswith("plan") for f in files], plan_scanned)
plan_drawing_required = not (plan_scanned or waldata["plan drawn"] or waldata["plan not required"]) plan_drawing_required = not (plan_scanned or waldata["plan drawn"] or waldata["plan not required"])
if plan_drawing_required: if plan_drawing_required:
complaints.append("The plan needs drawing (or renaming, or tick 'Plan drawn' checkbox or 'Plan not required' checkbox): no planNN.jpg or XXplan.jpg file found.") complaints.append("The plan needs drawing (or renaming, or tick 'Plan drawn' checkbox or 'Plan not required' checkbox): no planNN.jpg or XXplan.jpg file found.")
# Elev drawing required # Elev drawing required
elev_scanned = reduce(operator.or_, [f.startswith("elev") for f in files], False) elev_scanned = reduce(operator.or_, [f.startswith("elev") for f in files], False)
elev_scanned = reduce(operator.or_, [f.endswith("elev") for f in files], elev_scanned) elev_scanned = reduce(operator.or_, [Path(f).stem.endswith("elev") for f in files], elev_scanned)
elev_scanned = reduce(operator.or_, [Path(f).stem.endswith("elevation") for f in files], elev_scanned)
elev_drawing_required = not (elev_scanned or waldata["elev drawn"] or waldata["elev not required"]) elev_drawing_required = not (elev_scanned or waldata["elev drawn"] or waldata["elev not required"])
if elev_drawing_required: if elev_drawing_required:
complaints.append("The elevation needs drawing (or renaming, or tick 'Elev drawn' checkbox or 'Elev not required' checkbox): no elevNN.jpg or XXelev.jpg file found.") complaints.append("The elevation needs drawing (or renaming, or tick 'Elev drawn' checkbox or 'Elev not required' checkbox): no elevNN.jpg or XXelev.jpg file found.")

@ -14,6 +14,48 @@ traced to produce Tunnel or Therion drawings and eventually the final complete c
<li>per year, e.g. <a href="/wallets/year/2019">2019</a> <li>per year, e.g. <a href="/wallets/year/2019">2019</a>
<li>per cave, e.g. <a href="/cave/scans/1623-161">1623/161</a> <li>per cave, e.g. <a href="/cave/scans/1623-161">1623/161</a>
</ul> </ul>
<table width=95%>
<tr><th>Wallet</th><th width=8%>Wallet Date</th><th>Cave</th><th>Wallet Name</th>
<!-- survex file-->
<th style="font-family: monospace; font-size: 150%;" title="Survex data">S</th>
<th style="font-family: monospace; font-size: 150%;" title="Survex Cave Description">C</th>
<th style="font-family: monospace; font-size: 150%;" title="Survex QMs">Q</th>
<!-- scanned-->
<th style="font-family: monospace; font-size: 150%;" title="Notes">N</th>
<th style="font-family: monospace; font-size: 150%;" title="Plan">P</th>
<th style="font-family: monospace; font-size: 150%;" title="Elevation">E</th>
<th style="font-family: monospace; font-size: 150%;" title="Tunnel or Therion">T</th>
<th style="font-family: monospace; font-size: 150%;" title="Website updated">W</th>
</tr>
{% for wallet in manywallets|dictsort:"walletname" %}
<tr>
<td style="padding:2px"><a href="{{wallet.get_absolute_url}}">{{wallet.walletname}}</a></td>
<td style="padding:2px" >{{wallet.date}}</td>
<td style="padding:2px">{{wallet.cave}}</td>
<td style="padding:2px">{{wallet.name}}</td>
<td style="padding:1px; background-color:{{wallet.ticks.S}}">&nbsp;</td>
<td style="padding:1px; background-color:{{wallet.ticks.C}}">&nbsp;</td>
<td style="padding:1px; background-color:{{wallet.ticks.Q}}">&nbsp;</td>
<td style="padding:1px; background-color:{{wallet.ticks.N}}">&nbsp;</td>
<td style="padding:1px; background-color:{{wallet.ticks.P}}">&nbsp;</td>
<td style="padding:1px; background-color:{{wallet.ticks.E}}">&nbsp;</td>
<td style="padding:1px; background-color:{{wallet.ticks.T}}">&nbsp;</td>
<td style="padding:1px; background-color:{{wallet.ticks.W}}">&nbsp;</td>
</tr>
{% endfor %}
</table>
<br />
<table width=95%> <table width=95%>
<tr><th>Wallet</th><th width=8%>Wallet Date</th><th>Wallet Name</th><th width=15%>Other People</th><th>Cave</th><th>Scans</th><th>Survex blocks</th><th>Drawings using these scans</th></tr> <tr><th>Wallet</th><th width=8%>Wallet Date</th><th>Wallet Name</th><th width=15%>Other People</th><th>Cave</th><th>Scans</th><th>Survex blocks</th><th>Drawings using these scans</th></tr>
{% for wallet in manywallets|dictsort:"walletname" %} {% for wallet in manywallets|dictsort:"walletname" %}
@ -43,4 +85,5 @@ traced to produce Tunnel or Therion drawings and eventually the final complete c
{% endfor %} {% endfor %}
</table> </table>
{% endblock %} {% endblock %}

@ -156,10 +156,10 @@
<label for="elevd">Elevation drawn ?</label> <label for="elevd">Elevation drawn ?</label>
<input type="checkbox" name="elevd" id="elevd" value="True" {% if "elev drawn" in checked %}checked{% endif %}> <input type="checkbox" name="elevd" id="elevd" value="True" {% if "elev drawn" in checked %}checked{% endif %}>
<br> <br>
<label for="descriptionw">Cave description written ?</label> <label for="descriptionw">Cave description written (or nothing recorded) ?</label>
<input type="checkbox" name="descriptionw" id="descriptionw" value="True" {% if "description written" in checked %}checked{% endif %}> <input type="checkbox" name="descriptionw" id="descriptionw" value="True" {% if "description written" in checked %}checked{% endif %}>
<br> <br>
<label for="qmsw">QMs written ?</label> <label for="qmsw">QMs written (or none seen) ?</label>
<input type="checkbox" name="qmsw" id="qmsw" value="True" {% if "qms written" in checked %}checked{% endif %}> <input type="checkbox" name="qmsw" id="qmsw" value="True" {% if "qms written" in checked %}checked{% endif %}>
<br> <br>
<label for="websiteupt">Website updated ?</label> <label for="websiteupt">Website updated ?</label>