Skip to content

Instantly share code, notes, and snippets.

@nickrsan
Created February 23, 2017 21:22
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nickrsan/05d1a90bec87d1ab5206517973337e67 to your computer and use it in GitHub Desktop.
Save nickrsan/05d1a90bec87d1ab5206517973337e67 to your computer and use it in GitHub Desktop.
A Decorator for ArcGIS Python toolbox tools (their execute function) that makes the "parameters" parameter into a dictionary indexed by parameter name
"""
A Decorator for ArcGIS Python toolbox tools (their execute function) that makes the "parameters" parameter'
into a dictionary indexed by parameter name.
"""
from functools import wraps
def parameters_as_dict(f):
@wraps(f)
def wrapper(*args, **kwargs):
params = args[1]
parameters = {}
for param in params:
parameters[param.name] = param
f(self=args[0], parameters=parameters, messages=args[1])
return wrapper
############################
# EXAMPLE USAGE FOLLOWS
############################
class GenerateHeatPlot(object):
# Incomplete tool definition for example - pay attention to use of decorator around execute method.
def getParameterInfo(self):
code = arcpy.Parameter(
displayName="Code for Transect",
name="site_code",
)
wq_var = arcpy.Parameter(
displayName="Water Quality Variable",
name="wq_var",
)
title = arcpy.Parameter(
displayName="Title for graph",
name="output_title",
)
output_folder = arcpy.Parameter(
displayName="Output folder",
name="output_folder",
)
params = [code, wq_var, title, output_folder]
return params
### ... rest of your toolbox definition code here.
@parameters_as_dict
def execute(self, parameters, messages):
site_code = parameters["site_code"].valueAsText
wq_var = parameters["wq_var"].valueAsText
title = parameters["output_title"].valueAsText
output_folder = parameters["output_folder"].valueAsText
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment