File size: 3,436 Bytes
5e4b407
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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,
        )
    )