kind of a mess lol but file caching and front end

This commit is contained in:
2025-04-17 13:28:49 -04:00
parent 21408af48c
commit 8f35cedb4a
45 changed files with 1435 additions and 1316 deletions

View File

@ -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):