<?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 Re: Anyone using the new Python Toolboxes at 10.1? in Geoprocessing Questions</title>
    <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224449#M7743</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Still not where i want to be on this one unfortunately.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I can get all the py and pyt files in order but that still doesn't get me around having to use ArcMap to create the sd file.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;And when that sd file gets published all of the sudden there are lots of new files and folders and my code is being modified by esri hand-holding.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;When i publish the sd esri's convoluted directory structure makes this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-GPServiceName.GPServer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; -extracted&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; .GPServiceName.sd&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;then in the extracted folder we have:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-esriinfo&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-v101&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.manifest.xml&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.serviceconfiguration.json&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;tilingservice.xml&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;under esriinfo we have more:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-metadata&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-thumbnail&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.iteminfo.xml&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;thumbnail is just an image, the metadata folder has a file named metadata.xml&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;under v101 we have:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;afoldernamedafterwhereyouputyourscripts&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPServiceName.tbx&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPServiceName.rlt&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;the tbx and rlt are binary&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;under the folder that esri creates based on your script folder you have:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;all of your py files, pyc versions for each, a param text file that i was using and esri dragged in, along with any 'helper' py files&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;the pyt file for your original python toolbox&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;a pyt.xml for the toolbox&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;a Tool.pyt.xml for the toolbox&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pyt.xml files for each Tool in the toolbox&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Python toolboxes provide the opportunity to take advantage of your Python skills and create tools entirely and easily out of Python&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;perhaps. but getting them published is a different story.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Say i want to add a Tool to my currently published GPService? Not fun at all. I have to open my pyt, edit it, open it in ArcMap, run EVERY OTHER TOOL including my new tool and then publish?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Certainly i'm missing some very important in this workflow. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;At ArcGIS 9.0, the script tool framework was first introduced and is geared towards creating Python-based tools for new users, but it is an inefficient process for more experienced users. In the script tool framework:&lt;BR /&gt;You define parameters through the wizard&lt;BR /&gt;You create validation code that lives in the toolbox&lt;BR /&gt;Plus you create and maintain the source script separately&lt;BR /&gt;All of these parts are segregated and more difficult to manage collectively.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That workflow is starting to look a lot better in hindsight.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 18 Sep 2012 12:37:03 GMT</pubDate>
    <dc:creator>KevinGooss</dc:creator>
    <dc:date>2012-09-18T12:37:03Z</dc:date>
    <item>
      <title>Anyone using the new Python Toolboxes at 10.1?</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224441#M7735</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Just wondering if anyone has used the new Python toolboxes at 10.1?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The .pyt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am experimenting with one and could use some tips.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;fyi, if you want to edit that pyt file in your favorite python editor you may have to go into the options of your editor and set it up to explicitly recognize pyt files. Mine (Wing, pyScripter) did not do that by default and there was no coloring or intellisense until i modified the program under options to read that pyt.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I want to use pyt because at 10.0 we had such a hassle with deploying script tools and toolboxes because you always need arcatalog to setup the dang params. And they seem to get out of whack on their own over time.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm hoping these python-based toolboxes don't work like that. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;One drawback is that you only get the one pyt file - so if you want to cram 20 custom tools in there you are looking at a huge file.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 05 Sep 2012 12:48:48 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224441#M7735</guid>
      <dc:creator>KevinGooss</dc:creator>
      <dc:date>2012-09-05T12:48:48Z</dc:date>
    </item>
    <item>
      <title>Re: Anyone using the new Python Toolboxes at 10.1?</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224442#M7736</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi Kevin,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If you have a few minutes, perhaps check out the training seminar on Python toolboxes that we did last week: it will walk through some of these questions you have:&lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://training.esri.com/gateway/index.cfm?fa=catalog.webCourseDetail&amp;amp;courseID=2523"&gt;http://training.esri.com/gateway/index.cfm?fa=catalog.webCourseDetail&amp;amp;courseID=2523&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If you're looking for additional samples just to see, check out &lt;/SPAN&gt;&lt;A href="http://esriurl.com/pyt1"&gt;http://esriurl.com/pyt1&lt;/A&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;A href="http://esriurl.com/pyt2"&gt;http://esriurl.com/pyt2&lt;/A&gt;&lt;SPAN&gt;, &lt;/SPAN&gt;&lt;A href="http://esriurl.com/pyt3"&gt;http://esriurl.com/pyt3&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-Dave&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 05 Sep 2012 16:08:58 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224442#M7736</guid>
      <dc:creator>DavidWynne</dc:creator>
      <dc:date>2012-09-05T16:08:58Z</dc:date>
    </item>
    <item>
      <title>Re: Anyone using the new Python Toolboxes at 10.1?</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224443#M7737</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks for those tips. I will look into the seminar and samples.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;My greatest concern now is that these examples are designed with one tool in one toolbox.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I have over 30 tools that i would like to present as services for my applications.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Running each one of those in ArcMap and publishing the results as a service is just not an option.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;It is too much work.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I know the code works because i have been using the tools at 10.0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I just want a painless way to expose many py scripts as services.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 05 Sep 2012 16:55:43 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224443#M7737</guid>
      <dc:creator>KevinGooss</dc:creator>
      <dc:date>2012-09-05T16:55:43Z</dc:date>
    </item>
    <item>
      <title>Re: Anyone using the new Python Toolboxes at 10.1?</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224444#M7738</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN&gt;I'm still using 10.0 so can't actually test this, but have you tried using the standard python package structure?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Something like:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
