2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2026-01-18 16:42:48 +00:00

now handles reanmed KH wallets

This commit is contained in:
2025-12-16 01:50:04 +00:00
parent 4d52cdbf18
commit 542e9c778a

View File

@@ -190,7 +190,7 @@ def parse_tnl_file(dwgfile, path):
# Delegate to the unified reference processor for consistent behaviour
_process_reference(dwgfile, path, parser_label="Tunnel")
def _find_renamed_x_wallet(old_wallet, scanfilename):
def _find_renamed_x_wallet(old_wallet, scanfilename, parser_label):
"""In past years we had a different naming convention for wallets containing electronic files
but now these have been renamed simply as 20nn#nn without the X.
"""
@@ -210,28 +210,68 @@ def _find_renamed_x_wallet(old_wallet, scanfilename):
valid_wallet = ss.wallet
return valid_wallet
def _find_renamed_kh_wallet(old_wallet, scanfilename, parser_label):
"""In past years we had a different naming convention for wallets
for Kaninchehohle (KH) and for non-KH caves.
"""
valid_wallet = False
if old_wallet == "smkhs":
# there is no valid wallet, but we could give a link to old_wallets["smkhs"]
message = f" ! Non-wallet {old_wallet}=>{old_wallets["smkhs"][0]}/{scanfilename}"
# print(message)
DataIssue.objects.update_or_create(parser=parser_label, message=message, url="")
return False
for walletname in old_wallets[old_wallet]:
try:
wallet = Wallet.objects.get(walletname=walletname)
scans = SingleScan.objects.filter(wallet=wallet).order_by('-wallet__walletname')
for ss in scans:
if ss.name == scanfilename:
# print(f"FOUND {old_wallet}=>{ss.wallet.walletname}:{scanfilename}")
if valid_wallet:
message = f" - AMBIGUOUS scan filename {old_wallet}=>{ss.wallet.walletname}:{scanfilename}"
print(message)
DataIssue.objects.update_or_create(parser=parser_label, message=message, url="")
return False
else:
valid_wallet = ss.wallet
except Exception as e:
message = f" ! EXCEPTION scan filename {old_wallet}=>{walletname}:{scanfilename} {e}"
print(message)
DataIssue.objects.update_or_create(parser=parser_label, message=message, url="")
return False
return valid_wallet
def _handle_obsolete_wallets(old_wallet, dwgfile, scanfilename, parser_label):
"""Wallets, which are folders on the filesystem, have been renamed over the years but
the filepaths emnbedded in drawing files are what they were when the drawing file was created.
So we have to match up these old wallet names with what they are now.
"""
message = ""
if x := rx_x_wallet.search(old_wallet):
# only doing 2016#X04 etc. as yet
if w_renamed := _find_renamed_x_wallet(old_wallet, scanfilename):
if w_renamed := _find_renamed_x_wallet(old_wallet, scanfilename, parser_label):
return w_renamed
message = f"- Warning {parser_label} XFILES {old_wallet} {(old_wallet==x.group(1))} in {path}"
message = f" - Warning {parser_label} XFILES {old_wallet} {(old_wallet==x.group(1))} in {path}"
print(message)
DataIssue.objects.update_or_create(parser=parser_label, message=message, url=f"/dwgdataraw/{path}")
return False
if old_wallet not in old_wallets:
message = f"- Warning {old_wallet} not a currently valid wallet name. In {path}"
if old_wallet in old_wallets:
if w_renamed := _find_renamed_kh_wallet(old_wallet, scanfilename, parser_label):
return w_renamed
if old_wallet != "smkhs":
message = f" ! FAILURE {old_wallet} was not handled properly. In {dwgfile.dwgpath}"
else:
message = f" ! ERROR {old_wallet} is an unrecognised invalid wallet name. In {dwgfile.dwgpath}"
if message:
print(message)
DataIssue.objects.update_or_create(parser=parser_label, message=message, url=f"/dwgdataraw/{path}")
return False
DataIssue.objects.update_or_create(parser=parser_label, message=message, url=f"/dwgdataraw/{dwgfile}")
return False
def _process_reference(dwgfile, path, parser_label="Tunnel"):
"""Unified processor to link drawing files to wallets/scans or referenced drawings.
@@ -248,22 +288,23 @@ def _process_reference(dwgfile, path, parser_label="Tunnel"):
if mscansdir := rx_wallet.search(path):
walletname = mscansdir.group(1)
scanfilename = mscansdir.group(2)
scanswalletl = Wallet.objects.filter(walletname=walletname) # wallet name
if len(scanswalletl):
wallet = scanswalletl[0]
if len(scanswalletl) > 1:
message = f"! More than one scan FOLDER matches filter query. [{scanswalletl[0]}]: {mscansdir.group(1)} {mscansdir.group(2)} {dwgfile.dwgpath} {path}"
n = Wallet.objects.filter(walletname=walletname).count() # wallet name
if n >= 1:
wallets = Wallet.objects.filter(walletname=walletname) # wallet name
wallet = wallets[0]
if n > 1:
message = f"! More than one scan FOLDER matches filter query. [{wallet}]: {walletname} {scanfilename} {dwgfile.dwgpath} {path}"
print(message)
DataIssue.objects.update_or_create(parser=parser_label, message=message)
else: # found a wallet name, but it is not one we recognise as having been imported
wallet = _handle_obsolete_wallets(mscansdir.group(1),dwgfile, scanfilename, parser_label)
wallet = _handle_obsolete_wallets(walletname,dwgfile, scanfilename, parser_label)
if wallet:
scansfilel = wallet.singlescan_set.filter(name=scanfilename) # file name
if len(scansfilel):
if len(scansfilel) > 1:
plist = [sf.ffile for sf in scansfilel]
message = f"! More than one image FILENAME matches filter query. [{scansfilel[0]}]: {mscansdir.group(1)} {mscansdir.group(2)} {dwgfile.dwgpath} {path} {plist}"
message = f"! More than one image FILENAME matches filter query. [{scansfilel[0]}]: {walletname} {scanfilename} {dwgfile.dwgpath} {path} {plist}"
print(message)
DataIssue.objects.update_or_create(parser=parser_label, message=message)
scansfile = scansfilel[0]
@@ -335,7 +376,7 @@ def _assign_wallets_for_model(model_obj, wallet_names, parser_label="Tunnel"):
return wallets
# Nothing found: record a DataIssue
message = f" ! wallet(s) '{names}' not found from {getattr(model_obj, 'dwgpath', model_obj)}"
print(message)
# print(message)
DataIssue.objects.update_or_create(parser=parser_label, message=message, url=f"/dwgdataraw/{getattr(model_obj, 'dwgpath', '')}")
return []
except Exception as e: