Unfortunately, programming python toolboxes is not very well documented by Esri. I can't find any good examples anywhere of what a fully, completed toolbox with validation and source code should look like. It also seems like "parameters" and "messages" behave as magic arcpy variables that don't need to be expressly instantiated; I'm having trouble finding explicit guidance/documentation on that.
Either way, could someone who has done this take a look at my code and help me understand why it's failing?
The validation code works just fine, but every time I run it, it yields the somewhat cryptic error 000820: The parameters need repair.
import arcpy
class Toolbox(object):
def __init__(self):
self.label = "ToolboxTest"
self.alias = ""
self.tools = [DummyTool]
class DummyTool(object):
def __init__(self):
self.label = "DummyTool"
self.description = "A dummy tool"
self.canRunInBackground = False
def getParameterInfo(self):
p = arcpy.mp.ArcGISProject('CURRENT')
m = p.activeMap
param0 = arcpy.Parameter(
displayName="Choice One",
name="input_choice_1",
datatype="GPLayer",
parameterType="Required",
direction="Input"
)
poly_list = [] # list only polygon feature layers
for lyr in m.listLayers():
desc = arcpy.Describe(lyr)
if desc.dataType == "FeatureLayer":
if desc.shapeType == "Polygon":
poly_list.append(lyr.name)
param0.filter.type = "ValueList"
param0.filter.list = poly_list
params = [param0]
return params
def isLicensed(self):
return True
def updateParameters(self, parameters):
pass
def updateMessages(self, parameters):
return True
def execute(self, parameters, messages):
# All I want to do here is just access
# the parameter value and report some
# facts about it for testing
self.updateParameters(parameters)
lyr = parameters[0].value
d = arcpy.Describe(lyr)
arcpy.AddMessage(d.name)
arcpy.AddMessage(d.dataType)
arcpy.AddMessage(d.shapeType)