How apply error messages to a python toolbox that prevent my tool from running with b

المشرف العام

Administrator
طاقم الإدارة
This is a continuation of my question here: Point and Polyline I tried making this question easier to follow.

My tool accepts two main parameters - a continuous centerline and a table (or a feature class with an attribute table) with polyline features including route ID and measures. If the user chooses a table, I cannot check to see if the table has polylines. I'm going to trust that they are loading the correct data. However, I CAN check to see if the feature class is a polyline or not.

I have tried to do this in updateParameter with a filter. I think I have the wrong idea of how it works though:

def updateParameters(self, parameters): """ I am not convinced that this even needs to be here. I've considered using a checkbox instead. """ if parameters[2].altered and parameters[2].hasBeenValidated: if parameters[2].dataType == 'Feature': parameters[2].filter.list = 'Polyline' returnIn my unit testing, I've been able to select a point feature and it fails (good). When I run this in ArcMap, it accepts points (bad) and runs without errors. I want to be able to have an error message appear in the toolbox window and prevent the user from clicking ok.

My updateMessages looks like this:

def updateMessages(self, parameters): """ For instances where a feature class is inputted for param2 and it is a point feature class The messaging should prevent the tool from running. """ # Error in parsing arguments for Describe if parameters[0].altered and parameters[0].hasBeenValidated: desc = arcpy.Describe(parameters[0].valueAsText) if desc.shapeType not in 'Polyline': arcpy.AddError("{0} has the wrong data type.") raise arcpy.ExecuteError if parameters[2].altered and parameters[2].hasBeenValidated: desc = arcpy.Describe(parameters[2].valueAsText) if desc.datatype == 'Feature' and desc.shapeType not in 'Polyline': arcpy.AddError("{2} has the wrong data type.") raise arcpy.ExecuteError returnI took half of this code straight from ESRI's documentation Writing Messages in Scripts

I might as well show you the getParameterInfo so you have the whole picture:

def getParameterInfo(self): """ Define parameter definitions """ params = list() param0 = arcpy.Parameter(displayName="Centerline Layer", name="param0", datatype="GPFeatureLayer", parameterType="Required", direction="Input") param0.filter.list = ['Polyline'] params.append(param0) param1 = arcpy.Parameter(displayName="Centerline ID", name="param1", datatype="Field", parameterType="Required", direction="Input") param1.parameterDependencies = [param0.name] params.append(param1) param2 = arcpy.Parameter(displayName="Polyline Compare", name="param2", datatype="GPTableView", # table or attribute table parameterType="Required", direction="Input") params.append(param2) param3 = arcpy.Parameter(displayName="Polyline Compare ID", name="param3", datatype="Field", parameterType="Required", direction="Input") param3.parameterDependencies = [param2.name] params.append(param3) return paramsAs you can see, the Centerline (param0) was easier to do. I just included it in the code so that it would still create an error if it is called. I could put a error statement in the execute method like this:

desc = arcpy.Describe(param0.value)if desc.shapeType != 'Polyline': raise arcpy.ExecuteError("Incorrect Data Type: Select a polyline.")desc = arcpy.Describe(param2.value)if desc.dataType == 'Feature Class' and desc.shapeType != 'Polyline': raise arcpy.ExecuteError("Incorrect Data Type: Select a polyline.")Right now the error messages just do not appear. I have looked through every relevant post tagged python toolbox. This one needs an answer too! Anyone in the Stack able to help with this one?



أكثر...
 
أعلى