import asyncio import os from loguru import logger from app import convert_to_obj, embedding_3d_object, parse_3d_file class ModuleTest: @staticmethod async def test_process_file(file_path: str, debug_mode: bool = False) -> dict: report = {} try: obj_path = convert_to_obj(file_path) report["CONV_TO_OBJ"] = "PASSED" if debug_mode: logger.info(f"Obj path: {obj_path}") except Exception: report["CONV_TO_OBJ"] = "FAILED" if report["CONV_TO_OBJ"] == "PASSED": obj_path = locals().get("obj_path", None) assert obj_path is not None, "Conversion to OBJ failed" assert os.path.exists(obj_path), "Converted OBJ file does not exist" try: embeddings = await embedding_3d_object(obj_path) report["EMBEDDING_3D_OBJ"] = "PASSED" if debug_mode: logger.info(f"Description: {embeddings['description']}") except Exception: report["EMBEDDING_3D_OBJ"] = "FAILED" else: report["EMBEDDING_3D_OBJ"] = "FAILED" try: metadata = parse_3d_file(file_path) report["PARSE_METADATA"] = "PASSED" if debug_mode: logger.info(f"Parsed metadata: {metadata}") except Exception: report["PARSE_METADATA"] = "FAILED" return report async def test(self, file_paths: list[str], debug_mode: bool = False) -> None: for file_path in file_paths: basename = os.path.basename(file_path) response = await self.test_process_file( file_path=file_path, debug_mode=debug_mode ) for key, value in response.items(): if value == "FAILED": logger.error(f"Processed file `{basename}` failed {key}") else: logger.info(f"Processed file `{basename}` successfully {key}!") if __name__ == "__main__": asyncio.run( ModuleTest().test( file_paths=[ # "/Users/tridoan/Spartan/Datum/service-ai/poc/resources/notebooks/3d_files/c5-corvette-knuckle-1.snapshot.1/C5 Knuckle Mesh.stl", # ok # "/Users/tridoan/Spartan/Datum/service-ai/poc/resources/notebooks/3d_files/c5-corvette-knuckle-1.snapshot.1/C5 Knuckle 3mf.3mf", # ok # "/Users/tridoan/Spartan/Datum/service-ai/poc/resources/notebooks/3d_files/nema-17-stepper-motors-coaxial-60-48-39-23mm-1.snapshot.3/NEMA 17 Stepper Motor 23mm-NEMA 17 Stepper Motor 23mm.obj", # ok # "/Users/tridoan/Spartan/Datum/service-ai/poc/resources/notebooks/3d_files/nema-17-stepper-motors-coaxial-60-48-39-23mm-1.snapshot.3/NEMA 17 Stepper Motor 48mm-NEMA 17 Stepper Motor 48mm.step", # ok # "/Users/tridoan/Spartan/Datum/service-ai/poc/resources/notebooks/3d_files/engrenagens-5.snapshot.6/Engre_con_Z16_mod_1_5.FCStd", # ok # "/Users/tridoan/Spartan/Datum/service-ai/poc/resources/notebooks/3d_files/radial engine.3dxml", # "/Users/tridoan/Spartan/Datum/service-ai/poc/resources/notebooks/3d_files/ARBOR GEAR.dwg", # "/Users/tridoan/Spartan/Datum/service-ai/poc/resources/notebooks/3d_files/electrical-switch-1.snapshot.3/Electrical switch.IGS" ], debug_mode=True, ) )