AnsweredAssumed Answered

Multivalue parameter as text in .pyt - reading in to imported module function

Question asked by sianger on Jun 10, 2014
Latest reply on Jun 11, 2014 by sianger
I'm building a Python toolbox with a tool which calls specific functions from a custom module.

The main input parameter for this tool is a multivalue list of raster layers.

In the execute block of my tool, I use parameter[2].valueAsText to read in said parameter, as normal, and then feed it into a custom module function as follows:

output          = parameters[0].valueAsText input           = parameters[2].valueAsText function        = parameters[1].valueAsText functionname    = "Local" + function option          = parameters[3].valueAsText expression      = parameters[4].valueAsText  newGrid = getattr(localfuncs,functionname)(input,option,expression) newGrid.save(output)

In this case, I've tested it with one custom function (corresponding to 'functionname'):

def LocalMean(input,option,expression):     import arcpy     newGrid = arcpy.sa.CellStatistics(input,"MEAN")     return newGrid

The trouble is that the 'input' (multivalue read in as text) ends up being a semicolon-delimited string of file names, and the function in the custom module can't seem to convert it back to a list of raster layers for Cell Statistics to actually process. As a result I get this error:

Script failed because:      ERROR 000732: Input Raster: Dataset Development;Vegetation;Hydrology;Elevation does not exist or is not supported at this location:

I've tried reading in 'input' with .values instead of .valueAsText, so it comes in as a list, but then I get the error that 'cannot concatenate 'str' and 'list' objects' in the getattr line.

Any ideas what I can do about this?

I know this overall structure may seem unnecessarily complicated; but it's a key part of the bigger project. I'm not attached to specifically using getattr here, but solutions which preserve the basic structure, namely calling functions from a custom module using a string of the function's name, would be ideal. Thanks a lot!

Outcomes