I am creating a python toolbox in ArcGIS 10.1 and have a python script working as a stand-along script but when I try to bring it into a python toolbox the tool does OK at creating an output XYZ event theme layer with the arcpy.MakeXYEventLayer_management tool and then I do create an output fc using arcpy.FeatureClassToFeatureClass_conversion which does create the fc on disk but when I try to use this fc as input in the next process to create a new fc that uses filter (sql_where_clause) the tool can not recognize the input fc that was just created on disk. I am new at python toolboxes and think it is likely that I am not using the tools parameters properly. After having read all of the forums etc. that I could find I still am no closer to figuring this out. When I hard code the fc paths and use those as inputs into the next tool I use in the process the code can complete OK albeit not getting it using dynamic parameters. The majority of the code I am using is below. Any suggestions about how to use the python toolbox parameters correctly?
class Toolbox(object):
def __init__(self):
"""Define the toolbox (the name of the toolbox is the name of the
.pyt file)."""
self.label = "Toolbox"
self.alias = ""
# List of tool classes associated with this toolbox
self.tools = [Tool_Test]
class Tool_Test(object):
def __init__(self):
"""Define the tool (tool name is the name of the class)."""
self.label = "Tool"
self.description = ""
self.canRunInBackground = False
def getParameterInfo(self):
"""Define parameter definitions"""
params = None
"""Define well location input csv file parameter definitions"""
# First parameter
param0 = arcpy.Parameter(
displayName="Input File",
name="in_file",
datatype="DEFile",
parameterType="Required",
direction="Input")
# To define a file filter that includes .csv and .txt extensions,
# set the filter list to a list of file extension names
param0.filter.list = ['txt', 'csv']
# Second parameter
"""Define derived well track fc parameter definitions"""
param1 = arcpy.Parameter(
displayName="Output Well Track Features",
name="out_fc_well_track",
## datatype="GPFeatureLayer",
datatype="DEFeatureClass",
parameterType="Derived",
direction="Output")
## param1.parameterDependencies = [param0.name]
# Third parameter
"""Define derived well fc parameter definitions"""
param2 = arcpy.Parameter(
displayName="Output Well Features",
name="out_fc",
## datatype="GPFeatureLayer",
datatype="DEFeatureClass",
parameterType="Derived",
direction="Output")
## param2.parameterDependencies = [param0.name]
#add each param to list
## params = [param0, param1]
params = [param0, param1, param2]
return params
def isLicensed(self):
"""Set whether tool is licensed to execute."""
return True
def updateParameters(self, parameters):
"""Modify the values and properties of parameters before internal
validation is performed. This method is called whenever a parameter
has been changed."""
return
def updateMessages(self, parameters):
"""Modify the messages created by internal validation for each tool
parameter. This method is called after internal validation."""
return
def execute(self, parameters, messages):
"""The source code of the tool."""
# set local variables
XY_Layer = 'in_file'
out_fc_well_track = 'out_fc_well_track'
out_fc = 'out_fc'
# get input_fc name
if parameters[0] != None:
inCSV_file = parameters[0].valueAsText
in_file_name = os.path.splitext(os.path.basename(inCSV_file))[0]
arcpy.AddMessage("in_file_name: " + in_file_name)
# Validate the output name so it is valid
well_fc_name = arcpy.ValidateTableName(in_file_name)
arcpy.AddMessage("input name validated: " + well_fc_name)
out_fc_well_track = well_fc_name + "_well_track"
if arcpy.Exists(out_fc_well_track):
arcpy.Delete_management(out_fc_well_track)
if arcpy.Exists(well_fc_name):
arcpy.Delete_management(well_fc_name)
arcpy.AddMessage("Start XYZ Tool...")
# Make the XY event layer...
## arcpy.MakeXYEventLayer_management(inCSV_file, x_coords, y_coords, XY_Layer, sr_In, z_coords)
arcpy.MakeXYEventLayer_management(inCSV_file, "X_usft", "Y_usft", XY_Layer, sr_In, "TVD_usft")
# create well track fc
## arcpy.SetParameter(1,out_fc_well_track)
arcpy.AddMessage("Start FC to FC Tool...")
arcpy.FeatureClassToFeatureClass_conversion(XY_Layer, out_wrk_spc, out_fc_well_track)
arcpy.SetParameter(1,out_fc_well_track)
arcpy.AddMessage("Completed FC to FC Tool..." + out_fc_well_track)
# create well fc
out_fc = well_fc_name
arcpy.SetParameter(2,out_fc)
delimitedField = arcpy.AddFieldDelimiters(out_wrk_spc, where_field)
sql_where = delimitedField + " IN('SHL', 'TPH', 'BHL')"
arcpy.AddMessage("sql_where clause: " + sql_where)
# using sql query to filter out SHL, TPH, and BHL from well track fc
# TODO: remove hard code and use paramaters as intended...
## out_fc_well_track = r'O:\Alaska\GIS\cook_inlet\maps\MRA\Code\TRS_Distances\data\MTRS_wells.gdb\SCU_322C_04_WP04___GIS_Format_well_track'
arcpy.FeatureClassToFeatureClass_conversion(out_fc_well_track, out_wrk_spc, out_fc, sql_where)
## arcpy.SetParameter(2,out_fc)
arcpy.AddMessage("Completed FC to FC Tool..." + out_fc)
# TODO: remove hard code and use paramaters as intended...
## out_fc = r'O:\Alaska\GIS\cook_inlet\maps\MRA\Code\TRS_Distances\data\MTRS_wells.gdb\SCU_322C_04_WP04___GIS_Format'
# Print the total rows
if int(arcpy.GetCount_management(out_fc)[0]) == 0:
arcpy.AddError("{0} has no features.".format(out_fc))
arcpy.AddMessage('ERROR occurred because SHL, TPH, or BHL were not found in input file' )
arcpy.AddMessage('Unable to continue! Please correct ERROR!' )
raise arcpy.ExecuteError
else:
arcpy.AddMessage(out_fc + " has feature count of: " + str(arcpy.GetCount_management(out_fc)))
# add Well_Desc column
arcpy.AddMessage("Adding 'Well_FC' field to well fc...")
arcpy.AddField_management(out_fc, field_name, "TEXT", field_length=50)
# update the new Well_Desc field
# updateWell_Desc(out_fc)
arcpy.AddMessage("Updated Well_Desc column!")
return