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,