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?
أكثر...
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?
أكثر...