2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2025-12-16 17:47:07 +00:00

finds case-insensitive scan file filenames and suppresses old error messages

This commit is contained in:
2025-12-16 02:33:53 +00:00
parent 542e9c778a
commit eefbdb59bb

View File

@@ -7,6 +7,7 @@ import settings
from troggle.core.models.survex import DrawingFile, SingleScan
from troggle.core.models.troggle import DataIssue
from troggle.core.models.wallets import Wallet
from troggle.core.utils import current_expo
"""Searches through all the :drawings: repository looking
for tunnel and therion files
@@ -272,6 +273,8 @@ def _handle_obsolete_wallets(old_wallet, dwgfile, scanfilename, parser_label):
DataIssue.objects.update_or_create(parser=parser_label, message=message, url=f"/dwgdataraw/{dwgfile}")
return False
def is_recent(walletname):
return walletname[:4] == current_expo() or walletname[:4] == str(int(current_expo()) - 1)
def _process_reference(dwgfile, path, parser_label="Tunnel"):
"""Unified processor to link drawing files to wallets/scans or referenced drawings.
@@ -300,25 +303,42 @@ def _process_reference(dwgfile, path, parser_label="Tunnel"):
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]}]: {walletname} {scanfilename} {dwgfile.dwgpath} {path} {plist}"
scan_count = wallet.singlescan_set.filter(name=scanfilename).count() # file name
if scan_count == 0:
iscan_count = wallet.singlescan_set.filter(name__iexact=scanfilename).count() # __iexact means case-insensitive
if iscan_count == 1:
if is_recent(walletname):
scansfile = wallet.singlescan_set.get(name__iexact=scanfilename)
message = f" - Case mismatch {walletname} '{scanfilename}' != '{scansfile.name}' in '{dwgfile.dwgpath}'"
print(message)
DataIssue.objects.update_or_create(parser=parser_label, message=message)
else:
if scan_count == 1:
scansfile = wallet.singlescan_set.get(name=scanfilename)
else:
scan_files = wallet.singlescan_set.filter(name=scanfilename)
scansfile = scan_files[0]
plist = [sf.ffile for sf in scan_files]
message = f"! More than one image FILENAME matches filter query. {walletname} {scanfilename} {dwgfile.dwgpath} {path} {plist}"
print(message)
DataIssue.objects.update_or_create(parser=parser_label, message=message)
scansfile = scansfilel[0]
if wallet:
dwgfile.dwgwallets.add(wallet)
if scansfile:
dwgfile.scans.add(scansfile)
# If a wallet was found but no scan was associated from the wallet, record a DataIssue. There are a lot of these..
# If a wallet was found but no scan was associated from the wallet, record a DataIssue.
# There are a lot of these, so only do it for the current year
if wallet and not scansfile:
scanfilename = Path(path).name
message = f"! In '{wallet.walletname}' scanned file is not actually found '{scanfilename}' in '{path}'"
wurl = f"/survey_scans/{wallet.walletname}/".replace("#", ":")
DataIssue.objects.update_or_create(parser="z_"+parser_label, message=message, url=wurl)
if is_recent(walletname):
scanfilename = Path(path).name
message = f"! In '{wallet.walletname}' scanned file is not actually found '{scanfilename}' in '{path}'"
wurl = f"/survey_scans/{wallet.walletname}/".replace("#", ":")
DataIssue.objects.update_or_create(parser="z_"+parser_label, message=message, url=wurl)
return wallet, scansfile
# Not a wallet reference; check image extension and possibly drawing-to-drawing reference