a999f18e00
build and deploy Speckle functions / publish-automate-function-version (push) Has been cancelled
70 lines
2.6 KiB
Python
70 lines
2.6 KiB
Python
from pydantic import Field
|
|
from speckle_automate import AutomationContext, AutomateBase, execute_automate_function
|
|
from Utilities.helpers import flatten_base, speckle_print
|
|
|
|
from rules import RevitRules
|
|
|
|
|
|
from Utilities.helpers import flatten_base, speckle_print
|
|
from Utilities.spreadsheet import read_rules_from_spreadsheet
|
|
from Workshop.Exercise_4.rules import apply_rules_to_objects
|
|
|
|
|
|
class FunctionInputs(AutomateBase):
|
|
"""These are function author defined values.
|
|
|
|
Automate will make sure to supply them matching the types specified here.
|
|
Please use the pydantic model schema to define your inputs:
|
|
https://docs.pydantic.dev/latest/usage/models/
|
|
"""
|
|
|
|
# In this exercise, we will move rules to an external source so not to hardcode them.
|
|
spreadsheet_url: str = Field(
|
|
title="Spreadsheet URL",
|
|
description="This is the URL of the spreadsheet to check. It should be a TSV format data source.",
|
|
)
|
|
|
|
|
|
def automate_function(
|
|
automate_context: AutomationContext,
|
|
function_inputs: FunctionInputs,
|
|
) -> None:
|
|
"""This version of the function will add a check for the new provide inputs.
|
|
|
|
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()
|
|
|
|
# We can continue to work with a flattened list of objects.
|
|
flat_list_of_objects = list(flatten_base(version_root_object))
|
|
|
|
# read the rules from the spreadsheet
|
|
rules = read_rules_from_spreadsheet(function_inputs.spreadsheet_url)
|
|
|
|
# apply the rules to the objects
|
|
apply_rules_to_objects(flat_list_of_objects, rules, automate_context)
|
|
|
|
# set the automation context view, to the original model / version view
|
|
automate_context.set_context_view()
|
|
|
|
# report success
|
|
automate_context.mark_run_success(
|
|
f"Successfully applied rules to {len(flat_list_of_objects)} objects."
|
|
)
|
|
|
|
|
|
|
|
# make sure to call the function with the executor
|
|
if __name__ == "__main__":
|
|
# NOTE: always pass in the automate function by its reference, do not invoke it!
|
|
|
|
# pass in the function reference with the inputs schema to the executor
|
|
execute_automate_function(automate_function, FunctionInputs)
|