I have Python toolbox that I have published a geoprocessing service. It works great in arcmap, and it works great after publishing when I access it from arcmap. However when I try to use it in web app builder it fails, the error reads:
. I have no clue why this is failing earlier versions of this script published as gp services have worked perfectly in the past. If anyone here can figure this out I would be grateful.
# Top Comments
# Start script
#-----------------------------------------------------------------------------
import arcpy
import os
# Tool initialization
#-----------------------------------------------------------------------------
class Toolbox(object):
def __init__(self):
"""Define the toolbox (the name of the toolbox is the name of the
.pyt file)."""
self.label = "Value_Extraction_Tool"
self.alias = "Value Extraction Tool"
# List of tool classes associated with this toolbox
self.tools = [Tool]
class Tool(object):
def __init__(self):
"""Define the tool (tool name is the name of the class)."""
self.label = "Value Extraction Tool"
self.description = ""
self.canRunInBackground = False
def getParameterInfo(self):
DataSource = arcpy.Parameter(
displayName="DataSource",
name="DataSource",
datatype="DEWorkspace",
parameterType="Required",
direction="Input")
InputPoint = arcpy.Parameter(
displayName="InputPoint",
name="InputPoint",
datatype="DEFeatureClass",
parameterType="Required",
direction="Input")
OutputFC = arcpy.Parameter(
displayName="OutputFC",
name="OutputFC",
datatype="DEFeatureClass",
parameterType="Required",
direction="Output")
params = [DataSource, InputPoint, OutputFC]
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):
# User input arguments
DataSource = parameters[0].valueAsText
InputPoint = parameters[1].valueAsText
OutputFC = parameters[2].valueAsText
# Handle all input point procesing
arcpy.CopyFeatures_management(InputPoint, OutputFC)
arcpy.AddXY_management(InputPoint)
# Add fields to hold temporal data
arcpy.AddField_management(OutputFC, "LABEL", "TEXT")
arcpy.AddField_management(OutputFC, "VALUE", "DOUBLE")
# Loop through geometry attributes and get the x and y
with arcpy.da.SearchCursor(InputPoint,"*") as cursor:
PointIndex = 1
for row in cursor:
X = row[3]
Y = row[4]
arcpy.AddMessage(str(X) + " " + str(Y))
# Get rasters and extract data at an X and Y
index = 0
for (path, dirs, files) in os.walk(DataSource):
for ThisFile in files:
fName,fExt = os.path.splitext(ThisFile)
if fExt.upper() == ".IMG" or fExt.upper() == ".TIF":
RasterPath = path + "\\" + ThisFile
data = (arcpy.GetCellValue_management(RasterPath, str(X) + " " + str(Y), ""))
aquisition_date = arcpy.GetRasterProperties_management(in_raster = RasterPath, property_type = "ACQUISITIONDATE")
if str(aquisition_date).upper() == "UNKNOWN":
insertcursor = arcpy.InsertCursor(OutputFC)
row = insertcursor.newRow()
row.setValue("POINTID", PointIndex)
row.setValue("LABEL", "{}, Point: {}".format(index, PointIndex))
row.setValue("VALUE", data)
insertcursor.insertRow(row)
del insertcursor
index += 1
PointIndex += 1
return
Are you able to run this service directly from REST using the input parameters provided from WAB? If you open up the web developer tools when running this task in WAB, you should see a submitjob or execute call. Within the headers there will be form data which you can input directly into the REST endpoint for the service to see if maybe this is a client side issue.
-Lynsey
Also, within your configuration of the script tool, what are your input data types set to? could you send a screenshot?