Merge pull request 'feat: use .kc extension for new files, find both .kc and .FCStd' (#23) from feat/kc-file-format-layer1 into main
Reviewed-on: #23
This commit was merged in pull request #23.
This commit is contained in:
@@ -234,41 +234,45 @@ def get_projects_dir() -> Path:
|
||||
def get_cad_file_path(part_number: str, description: str = "") -> Path:
|
||||
"""Generate canonical file path for a CAD file.
|
||||
|
||||
Path format: ~/projects/cad/{category_code}_{category_name}/{part_number}_{description}.FCStd
|
||||
Path format: ~/projects/cad/{category_code}_{category_name}/{part_number}_{description}.kc
|
||||
"""
|
||||
category, _ = parse_part_number(part_number)
|
||||
folder_name = get_category_folder_name(category)
|
||||
|
||||
if description:
|
||||
filename = f"{part_number}_{sanitize_filename(description)}.FCStd"
|
||||
filename = f"{part_number}_{sanitize_filename(description)}.kc"
|
||||
else:
|
||||
filename = f"{part_number}.FCStd"
|
||||
filename = f"{part_number}.kc"
|
||||
|
||||
return get_projects_dir() / "cad" / folder_name / filename
|
||||
|
||||
|
||||
def find_file_by_part_number(part_number: str) -> Optional[Path]:
|
||||
"""Find existing CAD file for a part number."""
|
||||
"""Find existing CAD file for a part number. Prefers .kc over .FCStd."""
|
||||
category, _ = parse_part_number(part_number)
|
||||
folder_name = get_category_folder_name(category)
|
||||
cad_dir = get_projects_dir() / "cad" / folder_name
|
||||
|
||||
if cad_dir.exists():
|
||||
matches = list(cad_dir.glob(f"{part_number}*.FCStd"))
|
||||
if matches:
|
||||
return matches[0]
|
||||
|
||||
base_cad_dir = get_projects_dir() / "cad"
|
||||
if base_cad_dir.exists():
|
||||
for subdir in base_cad_dir.iterdir():
|
||||
if subdir.is_dir():
|
||||
matches = list(subdir.glob(f"{part_number}*.FCStd"))
|
||||
if matches:
|
||||
return matches[0]
|
||||
for search_dir in _search_dirs(cad_dir):
|
||||
for ext in ("*.kc", "*.FCStd"):
|
||||
matches = list(search_dir.glob(f"{part_number}{ext[1:]}"))
|
||||
if matches:
|
||||
return matches[0]
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def _search_dirs(category_dir: Path):
|
||||
"""Yield the category dir, then all sibling dirs under cad/."""
|
||||
if category_dir.exists():
|
||||
yield category_dir
|
||||
base_cad_dir = category_dir.parent
|
||||
if base_cad_dir.exists():
|
||||
for subdir in base_cad_dir.iterdir():
|
||||
if subdir.is_dir() and subdir != category_dir:
|
||||
yield subdir
|
||||
|
||||
|
||||
def search_local_files(search_term: str = "", category_filter: str = "") -> list:
|
||||
"""Search for CAD files in local cad directory."""
|
||||
results = []
|
||||
@@ -288,7 +292,9 @@ def search_local_files(search_term: str = "", category_filter: str = "") -> list
|
||||
if category_filter and category_code.upper() != category_filter.upper():
|
||||
continue
|
||||
|
||||
for fcstd_file in category_dir.glob("*.FCStd"):
|
||||
for fcstd_file in sorted(
|
||||
list(category_dir.glob("*.kc")) + list(category_dir.glob("*.FCStd"))
|
||||
):
|
||||
filename = fcstd_file.stem
|
||||
parts = filename.split("_", 1)
|
||||
part_number = parts[0]
|
||||
|
||||
Reference in New Issue
Block a user