forked from FrederikBaerentsen/BrickTracker
86 lines
2.6 KiB
Python
86 lines
2.6 KiB
Python
|
import logging
|
||
|
from typing import TYPE_CHECKING
|
||
|
|
||
|
from flask import current_app
|
||
|
|
||
|
from .minifigure import BrickMinifigure
|
||
|
from .rebrickable import Rebrickable
|
||
|
from .rebrickable_image import RebrickableImage
|
||
|
from .rebrickable_parts import RebrickableParts
|
||
|
if TYPE_CHECKING:
|
||
|
from .set import BrickSet
|
||
|
from .socket import BrickSocket
|
||
|
|
||
|
logger = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
# Minifigures from Rebrickable
|
||
|
class RebrickableMinifigures(object):
|
||
|
socket: 'BrickSocket'
|
||
|
brickset: 'BrickSet'
|
||
|
|
||
|
def __init__(self, socket: 'BrickSocket', brickset: 'BrickSet', /):
|
||
|
# Save the socket
|
||
|
self.socket = socket
|
||
|
|
||
|
# Save the objects
|
||
|
self.brickset = brickset
|
||
|
|
||
|
# Import the minifigures from Rebrickable
|
||
|
def download(self, /) -> None:
|
||
|
self.socket.auto_progress(
|
||
|
message='Set {number}: loading minifigures from Rebrickable'.format( # noqa: E501
|
||
|
number=self.brickset.fields.set_num,
|
||
|
),
|
||
|
increment_total=True,
|
||
|
)
|
||
|
|
||
|
logger.debug('rebrick.lego.get_set_minifigs("{set_num}")'.format(
|
||
|
set_num=self.brickset.fields.set_num,
|
||
|
))
|
||
|
|
||
|
minifigures = Rebrickable[BrickMinifigure](
|
||
|
'get_set_minifigs',
|
||
|
self.brickset.fields.set_num,
|
||
|
BrickMinifigure,
|
||
|
socket=self.socket,
|
||
|
brickset=self.brickset,
|
||
|
).list()
|
||
|
|
||
|
# Process each minifigure
|
||
|
total = len(minifigures)
|
||
|
for index, minifigure in enumerate(minifigures):
|
||
|
# Insert into the database
|
||
|
self.socket.auto_progress(
|
||
|
message='Set {number}: inserting minifigure {current}/{total} into database'.format( # noqa: E501
|
||
|
number=self.brickset.fields.set_num,
|
||
|
current=index+1,
|
||
|
total=total,
|
||
|
)
|
||
|
)
|
||
|
|
||
|
# Insert into database
|
||
|
minifigure.insert(commit=False)
|
||
|
|
||
|
# Grab the image
|
||
|
self.socket.progress(
|
||
|
message='Set {number}: downloading minifigure {current}/{total} image'.format( # noqa: E501
|
||
|
number=self.brickset.fields.set_num,
|
||
|
current=index+1,
|
||
|
total=total,
|
||
|
)
|
||
|
)
|
||
|
|
||
|
if not current_app.config['USE_REMOTE_IMAGES'].value:
|
||
|
RebrickableImage(
|
||
|
self.brickset,
|
||
|
minifigure=minifigure
|
||
|
).download()
|
||
|
|
||
|
# Load the inventory
|
||
|
RebrickableParts(
|
||
|
self.socket,
|
||
|
self.brickset,
|
||
|
minifigure=minifigure,
|
||
|
).download()
|