Skip to content

Create Rasters for CMEMS Dataset invoked from ArcGIS fails with TypeError: The value provided for the outputWorkspace parameter is an instance of <class 'GeoEco.ArcGIS._ArcGISObjectWrapper'>, an invalid type. Please provide an instance of <class 'str'>. #30

@jjrob

Description

@jjrob

Here is a traceback:

Traceback (most recent call last):
 File "C:\Users\cetus\AppData\Local\ESRI\conda\envs\arcgispro-py3-mget1\Lib\site-packages\GeoEco\ArcToolbox\Marine Geospatial Ecology Tools.atbx\CMEMSARCOArrayCreateArcGISRasters.tool\tool.script.execute.py", line 14, in
 File "C:\Users\cetus\AppData\Local\ESRI\conda\envs\arcgispro-py3-mget1\Lib\site-packages\GeoEco\ArcToolbox\Marine Geospatial Ecology Tools.atbx\CMEMSARCOArrayCreateArcGISRasters.tool\tool.script.execute.py", line 11, in Main
 File "C:\Users\cetus\AppData\Local\ESRI\conda\envs\arcgispro-py3-mget1\Lib\site-packages\GeoEco\ArcToolbox.py", line 662, in ExecuteMethodAsGeoprocessingTool
 results = method(**argValues)
 ^^^^^^^^^^^^^^^^^^^
 File "C:\Users\cetus\AppData\Local\ESRI\conda\envs\arcgispro-py3-mget1\Lib\site-packages\GeoEco\DataProducts\CMEMS.py", line 890, in CreateArcGISRasters
 cls.doc.Obj.ValidateMethodInvocation()
 File "C:\Users\cetus\AppData\Local\ESRI\conda\envs\arcgispro-py3-mget1\Lib\site-packages\GeoEco\Metadata.py", line 329, in ValidateMethodInvocation
 (valueChanged, value) = argMetadata.Type.ValidateValue(parentFrame.f_locals[argMetadata.Name], '%s parameter' % argMetadata.Name, parentFrame.f_locals, argMetadata)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "C:\Users\cetus\AppData\Local\ESRI\conda\envs\arcgispro-py3-mget1\Lib\site-packages\GeoEco\Types_StoredObject.py", line 173, in ValidateValue
 (valueChanged2, value) = super(StoredObjectTypeMetadata, self).ValidateValue(value, variableName, methodLocals, argMetadata)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "C:\Users\cetus\AppData\Local\ESRI\conda\envs\arcgispro-py3-mget1\Lib\site-packages\GeoEco\Types_Base.py", line 913, in ValidateValue
 (valueChanged2, value) = super(UnicodeStringTypeMetadata, self).ValidateValue(value, variableName, methodLocals, argMetadata)
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 File "C:\Users\cetus\AppData\Local\ESRI\conda\envs\arcgispro-py3-mget1\Lib\site-packages\GeoEco\Types_Base.py", line 153, in ValidateValue
 Logger.RaiseException(TypeError(('The value provided for the %(variable)s is an instance of %(badType)s, an invalid type. Please provide an instance of %(goodType)s.') % {'variable' : variableName, 'badType' : type(value), 'goodType' : self.PythonType}))
 File "C:\Users\cetus\AppData\Local\ESRI\conda\envs\arcgispro-py3-mget1\Lib\site-packages\GeoEco\Logging.py", line 70, in RaiseException
 raise exception
TypeError: The value provided for the outputWorkspace parameter is an instance of <class 'GeoEco.ArcGIS._ArcGISObjectWrapper'>, an invalid type. Please provide an instance of <class 'str'>.

Please see #29 for more details.

The problem is in _ExecuteMethodAsGeoprocessingTool of ArcToolbox.py, which assumes that the value attribute of an arcpy.Parameter object always returns an instance of a base Python type, when in fact it can return an arcpy object, which will be wrapped with _ArcGISObjectWrapper. It should account for this and obtain the instance of the base Python type that is expected according to the argument's metadata.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions