host.camera_visualizer.routes.cad

CAD model file routes.

 1"""CAD model file routes."""
 2
 3import os
 4
 5
 6def list_cad_models(cad_dir: str) -> list:
 7    """Scan host/cad_tools/models/ directory for loadable model files."""
 8    models = []
 9    if os.path.isdir(cad_dir):
10        for fname in sorted(os.listdir(cad_dir)):
11            if fname.lower().endswith(('.glb', '.gltf')):
12                size = os.path.getsize(os.path.join(cad_dir, fname))
13                models.append({
14                    'name': fname,
15                    'url': f'/cad/{fname}',
16                    'size': size,
17                })
18    return models
19
20
21def serve_cad_file(cad_dir: str, filename: str):
22    """Read a CAD file. Returns (data, mime_type) or (None, None)."""
23    fname = os.path.basename(filename)
24    if not fname.lower().endswith(('.glb', '.gltf', '.bin')):
25        return None, None
26    fpath = os.path.join(cad_dir, fname)
27    if not os.path.isfile(fpath):
28        return None, None
29    with open(fpath, 'rb') as f:
30        data = f.read()
31    mime = {
32        '.glb': 'model/gltf-binary',
33        '.gltf': 'model/gltf+json',
34        '.bin': 'application/octet-stream',
35    }.get(os.path.splitext(fname)[1].lower(), 'application/octet-stream')
36    return data, mime
def list_cad_models(cad_dir: str) -> list:
 7def list_cad_models(cad_dir: str) -> list:
 8    """Scan host/cad_tools/models/ directory for loadable model files."""
 9    models = []
10    if os.path.isdir(cad_dir):
11        for fname in sorted(os.listdir(cad_dir)):
12            if fname.lower().endswith(('.glb', '.gltf')):
13                size = os.path.getsize(os.path.join(cad_dir, fname))
14                models.append({
15                    'name': fname,
16                    'url': f'/cad/{fname}',
17                    'size': size,
18                })
19    return models

Scan host/cad_tools/models/ directory for loadable model files.

def serve_cad_file(cad_dir: str, filename: str):
22def serve_cad_file(cad_dir: str, filename: str):
23    """Read a CAD file. Returns (data, mime_type) or (None, None)."""
24    fname = os.path.basename(filename)
25    if not fname.lower().endswith(('.glb', '.gltf', '.bin')):
26        return None, None
27    fpath = os.path.join(cad_dir, fname)
28    if not os.path.isfile(fpath):
29        return None, None
30    with open(fpath, 'rb') as f:
31        data = f.read()
32    mime = {
33        '.glb': 'model/gltf-binary',
34        '.gltf': 'model/gltf+json',
35        '.bin': 'application/octet-stream',
36    }.get(os.path.splitext(fname)[1].lower(), 'application/octet-stream')
37    return data, mime

Read a CAD file. Returns (data, mime_type) or (None, None).