Files
speckle_automate_python_exa…/automate_function.py
T
Gergő Jedlicska 8543a6e68d fix fstring
2023-08-30 07:51:24 +00:00

46 lines
1.5 KiB
Python

from pydantic import BaseModel, ConfigDict
from stringcase import camelcase
from specklepy.transports.memory import MemoryTransport
from specklepy.transports.server import ServerTransport
from specklepy.api.operations import receive
from specklepy.api.client import SpeckleClient
from flatten import flatten_base
from speckle_project_data import SpeckleProjectData
class FunctionInputs(BaseModel):
"""
These are function author defined values, automate will make sure to supply them.
"""
speckle_type_to_count: str
model_config = ConfigDict(alias_generator=camelcase)
def automate_function(
project_data: SpeckleProjectData,
function_inputs: FunctionInputs,
speckle_token: str,
):
client = SpeckleClient(project_data.speckle_server_url)
client.authenticate_with_token(speckle_token)
commit = client.commit.get(project_data.project_id, project_data.version_id)
memory_transport = MemoryTransport()
server_transport = ServerTransport(project_data.project_id, client)
if not commit.referencedObject:
raise ValueError("The commit has no root referencedObject.")
base = receive(commit.referencedObject, server_transport, memory_transport)
count = 0
for b in flatten_base(base):
if b.speckle_type == function_inputs.speckle_type_to_count:
count += 1
print(
f"Found {count} object that match the queried speckle type: ",
f"{function_inputs.speckle_type_to_count}",
)