Personalizar el comportamiento de la herramienta en una caja de herramientas Python

La validación es todo lo que ocurre antes de pulsar el botón Aceptar de una herramienta. Cuando cree sus propias herramientas personalizadas, la validación le permitirá personalizar el modo en que los parámetros responden e interaccionan con los valores y entre ellos. La validación se efectúa con un bloque de código de Python que se usa para controlar el comportamiento de la herramienta.

Para obtener más información sobre la validación, consulte Comprender la validación en las herramientas de secuencia de comandos.

En una caja de herramientas de Python, cada parámetro de la herramienta tiene un objeto de parámetro asociado con propiedades y métodos que resultan útiles en la validación de la herramienta. En una caja de herramientas Python, los parámetros se definen en el método getParameterInfo de la clase de herramienta. El comportamiento de esos parámetros y cómo interactúan entre ellos y con las entradas son aspectos que se validan según el método updateParameters de la clase de herramienta.

Actualizar el esquema en una caja de herramientas PythonComportamiento de la licencia en una caja de herramientas Python

Acceso a los parámetros de la herramienta

Los objetos de parámetro forman la base de cómo se definen e interactúan los parámetros en una caja de herramientas Python. La práctica estándar es crear la lista de parámetros en el método getParameterInfo de la clase de herramienta, según se muestra en el código a continuación.

def getParameterInfo(self):
    #Define parameter definitions

    # First parameter
    param0 = arcpy.Parameter(
        displayName="Input Features",
        name="in_features",
        datatype="GPFeatureLayer",
        parameterType="Required",
        direction="Input")

    return [param0]

Para obtener más información sobre la definición de parámetros en una caja de herramientas de Python, consulte Definición de parámetros en una caja de herramientas Python.

Objeto de parámetro

Métodos

Nombre del método

Descripción de uso

setErrorMessage(message:string)

Marca un error (una X roja) en el parámetro con el mensaje proporcionado. Las herramientas no se ejecutan si alguno de los parámetros tiene un error.

setWarningMessage(message:string)

Marca una advertencia (un triángulo amarillo) en el parámetro con el mensaje proporcionado. A diferencia de los errores, las herramientas se ejecutan cuando hay mensajes de advertencia.

setIDMessage(messageType: string, messageID: string, {AddArgument1}, {AddArgument2})

Le permite configurar un mensaje del sistema. Los argumentos son los mismo que en la función AddIDMessage.

clearMessage()

Borra todo el texto del mensaje y configura el estado como informativo (sin errores ni advertencias).

hasError()

Devuelve verdadero si el parámetro contiene un error.

hasWarning()

Devuelve verdadero si el parámetro contiene una advertencia.

isInputValueDerived()

Devuelve verdadero si la herramienta se está validando dentro de un modelo y el valor de entrada es la salida de otra herramienta en el modelo.

Métodos del objeto de parámetro

Propiedades

Nombre de propiedades

Lectura/escritura

Valores

Descripción

name

Solo lectura

Cadena de caracteres

El nombre del parámetro.

dirección

Solo lectura

Cadena de caracteres: "Input", "Output"

Dirección de entrada/salida del parámetro.

datatype

Solo lectura

Cadena de caracteres

Para obtener una lista de tipos de datos de parámetro, consulte Definir los tipos de datos de parámetro en una caja de herramientas de Python.

parameterType

Solo lectura

Cadena de caracteres: "Required", "Optional", "Derived"

El tipo de parámetro.

parameterDependencies

Lectura/escritura

Lista de Python

Una lista de índices de cada parámetro dependiente.

valor

Lectura/escritura

Objeto de valor

El valor del parámetro.

defaultEnvironmentName

Solo lectura

Cadena de caracteres

La configuración del entorno predeterminada.

habilitado

Lectura/escritura

Booleano

Falso si el parámetro no está disponible.

altered

Solo lectura

Booleano

Verdadero si el usuario modificó el valor.

hasBeenValidated

Solo lectura

Booleano

Verdadero si la rutina de validación interna verificó el parámetro.

