summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--parsers/survex.py43
1 files changed, 29 insertions, 14 deletions
diff --git a/parsers/survex.py b/parsers/survex.py
index 1f38f96..a88b5f3 100644
--- a/parsers/survex.py
+++ b/parsers/survex.py
@@ -980,8 +980,23 @@ class LoadingSurvex:
def LoadSurvexRef(self, survexblock, args):
"""Interpret the *ref record, and all the many variants
+
+ todo: check the year, ie that the *ref 2017#56 wallet is for a survexblock dated in 2017.
"""
- # print(self.insp+ "*REF ---- '"+ args +"'")
+ def check_reused_wallet():
+ if walletnum == "00":
+ # we don't mind if lost of survex files refer to the index wallet.
+ # this is a way of saying that there is no wallet - someone has investigated.
+ pass
+ message = f" ! Wallet *REF {refscan} in {survexblock.survexfile.path} - re-uses #00 '{survexblock.scanswallet.walletname}'"
+ print(self.insp + message)
+ print(self.insp + message, file=sys.stderr)
+ else:
+ message = f" ! Wallet *REF {refscan} in {survexblock.survexfile.path} - Already a DIFFERENT wallet is set for this block '{survexblock.scanswallet.walletname}'"
+ print(self.insp + message)
+ stash_data_issue(parser="ref", message=message, url=url)
+ return
+
url = get_offending_filename(survexblock.survexfile.path)
# *REF but also ; Ref years from 1960 to 2039
refline = self.rx_ref_text.match(args)
@@ -998,7 +1013,7 @@ class LoadingSurvex:
argsgps = self.rx_argsref.match(args)
if argsgps:
- yr, letterx, wallet = argsgps.groups()
+ yr, letterx, walletnum = argsgps.groups()
else:
perps = get_people_on_trip(survexblock)
message = f" ! Wallet *REF bad in '{survexblock.survexfile.path}' malformed id '{args}' {perps}"
@@ -1006,23 +1021,20 @@ class LoadingSurvex:
stash_data_issue(parser="ref", message=message, url=url)
return
- if not letterx:
- letterx = ""
- else:
- letterx = "X"
+ if letterx:
message = f" ! Wallet *REF has LETTER in '{survexblock.survexfile.path}' malformed id '{args}' {perps}"
print(self.insp + message)
stash_data_issue(parser="ref", message=message, url=url)
- if len(wallet) < 2:
- wallet = "0" + wallet
+ if len(walletnum) < 2:
+ walletnum = "0" + walletnum
if not (int(yr) > 1960 and int(yr) < 2050):
message = " ! Wallet year out of bounds {yr} '{refscan}' {survexblock.survexfile.path}"
print(self.insp + message)
stash_data_issue(parser="ref", message=message, url=url)
- refscan = f"{yr}#{letterx}{wallet}"
+ refscan = f"{yr}#{walletnum}"
try:
- if int(wallet) > 99:
+ if int(walletnum) > 99:
message = f" ! Wallet *REF {refscan} - very big (more than 99) so probably wrong in '{survexblock.survexfile.path}'"
print(self.insp + message)
stash_data_issue(parser="ref", message=message, url=url)
@@ -1031,6 +1043,7 @@ class LoadingSurvex:
print(self.insp + message)
stash_data_issue(parser="ref", message=message, url=url)
+ # Look to see if we have a record of this wallet already - which would be unexpected
manywallets = Wallet.objects.filter(
walletname=refscan
) # assumes all wallets found in earlier pass of data import
@@ -1041,10 +1054,12 @@ class LoadingSurvex:
stash_data_issue(parser="ref", message=message, url=url)
if survexblock.scanswallet:
- if survexblock.scanswallet.walletname != refscan:
- message = f" ! Wallet *REF {refscan} in {survexblock.survexfile.path} - Already a DIFFERENT wallet is set for this block '{survexblock.scanswallet.walletname}'"
- print(self.insp + message)
- stash_data_issue(parser="ref", message=message, url=url)
+ if survexblock.scanswallet.walletname == refscan:
+ # this might happen when a survex file is re-parsed after editing, but if it is the same thing then OK.
+ pass
+ else:
+ check_reused_wallet()
+
else:
survexblock.scanswallet = manywallets[0] # this is a ForeignKey field
survexblock.save()