From 1d92dfa9573d2c9a113fcd0bbd6fc2d18941213e Mon Sep 17 00:00:00 2001 From: Jonathon Broughton Date: Tue, 12 Nov 2024 14:26:27 +0000 Subject: [PATCH] exercise 0 --- Exercises/__init__.py | 0 Exercises/exercise-0/__init__.py | 0 Exercises/exercise-0/function.py | 99 +++++++++++++++++--------------- Exercises/exercise-0/inputs.py | 8 +-- 4 files changed, 57 insertions(+), 50 deletions(-) create mode 100644 Exercises/__init__.py create mode 100644 Exercises/exercise-0/__init__.py diff --git a/Exercises/__init__.py b/Exercises/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Exercises/exercise-0/__init__.py b/Exercises/exercise-0/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Exercises/exercise-0/function.py b/Exercises/exercise-0/function.py index e6df6cf..638ef44 100644 --- a/Exercises/exercise-0/function.py +++ b/Exercises/exercise-0/function.py @@ -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. - - 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() - - 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 - ] - - 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) - - 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.") - - # set the automation context view, to the original model / version view - automate_context.set_context_view() + """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. + """ + + # 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) + + # 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." + ) + + 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.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() diff --git a/Exercises/exercise-0/inputs.py b/Exercises/exercise-0/inputs.py index 4ed70bf..c9788bd 100644 --- a/Exercises/exercise-0/inputs.py +++ b/Exercises/exercise-0/inputs.py @@ -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.", + )