From d2178a291234be02521471e562cea23cb16cdf4a Mon Sep 17 00:00:00 2001 From: Jeff Papiez Date: Tue, 18 Aug 2026 10:17:38 -0700 Subject: [PATCH] Remove the dead external-DB import module spoolman/import_externaldb.py has never been reachable. Its only function, import_external_filaments, has no callers, no route, no poe task and no entry point -- searching the whole history for the name turns up only the commit that added it (05a4898), which brought it across while merging upstream PR #846 without the wiring that would have invoked it. So it has been dead since the day it landed, and no behaviour changes by deleting it. It is also no longer the way to do this. Upstream now exposes the external database through /external/filament, /external/material and /external/filament/search, and client_v2 creates filaments from those directly, so a server-side bulk importer is not the direction this is going. Verified: ruff clean, the app imports and registers its routes unchanged, and the unit tests pass. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- spoolman/import_externaldb.py | 116 ---------------------------------- 1 file changed, 116 deletions(-) delete mode 100644 spoolman/import_externaldb.py diff --git a/spoolman/import_externaldb.py b/spoolman/import_externaldb.py deleted file mode 100644 index 2da95d09c..000000000 --- a/spoolman/import_externaldb.py +++ /dev/null @@ -1,116 +0,0 @@ -"""Import filaments from the external database into the local DB.""" - -from __future__ import annotations - -import logging -from datetime import datetime -from typing import TYPE_CHECKING - -from sqlalchemy import func, select - -if TYPE_CHECKING: - from sqlalchemy.ext.asyncio import AsyncSession - -from spoolman import externaldb -from spoolman.api.v1.models import MultiColorDirection -from spoolman.database import models - -logger = logging.getLogger(__name__) - - -def _normalize_hex(value: str | None) -> str | None: - if not value: - return None - return value.removeprefix("#") - - -async def import_external_filaments( - db: AsyncSession, - *, - only_if_empty: bool = True, -) -> int: - """Import external filaments into the local database. - - Returns the number of imported filaments. - """ - if only_if_empty: - existing_count = await db.scalar(select(func.count(models.Filament.id))) - if existing_count and existing_count > 0: - logger.info("Skipping external DB import because filaments already exist (%d).", existing_count) - return 0 - - logger.info("Fetching external filaments for import.") - filaments = await externaldb.fetch_external_filaments() - - existing_vendor_rows = await db.execute(select(models.Vendor)) - vendors_by_external_id = { - vendor.external_id: vendor for vendor in existing_vendor_rows.scalars().all() if vendor.external_id - } - - existing_filament_rows = await db.execute( - select(models.Filament.external_id).where(models.Filament.external_id.is_not(None)), - ) - existing_filament_ids = {row[0] for row in existing_filament_rows.all() if row[0]} - - now = datetime.utcnow().replace(microsecond=0) - imported = 0 - - for filament in filaments: - if filament.id in existing_filament_ids: - continue - - manufacturer = filament.manufacturer.strip() - vendor_item = vendors_by_external_id.get(manufacturer) - if vendor_item is None: - vendor_item = models.Vendor( - name=manufacturer, - registered=now, - comment=None, - empty_spool_weight=None, - external_id=manufacturer, - extra=[], - ) - db.add(vendor_item) - await db.flush() - vendors_by_external_id[manufacturer] = vendor_item - - color_hex = _normalize_hex(filament.color_hex) - multi_color_hexes = None - if filament.color_hexes: - normalized = [_normalize_hex(value) for value in filament.color_hexes] - multi_color_hexes = ",".join([value for value in normalized if value]) - - multi_color_direction = None - if filament.multi_color_direction is not None: - multi_color_direction = MultiColorDirection(filament.multi_color_direction.value) - - spool_weight = filament.spool_weight - if spool_weight is None and vendor_item.empty_spool_weight is not None: - spool_weight = vendor_item.empty_spool_weight - - db_item = models.Filament( - registered=now, - name=filament.name, - vendor=vendor_item, - material=filament.material, - price=None, - density=filament.density, - diameter=filament.diameter, - weight=filament.weight, - spool_weight=spool_weight, - article_number=None, - comment=None, - settings_extruder_temp=filament.extruder_temp, - settings_bed_temp=filament.bed_temp, - color_hex=color_hex if filament.color_hex else None, - multi_color_hexes=None if filament.color_hex else multi_color_hexes, - multi_color_direction=multi_color_direction.value if multi_color_direction else None, - external_id=filament.id, - extra=[], - ) - db.add(db_item) - imported += 1 - - await db.commit() - logger.info("Imported %d external filaments.", imported) - return imported