#&amp;nbsp; \--SomeDir
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; toolbox.pyt
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; \--toolpackage
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; __init__.py
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; script_a.py
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; script_b.py


#----------------------------
#The .pyt file
#----------------------------

import arcpy
from toolpackage.script_a import Tool1
from toolpackage.script_a import Tool2
from toolpackage.script_b import Tool3

class Toolbox(object):
&amp;nbsp;&amp;nbsp;&amp;nbsp; def __init__(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Define the toolbox (the name of the toolbox is the name of the
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .pyt file)."""
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.label = "MultiTool Toolbox"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.alias = "mtt"

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # List of tool classes associated with this toolbox
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.tools = [Tool1, Tool2, Tool3]

&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 10:55:56 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224444#M7738</guid>
      <dc:creator>Luke_Pinner</dc:creator>
      <dc:date>2021-12-11T10:55:56Z</dc:date>
    </item>
    <item>
      <title>Re: Anyone using the new Python Toolboxes at 10.1?</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224445#M7739</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I think i get what you are saying. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In my master pyt python toolbox file i just have the definitions of the tools and the params for each. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Each tool has an execute method and in that method i will just place a link to the actual py script file that i already have from pre-10.1 days. I think that will work, but i may have to add a path to the environ variable so python knows where to look for my scripts.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hopefully this will let me keep my 10.0 py scripts intact and i can better manage the params using the 10.1 pyt structure.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;One thing about 10.1 - we are spending alot of time figuring out where ags puts things during a publish and then trying to rig things to work better than that.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;thanks for the tip.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Sep 2012 12:32:41 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224445#M7739</guid>
      <dc:creator>KevinGooss</dc:creator>
      <dc:date>2012-09-06T12:32:41Z</dc:date>
    </item>
    <item>
      <title>Re: Anyone using the new Python Toolboxes at 10.1?</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224446#M7740</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;If you didn't want to modify your existing script tools to convert them to classes, then you could do that (calling your scripts from the execute method of each Tool class). I was thinking more of just converting the scripts to classes though, especially if you're writing stubs for those classes anyway.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;How you could do it depends on how you've written your scripts.&amp;nbsp; If your existing 10.0 scripts are basic scripts where all the code is in the top-level scope, then in the execute method of the new Tool class you could use the subprocess module to call python and pass it the path to the 10.0 script.&amp;nbsp; If your 10.0 scripts are organised into functions, you might be able to do something like:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;#----------------
# 10.0 script tool
# script_10_0.py
#----------------
import arcpy
def do_some_stuff(arg1,arg2):
&amp;nbsp;&amp;nbsp;&amp;nbsp; print arg1,arg2

if __name__ == '__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp; arg1=arcpy.GetParameterAsText(0)
&amp;nbsp;&amp;nbsp;&amp;nbsp; arg2=arcpy.GetParameterAsText(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; do_some_stuff(arg1,arg2)

#----------------------
# 10.1 Python Toolbox
#----------------------
import arcpy
import script_10_0 #import the old 10.0 script tool so you can call its functions.

class Toolbox(object):
&amp;nbsp;&amp;nbsp;&amp;nbsp; def __init__(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Define the toolbox (the name of the toolbox is the name of the
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .pyt file)."""
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.label = "10_0_Tool_Toolbox"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.alias = "Toolbox with 10.0 Tools"

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # List of tool classes associated with this toolbox
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.tools = [Tool1]

class Tool1(object):
&amp;nbsp;&amp;nbsp;&amp;nbsp; #...
&amp;nbsp;&amp;nbsp;&amp;nbsp; def execute(self, parameters, messages):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arg1=parameters[0].valueAsText
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arg2=parameters[1].valueAsText
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; script_10_0.do_some_stuff(arg1,arg2)
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 10:55:58 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224446#M7740</guid>
      <dc:creator>Luke_Pinner</dc:creator>
      <dc:date>2021-12-11T10:55:58Z</dc:date>
    </item>
    <item>
      <title>Re: Anyone using the new Python Toolboxes at 10.1?</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224447#M7741</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;that is pretty much what i did. For each individual py script i had i changed the signature and made a main def.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;then in the pyt i import each of those, then call the script by name.main.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;i like this because each of my scripts was pulling in a params json file. now i can pull that params file into the pyt once and dish it off to each side script.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;All that remains is for me to find a way around esri wanting me to run each script in arcmap and publish the results.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if i could find a way to just publish the pyt once then throw the extra scripts in there and have them recognized that would be the bomb&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 07 Sep 2012 13:47:37 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224447#M7741</guid>
      <dc:creator>KevinGooss</dc:creator>
      <dc:date>2012-09-07T13:47:37Z</dc:date>
    </item>
    <item>
      <title>Re: Anyone using the new Python Toolboxes at 10.1?</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224448#M7742</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;if i could find a way to just publish the pyt once then throw the extra scripts in there and have them recognized that would be the bomb&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Something like the following might work:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;#&amp;nbsp; \--SomeDir
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; toolbox.pyt
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; some_script.py
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; another_script.py
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; ...
#&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp; last_script.py
#
# Each *.py contains a class called Tool that's just a stub for your "main" def.

#----------------------------
#The .pyt file (all Tools are dynamically imported not hardcoded)
#----------------------------

import arcpy
import os,sys,glob

class Toolbox(object):
&amp;nbsp;&amp;nbsp;&amp;nbsp; def __init__(self):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; """Define the toolbox (the name of the toolbox is the name of the .pyt file)."""
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.label = "MultiTool_Toolbox"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.alias = "Toolbox with Multiple Dynamically Imported Tools"

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Dynamic list of tool classes associated with this toolbox
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; path=os.path.dirname(__file__)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.tools=[]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for py in glob.glob(os.path.join(path,'*.py')):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not __file__ in py:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; module=os.path.basename(py)[:-3]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Note: "Tool" class must have same 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #name as the script "Tool" classes
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.tools.append(__import__(module).Tool)

#----------------------------
#The .py script files
#----------------------------

#"Tool" class can be called anything but must be 
# the same in each script and in the calling toolbox

class Tool(object):

&amp;nbsp;&amp;nbsp;&amp;nbsp; # tool/parameter setup methods etc...

&amp;nbsp;&amp;nbsp;&amp;nbsp; def execute(self,*args,**kwargs):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main(*args,**kwargs)

def main(*args,**kwargs):
&amp;nbsp;&amp;nbsp;&amp;nbsp; #do stuff
&amp;nbsp;&amp;nbsp;&amp;nbsp; return

if __name__=='__main__':
&amp;nbsp;&amp;nbsp;&amp;nbsp; #Run script
&amp;nbsp;&amp;nbsp;&amp;nbsp; main(sys.argv[1:])
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 10:56:01 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224448#M7742</guid>
      <dc:creator>Luke_Pinner</dc:creator>
      <dc:date>2021-12-11T10:56:01Z</dc:date>
    </item>
    <item>
      <title>Re: Anyone using the new Python Toolboxes at 10.1?</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224449#M7743</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Still not where i want to be on this one unfortunately.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I can get all the py and pyt files in order but that still doesn't get me around having to use ArcMap to create the sd file.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;And when that sd file gets published all of the sudden there are lots of new files and folders and my code is being modified by esri hand-holding.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;When i publish the sd esri's convoluted directory structure makes this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;-GPServiceName.GPServer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; -extracted&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; .GPServiceName.sd&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;then in the extracted folder we have:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-esriinfo&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-v101&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.manifest.xml&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.serviceconfiguration.json&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;tilingservice.xml&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;under esriinfo we have more:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-metadata&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-thumbnail&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;.iteminfo.xml&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;thumbnail is just an image, the metadata folder has a file named metadata.xml&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;under v101 we have:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;afoldernamedafterwhereyouputyourscripts&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPServiceName.tbx&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;GPServiceName.rlt&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;the tbx and rlt are binary&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;under the folder that esri creates based on your script folder you have:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;all of your py files, pyc versions for each, a param text file that i was using and esri dragged in, along with any 'helper' py files&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;the pyt file for your original python toolbox&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;a pyt.xml for the toolbox&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;a Tool.pyt.xml for the toolbox&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pyt.xml files for each Tool in the toolbox&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;Python toolboxes provide the opportunity to take advantage of your Python skills and create tools entirely and easily out of Python&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;perhaps. but getting them published is a different story.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Say i want to add a Tool to my currently published GPService? Not fun at all. I have to open my pyt, edit it, open it in ArcMap, run EVERY OTHER TOOL including my new tool and then publish?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Certainly i'm missing some very important in this workflow. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;At ArcGIS 9.0, the script tool framework was first introduced and is geared towards creating Python-based tools for new users, but it is an inefficient process for more experienced users. In the script tool framework:&lt;BR /&gt;You define parameters through the wizard&lt;BR /&gt;You create validation code that lives in the toolbox&lt;BR /&gt;Plus you create and maintain the source script separately&lt;BR /&gt;All of these parts are segregated and more difficult to manage collectively.&lt;/BLOCKQUOTE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;That workflow is starting to look a lot better in hindsight.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 18 Sep 2012 12:37:03 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224449#M7743</guid>
      <dc:creator>KevinGooss</dc:creator>
      <dc:date>2012-09-18T12:37:03Z</dc:date>
    </item>
    <item>
      <title>Re: Anyone using the new Python Toolboxes at 10.1?</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224450#M7744</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is somewhat similar to how the Spatial Analyst Supplemental tools area set up. This structure has the advantage of the .py files could be run either from the .pyt or added as pyx script tools.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am finally getting into this and really appreciate the discussion and Luke's examples.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Another tip on tbx's that is helping me is to run the &lt;A href="https://community.esri.com/migrated-users/3016"&gt;Jason Scheirer&lt;/A&gt;'s &lt;A href="http://www.arcgis.com/home/item.html?id=83585412edd04ae48bdffea3e1f7b2e7"&gt;tbx2pyt tool,&lt;/A&gt; and then stealing the results to copy and paste into the getParameterInfo() code, which seems to be the most time-consuming part of this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;One thing about this that is kind of unnerving is there really isn't a very standard way to do it (yet). That will take time I guess, as people do different things for example&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 27 Sep 2015 19:54:14 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224450#M7744</guid>
      <dc:creator>curtvprice</dc:creator>
      <dc:date>2015-09-27T19:54:14Z</dc:date>
    </item>
    <item>
      <title>Re: Anyone using the new Python Toolboxes at 10.1?</title>
      <link>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224451#M7745</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm quite late, but I haven't been able to get this method to work. The syntax on the .pyt is OK (i.e.: I'm able to view the toolbox within arcmap without it displaying the red X), but when I click the drop-down for the toolbox, it displays no tools.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My directory is set up as such:&lt;/P&gt;&lt;P&gt;Tools/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;- bhaTools.pyt&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;- publishing.py&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;-findingpath.pyc&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The findingpath.pyc:&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;findpath&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp; local_path &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; os&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;path&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;abspath&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;os&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;path&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;dirname&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;__file__&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp; &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; local_path
‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;The bhaTools.pyt has the following:&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; contextlib
&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; os
&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; sys
&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; arcpy
&lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; glob

&lt;SPAN class="keyword token"&gt;class&lt;/SPAN&gt; &lt;SPAN class="token class-name"&gt;Toolbox&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;object&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;__init__&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;label &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; u&lt;SPAN class="string token"&gt;'bhaTools'&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;alias &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'bhaTools'&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;import&lt;/SPAN&gt; findingpath
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; path &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; findingpath&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;findpath&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;tools&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; py &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; glob&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;glob&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;os&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;path&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;join&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;path&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;'*.py'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; &lt;SPAN class="operator token"&gt;not&lt;/SPAN&gt; __file__ &lt;SPAN class="keyword token"&gt;in&lt;/SPAN&gt; py&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; module&lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt;os&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;path&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;basename&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;py&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;-&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;3&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;#Note: "Tool" class must have same&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;#name as the script "Tool" classes&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;tools&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;append&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;__import__&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;module&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;Tool&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The publishing.py:&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;CODE&gt;&lt;SPAN class="keyword token"&gt;class&lt;/SPAN&gt; &lt;SPAN class="token class-name"&gt;Tool&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;object&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;__init__&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;label &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; u&lt;SPAN class="string token"&gt;'Publish Parcel Fabric Parcels'&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;canRunInBackground &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token boolean"&gt;False&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;category &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;"Parcel_Fabric_Migration_Tools"&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;getParameterInfo&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; param_1 &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; arcpy&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;Parameter&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; param_1&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;name &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; u&lt;SPAN class="string token"&gt;'inputParcelFabricParcels'&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; param_1&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;displayName &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; u&lt;SPAN class="string token"&gt;'Input Parcel Fabric Parcels'&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; param_1&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;parameterType &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'Required'&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; param_1&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;direction &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'Input'&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; param_1&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;datatype &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; u&lt;SPAN class="string token"&gt;'DEFeatureClass'&lt;/SPAN&gt;


&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;#### .... more parameters .... #### &lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;param_1&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;param_2&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;param_3&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;param_4&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;param_5&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;isLicensed&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; &lt;SPAN class="token boolean"&gt;True&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;updateParameters&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; parameters&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; validator &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; getattr&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'ToolValidator'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; None&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; validator&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; validator&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;parameters&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;updateParameters&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;updateMessages&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; parameters&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; validator &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; getattr&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="string token"&gt;'ToolValidator'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; None&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; validator&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;return&lt;/SPAN&gt; validator&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;parameters&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;updateMessages&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;


&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;# tool/parameter setup methods etc...&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;execute&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;self&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;args&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;**&lt;/SPAN&gt;kwargs&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;args&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;**&lt;/SPAN&gt;kwargs&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;

&lt;SPAN class="keyword token"&gt;def&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;main&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;*&lt;/SPAN&gt;args&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;**&lt;/SPAN&gt;kwargs&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;try&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;# do stuff with params&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="keyword token"&gt;except&lt;/SPAN&gt; arcpy&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;ExecuteError&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;AddError&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;arcpy&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;GetMessages&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;


&lt;SPAN class="keyword token"&gt;if&lt;/SPAN&gt; __name__&lt;SPAN class="operator token"&gt;==&lt;/SPAN&gt;&lt;SPAN class="string token"&gt;'__main__'&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;#Run script&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; main&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;sys&lt;SPAN class="punctuation token"&gt;.&lt;/SPAN&gt;argv&lt;SPAN class="punctuation token"&gt;[&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;:&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;]&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 10:56:04 GMT</pubDate>
      <guid>https://community.esri.com/t5/geoprocessing-questions/anyone-using-the-new-python-toolboxes-at-10-1/m-p/224451#M7745</guid>
      <dc:creator>StevenGonzalez1</dc:creator>
      <dc:date>2021-12-11T10:56:04Z</dc:date>
    </item>
  </channel>
</rss>

