From eefbdb59bb9bab6c08aa482394f20057f01acdf3 Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Tue, 16 Dec 2025 02:33:53 +0000 Subject: [PATCH] finds case-insensitive scan file filenames and suppresses old error messages --- parsers/drawings.py | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/parsers/drawings.py b/parsers/drawings.py index 2c1bfc9..c9600a2 100644 --- a/parsers/drawings.py +++ b/parsers/drawings.py @@ -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