CAM: Fix: Remove invalid normalization of shape name

This commit is contained in:
Samuel Abels
2025-06-30 20:26:51 +02:00
parent 2d1746d04f
commit 3829e1db76
3 changed files with 18 additions and 15 deletions

View File

@@ -151,13 +151,11 @@ class TestPathToolShapeClasses(PathTestWithAssets):
def test_base_resolve_name(self):
"""Test resolving shape aliases to canonical names."""
self.assertEqual(ToolBitShape.resolve_name("ballend").asset_id, "ballend")
self.assertEqual(ToolBitShape.resolve_name("Ballend").asset_id, "ballend")
self.assertEqual(ToolBitShape.resolve_name("v-bit").asset_id, "vbit")
self.assertEqual(ToolBitShape.resolve_name("VBit").asset_id, "vbit")
self.assertEqual(ToolBitShape.resolve_name("torus").asset_id, "bullnose")
self.assertEqual(ToolBitShape.resolve_name("bullnose").asset_id, "bullnose")
self.assertEqual(ToolBitShape.resolve_name("slitting-saw").asset_id, "slittingsaw")
self.assertEqual(ToolBitShape.resolve_name("SlittingSaw").asset_id, "slittingsaw")
self.assertEqual(ToolBitShape.resolve_name("v-bit").asset_id, "v-bit")
self.assertEqual(ToolBitShape.resolve_name("vbit").asset_id, "vbit")
self.assertEqual(ToolBitShape.resolve_name("torus").asset_id, "torus")
self.assertEqual(ToolBitShape.resolve_name("torus.fcstd").asset_id, "torus")
self.assertEqual(ToolBitShape.resolve_name("SlittingSaw").asset_id, "SlittingSaw")
# Test unknown name - should return the input name
self.assertEqual(ToolBitShape.resolve_name("nonexistent").asset_id, "nonexistent")
self.assertEqual(ToolBitShape.resolve_name("UnknownShape").asset_id, "UnknownShape")

View File

@@ -523,7 +523,7 @@ class ToolBitShape(Asset):
@classmethod
def resolve_name(cls, identifier: str) -> AssetUri:
"""
Resolves an identifier (alias, name, filename, or URI) to a Uri object.
Resolves an identifier (name, filename, or URI) to a Uri object.
"""
# 1. If the input is a url string, return the AssetUri for it.
if AssetUri.is_uri(identifier):
@@ -535,13 +535,7 @@ class ToolBitShape(Asset):
if pathlib.Path(identifier).suffix.lower() == ".fcstd":
asset_name = os.path.splitext(os.path.basename(identifier))[0]
# 3. Use get_subclass_by_name to try to resolve alias to a class.
# if one is found, use the class.name.
shape_class = cls.get_subclass_by_name(asset_name.lower())
if shape_class:
asset_name = shape_class.name.lower()
# 4. Construct the Uri using AssetUri.build() and return it
# 3. Construct the Uri using AssetUri.build() and return it
return AssetUri.build(
asset_type="toolbitshape",
asset_id=asset_name,

View File

@@ -28,6 +28,13 @@ from ...shape import ToolBitShape
from ..models.base import ToolBit
if False:
Path.Log.setLevel(Path.Log.Level.DEBUG, Path.Log.thisModule())
Path.Log.trackModule(Path.Log.thisModule())
else:
Path.Log.setLevel(Path.Log.Level.INFO, Path.Log.thisModule())
class FCTBSerializer(AssetSerializer):
for_class = ToolBit
mime_type = "application/x-freecad-toolbit"
@@ -70,6 +77,7 @@ class FCTBSerializer(AssetSerializer):
if dependencies is None:
# Shallow load: dependencies are not resolved.
# Delegate to from_dict with shallow=True.
Path.Log.debug(f"FCTBSerializer.deserialize: shallow. id = {id!r}, attrs = {attrs!r}")
return ToolBit.from_dict(attrs, shallow=True)
# Full load: dependencies are resolved.
@@ -93,6 +101,9 @@ class FCTBSerializer(AssetSerializer):
)
# Find the correct ToolBit subclass for the shape
Path.Log.debug(
f"FCTBSerializer.deserialize: shape = {shape!r}, id = {id!r}, params = {shape.get_parameters()}"
)
return ToolBit.from_shape(shape, attrs, id)
@classmethod