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]
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} '
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,