refactor: rebrand project to HartOMat
This commit is contained in:
@@ -17,7 +17,7 @@ class Material(Base):
|
||||
name: Mapped[str] = mapped_column(String(200), nullable=False, unique=True)
|
||||
description: Mapped[str] = mapped_column(Text, nullable=True)
|
||||
source: Mapped[str] = mapped_column(String(20), nullable=False, default="manual")
|
||||
schaeffler_code: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
||||
hartomat_code: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
||||
created_by: Mapped[uuid.UUID | None] = mapped_column(
|
||||
UUID(as_uuid=True), ForeignKey("users.id", ondelete="SET NULL"), nullable=True
|
||||
)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"""Material alias resolution service.
|
||||
|
||||
Used from Celery tasks (sync context) to resolve raw material names
|
||||
(from Excel / user input) to SCHAEFFLER library material names via aliases.
|
||||
(from Excel / user input) to HARTOMAT library material names via aliases.
|
||||
|
||||
Resolution chain:
|
||||
1. Alias lookup (case-insensitive) → use alias.material.name
|
||||
@@ -31,7 +31,7 @@ def _get_engine():
|
||||
|
||||
|
||||
def resolve_material_map(raw_map: dict[str, str]) -> dict[str, str]:
|
||||
"""Resolve raw material names to SCHAEFFLER library names via aliases.
|
||||
"""Resolve raw material names to HARTOMAT library names via aliases.
|
||||
|
||||
For each value in raw_map:
|
||||
1. Alias lookup (case-insensitive) → return alias.material.name
|
||||
@@ -66,7 +66,7 @@ def resolve_material_map(raw_map: dict[str, str]) -> dict[str, str]:
|
||||
raw_lower = raw_material.lower()
|
||||
|
||||
# 1. Alias lookup first — aliases explicitly map intermediate/display names
|
||||
# to the canonical SCHAEFFLER library names
|
||||
# to the canonical HARTOMAT library names
|
||||
if raw_lower in alias_lookup:
|
||||
target = alias_lookup[raw_lower]
|
||||
logger.info("resolved '%s' → '%s' (alias match)", raw_material, target)
|
||||
@@ -147,7 +147,7 @@ async def find_unmapped_materials(
|
||||
"""Find material names that have no alias or library match.
|
||||
|
||||
Returns a list of {"raw_name": str, "suggestions": [...]} for each
|
||||
unmapped name. Suggestions are the top 5 SCHAEFFLER library materials
|
||||
unmapped name. Suggestions are the top 5 HARTOMAT library materials
|
||||
by string similarity.
|
||||
"""
|
||||
if not material_names:
|
||||
@@ -159,8 +159,8 @@ async def find_unmapped_materials(
|
||||
|
||||
# Load all materials
|
||||
mat_rows = (await db.execute(select(Material))).scalars().all()
|
||||
# Library materials have a schaeffler_code
|
||||
library_mats = [m for m in mat_rows if m.schaeffler_code is not None]
|
||||
# Library materials have a hartomat_code
|
||||
library_mats = [m for m in mat_rows if m.hartomat_code is not None]
|
||||
# All material names (case-insensitive) for exact-match check
|
||||
name_lookup: dict[str, Material] = {m.name.lower(): m for m in mat_rows}
|
||||
|
||||
@@ -179,7 +179,7 @@ async def find_unmapped_materials(
|
||||
|
||||
# 2. Exact name match with a library material → mapped
|
||||
matched_mat = name_lookup.get(raw_lower)
|
||||
if matched_mat and matched_mat.schaeffler_code is not None:
|
||||
if matched_mat and matched_mat.hartomat_code is not None:
|
||||
continue
|
||||
|
||||
# Unmapped — compute suggestions from library materials
|
||||
@@ -194,7 +194,7 @@ async def find_unmapped_materials(
|
||||
{
|
||||
"id": str(m.id),
|
||||
"name": m.name,
|
||||
"schaeffler_code": str(m.schaeffler_code),
|
||||
"hartomat_code": str(m.hartomat_code),
|
||||
}
|
||||
for _, m in scored[:5]
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user