From: Plom Heller Date: Sun, 9 Aug 2026 04:06:42 +0000 (+0200) Subject: Exile into-what-box recommendations from sets default view into -f to_boxes. X-Git-Url: https://plomlompom.com/repos/%22https:/validator.w3.org/static/foo.html?a=commitdiff_plain;h=4fdc62d9b561d3ce30684fb12ec9320324d435a1;p=bricksplom Exile into-what-box recommendations from sets default view into -f to_boxes. --- diff --git a/src/bricksplom/misc.py b/src/bricksplom/misc.py index becb8ce..cbad122 100644 --- a/src/bricksplom/misc.py +++ b/src/bricksplom/misc.py @@ -610,7 +610,8 @@ class BrickSet(Textfiled, WithDb, Lookupable): return tuple(collected) def show( - self + self, + to_boxes=False ) -> str: def format_line(count, brick_id, comment) -> str: brick = self.db.bricks[brick_id] @@ -618,28 +619,33 @@ class BrickSet(Textfiled, WithDb, Lookupable): tail_comment = f' # {comment}' if comment else '' color = str(self.db.colors[self.db.bricks[brick_id].color_id] ).lstrip().split(CHAR_SEP_TOKEN, maxsplit=1)[1] - box: Optional[Box] = None - for i_box in self.db.boxes.values(): - for idx_in_box in [ - idx for idx, d_to_ls - in enumerate(i_box.designs_to_listings) - if brick_id in [listing[1] for listing in d_to_ls[1]]]: - box = i_box - break - if box: - break - if not box: + if to_boxes: + box: Optional[Box] = None for i_box in self.db.boxes.values(): for idx_in_box in [ - idx for idx, t + idx for idx, d_to_ls in enumerate(i_box.designs_to_listings) - if design_id in t[0].all_ids]: + if brick_id in [listing[1] + for listing in d_to_ls[1]]]: box = i_box break if box: break - box_listing = ((box.id_indented() if box else Box.indent_id('')) - + ':' + (f'{idx_in_box:>2}' if box else '__')) + if not box: + for i_box in self.db.boxes.values(): + for idx_in_box in [ + idx for idx, t + in enumerate(i_box.designs_to_listings) + if design_id in t[0].all_ids]: + box = i_box + break + if box: + break + box_listing = ((box.id_indented() if box + else Box.indent_id('')) + + ':' + (f'{idx_in_box:>2}' if box else '__')) + else: + box_listing = '' return ( f'{count:>2}× {Brick.indent_id(brick_id)}:' f'{BrickDesign.indent_id(design_id)} {box_listing} {color} ' @@ -647,10 +653,21 @@ class BrickSet(Textfiled, WithDb, Lookupable): return f'{self}{CHAR_NEWLINE}{self._format_paginated(format_line)}' + @classmethod + def formatters( + cls + ) -> dict[str, tuple[str, Callable[[Self], str]]]: + return super().formatters() | { + 'to_boxes': ( + ('default with additional into-what-box recommendations ' + 'per listing'), + lambda item: item.show(to_boxes=True)) + } + class Box(WithDb, Lookupable): 'Order of designs.' - _id_indent = 4 + _id_indent = 5 def __init__( self,