categoría

Lectura/escritura

Cadena de caracteres

La categoría del parámetro.

esquema

Solo lectura

Objeto de esquema

El esquema del dataset de salida.

filtro

Solo lectura

Objeto de filtro

El filtro que se aplicará a los valores en el parámetro.

simbología

Lectura/escritura

Cadena de caracteres

La ruta al archivo de capa (.lyr) que se utiliza para dibujar la salida.

mensaje

Solo lectura

Cadena de caracteres

El mensaje que se mostrará al usuario. Consulte SetErrorMessage y SetWarningMessage arriba.

Propiedades del objeto de parámetro

parameterDependencies

Por lo general, configura las dependencias del parámetro para que las utilice el objeto de esquema. Existen dos casos donde las dependencias ya puede estar configuradas en el método getParameterInfo de la herramienta.

  • Para un parámetro de dataset de salida cuyo tipo es Derivado, la dependencia es el índice del parámetro desde el cual se deriva la salida.
  • Para determinados tipos de datos de entrada, la dependencia es el índice del parámetro que contiene la información utilizada por el control, según se muestra en la tabla a continuación.

Tipo de datos de entrada

Tipo de datos dependientes

Descripción

Campo o expresión de SQL

Tabla

La tabla que contiene los campos.

Elemento de INFO o expresión de INFO

Tabla INFO

La tabla INFO que contiene los elementos.

Clase de entidad de cobertura

Cobertura

La cobertura que contiene las entidades.

Unidades de área o unidades lineales

GeoDataset

Un dataset geográfico utilizado para determinar las unidades por defecto.

Sistema de coordenadas

Espacio de trabajo

Un espacio de trabajo utilizado para determinar el sistema de coordenadas predeterminado.

Configuración de jerarquía de Network Analyst

Dataset de red

El dataset de red que contiene la información de jerarquía.

Tabla de valores de estadísticas geográficas

Capa de estadísticas geográficas

La capa de análisis que contiene las tablas.

Tipos de datos de Obtenido de
NotaNota:

parameterDependencies es equivalente al ajuste Obtenido de del asistente para la Herramienta de secuencia de comandos.

Las dependencias por lo general se configuran en el método getParameterInfo:

def getParameterInfo(self):
    #Define parameter definitions

    # First parameter
    param0 = arcpy.Parameter(
        displayName="Input Features",
        name="in_features",
        datatype="GPFeatureLayer",
        parameterType="Required",
        direction="Input")

    # Second parameter
    param1 = arcpy.Parameter(
        displayName="Sinuosity Field",
        name="sinuosity_field",
        datatype="Field",
        parameterType="Optional",
        direction="Input")
    param1.value = "sinuosity"

    # Third parameter
    param2 = arcpy.Parameter(
        displayName="Output Features",
        name="out_features",
        datatype="GPFeatureLayer",
        parameterType="Derived",
        direction="Output")
    param2.parameterDependencies = [param0.name]
    param2.schema.clone = True

    params = [param0, param1, param2]

    return params

valor

Este valor es del parámetro que el usuario introdujo o usted configuró de forma programada. Puede configurar el valor en el método getParameterInfo, en cuyo caso sirve como el valor predeterminado inicial para el parámetro. También puede configurar el valor en updateParameters en respuesta a una entrada de usuario como se muestra a continuación.

def updateParameters(self, parameters):
    # Set the default distance threshold to 1/100 of the larger of the width
    #  or height of the extent of the input features.  Do not set if there is no 
    #  input dataset yet, or the user has set a specific distance (Altered is true).
    #
    if parameters[0].value:
        if not parameters[6].altered:
            extent = arcpy.Describe(parameters[0].value).extent
        if extent.width > extent.height:
            parameters[6].value = extent.width / 100
        else:
            parameters[6].value = extent.height / 100

    return

La propiedad value de un parámetro devuelve un objeto a menos que no se haya asignado ningún valor al parámetro, en cuyo caso value devuelve None. Para protegerse frente a la posibilidad de que un parámetro esté vacío, utilice una comprobación con if antes de utilizar su valor.

El fragmento de código a continuación evalúa si el valor es igual a la cadena de texto "Get Spatial Weights From File". Esta prueba funciona porque el tipo de datos del parámetro es una cadena de texto.

# If the option to use a weights file is selected, enable the 
#   parameter for specifying the file, otherwise disable it

if parameters[3].value:  # check that parameter has a value
    if parameters[3].value == "Get Spatial Weights From File":
        parameters[8].enabled = True
    else:
        parameters[8].enabled = False

Puesto que un objeto Value no admite la manipulación de la cadena de caracteres, utilice la propiedad value del objeto Value cuando necesite manipular o analizar una cadena de caracteres. La muestra de código utiliza el método os.path.dirname para devolver el directorio de un dataset.

if parameters[0].value:
    workspace = os.path.dirname(parameters[0].value.value)
NotaNota:

With the exception of Describe, don't use methods that take a catalog path, such as ListFields, in validation. The dataset may not exist when your tool is validated in ModelBuilder, and the method may fail or give unexpected results.

In the specific case of ListFields, the Describe object's fields property will provide the equivalent information.

NotaNota:

Don't set a parameter value in updateMessages() since the value will not be validated by the internal validation routine.

altered

altered es verdadero si el usuario cambió el valor de un parámetro, por ejemplo al introducir una ruta de salida. Una vez que el parámetro se ha alterado, permanece así hasta que el usuario vacía (borra) el valor, en cuyo caso vuelve a estar no alterado. Cambiar un valor de forma programada con un código de validación no cambia el estado alterado. Es decir, si configura un valor para un parámetro, el estado alterado del parámetro no cambia.

altered se utiliza para determinar si se puede cambiar el valor de un parámetro. A modo de ejemplo, suponga que una herramienta tiene un parámetro de clase de entidad y un parámetro de palabra clave. Si la clase de entidad contiene puntos o polígonos, las palabras clave son ROJO, VERDE y AZUL, y si contiene líneas, NARANJA, AMARILLO, PÚRPURA y BLANCO.

Suponga que el usuario introduce una clase de entidad de punto. Si el parámetro de palabra clave no está alterado, configura el valor como ROJO, dado que es el valor por defecto.

Si se introduce una clase de entidad de línea, configura el valor predeterminado como NARANJA siempre que el parámetro de palabra clave esté no alterado.

No obstante, si el usuario ha alterado el parámetro de palabra clave (es decir, la palabra clave se configura como VERDE), no debe restablecer la palabra clave; el usuario ha realizado su elección (VERDE) y no conoce la intención; es posible que cambien la clase de entidad para que VERDE sea válido o pueden cambiar la palabra clave (por ejemplo, a PÚRPURA). Puesto que VERDE no es un miembro del conjunto que creó para las líneas, la validación interna indica un error del parámetro. El usuario tiene dos opciones en este punto: cambiar la clase de entidad de entrada o cambiar la palabra clave.

if not parameters[2].altered:
    parameters[2].value = "POINT"

hasBeenValidated

hasBeenValidated es falso si el usuario ha modificado el valor de un parámetro desde la última vez que se invocaron updateParameters y una validación interna. Una vez que se invocó la validación interna, el geoprocesamiento se configura hasBeenValidated automáticamente en verdadero para cada parámetro.

hasBeenValidated se utiliza para determinar si el usuario ha cambiado un valor desde la última invocación de updateParameters. Puede utilizar esta información al decidir si hará su verificación propia del parámetro.

def updateParameters(self, parameters):
    # Set the default distance threshold to 1/100 of the larger of the width
    #  or height of the extent of the input features.  Do not set if there is no 
    #  input dataset yet, or the user has set a specific distance (Altered is true).
    #
    if parameters[0].value:
        if not parameters[6].altered:
            extent = arcpy.Describe(parameters[0].value).extent
        if extent.width > extent.height:
            parameters[6].value = extent.width / 100
        else:
            parameters[6].value = extent.height / 100

    return

Temas relacionados

5/9/2014