kind of a mess lol but file caching and front end
This commit is contained in:
@ -122,8 +122,7 @@ RENAME_SETS = {
|
||||
|
||||
|
||||
class SetLabelService(BaseService):
|
||||
DEFAULT_OUTPUT_DIR = "app/data/cache/set_labels"
|
||||
os.makedirs(DEFAULT_OUTPUT_DIR, exist_ok=True)
|
||||
DEFAULT_OUTPUT_DIR = "set_labels" # Changed to be relative to FileService's base_cache_dir
|
||||
|
||||
def __init__(self, output_dir=DEFAULT_OUTPUT_DIR):
|
||||
super().__init__(None) # BaseService doesn't need a model for this service
|
||||
@ -131,8 +130,7 @@ class SetLabelService(BaseService):
|
||||
self.ignored_sets = IGNORED_SETS
|
||||
self.set_types = SET_TYPES
|
||||
self.minimum_set_size = MINIMUM_SET_SIZE
|
||||
self.output_dir = Path(output_dir)
|
||||
self.output_dir.mkdir(parents=True, exist_ok=True)
|
||||
self.output_dir = output_dir
|
||||
|
||||
async def get_set_data(self, session):
|
||||
log.info("Getting set data and icons from Scryfall")
|
||||
@ -173,14 +171,8 @@ class SetLabelService(BaseService):
|
||||
log.warning(f"Failed to fetch icon from {icon_url}: {e}")
|
||||
return None
|
||||
|
||||
async def generate_label(self, session, set_data):
|
||||
output_file = self.output_dir / f"{set_data['code']}.pdf"
|
||||
|
||||
# Check if file already exists
|
||||
if output_file.exists():
|
||||
log.info(f"Label already exists for {set_data['name']} ({set_data['code']})")
|
||||
return output_file
|
||||
|
||||
async def generate_label(self, session, set_data, db: Session):
|
||||
"""Generate a label for a set and save it using FileService"""
|
||||
name = RENAME_SETS.get(set_data["name"], set_data["name"])
|
||||
icon_b64 = await self.get_set_icon(session, set_data["icon_svg_uri"])
|
||||
|
||||
@ -192,11 +184,32 @@ class SetLabelService(BaseService):
|
||||
icon_b64=icon_b64,
|
||||
)
|
||||
|
||||
HTML(string=html_content).write_pdf(output_file)
|
||||
# Generate PDF content
|
||||
pdf_content = HTML(string=html_content).write_pdf()
|
||||
|
||||
# Save using FileService
|
||||
filename = f"{set_data['code']}.pdf"
|
||||
metadata = {
|
||||
"set_name": name,
|
||||
"set_code": set_data["code"],
|
||||
"release_date": set_data["released_at"],
|
||||
"card_count": set_data["card_count"]
|
||||
}
|
||||
|
||||
file_record = await self.file_service.save_file(
|
||||
db=db,
|
||||
file_data=pdf_content,
|
||||
filename=filename,
|
||||
subdir=self.output_dir,
|
||||
file_type="set_label",
|
||||
metadata=metadata
|
||||
)
|
||||
|
||||
log.info(f"Generated label for {name} ({set_data['code']})")
|
||||
return output_file
|
||||
return file_record
|
||||
|
||||
async def generate_labels(self, sets=None):
|
||||
async def generate_labels(self, db: Session, sets=None):
|
||||
"""Generate labels for sets and return their file records"""
|
||||
if sets:
|
||||
self.ignored_sets = ()
|
||||
self.minimum_set_size = 0
|
||||
@ -205,7 +218,7 @@ class SetLabelService(BaseService):
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
set_data = await self.get_set_data(session)
|
||||
tasks = [self.generate_label(session, exp) for exp in set_data]
|
||||
tasks = [self.generate_label(session, exp, db) for exp in set_data]
|
||||
return await asyncio.gather(*tasks)
|
||||
|
||||
async def get_available_sets(self, db: Session):
|
||||
|
Reference in New Issue
Block a user