home
·
contact
·
privacy
projects
/
bricksplom
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
5b9a665
)
For tables consistency check, collect and display _all_ issues.
master
author
Plom Heller
<plom@plomlompom.com>
Sat, 2 May 2026 03:56:02 +0000
(
05:56
+0200)
committer
Plom Heller
<plom@plomlompom.com>
Sat, 2 May 2026 03:56:02 +0000
(
05:56
+0200)
bricksplom.py
patch
|
blob
|
history
diff --git
a/bricksplom.py
b/bricksplom.py
index f9143efac68a6d3026e032b3fd2d96442964f5ad..e3b3ecc61c3c5f86ee1a9515e04b58a7d1524f3a 100755
(executable)
--- a/
bricksplom.py
+++ b/
bricksplom.py
@@
-406,46
+406,52
@@
class BricksDb:
def _check_consistencies_between_tables(
self
) -> None:
def _check_consistencies_between_tables(
self
) -> None:
+ fails = []
# check all items listed in collections recorded in pieces
for coll in self.collections.values():
# 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()]:
# 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
# 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()]:
# 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
# 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] = {}
# 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 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,
def lookup(
self,