From: Plom Heller Date: Fri, 7 Aug 2026 12:46:53 +0000 (+0200) Subject: Don't crash --ldraw fill_paths for non-existing ones. X-Git-Url: https://plomlompom.com/repos/booking/%22https:/validator.w3.org/task?a=commitdiff_plain;h=refs%2Fheads%2Fmaster;p=bricksplom Don't crash --ldraw fill_paths for non-existing ones. --- diff --git a/src/bricksplom/ldraw.py b/src/bricksplom/ldraw.py index 29432ce..bb57901 100644 --- a/src/bricksplom/ldraw.py +++ b/src/bricksplom/ldraw.py @@ -14,6 +14,7 @@ LDRAW_STUDS = { 'stud6a.dat', 'stud10.dat', 'stud15.dat', + # mini-figs 'hipstud.dat', 's/973s01.dat' } @@ -21,9 +22,12 @@ LDRAW_STUDS = { LdrawRefsTree = tuple[Path, '_SubRefs'] _SubRefs = dict[str, LdrawRefsTree] +_N_TOKS_PER_REFLINE = 15 -_N_TOKS_PER_REFLINE = 15 +class LdrawPathFailure(Exception): + 'For when no proper .dat file found to filename.' + pass class LdrawDb: @@ -44,7 +48,7 @@ class LdrawDb: path = self._root.joinpath(prefix, filename) if path.exists(): return path - raise Exception(f'invalid ldraw reference: {filename}') + raise LdrawPathFailure(f'invalid ldraw reference: {filename}') def _walk_tree( self, diff --git a/src/bricksplom/misc.py b/src/bricksplom/misc.py index 0a4c4a2..274b8f3 100644 --- a/src/bricksplom/misc.py +++ b/src/bricksplom/misc.py @@ -7,7 +7,7 @@ from pathlib import Path from typing import Callable, Optional, Self # ourselves from bricksplom.constants import CHAR_NEWLINE -from bricksplom.ldraw import LdrawDb, LdrawRefsTree +from bricksplom.ldraw import LdrawDb, LdrawPathFailure, LdrawRefsTree CHAR_SEP_TOKEN = ' ' CHAR_COMMENT = '#' @@ -418,7 +418,7 @@ class BrickDesign(Textfiled, WithDb, Lookupable): a_key, a_val_str = attr.split(CHAR_ATTR_EQ, maxsplit=1) assert a_key in annos if annos[a_key] is int: - assert a_val_str.isdigit() + assert a_val_str.isdigit(), a_val_str setattr(attrs, a_key, int(a_val_str)) else: setattr(attrs, a_key, a_val_str) @@ -734,7 +734,12 @@ class BricksDb: for design in [design for design in self.designs.values() if not (design.alternate_to or design.ldraw)]: filename = f'{design.id_}.dat' - if self.ldraw.path(filename).exists(): + exists = False + try: + exists = self.ldraw.path(filename).exists() + except LdrawPathFailure: + pass + if exists: assert design.direct_attrs is not None design.direct_attrs.ldraw = filename self._check_consistencies()