1 Commits

Author SHA1 Message Date
Jonathon Broughton 1d92dfa957 exercise 0
build and deploy Speckle functions / publish-automate-function-version (push) Has been cancelled
2024-11-12 14:26:27 +00:00
4 changed files with 48 additions and 41 deletions
View File
View File
+44 -37
View File
@@ -1,50 +1,57 @@
import random
from speckle_automate import AutomationContext
from inputs import FunctionInputs
from Utilities.flatten import flatten_base
def automate_function(
automate_context: AutomationContext,
function_inputs: FunctionInputs,
) -> None:
"""This is an example Speckle Automate function.
"""This is an example Speckle Automate function.
Args:
automate_context: A context helper object, that carries relevant information
about the runtime context of this function.
It gives access to the Speckle project data, that triggered this run.
It also has convenience methods attach result data to the Speckle model.
function_inputs: An instance object matching the defined schema.
"""
Args:
automate_context: A context helper object, that carries relevant information
about the runtime context of this function.
It gives access to the Speckle project data, that triggered this run.
It also has convenience methods attach result data to the Speckle model.
function_inputs: An instance object matching the defined schema.
"""
# the context provides a convenient way, to receive the triggering version
version_root_object = automate_context.receive_version()
# the context provides a convenient way, to receive the triggering version
version_root_object = automate_context.receive_version()
flat_list_of_objects = flatten_base(version_root_object)
flat_list_of_objects = flatten_base(version_root_object)
# filter the list to only include objects that are displayable.
# this is a simple example, that checks if the object has a displayValue
displayable_objects = [
speckle_object
for speckle_object in flat_list_of_objects
if (
getattr(speckle_object, "displayValue", None)
or getattr(speckle_object, "@displayValue", None)
)
and getattr(speckle_object, "id", None) is not None
]
# filter the list to only include objects that are displayable.
# this is a simple example, that checks if the object has a displayValue
displayable_objects = [
speckle_object
for speckle_object in flat_list_of_objects
if (
getattr(speckle_object, "displayValue", None)
or getattr(speckle_object, "@displayValue", None)
) and getattr(speckle_object, "id", None) is not None
]
if len(displayable_objects) == 0:
automate_context.mark_run_failed(
"Automation failed: No displayable objects found."
)
if len(displayable_objects) == 0:
automate_context.mark_run_failed(
"Automation failed: No displayable objects found."
)
else:
# select a random object from the list
random_object = random.choice(displayable_objects)
else:
# select a random object from the list
random_object = random.choice(displayable_objects)
automate_context.attach_info_to_objects(
category="Selected Object",
object_ids=[random_object.id],
message=function_inputs.comment_phrase,
)
automate_context.attach_info_to_objects(
category="Selected Object",
object_ids=[random_object.id],
message=function_inputs.comment_phrase,
)
automate_context.mark_run_success("Added a comment to a random object.")
automate_context.mark_run_success("Added a comment to a random object.")
# set the automation context view, to the original model / version view
automate_context.set_context_view()
# set the automation context view, to the original model / version view
automate_context.set_context_view()
+4 -4
View File
@@ -10,7 +10,7 @@ class FunctionInputs(AutomateBase):
https://docs.pydantic.dev/latest/usage/models/
"""
comment_phrase: str = Field(
title="Comment Phrase",
description="This phrase will be added to a random model element.",
)
comment_phrase: str = Field(
title="Comment Phrase",
description="This phrase will be added to a random model element.",
)