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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user