Simplify BrickRecord based lists to deduplicate code
This commit is contained in:
parent
8ad525926a
commit
8e40b1fd7e
@ -38,13 +38,7 @@ class BrickMinifigureList(BrickRecordList[BrickMinifigure]):
|
||||
|
||||
# Load all minifigures
|
||||
def all(self, /) -> Self:
|
||||
for record in self.select(
|
||||
override_query=self.all_query,
|
||||
order=self.order
|
||||
):
|
||||
minifigure = BrickMinifigure(record=record)
|
||||
|
||||
self.records.append(minifigure)
|
||||
self.list(override_query=self.all_query)
|
||||
|
||||
return self
|
||||
|
||||
@ -55,13 +49,7 @@ class BrickMinifigureList(BrickRecordList[BrickMinifigure]):
|
||||
self.fields.color = color
|
||||
|
||||
# Load the minifigures from the database
|
||||
for record in self.select(
|
||||
override_query=self.damaged_part_query,
|
||||
order=self.order
|
||||
):
|
||||
minifigure = BrickMinifigure(record=record)
|
||||
|
||||
self.records.append(minifigure)
|
||||
self.list(override_query=self.damaged_part_query)
|
||||
|
||||
return self
|
||||
|
||||
@ -73,27 +61,45 @@ class BrickMinifigureList(BrickRecordList[BrickMinifigure]):
|
||||
else:
|
||||
order = '"bricktracker_minifigures"."rowid" DESC'
|
||||
|
||||
for record in self.select(
|
||||
override_query=self.last_query,
|
||||
order=order,
|
||||
limit=limit
|
||||
):
|
||||
minifigure = BrickMinifigure(record=record)
|
||||
|
||||
self.records.append(minifigure)
|
||||
self.list(override_query=self.last_query, order=order, limit=limit)
|
||||
|
||||
return self
|
||||
|
||||
# Base minifigure list
|
||||
def list(
|
||||
self,
|
||||
/,
|
||||
*,
|
||||
override_query: str | None = None,
|
||||
order: str | None = None,
|
||||
limit: int | None = None,
|
||||
**context: Any,
|
||||
) -> None:
|
||||
if order is None:
|
||||
order = self.order
|
||||
|
||||
if hasattr(self, 'brickset'):
|
||||
brickset = self.brickset
|
||||
else:
|
||||
brickset = None
|
||||
|
||||
# Load the sets from the database
|
||||
for record in super().select(
|
||||
override_query=override_query,
|
||||
order=order,
|
||||
limit=limit,
|
||||
):
|
||||
minifigure = BrickMinifigure(brickset=brickset, record=record)
|
||||
|
||||
self.records.append(minifigure)
|
||||
|
||||
# Load minifigures from a brickset
|
||||
def from_set(self, brickset: 'BrickSet', /) -> Self:
|
||||
# Save the brickset
|
||||
self.brickset = brickset
|
||||
|
||||
# Load the minifigures from the database
|
||||
for record in self.select(order=self.order):
|
||||
minifigure = BrickMinifigure(brickset=self.brickset, record=record)
|
||||
|
||||
self.records.append(minifigure)
|
||||
self.list()
|
||||
|
||||
return self
|
||||
|
||||
@ -104,13 +110,7 @@ class BrickMinifigureList(BrickRecordList[BrickMinifigure]):
|
||||
self.fields.color = color
|
||||
|
||||
# Load the minifigures from the database
|
||||
for record in self.select(
|
||||
override_query=self.missing_part_query,
|
||||
order=self.order
|
||||
):
|
||||
minifigure = BrickMinifigure(record=record)
|
||||
|
||||
self.records.append(minifigure)
|
||||
self.list(override_query=self.missing_part_query)
|
||||
|
||||
return self
|
||||
|
||||
@ -121,13 +121,7 @@ class BrickMinifigureList(BrickRecordList[BrickMinifigure]):
|
||||
self.fields.color = color
|
||||
|
||||
# Load the minifigures from the database
|
||||
for record in self.select(
|
||||
override_query=self.using_part_query,
|
||||
order=self.order
|
||||
):
|
||||
minifigure = BrickMinifigure(record=record)
|
||||
|
||||
self.records.append(minifigure)
|
||||
self.list(override_query=self.using_part_query)
|
||||
|
||||
return self
|
||||
|
||||
|
@ -42,16 +42,50 @@ class BrickPartList(BrickRecordList[BrickPart]):
|
||||
|
||||
# Load all parts
|
||||
def all(self, /) -> Self:
|
||||
for record in self.select(
|
||||
override_query=self.all_query,
|
||||
order=self.order
|
||||
):
|
||||
part = BrickPart(record=record)
|
||||
|
||||
self.records.append(part)
|
||||
self.list(override_query=self.all_query)
|
||||
|
||||
return self
|
||||
|
||||
# Base part list
|
||||
def list(
|
||||
self,
|
||||
/,
|
||||
*,
|
||||
override_query: str | None = None,
|
||||
order: str | None = None,
|
||||
limit: int | None = None,
|
||||
**context: Any,
|
||||
) -> None:
|
||||
if order is None:
|
||||
order = self.order
|
||||
|
||||
if hasattr(self, 'brickset'):
|
||||
brickset = self.brickset
|
||||
else:
|
||||
brickset = None
|
||||
|
||||
if hasattr(self, 'minifigure'):
|
||||
minifigure = self.minifigure
|
||||
else:
|
||||
minifigure = None
|
||||
|
||||
# Load the sets from the database
|
||||
for record in super().select(
|
||||
override_query=override_query,
|
||||
order=order,
|
||||
limit=limit,
|
||||
):
|
||||
part = BrickPart(
|
||||
brickset=brickset,
|
||||
minifigure=minifigure,
|
||||
record=record,
|
||||
)
|
||||
|
||||
if current_app.config['SKIP_SPARE_PARTS'] and part.fields.spare:
|
||||
continue
|
||||
|
||||
self.records.append(part)
|
||||
|
||||
# List specific parts from a brickset or minifigure
|
||||
def list_specific(
|
||||
self,
|
||||
@ -65,17 +99,7 @@ class BrickPartList(BrickRecordList[BrickPart]):
|
||||
self.minifigure = minifigure
|
||||
|
||||
# Load the parts from the database
|
||||
for record in self.select(order=self.order):
|
||||
part = BrickPart(
|
||||
brickset=self.brickset,
|
||||
minifigure=minifigure,
|
||||
record=record,
|
||||
)
|
||||
|
||||
if current_app.config['SKIP_SPARE_PARTS'] and part.fields.spare:
|
||||
continue
|
||||
|
||||
self.records.append(part)
|
||||
self.list()
|
||||
|
||||
return self
|
||||
|
||||
@ -89,19 +113,7 @@ class BrickPartList(BrickRecordList[BrickPart]):
|
||||
self.minifigure = minifigure
|
||||
|
||||
# Load the parts from the database
|
||||
for record in self.select(
|
||||
override_query=self.minifigure_query,
|
||||
order=self.order
|
||||
):
|
||||
part = BrickPart(
|
||||
minifigure=minifigure,
|
||||
record=record,
|
||||
)
|
||||
|
||||
if current_app.config['SKIP_SPARE_PARTS'] and part.fields.spare:
|
||||
continue
|
||||
|
||||
self.records.append(part)
|
||||
self.list(override_query=self.minifigure_query)
|
||||
|
||||
return self
|
||||
|
||||
@ -121,33 +133,13 @@ class BrickPartList(BrickRecordList[BrickPart]):
|
||||
self.fields.color = brickpart.fields.color
|
||||
|
||||
# Load the parts from the database
|
||||
for record in self.select(
|
||||
override_query=self.print_query,
|
||||
order=self.order
|
||||
):
|
||||
part = BrickPart(
|
||||
record=record,
|
||||
)
|
||||
|
||||
if (
|
||||
current_app.config['SKIP_SPARE_PARTS'] and
|
||||
part.fields.spare
|
||||
):
|
||||
continue
|
||||
|
||||
self.records.append(part)
|
||||
self.list(override_query=self.print_query)
|
||||
|
||||
return self
|
||||
|
||||
# Load problematic parts
|
||||
def problem(self, /) -> Self:
|
||||
for record in self.select(
|
||||
override_query=self.problem_query,
|
||||
order=self.order
|
||||
):
|
||||
part = BrickPart(record=record)
|
||||
|
||||
self.records.append(part)
|
||||
self.list(override_query=self.problem_query)
|
||||
|
||||
return self
|
||||
|
||||
@ -178,21 +170,7 @@ class BrickPartList(BrickRecordList[BrickPart]):
|
||||
self.fields.color = brickpart.fields.color
|
||||
|
||||
# Load the parts from the database
|
||||
for record in self.select(
|
||||
override_query=self.different_color_query,
|
||||
order=self.order
|
||||
):
|
||||
part = BrickPart(
|
||||
record=record,
|
||||
)
|
||||
|
||||
if (
|
||||
current_app.config['SKIP_SPARE_PARTS'] and
|
||||
part.fields.spare
|
||||
):
|
||||
continue
|
||||
|
||||
self.records.append(part)
|
||||
self.list(override_query=self.different_color_query)
|
||||
|
||||
return self
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
from typing import Self
|
||||
from typing import Any, Self
|
||||
|
||||
from flask import current_app
|
||||
|
||||
@ -36,23 +36,8 @@ class BrickSetList(BrickRecordList[BrickSet]):
|
||||
|
||||
# All the sets
|
||||
def all(self, /) -> Self:
|
||||
themes = set()
|
||||
|
||||
# Load the sets from the database
|
||||
for record in self.select(
|
||||
order=self.order,
|
||||
owners=BrickSetOwnerList.as_columns(),
|
||||
statuses=BrickSetStatusList.as_columns(),
|
||||
tags=BrickSetTagList.as_columns(),
|
||||
):
|
||||
brickset = BrickSet(record=record)
|
||||
|
||||
self.records.append(brickset)
|
||||
themes.add(brickset.theme.name)
|
||||
|
||||
# Convert the set into a list and sort it
|
||||
self.themes = list(themes)
|
||||
self.themes.sort()
|
||||
self.list(do_theme=True)
|
||||
|
||||
return self
|
||||
|
||||
@ -62,13 +47,7 @@ class BrickSetList(BrickRecordList[BrickSet]):
|
||||
self.fields.figure = figure
|
||||
|
||||
# Load the sets from the database
|
||||
for record in self.select(
|
||||
override_query=self.damaged_minifigure_query,
|
||||
order=self.order
|
||||
):
|
||||
brickset = BrickSet(record=record)
|
||||
|
||||
self.records.append(brickset)
|
||||
self.list(override_query=self.damaged_minifigure_query)
|
||||
|
||||
return self
|
||||
|
||||
@ -79,25 +58,7 @@ class BrickSetList(BrickRecordList[BrickSet]):
|
||||
self.fields.color = color
|
||||
|
||||
# Load the sets from the database
|
||||
for record in self.select(
|
||||
override_query=self.damaged_part_query,
|
||||
order=self.order
|
||||
):
|
||||
brickset = BrickSet(record=record)
|
||||
|
||||
self.records.append(brickset)
|
||||
|
||||
return self
|
||||
|
||||
# A generic list of the different sets
|
||||
def generic(self, /) -> Self:
|
||||
for record in self.select(
|
||||
override_query=self.generic_query,
|
||||
order=self.order
|
||||
):
|
||||
brickset = BrickSet(record=record)
|
||||
|
||||
self.records.append(brickset)
|
||||
self.list(override_query=self.damaged_part_query)
|
||||
|
||||
return self
|
||||
|
||||
@ -109,7 +70,29 @@ class BrickSetList(BrickRecordList[BrickSet]):
|
||||
else:
|
||||
order = '"bricktracker_sets"."rowid" DESC'
|
||||
|
||||
for record in self.select(
|
||||
self.list(order=order, limit=limit)
|
||||
|
||||
return self
|
||||
|
||||
# Base set list
|
||||
def list(
|
||||
self,
|
||||
/,
|
||||
*,
|
||||
override_query: str | None = None,
|
||||
order: str | None = None,
|
||||
limit: int | None = None,
|
||||
do_theme: bool = False,
|
||||
**context: Any,
|
||||
) -> None:
|
||||
themes = set()
|
||||
|
||||
if order is None:
|
||||
order = self.order
|
||||
|
||||
# Load the sets from the database
|
||||
for record in super().select(
|
||||
override_query=override_query,
|
||||
order=order,
|
||||
limit=limit,
|
||||
owners=BrickSetOwnerList.as_columns(),
|
||||
@ -119,8 +102,13 @@ class BrickSetList(BrickRecordList[BrickSet]):
|
||||
brickset = BrickSet(record=record)
|
||||
|
||||
self.records.append(brickset)
|
||||
if do_theme:
|
||||
themes.add(brickset.theme.name)
|
||||
|
||||
return self
|
||||
# Convert the set into a list and sort it
|
||||
if do_theme:
|
||||
self.themes = list(themes)
|
||||
self.themes.sort()
|
||||
|
||||
# Sets missing a minifigure part
|
||||
def missing_minifigure(self, figure: str, /) -> Self:
|
||||
@ -128,16 +116,7 @@ class BrickSetList(BrickRecordList[BrickSet]):
|
||||
self.fields.figure = figure
|
||||
|
||||
# Load the sets from the database
|
||||
for record in self.select(
|
||||
override_query=self.missing_minifigure_query,
|
||||
order=self.order,
|
||||
owners=BrickSetOwnerList.as_columns(),
|
||||
statuses=BrickSetStatusList.as_columns(),
|
||||
tags=BrickSetTagList.as_columns(),
|
||||
):
|
||||
brickset = BrickSet(record=record)
|
||||
|
||||
self.records.append(brickset)
|
||||
self.list(override_query=self.missing_minifigure_query)
|
||||
|
||||
return self
|
||||
|
||||
@ -148,16 +127,7 @@ class BrickSetList(BrickRecordList[BrickSet]):
|
||||
self.fields.color = color
|
||||
|
||||
# Load the sets from the database
|
||||
for record in self.select(
|
||||
override_query=self.missing_part_query,
|
||||
order=self.order,
|
||||
owners=BrickSetOwnerList.as_columns(),
|
||||
statuses=BrickSetStatusList.as_columns(),
|
||||
tags=BrickSetTagList.as_columns(),
|
||||
):
|
||||
brickset = BrickSet(record=record)
|
||||
|
||||
self.records.append(brickset)
|
||||
self.list(override_query=self.missing_part_query)
|
||||
|
||||
return self
|
||||
|
||||
@ -167,16 +137,7 @@ class BrickSetList(BrickRecordList[BrickSet]):
|
||||
self.fields.figure = figure
|
||||
|
||||
# Load the sets from the database
|
||||
for record in self.select(
|
||||
override_query=self.using_minifigure_query,
|
||||
order=self.order,
|
||||
owners=BrickSetOwnerList.as_columns(),
|
||||
statuses=BrickSetStatusList.as_columns(),
|
||||
tags=BrickSetTagList.as_columns(),
|
||||
):
|
||||
brickset = BrickSet(record=record)
|
||||
|
||||
self.records.append(brickset)
|
||||
self.list(override_query=self.using_minifigure_query)
|
||||
|
||||
return self
|
||||
|
||||
@ -187,15 +148,6 @@ class BrickSetList(BrickRecordList[BrickSet]):
|
||||
self.fields.color = color
|
||||
|
||||
# Load the sets from the database
|
||||
for record in self.select(
|
||||
override_query=self.using_part_query,
|
||||
order=self.order,
|
||||
owners=BrickSetOwnerList.as_columns(),
|
||||
statuses=BrickSetStatusList.as_columns(),
|
||||
tags=BrickSetTagList.as_columns(),
|
||||
):
|
||||
brickset = BrickSet(record=record)
|
||||
|
||||
self.records.append(brickset)
|
||||
self.list(override_query=self.using_part_query)
|
||||
|
||||
return self
|
||||
|
Loading…
Reference in New Issue
Block a user