From: Plom Heller Date: Sat, 2 May 2026 03:56:02 +0000 (+0200) Subject: For tables consistency check, collect and display _all_ issues. X-Git-Url: https://plomlompom.com/repos/booking/%22https:/validator.w3.org/process?a=commitdiff_plain;h=6836b671dc30dd0e9fad686b85269b660ddcdd73;p=bricksplom For tables consistency check, collect and display _all_ issues. --- diff --git a/bricksplom.py b/bricksplom.py index f9143ef..e3b3ecc 100755 --- a/bricksplom.py +++ b/bricksplom.py @@ -406,46 +406,52 @@ class BricksDb: def _check_consistencies_between_tables( self ) -> None: + fails = [] # check all items listed in collections recorded in pieces for coll in self.collections.values(): - for _, piece_id, _ in coll.piece_listings_flat(): - assert piece_id in self.pieces, piece_id + for piece_id in [t[1] for t in coll.piece_listings_flat() + if t[1] not in self.pieces]: + fails += [f'missing Piece of ID: {piece_id}'] # check all designs listed in boxes recorded in designs for design_ids in [b.designs for b in self.boxes().values()]: - for design_id in design_ids: - assert design_id in self.designs, design_id + for design_id in [d_id for d_id in design_ids + if d_id not in self.designs]: + fails += [f'missing Design of ID: {design_id}'] # check all pieces' designs recorded in designs - for design_id in [piece.design_id for piece in self.pieces.values()]: - assert Design.possibly_by_alt(design_id, self.designs), design_id + for d_id in [p.design_id for p in self.pieces.values() + if not Design.possibly_by_alt(p.design_id, self.designs)]: + fails += [f'missing Design of ID: {d_id}'] # check all recorded designs have matching pieces (at least via alts) for design_id, alts in [(k, v.alternates) for k, v in self.designs.items()]: - pieces_found = False - for id_ in [id_ for id_ in {design_id} | alts - if id_ in [piece.design_id - for piece in self.pieces.values()]]: - pieces_found = True - break - assert pieces_found, design_id + if not [id_ for id_ in {design_id} | alts + if id_ in [p.design_id for p in self.pieces.values()]]: + fails += [f'missing Pieces for design of ID: {design_id}'] # check all pieces' colors are recorded - for color_id in [v.color_id for v in self.pieces.values()]: - assert color_id in self.colors, color_id + for color_id in [v.color_id for v in self.pieces.values() + if v.color_id not in self.colors]: + fails += [f'missing Color of ID: {color_id}'] # check collections in-out directions even out counts: dict[str, int] = {} - for coll in self.collections.values(): - if coll.is_in is None: - continue + for coll in [coll for coll in self.collections.values() + if coll.is_in is not None]: for count, piece_id, _ in coll.piece_listings_flat(): counts[piece_id] = (counts.get(piece_id, 0) + ((1 if coll.is_in else (-1)) * count)) - for piece_id, count in counts.items(): - assert count == 0, (piece_id, count) + for piece_id, count in [(k, v) for k, v in counts.items() + if v != 0]: + fails += [f'invalid count for Piece of ID: {piece_id} ({count})'] + + # print, and crash on, collected fails, if any + for fail in fails: + print(fail) + assert not fails def lookup( self,