Files
speckle-blender/bpy_speckle/connector/utils/model_manager.py
2025-07-22 11:32:51 +01:00

47 lines
1.4 KiB
Python

from typing import List, Optional, Tuple
from specklepy.core.api.inputs.project_inputs import ProjectModelsFilter
from specklepy.core.api.models.current import Model
from .account_manager import _client_cache
from .misc import format_relative_time, strip_non_ascii
def get_models_for_project(
account_id: str, project_id: str, search: Optional[str] = None
) -> List[Tuple[str, str, str]]:
"""
fetches models for a given project from the Speckle server
"""
try:
if not account_id or not project_id:
print(
f"Error: Invalid inputs - account_id: {account_id}, project_id: {project_id}"
)
return []
client = _client_cache.get_client(account_id)
client.project.get(project_id)
filter = ProjectModelsFilter(search=search) if search else None
models: List[Model] = client.model.get_models(
project_id=project_id, models_limit=10, models_filter=filter
).items
return [
(
strip_non_ascii(model.name),
model.id,
format_relative_time(model.updated_at),
)
for model in models
]
except Exception as e:
print(f"Error fetching models: {str(e)}")
# Clear cache on error to prevent stale clients
_client_cache.clear()
return []