<div class="section" id="how-can-i-test-a-definition-without-writing-scripts">
<span id="test-bench"></span><span id="index-0"></span>
<p>When designing the definition it is often very desirable to
be able to auto generate the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecf-script"><em class="xref std std-term">ecf script</em></a> s. This allows for a lot
of experimentation with <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite-definition"><em class="xref std std-term">suite definition</em></a> structure without the chore
of continually keeping the scripts in sync.</p>
<p>The following Python code shows that it is possible to test
<em>any</em> <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite-definition"><em class="xref std std-term">suite definition</em></a> without having to create any <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecf-script"><em class="xref std std-term">ecf script</em></a> s.</p>
<p>The <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecf-script"><em class="xref std std-term">ecf script</em></a> files are auto generated. Hence if the <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-suite-definition"><em class="xref std std-term">suite definition</em></a> contains
<a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-event"><em class="xref std std-term">event</em></a>, <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-meter"><em class="xref std std-term">meter</em></a> or <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-label"><em class="xref std std-term">label</em></a>, the auto generate feature will create scripts
with correct <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-child-command"><em class="xref std std-term">child command</em></a> s to communicate with the server.</p>
<p>The scripts assumes that <a class="reference internal" href="/wiki/display/ECFLOW/Glossary#term-ecflow-client"><em class="xref std std-term">ecflow_client</em></a> is accessible on $PATH.</p>
<p>To use, copy the contents into a file, say <tt class="file docutils literal"><span class="pre">test_bench.py</span></tt></p>
<div class="highlight-python"><pre>> test_bench.py --help</pre>
</div>
<p>If the server is running locally the typical usage might be</p>
<div class="highlight-python"><pre>> test_bench.py my_test.def --port 4141</pre>
</div>
<div class="highlight-python"><div class="highlight"><pre><span class="c">#!/usr/bin/env python2.7</span>
<span class="c">#////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8</span>
<span class="c"># Name :</span>
<span class="c"># Author : Avi</span>
<span class="c"># Revision : $Revision: #10 $</span>
<span class="c">#</span>
<span class="c"># Copyright 2009-2012 ECMWF.</span>
<span class="c"># This software is licensed under the terms of the Apache Licence version 2.0</span>
<span class="c"># which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span>
<span class="c"># In applying this licence, ECMWF does not waive the privileges and immunities</span>
<span class="c"># granted to it by virtue of its status as an intergovernmental organisation</span>
<span class="c"># nor does it submit to any jurisdiction.</span>
<span class="c">#////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8</span>
<span class="c"># =============================================================================</span>
<span class="c"># Code for testing *any* definition</span>
<span class="c"># Since any ad hoc definition will reference local directories in the</span>
<span class="c"># ECF_ variables, we need to remove them and inject our own.</span>
<span class="c">#</span>
<span class="c"># This script is re-runnable, and hence will delete suites in the server</span>
<span class="c"># matching those in the input definition. Hence it is best to use this </span>
<span class="c"># script with a *test* server to avoid accidentally deleting existing suites </span>
<span class="c"># of the same name.</span>
<span class="c"># =============================================================================</span>
<span class="kn">import</span> <span class="nn">ecflow</span>
<span class="kn">import</span> <span class="nn">os</span> <span class="c"># for getenv</span>
<span class="kn">import</span> <span class="nn">shutil</span> <span class="c"># used to remove directory tree</span>
<span class="kn">import</span> <span class="nn">argparse</span> <span class="c"># for argument parsing </span>
<span class="k">def</span> <span class="nf">delete_variables_affecting_job_generation</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
<span class="sd">"""delete customer related ECF variables, these will point to directories</span>
<span class="sd"> that don't exist. Its ok we will regenerate our own local ones"""</span>
<span class="n">var</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">find_variable</span><span class="p">(</span><span class="s">"ECF_HOME"</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">var</span><span class="o">.</span><span class="n">empty</span><span class="p">()</span> <span class="p">:</span>
<span class="n">node</span><span class="o">.</span><span class="n">delete_variable</span><span class="p">(</span><span class="s">"ECF_HOME"</span><span class="p">)</span>
<span class="n">var</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">find_variable</span><span class="p">(</span><span class="s">"ECF_FILES"</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">var</span><span class="o">.</span><span class="n">empty</span><span class="p">()</span> <span class="p">:</span>
<span class="n">node</span><span class="o">.</span><span class="n">delete_variable</span><span class="p">(</span><span class="s">"ECF_FILES"</span><span class="p">)</span>
<span class="n">var</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">find_variable</span><span class="p">(</span><span class="s">"ECF_INCLUDE"</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">var</span><span class="o">.</span><span class="n">empty</span><span class="p">()</span> <span class="p">:</span>
<span class="n">node</span><span class="o">.</span><span class="n">delete_variable</span><span class="p">(</span><span class="s">"ECF_INCLUDE"</span><span class="p">)</span>
<span class="n">var</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">find_variable</span><span class="p">(</span><span class="s">"ECF_JOB_CMD"</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">var</span><span class="o">.</span><span class="n">empty</span><span class="p">()</span> <span class="p">:</span>
<span class="n">node</span><span class="o">.</span><span class="n">delete_variable</span><span class="p">(</span><span class="s">"ECF_JOB_CMD"</span><span class="p">)</span>
<span class="n">var</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">find_variable</span><span class="p">(</span><span class="s">"ECF_KILL_CMD"</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">var</span><span class="o">.</span><span class="n">empty</span><span class="p">()</span> <span class="p">:</span>
<span class="n">node</span><span class="o">.</span><span class="n">delete_variable</span><span class="p">(</span><span class="s">"ECF_KILL_CMD"</span><span class="p">)</span>
<span class="n">var</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">find_variable</span><span class="p">(</span><span class="s">"ECF_STATUS_CMD"</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">var</span><span class="o">.</span><span class="n">empty</span><span class="p">()</span> <span class="p">:</span>
<span class="n">node</span><span class="o">.</span><span class="n">delete_variable</span><span class="p">(</span><span class="s">"ECF_STATUS_CMD"</span><span class="p">)</span>
<span class="n">var</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">find_variable</span><span class="p">(</span><span class="s">"ECF_OUT"</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">var</span><span class="o">.</span><span class="n">empty</span><span class="p">()</span> <span class="p">:</span>
<span class="n">node</span><span class="o">.</span><span class="n">delete_variable</span><span class="p">(</span><span class="s">"ECF_OUT"</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">traverse_container</span><span class="p">(</span><span class="n">node_container</span><span class="p">):</span>
<span class="sd">"""Recursively traverse definition node hierarchy and delete</span>
<span class="sd"> the variables that affect job generation.</span>
<span class="sd"> """</span>
<span class="n">delete_variables_affecting_job_generation</span><span class="p">(</span><span class="n">node_container</span><span class="p">)</span>
<span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">node_container</span><span class="o">.</span><span class="n">nodes</span><span class="p">:</span>
<span class="n">delete_variables_affecting_job_generation</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Task</span><span class="p">):</span>
<span class="n">traverse_container</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">"__main__"</span><span class="p">:</span>
<span class="n">DESC</span> <span class="o">=</span> <span class="s">"""Will allow any definition to be loaded and played on the server</span>
<span class="s"> This is done by:</span>
<span class="s"> o Remove existing ECF_ variables that affect job generation. </span>
<span class="s"> i.e variables that refer to customer specific directories are removed</span>
<span class="s"> o Allows ECF_HOME to specified, defaults to ./CUSTOMER/ECF_HOME</span>
<span class="s"> o Generates the scripts(.ecf files) automatically based on the definition.</span>
<span class="s"> i.e if a task has events,meters,labels then the client request for these are</span>
<span class="s"> automatically injected in the generated .ecf script files</span>
<span class="s"> o Will clear out existing data both on disk and on the server to allow </span>
<span class="s"> multiple re-runs of this script. ** If this is an issue please use</span>
<span class="s"> a test server **</span>
<span class="s"> o All suites are put into a suspended state. This allows the GUI to resume them</span>
<span class="s"> o The server is restarted and suites are begun</span>
<span class="s"> This programs assumes that ecflow module is accessible.</span>
<span class="s"> """</span>
<span class="n">PARSER</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="n">DESC</span><span class="p">,</span>
<span class="n">formatter_class</span><span class="o">=</span><span class="n">argparse</span><span class="o">.</span><span class="n">RawDescriptionHelpFormatter</span><span class="p">)</span>
<span class="n">PARSER</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">'defs_file'</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s">"The definition file"</span><span class="p">)</span>
<span class="n">PARSER</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">'--host'</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">"localhost"</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s">"The name of the host machine, defaults to 'localhost'"</span><span class="p">)</span>
<span class="n">PARSER</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">'--port'</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">"3141"</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s">"The port on the host, defaults to 3141"</span><span class="p">)</span>
<span class="n">PARSER</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">'--ecf_home'</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">"CUSTOMER/ECF_HOME"</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s">"Directory to be used for generated scripts(ECF_HOME), defaults to ./CUSTOMER/ECF_HOME"</span><span class="p">)</span>
<span class="n">PARSER</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s">'--verbose'</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="s">'?'</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">const</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="nb">bool</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s">"Show verbose output"</span><span class="p">)</span>
<span class="n">ARGS</span> <span class="o">=</span> <span class="n">PARSER</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
<span class="n">ARGS</span><span class="o">.</span><span class="n">defs_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expandvars</span><span class="p">(</span><span class="n">ARGS</span><span class="o">.</span><span class="n">defs_file</span><span class="p">)</span> <span class="c"># expand references to any environment variables</span>
<span class="k">print</span> <span class="n">ARGS</span>
<span class="c"># If running on local work space, use /Pyext/test/data/CUSTOMER/ECF_HOME as ecf_home</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">"WK"</span><span class="p">)</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">ARGS</span><span class="o">.</span><span class="n">ecf_home</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">"WK"</span><span class="p">)</span> <span class="o">+</span> <span class="s">"/Pyext/test/data/CUSTOMER/ECF_HOME"</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"Workspace is defined"</span>
<span class="k">print</span> <span class="s">"Using ECF_HOME="</span> <span class="o">+</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">ecf_home</span>
<span class="k">print</span> <span class="s">"using /Client/bin/gcc\-4.5/debug/ecflow_client"</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"</span><span class="se">\n</span><span class="s">loading the definition from the input arguments("</span> <span class="o">+</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">defs_file</span> <span class="o">+</span> <span class="s">")</span><span class="se">\n</span><span class="s">"</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">DEFS</span> <span class="o">=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Defs</span><span class="p">(</span><span class="n">ARGS</span><span class="o">.</span><span class="n">defs_file</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">ex</span><span class="p">:</span>
<span class="k">print</span> <span class="s">" ecflow.Defs("</span> <span class="o">+</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">defs_file</span> <span class="o">+</span> <span class="s">") failed:</span><span class="se">\n</span><span class="s">"</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">ex</span><span class="p">)</span>
<span class="nb">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"remove test data associated with the DEFS, so we start fresh, Allows rerun"</span>
<span class="k">for</span> <span class="n">suite</span> <span class="ow">in</span> <span class="n">DEFS</span><span class="o">.</span><span class="n">suites</span><span class="p">:</span>
<span class="n">dir_to_remove</span> <span class="o">=</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">ecf_home</span> <span class="o">+</span> <span class="n">suite</span><span class="o">.</span><span class="n">get_abs_node_path</span><span class="p">()</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">" Deleting directory: "</span> <span class="o">+</span> <span class="n">dir_to_remove</span> <span class="o">+</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span>
<span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">dir_to_remove</span><span class="p">,</span> <span class="bp">True</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"remove remote reference to ECF_HOME and ECF_INCLUDE, since we inject or own</span><span class="se">\n</span><span class="s">"</span>
<span class="k">for</span> <span class="n">suite</span> <span class="ow">in</span> <span class="n">DEFS</span><span class="o">.</span><span class="n">suites</span><span class="p">:</span>
<span class="n">traverse_container</span><span class="p">(</span><span class="n">suite</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"add variables required for script generation, for all suites</span><span class="se">\n</span><span class="s">"</span>
<span class="n">DEFS</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"ECF_HOME"</span><span class="p">,</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">ecf_home</span><span class="p">)</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">"WK"</span><span class="p">)</span> <span class="o">!=</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">DEFS</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"ECF_CLIENT_EXE_PATH"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s">"WK"</span><span class="p">)</span> <span class="o">+</span> <span class="s">"/Client/bin/gcc\-4.5/debug/ecflow_client"</span><span class="p">)</span>
<span class="n">DEFS</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"SLEEP"</span><span class="p">,</span> <span class="s">"10"</span><span class="p">)</span> <span class="c"># not strictly required since default is 1 second</span>
<span class="n">DEFS</span><span class="o">.</span><span class="n">add_variable</span><span class="p">(</span><span class="s">"ECF_INCLUDE"</span><span class="p">,</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">ecf_home</span> <span class="o">+</span> <span class="s">"/includes"</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"Place all suites into suspended state, so they can be started by the GUI</span><span class="se">\n</span><span class="s">"</span>
<span class="k">for</span> <span class="n">suite</span> <span class="ow">in</span> <span class="n">DEFS</span><span class="o">.</span><span class="n">suites</span><span class="p">:</span>
<span class="n">suite</span><span class="o">.</span><span class="n">add_defstatus</span><span class="p">(</span><span class="n">ecflow</span><span class="o">.</span><span class="n">DState</span><span class="o">.</span><span class="n">suspended</span><span class="p">)</span>
<span class="c"># ecflow.PrintStyle.set_style(ecflow.Style.STATE)</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="n">DEFS</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"Generating script files(.ecf) from the definition"</span>
<span class="n">DEFS</span><span class="o">.</span><span class="n">generate_scripts</span><span class="p">()</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"</span><span class="se">\n</span><span class="s">checking script file generation, pre-processing & variable substitution</span><span class="se">\n</span><span class="s">"</span>
<span class="n">JOB_CTRL</span> <span class="o">=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">JobCreationCtrl</span><span class="p">()</span>
<span class="n">DEFS</span><span class="o">.</span><span class="n">check_job_creation</span><span class="p">(</span><span class="n">JOB_CTRL</span><span class="p">)</span>
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">JOB_CTRL</span><span class="o">.</span><span class="n">get_error_msg</span><span class="p">())</span> <span class="o">==</span> <span class="mi">0</span><span class="p">,</span> <span class="n">JOB_CTRL</span><span class="o">.</span><span class="n">get_error_msg</span><span class="p">()</span>
<span class="c"># ===========================================================================</span>
<span class="n">CL</span> <span class="o">=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Client</span><span class="p">(</span><span class="n">ARGS</span><span class="o">.</span><span class="n">host</span><span class="p">,</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">port</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"check server "</span> <span class="o">+</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">host</span> <span class="o">+</span> <span class="s">":"</span> <span class="o">+</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">port</span> <span class="o">+</span> <span class="s">" is running"</span>
<span class="n">CL</span><span class="o">.</span><span class="n">ping</span><span class="p">()</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"start the server running"</span>
<span class="n">CL</span><span class="o">.</span><span class="n">restart_server</span><span class="p">()</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"Remove suites associated with this DEFS, allows rerun"</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">for</span> <span class="n">suite</span> <span class="ow">in</span> <span class="n">DEFS</span><span class="o">.</span><span class="n">suites</span><span class="p">:</span>
<span class="n">CL</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">suite</span><span class="o">.</span><span class="n">get_abs_node_path</span><span class="p">(),</span> <span class="bp">True</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">ex</span><span class="p">:</span>
<span class="k">pass</span> <span class="c"># For first run this will fail, hence ignore</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"Load the definition into "</span> <span class="o">+</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">host</span> <span class="o">+</span> <span class="s">":"</span> <span class="o">+</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">port</span>
<span class="n">CL</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">DEFS</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">verbose</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"Begin all suites. They should be suspended."</span>
<span class="k">print</span> <span class="s">"Loaded suites:"</span>
<span class="k">for</span> <span class="n">suite</span> <span class="ow">in</span> <span class="n">DEFS</span><span class="o">.</span><span class="n">suites</span><span class="p">:</span>
<span class="n">CL</span><span class="o">.</span><span class="n">begin_suite</span><span class="p">(</span><span class="n">suite</span><span class="o">.</span><span class="n">name</span><span class="p">())</span>
<span class="k">print</span> <span class="s">" "</span> <span class="o">+</span> <span class="n">suite</span><span class="o">.</span><span class="n">name</span><span class="p">()</span>
<span class="k">print</span> <span class="s">"into server "</span> <span class="o">+</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">host</span> \
<span class="o">+</span> <span class="s">":"</span> <span class="o">+</span> <span class="n">ARGS</span><span class="o">.</span><span class="n">port</span> <span class="o">+</span> <span class="s">", please view the playable suites in the GUI"</span>
<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">ex</span><span class="p">:</span>
<span class="k">print</span> <span class="s">"Error: "</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">ex</span><span class="p">)</span>
</pre></div>
</div>
</div>
|