BrickTracker/bricktracker/wish_list.py
2025-02-04 20:07:15 +01:00

57 lines
1.5 KiB
Python

import logging
from typing import Self
from flask import current_app
from .exceptions import NotFoundException
from .parser import parse_set
from .rebrickable import Rebrickable
from .rebrickable_image import RebrickableImage
from .record_list import BrickRecordList
from .wish import BrickWish
from .wish_owner_list import BrickWishOwnerList
logger = logging.getLogger(__name__)
# All the wished sets from the database
class BrickWishList(BrickRecordList[BrickWish]):
# Queries
select_query: str = 'wish/list/all'
# All the wished sets
def all(self, /) -> Self:
# Load the wished sets from the database
for record in self.select(
order=current_app.config['WISHES_DEFAULT_ORDER'],
owners=BrickWishOwnerList.as_columns(),
):
brickwish = BrickWish(record=record)
self.records.append(brickwish)
return self
# Add a set to the wishlist
@staticmethod
def add(set: str, /) -> None:
try:
set = parse_set(set)
BrickWish().select_specific(set)
except NotFoundException:
logger.debug('rebrick.lego.get_set("{set}")'.format(
set=set,
))
brickwish = Rebrickable[BrickWish](
'get_set',
set,
BrickWish,
).get()
# Insert into database
brickwish.insert()
if not current_app.config['USE_REMOTE_IMAGES']:
RebrickableImage(brickwish).download()