0

This script does not work in a Standard Toolbox but it works in a Python Toolbox.

Do I need to delete all the parameters from the script?

import arcpy, os, sys, shutil
class Toolbox(object):
 def __init__(self):
 """Define the toolbox (the name of the toolbox is the name of the .pyt file)."""
 self.label = "polyNTool"
 self.alias = ""
 # List of tool classes associated with this toolbox
 self.tools = [polyNTool]
def polyProcess(src, target):
 user_profile_path = os.environ['USERPROFILE']
 gdb = r"{}/AppData/Local/Temp/PolyChecker/PolyCheck.gdb".format(user_profile_path)
 # GDB already exists, delete it
 # if arcpy.Exists(gdb):
 # shutil.rmtree(r"{}/AppData/Local/Temp/PolyChecker".format(user_profile_path))
 # Create fresh GDB path
 # os.makedirs(os.path.dirname(gdb))
 # Create GDB
 if not arcpy.Exists(gdb):
 if not arcpy.Exists(os.path.dirname(gdb)):
 os.makedirs(os.path.dirname(gdb))
 arcpy.CreateFileGDB_management(os.path.dirname(gdb), os.path.basename(gdb))
 arcpy.AddMessage('xxx' + str(arcpy.Exists(gdb)) + ' ' + os.path.dirname(gdb))
 arcpy.env.workspace = gdb
 arcpy.env.overwriteOutput = True
 # Script arguments
 MapUnitPolys = src
 if MapUnitPolys == '#' or not MapUnitPolys:
 MapUnitPolys = "MapUnitPolys" # provide a default value if unspecified
 MapUnitPolys_CopyFeatures = target
 # Set Geoprocessing environments
 MapUnitPolys = MapUnitPolys
 # Validate that all Polygons have a map unit
 invalid_polygon_found = False
 with arcpy.da.SearchCursor(MapUnitPolys, ['SHAPE@', 'MapUnit', 'OBJECTID']) as cursor:
 for row in cursor:
 # arcpy.AddMessage(str(row[1]))
 # Does this Polygon have a map unit
 if row[1] == "" or row[1] == "<Null>" or row[1] is None or row[1] is 0:
 invalid_polygon_found = True
 arcpy.AddMessage('Polygon OBJECT ID:{} is missing map unit... exiting.'.format(row[2]))
 # Invalid polygons were found, terminate
 if (invalid_polygon_found):
 sys.exit(1)
 Polygon_Neighbors = "{}/polytest".format(gdb)
 Polygon_Neighbors = r"POLYTABLE"
 PolygonNeighbor_TableSelect = "{}/PolygonNeighbor_TableSelect".format(gdb)
 inFeatures_lyr = "{}/inFeatures_1yr".format(gdb)
 inFeatures_lyr = r"inFeatures_1yr"
 # Process: Polygon Neighbors
 arcpy.PolygonNeighbors_analysis(MapUnitPolys, Polygon_Neighbors, "OBJECTID;MapUnit", "NO_AREA_OVERLAP",
 "BOTH_SIDES",
 "", "METERS", "SQUARE_METERS")
 mxd = arcpy.mapping.MapDocument("CURRENT")
 df = arcpy.mapping.ListDataFrames(mxd)[0]
 arcpy.AddMessage('current ' + mxd.title + ' ' + df.name + ' ' + Polygon_Neighbors)
 pn = arcpy.mapping.TableView(Polygon_Neighbors)
 arcpy.mapping.AddTableView(df, pn)
 # for lyr in arcpy.mapping.ListLayers(mxd):
 # arcpy.AddMessage('Map Layer: '+lyr.name)
 # Process: Select Layer By Attribute
 arcpy.SelectLayerByAttribute_management(Polygon_Neighbors, "NEW_SELECTION", "src_MapUnit = nbr_MapUnit")
 # Process: Table Select
 arcpy.TableSelect_analysis(Polygon_Neighbors, PolygonNeighbor_TableSelect, "src_MapUnit = nbr_MapUnit")
 arcpy.GetCount_management(PolygonNeighbor_TableSelect)
 arcpy.AddMessage(arcpy.GetMessages())
 if int(arcpy.GetCount_management(PolygonNeighbor_TableSelect)[0]) > 0:
 arcpy.MakeFeatureLayer_management(MapUnitPolys, inFeatures_lyr)
 else:
 print ("done")
 # Process: Add Join
 arcpy.AddJoin_management(inFeatures_lyr, "OBJECTID", PolygonNeighbor_TableSelect, "src_OBJECTID", "KEEP_COMMON")
 # Process: Copy Features
 arcpy.CopyFeatures_management(inFeatures_lyr, MapUnitPolys_CopyFeatures, "", "0", "0", "0")
 # Add to Map
 ws = arcpy.env.workspace
 lyrNew = ws + "/" + MapUnitPolys_CopyFeatures
 arcpy.AddMessage('Copy layer ' + df.name + ' Path ' + lyrNew)
 addLayer = arcpy.mapping.Layer(lyrNew)
 arcpy.mapping.AddLayer(df, addLayer)
 # Process: Remove Join
 arcpy.RemoveJoin_management(inFeatures_lyr, "")
 # Execute Delete
 arcpy.Delete_management(PolygonNeighbor_TableSelect)
 arcpy.Delete_management(Polygon_Neighbors)
 arcpy.AddMessage('All done! Check Polygons')
 return
class polyNTool(object):
 def __init__(self):
 """Define the tool (tool name is the name of the class)."""
 self.label = "polyNTool"
 self.description = ""
 self.canRunInBackground = False
 def getParameterInfo(self):
 """Define parameter definitions"""
 param0 = arcpy.Parameter(
 displayName="Source Layer",
 name="sourceLayer",
 datatype="Feature Class",
 parameterType="Required",
 direction="Input")
 param1 = arcpy.Parameter(
 displayName="Target Layer",
 name="targetLayer",
 datatype="String",
 parameterType="Required",
 direction="Input")
 params = [param0, param1]
 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):
 """The source code of the tool."""
 arcpy.ResetEnvironments()
 arcpy.env.overwriteOutput = True
 src = parameters[0].valueAsText
 target = parameters[1].valueAsText
 arcpy.AddMessage('params ' + src + ' ' + target)
 # arcpy.env.workspace = cws
 status = True
 if arcpy.Exists(src):
 ps = "Found WS " + src
 else:
 ps = "Missing WS" + src
 status = False
 if status == False:
 arcpy.AddMessage(ps)
 try:
 sys.exit(0)
 except SystemExit:
 pass
 else:
 arcpy.AddMessage("Validated input ...")
 polyProcess(src, target)
 return
PolyGeo
65.5k29 gold badges115 silver badges349 bronze badges
asked Aug 14, 2019 at 19:17

1 Answer 1

2

The structure of a Standard Toolbox (TBX) is quite different to that of a Python Toolbox (PYT).

You should be able to re-use most of your execute functions but parameter handling is very different.

I recommend reviewing the help on writing Python Script Tools e.g. Understanding script tool parameters.

answered Aug 14, 2019 at 19:54

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.