<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Getting error setting parameter.displayName in Python Toolbox in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/getting-error-setting-parameter-displayname-in/m-p/1326809#M68549</link>
    <description>&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;I'm building a python toolbox and getting a weird error when trying to set a parameter's displayName in the updateParameters function. I have a working version where it enables and disables parameters, but I get the following error. I know what this means, but the documentation indicates that the displayName attribute should be read/write for a parameter object.&lt;/P&gt;&lt;P&gt;Error 000001 Traceback (most recent call last):&lt;BR /&gt;File "&amp;lt;string&amp;gt;", line 228, in updateParameters&lt;BR /&gt;AttributeError: ParameterObject: Set attribute: displayName does not exist&lt;/P&gt;&lt;P&gt;Line 228 is the following, but I get the error for any of the parameters[].displayName lines:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;parameters&lt;/SPAN&gt;&lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;5&lt;/SPAN&gt;&lt;SPAN class=""&gt;].&lt;/SPAN&gt;&lt;SPAN class=""&gt;displayName&lt;/SPAN&gt;&lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt;param_settings&lt;/SPAN&gt;&lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;"Stands"&lt;/SPAN&gt;&lt;SPAN class=""&gt;]&lt;BR /&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;Here is the relevant code. I would really appreciate any ideas!&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;class StandsOnBuffers_Update(object):
    def __init__(self):
        """Define the tool (tool name is the name of the class)."""
        self.label = "Update StandsOnBuffers"
        self.description = "Creates StandsOnBuffers for update process"
        self.canRunInBackground = False
        self.category = "Update"

    def getParameterInfo(self):
        """Define parameter definitions"""
        procws_param = arcpy.Parameter(
            displayName="Processing Workspace",
            name="Processing_Workspace",
            datatype="DEWorkspace",
            parameterType="Required",
            direction="Input")
        #param0.displayOrder = 0

        cf_param = arcpy.Parameter(
            displayName="Configuration File",
            name="Configuration_File",
            datatype="DEFile",
            parameterType="Required",
            direction="Input")
        cf_param.filter.list=['json']
        #param1.displayOrder = 2

        outws_param = arcpy.Parameter(
            displayName="Output Workspace",
            name="Output_Workspace",
            datatype="DEWorkspace",
            parameterType="Required",
            direction="Input")
        #param2.displayOrder = 3

        rn_param = arcpy.Parameter(
            displayName="Run Name",
            name="Run_Name",
            datatype="GPString",
            parameterType="Required",
            direction="Input")
        #param3.displayOrder = 4

        reg_param = arcpy.Parameter(
            displayName="Region",
            name="Region",
            datatype="GPString",
            parameterType="Required",
            direction="Input")
        reg_param.filter.type="ValueList"
        reg_param.filter.list=["SEUS","SWUS","NWUS"]
        #param4.displayOrder = 5

        st_param = arcpy.Parameter(
            displayName="Stands from previous run",
            name="Stands",
            datatype="DEFeatureClass",
            parameterType="Optional",
            direction="Input")
        #param5.displayOrder = 6

        arws_param = arcpy.Parameter(
            displayName="Archive Workspace",
            name="Archive_Workspace",
            datatype="DEWorkspace",
            parameterType="Required",
            direction="Input")

        own_param = arcpy.Parameter(
            displayName="Ownership from previous run",
            name="Ownership",
            datatype="DEFeatureClass",
            parameterType="Optional",
            direction="Input")

        rdwarma_param = arcpy.Parameter(
            displayName="Road Water RMA Buffers",
            name="Road_Water_RMA_Buffers",
            datatype="DEFeatureClass",
            parameterType="Required",
            direction="Input")

        dmgst_param = arcpy.Parameter(
            displayName="Damaged Stands",
            name="Damaged_Stands",
            datatype="DEFeatureClass",
            parameterType="Optional",
            direction="Input")
        dmgst_param.enabled = False

        params = [procws_param,outws_param,arws_param,cf_param,reg_param,st_param,own_param,rdwarma_param,dmgst_param,rn_param]
        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."""
        if parameters[3].altered:
            with open(parameters[3].valueAsText,'r') as f:
                config = json.load(f)
            param_settings = config["Parameters"]
            if "Stands" in param_settings:
                if isinstance(param_settings["Stands"],str):
                    parameters[5].enabled=True
                    parameters[5].displayName=param_settings["Stands"]
                else:
                    parameters[5].displayName="Stands from previous run"
                    parameters[5].enabled=param_settings["Stands"]
            if "Ownership" in param_settings:
                if isinstance(param_settings["Ownership"],str):
                    parameters[6].enabled=True
                    parameters[6].displayName=param_settings["Ownership"]
                else:
                    parameters[6].displayName="Ownership from previous run"
                    parameters[6].enabled=param_settings["Ownership"]
            if "DamagedStands" in param_settings:
                if isinstance(param_settings["DamagedStands"],str):
                    parameters[8].enabled=True
                    parameters[8].displayName=param_settings["DamagedStands"]
                else:
                    parameters[8].displayName="Damaged Stands"
                    parameters[8].enabled=param_settings["DamagedStands"]
        return

    def updateMessages(self, parameters):
        """Modify the messages created by internal validation for each tool
        parameter.  This method is called after internal validation."""
        if parameters[5].enabled:
            if parameters[5].value and arcpy.Exists(parameters[5].valueAsText):
                parameters[5].clearMessage()
            else:
                parameters[5].setIDMessage("ERROR",530)
        if parameters[6].enabled:
            if parameters[6].value and arcpy.Exists(parameters[6].valueAsText):
                parameters[6].clearMessage()
            else:
                parameters[6].setIDMessage("ERROR",530)
        if parameters[8].enabled:
            if parameters[8].value and arcpy.Exists(parameters[8].valueAsText):
                parameters[8].clearMessage()
            else:
                parameters[8].setIDMessage("ERROR",530)
        return

    def execute(self, parameters, messages):
        """The source code of the tool."""
        arcpy.env.overwriteOutput = True
        #with open(debugLogPath,'w') as debugLog:
        for param in parameters:
            if not param.enabled:
                param.value=None
                #debugLog.write("{}:{}\n".format(param.name,param.valueAsText))
        StandsOnBuffers(parameters[0].valueAsText,parameters[1].valueAsText,parameters[2].valueAsText,parameters[3].valueAsText,parameters[4].valueAsText,parameters[5].valueAsText,parameters[6].valueAsText,parameters[7].valueAsText,parameters[8].valueAsText,parameters[9].valueAsText)
        return

    def postExecute(self, parameters):
        """This method takes place after outputs are processed and
        added to the display."""
        return&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 08 Sep 2023 15:22:29 GMT</pubDate>
    <dc:creator>AdamLake2</dc:creator>
    <dc:date>2023-09-08T15:22:29Z</dc:date>
    <item>
      <title>Getting error setting parameter.displayName in Python Toolbox</title>
      <link>https://community.esri.com/t5/python-questions/getting-error-setting-parameter-displayname-in/m-p/1326809#M68549</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;I'm building a python toolbox and getting a weird error when trying to set a parameter's displayName in the updateParameters function. I have a working version where it enables and disables parameters, but I get the following error. I know what this means, but the documentation indicates that the displayName attribute should be read/write for a parameter object.&lt;/P&gt;&lt;P&gt;Error 000001 Traceback (most recent call last):&lt;BR /&gt;File "&amp;lt;string&amp;gt;", line 228, in updateParameters&lt;BR /&gt;AttributeError: ParameterObject: Set attribute: displayName does not exist&lt;/P&gt;&lt;P&gt;Line 228 is the following, but I get the error for any of the parameters[].displayName lines:&lt;/P&gt;&lt;PRE&gt;&lt;SPAN class=""&gt;parameters&lt;/SPAN&gt;&lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;5&lt;/SPAN&gt;&lt;SPAN class=""&gt;].&lt;/SPAN&gt;&lt;SPAN class=""&gt;displayName&lt;/SPAN&gt;&lt;SPAN class=""&gt;=&lt;/SPAN&gt;&lt;SPAN class=""&gt;param_settings&lt;/SPAN&gt;&lt;SPAN class=""&gt;[&lt;/SPAN&gt;&lt;SPAN class=""&gt;"Stands"&lt;/SPAN&gt;&lt;SPAN class=""&gt;]&lt;BR /&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;P&gt;Here is the relevant code. I would really appreciate any ideas!&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="python"&gt;class StandsOnBuffers_Update(object):
    def __init__(self):
        """Define the tool (tool name is the name of the class)."""
        self.label = "Update StandsOnBuffers"
        self.description = "Creates StandsOnBuffers for update process"
        self.canRunInBackground = False
        self.category = "Update"

    def getParameterInfo(self):
        """Define parameter definitions"""
        procws_param = arcpy.Parameter(
            displayName="Processing Workspace",
            name="Processing_Workspace",
            datatype="DEWorkspace",
            parameterType="Required",
            direction="Input")
        #param0.displayOrder = 0

        cf_param = arcpy.Parameter(
            displayName="Configuration File",
            name="Configuration_File",
            datatype="DEFile",
            parameterType="Required",
            direction="Input")
        cf_param.filter.list=['json']
        #param1.displayOrder = 2

        outws_param = arcpy.Parameter(
            displayName="Output Workspace",
            name="Output_Workspace",
            datatype="DEWorkspace",
            parameterType="Required",
            direction="Input")
        #param2.displayOrder = 3

        rn_param = arcpy.Parameter(
            displayName="Run Name",
            name="Run_Name",
            datatype="GPString",
            parameterType="Required",
            direction="Input")
        #param3.displayOrder = 4

        reg_param = arcpy.Parameter(
            displayName="Region",
            name="Region",
            datatype="GPString",
            parameterType="Required",
            direction="Input")
        reg_param.filter.type="ValueList"
        reg_param.filter.list=["SEUS","SWUS","NWUS"]
        #param4.displayOrder = 5

        st_param = arcpy.Parameter(
            displayName="Stands from previous run",
            name="Stands",
            datatype="DEFeatureClass",
            parameterType="Optional",
            direction="Input")
        #param5.displayOrder = 6

        arws_param = arcpy.Parameter(
            displayName="Archive Workspace",
            name="Archive_Workspace",
            datatype="DEWorkspace",
            parameterType="Required",
            direction="Input")

        own_param = arcpy.Parameter(
            displayName="Ownership from previous run",
            name="Ownership",
            datatype="DEFeatureClass",
            parameterType="Optional",
            direction="Input")

        rdwarma_param = arcpy.Parameter(
            displayName="Road Water RMA Buffers",
            name="Road_Water_RMA_Buffers",
            datatype="DEFeatureClass",
            parameterType="Required",
            direction="Input")

        dmgst_param = arcpy.Parameter(
            displayName="Damaged Stands",
            name="Damaged_Stands",
            datatype="DEFeatureClass",
            parameterType="Optional",
            direction="Input")
        dmgst_param.enabled = False

        params = [procws_param,outws_param,arws_param,cf_param,reg_param,st_param,own_param,rdwarma_param,dmgst_param,rn_param]
        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."""
        if parameters[3].altered:
            with open(parameters[3].valueAsText,'r') as f:
                config = json.load(f)
            param_settings = config["Parameters"]
            if "Stands" in param_settings:
                if isinstance(param_settings["Stands"],str):
                    parameters[5].enabled=True
                    parameters[5].displayName=param_settings["Stands"]
                else:
                    parameters[5].displayName="Stands from previous run"
                    parameters[5].enabled=param_settings["Stands"]
            if "Ownership" in param_settings:
                if isinstance(param_settings["Ownership"],str):
                    parameters[6].enabled=True
                    parameters[6].displayName=param_settings["Ownership"]
                else:
                    parameters[6].displayName="Ownership from previous run"
                    parameters[6].enabled=param_settings["Ownership"]
            if "DamagedStands" in param_settings:
                if isinstance(param_settings["DamagedStands"],str):
                    parameters[8].enabled=True
                    parameters[8].displayName=param_settings["DamagedStands"]
                else:
                    parameters[8].displayName="Damaged Stands"
                    parameters[8].enabled=param_settings["DamagedStands"]
        return

    def updateMessages(self, parameters):
        """Modify the messages created by internal validation for each tool
        parameter.  This method is called after internal validation."""
        if parameters[5].enabled:
            if parameters[5].value and arcpy.Exists(parameters[5].valueAsText):
                parameters[5].clearMessage()
            else:
                parameters[5].setIDMessage("ERROR",530)
        if parameters[6].enabled:
            if parameters[6].value and arcpy.Exists(parameters[6].valueAsText):
                parameters[6].clearMessage()
            else:
                parameters[6].setIDMessage("ERROR",530)
        if parameters[8].enabled:
            if parameters[8].value and arcpy.Exists(parameters[8].valueAsText):
                parameters[8].clearMessage()
            else:
                parameters[8].setIDMessage("ERROR",530)
        return

    def execute(self, parameters, messages):
        """The source code of the tool."""
        arcpy.env.overwriteOutput = True
        #with open(debugLogPath,'w') as debugLog:
        for param in parameters:
            if not param.enabled:
                param.value=None
                #debugLog.write("{}:{}\n".format(param.name,param.valueAsText))
        StandsOnBuffers(parameters[0].valueAsText,parameters[1].valueAsText,parameters[2].valueAsText,parameters[3].valueAsText,parameters[4].valueAsText,parameters[5].valueAsText,parameters[6].valueAsText,parameters[7].valueAsText,parameters[8].valueAsText,parameters[9].valueAsText)
        return

    def postExecute(self, parameters):
        """This method takes place after outputs are processed and
        added to the display."""
        return&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 08 Sep 2023 15:22:29 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/getting-error-setting-parameter-displayname-in/m-p/1326809#M68549</guid>
      <dc:creator>AdamLake2</dc:creator>
      <dc:date>2023-09-08T15:22:29Z</dc:date>
    </item>
    <item>
      <title>Re: Getting error setting parameter.displayName in Python Toolbox</title>
      <link>https://community.esri.com/t5/python-questions/getting-error-setting-parameter-displayname-in/m-p/1327034#M68561</link>
      <description>&lt;P&gt;"displayName" can only be set in the getParameters method.&amp;nbsp; &amp;nbsp;From this &lt;A href="https://pro.arcgis.com/en/pro-app/latest/arcpy/geoprocessing_and_python/customizing-tool-behavior-in-a-python-toolbox.htm" target="_self"&gt;page:&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;EM&gt;Several properties, including&amp;nbsp;&lt;SPAN class=""&gt;name&lt;/SPAN&gt;,&amp;nbsp;&lt;SPAN class=""&gt;displayName&lt;/SPAN&gt;,&amp;nbsp;&lt;SPAN class=""&gt;datatype&lt;/SPAN&gt;,&amp;nbsp;&lt;SPAN class=""&gt;direction&lt;/SPAN&gt;, and&amp;nbsp;&lt;SPAN class=""&gt;parameterType&lt;/SPAN&gt;, establish the characteristics of a tool and cannot be modified during validation methods (such as&amp;nbsp;&lt;SPAN class=""&gt;updateMessages&lt;/SPAN&gt;&amp;nbsp;and&amp;nbsp;&lt;SPAN class=""&gt;updateParameters&lt;/SPAN&gt;).&lt;/EM&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 08 Sep 2023 23:21:36 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/getting-error-setting-parameter-displayname-in/m-p/1327034#M68561</guid>
      <dc:creator>DonMorrison1</dc:creator>
      <dc:date>2023-09-08T23:21:36Z</dc:date>
    </item>
    <item>
      <title>Re: Getting error setting parameter.displayName in Python Toolbox</title>
      <link>https://community.esri.com/t5/python-questions/getting-error-setting-parameter-displayname-in/m-p/1327037#M68562</link>
      <description>&lt;P&gt;Thanks! I was looking at the Parameter documentation and didn't think to look at the more general toolbox documentation, so I missed that. We'll just move forward without that.&lt;/P&gt;</description>
      <pubDate>Fri, 08 Sep 2023 23:28:41 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/getting-error-setting-parameter-displayname-in/m-p/1327037#M68562</guid>
      <dc:creator>AdamLake2</dc:creator>
      <dc:date>2023-09-08T23:28:41Z</dc:date>
    </item>
  </channel>
</rss>

