Created
February 23, 2017 21:22
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
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