mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2024-11-25 08:41:51 +00:00
Many many bugs fixed for >1 svx file on a wallet
This commit is contained in:
parent
c1231ff451
commit
175e71facf
@ -32,7 +32,8 @@ class Wallet(models.Model):
|
||||
return urljoin(settings.URL_ROOT, reverse("singlewallet", kwargs={"path": re.sub("#", "%23", self.walletname)}))
|
||||
|
||||
def get_json(self):
|
||||
"""Read the JSON file for the wallet and do stuff"""
|
||||
"""Read the JSON file for the wallet and do stuff
|
||||
Do it every time it is queried, to be sure the result is fresh"""
|
||||
# jsonfile = Path(self.fpath, 'contents.json')
|
||||
|
||||
# Get from git repo instead
|
||||
@ -102,9 +103,8 @@ class Wallet(models.Model):
|
||||
"""Reads all the JSON data just to get the JSON date."""
|
||||
if self.walletdate:
|
||||
return self.walletdate
|
||||
if not self.get_json():
|
||||
if not (jsondata := self.get_json()): # WALRUS
|
||||
return None
|
||||
jsondata = self.get_json() # use walrus operator?
|
||||
|
||||
datestr = jsondata["date"]
|
||||
if not datestr:
|
||||
@ -259,7 +259,7 @@ class Wallet(models.Model):
|
||||
ticks["N"] = "red"
|
||||
else:
|
||||
ticks["N"] = "green"
|
||||
print(f"{self.walletname} {ticks['N'].upper()} {notes_scanned=} {notes_required=} {waldata['notes not required']=}")
|
||||
# print(f"{self.walletname} {ticks['N'].upper()} {notes_scanned=} {notes_required=} {waldata['notes not required']=}")
|
||||
|
||||
# Plan drawing required
|
||||
plan_scanned = reduce(operator.or_, [f.startswith("plan") for f in files], False)
|
||||
|
@ -132,7 +132,7 @@ def walletslistperson(request, first_name, last_name):
|
||||
fixsurvextick(w, w.ticks)
|
||||
return manywallets
|
||||
|
||||
print("-walletslistperson")
|
||||
# print("-walletslistperson")
|
||||
|
||||
try:
|
||||
if last_name:
|
||||
@ -185,7 +185,7 @@ def walletslistyear(request, year):
|
||||
|
||||
return manywallets
|
||||
|
||||
print("-walletslistyear")
|
||||
# print("-walletslistyear")
|
||||
if year < 1976 or year > 2050:
|
||||
return render(request, "errors/generic.html", {"message": "Year out of range. Must be between 1976 and 2050"})
|
||||
|
||||
|
@ -347,7 +347,7 @@ def walletedit(request, path=None):
|
||||
recent_year = recent_name[:4]
|
||||
recent_number = recent_name[5:]
|
||||
|
||||
print(f"---identify_most_recent_wallet: {recent_year=} {recent_number=}")
|
||||
# print(f"---identify_most_recent_wallet: {recent_year=} {recent_number=}")
|
||||
return recent_year, recent_number
|
||||
|
||||
def create_nav_links(wallet):
|
||||
@ -482,6 +482,33 @@ def walletedit(request, path=None):
|
||||
or team == [""]
|
||||
or team == "")
|
||||
|
||||
def empty_string(thing):
|
||||
return (thing == [""]
|
||||
or thing == []
|
||||
or thing == ""
|
||||
or thing == "[]"
|
||||
or thing is None)
|
||||
|
||||
def make_valid_date(date):
|
||||
datestr = date.replace(".", "-")
|
||||
try:
|
||||
samedate = datetime.date.fromisoformat(datestr)
|
||||
except ValueError:
|
||||
# probably a single digit day number. HACKUS MAXIMUS.
|
||||
# clearly we need to fix this when we first import date strings..
|
||||
datestr = datestr[:-1] + "0" + datestr[-1]
|
||||
# datestr = f"{datestr:02d}"
|
||||
print(f"! - ValueError, trying.. {datestr=} ")
|
||||
try:
|
||||
samedate = datetime.date.fromisoformat(datestr)
|
||||
except:
|
||||
try:
|
||||
samedate = datetime.date.fromisoformat(datestr[:10])
|
||||
except:
|
||||
print(f"! - ValueError, FAILED {datestr=} ")
|
||||
samedate = None
|
||||
return samedate
|
||||
|
||||
def scan_survexblocks(svxfile):
|
||||
"""Scans for *team people attached to all the survex blocks in this svxfile
|
||||
This could be rather a lot for some compedious survex files! So would need
|
||||
@ -493,26 +520,25 @@ def walletedit(request, path=None):
|
||||
try:
|
||||
blocks = SurvexBlock.objects.filter(survexfile=svxfile)
|
||||
for b in blocks:
|
||||
print(f" - - {b=} {b.scanswallet=} {b.date=}")
|
||||
# print(f" - - - - {b=} {b.scanswallet.walletname} {b.date=} ")
|
||||
if b.scanswallet:
|
||||
wallet_refs.append(b.scanswallet) # other wallets
|
||||
if b.scanswallet.walletname == wallet:
|
||||
if b.date:
|
||||
dates.append(b.date)
|
||||
if b.name != b.title:
|
||||
blocknames.append(str(b.name) + "|" + str(b.title))
|
||||
else:
|
||||
blocknames.append(str(b.name))
|
||||
# we can use the people, across all blocks that have this *ref
|
||||
QSpeople = SurvexPersonRole.objects.filter(survexblock=b)
|
||||
# print(f" - - {QSpeople=}")
|
||||
for p in QSpeople:
|
||||
print(f" - - {p.personname} ")
|
||||
team.append(p.personname)
|
||||
#if b.scanswallet.walletname == wallet: # only if we assume *ref all correct!
|
||||
if b.date:
|
||||
dates.append(b.date)
|
||||
if b.name != b.title:
|
||||
blocknames.append(str(b.name) + "|" + str(b.title))
|
||||
else:
|
||||
blocknames.append(str(b.name))
|
||||
QSpeople = SurvexPersonRole.objects.filter(survexblock=b)
|
||||
# print(f" - - {QSpeople=}")
|
||||
for p in QSpeople:
|
||||
# print(f" - - {p.personname} ")
|
||||
team.append(p.personname)
|
||||
except:
|
||||
message = " - No associated survex blocks found for this wallet"
|
||||
print(message)
|
||||
|
||||
# print(f" - - - ", wallet_refs, dates, blocknames, team)
|
||||
return wallet_refs, dates, blocknames, team
|
||||
|
||||
def scan_survexfiles(survex_paths):
|
||||
@ -534,7 +560,7 @@ def walletedit(request, path=None):
|
||||
if not svxf: # not a blank string
|
||||
continue
|
||||
|
||||
print(f" - - {svxf=} ")
|
||||
# print(f" - - {svxf=} ")
|
||||
svx = Path(svxf)
|
||||
if svx.suffix.lower() != ".svx":
|
||||
svx = svx.with_suffix(".svx")
|
||||
@ -547,22 +573,26 @@ def walletedit(request, path=None):
|
||||
try:
|
||||
svxfile = SurvexFile.objects.get(path=fpath)
|
||||
|
||||
print(f" - {svxfile=}")
|
||||
if svxfile.cave:
|
||||
caves.append(svxfile.cave)
|
||||
cave_refs.append(svxfile.cave.reference())
|
||||
cave_refs.append(svxfile.cave.reference()) # this is a string?!
|
||||
|
||||
wallet_refs, dates, names, team = scan_survexblocks(svxfile)
|
||||
|
||||
w, d, n, t = scan_survexblocks(svxfile)
|
||||
wallet_refs.extend(w)
|
||||
dates.extend(d)
|
||||
names.extend(n)
|
||||
team.extend(t)
|
||||
except:
|
||||
message = "Specified survex file not found - database may be empty."
|
||||
print(message)
|
||||
# This failure will also get picked up by the "S" colour code red or orange
|
||||
|
||||
caves = list(set(caves))
|
||||
if len(caves) == 1:
|
||||
caves = caves[0]
|
||||
|
||||
if len(cave_refs) == 1:
|
||||
caves = cave_refs[0]
|
||||
|
||||
elif len(cave_refs) > 1:
|
||||
elif len(caves) > 1:
|
||||
print(
|
||||
f" - More than one Cave {caves} in this wallet {wallet}. Not managed in this troggle release."
|
||||
)
|
||||
@ -576,7 +606,6 @@ def walletedit(request, path=None):
|
||||
)
|
||||
|
||||
cave_refs = list(set(cave_refs))
|
||||
caves = list(set(caves))
|
||||
firstdate = None
|
||||
if dates:
|
||||
firstdate = min(dates).isoformat()
|
||||
@ -613,9 +642,11 @@ def walletedit(request, path=None):
|
||||
# print(f'--- POST processing starts {wallet=} {path=}')
|
||||
if "psg" in request.POST: # handle metadata form
|
||||
formj = WalletForm(request.POST)
|
||||
# Beware. All fields returned as strings. Must re-type them as lists etc. before using or re-saving
|
||||
# Also lots of hassle with lists of strings interpreted as a single string
|
||||
# Unset checkboxes do not return any value, checked ones return "True". So need initialising to False
|
||||
# Beware. All fields returned as strings. So must re-type them as
|
||||
# lists etc. before using or re-saving
|
||||
|
||||
# Unset checkboxes do not return any value, checked ones return "True".
|
||||
# So all need initialising to False
|
||||
if formj.is_valid():
|
||||
posted = request.POST.copy()
|
||||
posted.pop("csrfmiddlewaretoken") # discard this
|
||||
@ -625,26 +656,35 @@ def walletedit(request, path=None):
|
||||
# print(f'--- wd ${f}$ - {wd[f]}')
|
||||
for f in posted:
|
||||
wd[xlate[f]] = posted[f].replace("'", '"')
|
||||
|
||||
print(f"'{f}' -{xlate[f]}- {posted[f]}")
|
||||
if posted[f] == "True":
|
||||
wd[xlate[f]] = True
|
||||
|
||||
newdate = make_valid_date(posted["date"])
|
||||
wd["people"] = wd["people"][1:-1].replace('"', "").split(",")
|
||||
for i, elem in enumerate(wd["people"]):
|
||||
wd["people"][i] = elem.strip()
|
||||
if wd["cave"]:
|
||||
if wd["cave"][0] == "[":
|
||||
wd["cave"] = wd["cave"][1:-1].replace('"', "").split(",")
|
||||
for i, elem in enumerate(wd["cave"]):
|
||||
wd["cave"][i] = elem.strip()
|
||||
|
||||
# print(f'--- ${wd["survex file"]}$ - {type(wd["survex file"])}')
|
||||
if wd["survex file"]: # allow for no survex file at all
|
||||
if wd["survex file"][0] == "[":
|
||||
wd["survex file"] = wd["survex file"][1:-1]
|
||||
wd["survex file"] = wd["survex file"].replace('"', "").split(",")
|
||||
for i, elem in enumerate(wd["survex file"]):
|
||||
wd["survex file"][i] = elem.strip()
|
||||
# print(f'--- {wd["survex file"]} - {type(wd["survex file"])}')
|
||||
|
||||
|
||||
save_json(wd)
|
||||
# will already exist as creation does not happen here anymore
|
||||
# walletobject will already exist as creation does not happen here anymore
|
||||
walletobject = make_wallet(wallet)
|
||||
walletobject.walletdate = newdate # must be valid date
|
||||
print(f"---Setting VALID new date to db {walletobject} {walletobject.walletdate}")
|
||||
walletobject.save()
|
||||
print(f"---Setting VALID new date to db {walletobject} {walletobject.walletdate}")
|
||||
commit_json(wd)
|
||||
|
||||
else:
|
||||
@ -756,38 +796,31 @@ def walletedit(request, path=None):
|
||||
print(message)
|
||||
return render(request, "errors/generic.html", {"message": message})
|
||||
|
||||
if no_people(waldata["people"]):
|
||||
team = []
|
||||
names = []
|
||||
|
||||
refs = []
|
||||
|
||||
if "survex file" in waldata:
|
||||
date, team, caves, caverefs, wallet_refs, names = scan_survexfiles(waldata["survex file"])
|
||||
|
||||
print(f"--- date from survexfiles scan {date}")
|
||||
print(f"--- date from django object {Wallet.objects.filter(walletname=wallet)[0].walletdate}")
|
||||
# Override the discovered values with those in the JSON file:
|
||||
if not waldata["date"]: # either absent or empty string
|
||||
waldata["date"] = date
|
||||
|
||||
if "people" in waldata:
|
||||
people = waldata["people"] # text string
|
||||
else:
|
||||
if no_people(waldata["people"]):
|
||||
people = team
|
||||
waldata["people"] = team
|
||||
else:
|
||||
people = waldata["people"] # text string
|
||||
|
||||
if "cave" in waldata:
|
||||
if empty_string(waldata["cave"]):
|
||||
cave = caverefs # a list, potentially
|
||||
waldata["cave"] = cave
|
||||
else:
|
||||
cave = waldata["cave"] # text string
|
||||
else:
|
||||
cave = caves
|
||||
waldata["cave"] = caves
|
||||
|
||||
if waldata["name"]:
|
||||
psg = waldata["name"]
|
||||
else:
|
||||
if empty_string(waldata["name"]):
|
||||
psg = names
|
||||
waldata["name"] = names
|
||||
else:
|
||||
psg = waldata["name"]
|
||||
|
||||
if "free text" in waldata:
|
||||
freetext = waldata["free text"]
|
||||
@ -798,23 +831,9 @@ def walletedit(request, path=None):
|
||||
# for a in waldata:
|
||||
# print(f"'{waldata[a]}' {a}")
|
||||
# find trips and survex files of the same date
|
||||
if date:
|
||||
datestr = date.replace(".", "-")
|
||||
try:
|
||||
samedate = datetime.date.fromisoformat(datestr)
|
||||
except ValueError:
|
||||
# probably a single digit day number. HACKUS MAXIMUS.
|
||||
# clearly we need to fix this when we first import date strings..
|
||||
datestr = datestr[:-1] + "0" + datestr[-1]
|
||||
print(f" - {datestr=} ")
|
||||
try:
|
||||
samedate = datetime.date.fromisoformat(datestr)
|
||||
except:
|
||||
try:
|
||||
samedate = datetime.date.fromisoformat(datestr[:10])
|
||||
except:
|
||||
samedate = None
|
||||
walletobject = make_wallet(wallet)
|
||||
walletobject = make_wallet(wallet)
|
||||
if waldata["date"]:
|
||||
samedate = make_valid_date(waldata["date"])
|
||||
walletobject.walletdate = samedate
|
||||
walletobject.save()
|
||||
|
||||
@ -847,7 +866,7 @@ def walletedit(request, path=None):
|
||||
survexsize = str(min(len(str(waldata["survex file"])), 46))
|
||||
|
||||
try:
|
||||
thiswallet = Wallet.objects.get(walletname=wallet)
|
||||
thiswallet = walletobject # Wallet.objects.get(walletname=wallet)
|
||||
caveifywallet(thiswallet)
|
||||
thiswallet.ticks = thiswallet.get_ticks() # the complaints in colour form
|
||||
# fixsurvextick(thiswallet, thiswallet.ticks)
|
||||
@ -865,6 +884,8 @@ def walletedit(request, path=None):
|
||||
"dirs": dirs,
|
||||
"waldata": waldata,
|
||||
"svxfiles": svxfiles,
|
||||
"survex": waldata["survex file"],
|
||||
"survexsize": survexsize,
|
||||
"checked": checked,
|
||||
"trips": trips,
|
||||
"manywallets": [thiswallet],
|
||||
@ -889,8 +910,6 @@ def walletedit(request, path=None):
|
||||
**context,
|
||||
"date": waldata["date"],
|
||||
#'url': waldata["description url"], 'urlsize': str(len(str(waldata["description url"]))),
|
||||
"survex": waldata["survex file"],
|
||||
"survexsize": survexsize,
|
||||
"cave": cave,
|
||||
"psg": psg,
|
||||
"freetext": freetext,
|
||||
|
@ -109,7 +109,6 @@
|
||||
{% endif %}
|
||||
</em>
|
||||
|
||||
|
||||
{% if not create %}
|
||||
|
||||
{% if complaints %}
|
||||
@ -221,7 +220,7 @@
|
||||
<input {% if not user.username %} disabled{% endif %}
|
||||
label = "survex" name = "survex" size ="{{survexsize}}"
|
||||
title="List of survex files using this data"
|
||||
placeholder="caves-1623/264/side_balkon/siriuscyberlift.svx" value="{{survex}}" />
|
||||
placeholder="['caves-1623/148/148-2007.svx']" value="{{survex}}" />
|
||||
<br><br>{% if user.username %}
|
||||
<button class="fancybutton" style="padding: 0.5em 25px; margin-left: 155px; font-size: 90%; "
|
||||
type = "submit" value = "Edit" >
|
||||
@ -254,7 +253,7 @@
|
||||
<em>No other survex files found for this date.</em><br>
|
||||
{% endif %}
|
||||
|
||||
{% if metadataurl %}<span style="font-size: 70%; "><details open><summary>
|
||||
{% if metadataurl %}<span style="font-size: 70%; "><details><summary>
|
||||
JSON <br>
|
||||
</summary>
|
||||
<a href="{{metadataurl}}">{{metadataurl}}</a><br>
|
||||
|
Loading…
Reference in New Issue
Block a user