Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


Code Block
languagepython
import ecflow
import sys

class Indentor:
    """This class manages indentation
HTML

<div class="section" id="how-can-i-traverse-the-definition-in-python">
<span id="traverse-defs"></span><span id="index-0"></span>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">import</span> <span class="nn">ecflow</span>

<span class="k">class</span> <span class="nc">Indentor</span><span class="p">:</span>
    <span class="sd">&quot;&quot;&quot;This class manages indentation, for use with context manager</span>manager
<span class="sd">    It is used to correctly indent the definition node tree hierarchy</span>hierarchy
<span class=""sd">
    _index  &quot;&quot;&quot;</span>= 0
    <span class="n">_index</span> <span class="o">=</span> <span class="mi">0</span>
def __init__(self):
        <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>Indentor._index += 1
    def __del__(self):
        <span class="n">Indentor</span><span class="o">.</span><span class="n">_index</span> <span class="o">+=</span> <span class="mi">1</span>
    <span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
Indentor._index -= 1
    @classmethod
    def indent(cls, the_file):
        for <span class="n">Indentor</span><span class="o">.</span><span class="n">_index</span> <span class="o">-=</span> <span class="mi">1</span>
    <span class="nd">@classmethod</span>i in range(Indentor._index):
            the_file.write(' ')
    <span class="k">def</span> <span class="nf">indent</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">the_file</span><span class="p">):</span>
class DefsTraverser:
    """Traverse the ecflow.Defs definition <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">Indentor</span><span class="o">.</span><span class="n">_index</span><span class="p">):</span>
            <span class="n">the_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="p">)</span>
            
<span class="k">class</span> <span class="nc">DefsTraverser</span><span class="p">:</span>
    <span class="sd">&quot;&quot;&quot;Traverse the ecflow.Defs definition and write to file.</span>
<span class="sd">    </span>
<span class="sd">    This demonstrates that all nodes in the node tree and all attributes are accessible.</span>
<span class="sd">    Additionally the state data is also accessible. This class will write state data as</span>
<span class="sd">    comments. If the definition was returned from the server, it allows access to latest </span>
<span class="sd">    snapshot of the state data held in the server. </span>
<span class="sd">    &quot;&quot;&quot;</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">defs</span><span class="p">):</span>and write to file.
 
 This demonstrates that all nodes in the node tree and all attributes are accessible.
 Additionally the state data is also accessible. This class will write state data as
 comments. If the definition was returned from the server, it allows access to latest 
 snapshot of the state data held in the server. 
 """
    def __init__(self, defs):
        assert (isinstance(defs, ecflow.Defs)),"Expected ecflow.Defs as first argument"
        self.__defs = defs
        
    def write_to_file(self, file_name):
        assert (isinstance(file_name, str)),"Expected a string argument. Representing a file name"
        self.__file = open(file_name, 'w')
        for extern in self.__defs.externs:
            self.__writeln("extern " + extern)
        for suite in self.__defs.suites:
        <span class="k">assert</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">defs</span><span class="p">,</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">Defs</span><span class="p">)),</span><span class="s">&quot;Expected ecflow.Defs as first argument&quot;</span>
    self.__write("suite ")
            self.__print_node(suite)
            <spanclock class="bp">self</span><span class="o">.</span><span class="n">__defs</span> <span class="o">=</span> <span class="n">defs</span>
 suite.get_clock()
            if clock:
         
     <span class="k">def</span> <span class="nf">write_to_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">file_name</span><span class="p">):</span>
 indent = Indentor()
                self.__writeln(str(clock))
          <span class="k">assert</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="nb">str</span><span class="p">)),</span><span class="s">&quot;Expected a string argument. Representing a file name&quot;</span> del indent
            self.__print_nc(suite)
        <span class="bp">self</span><span class="o">.</span><span class="n">__file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s">&#39;w&#39;</span><span class="p">)</span>    self.__writeln("endsuite")  
        self.__file.close()

    def __print_nc(self, node_container):
        indent = Indentor()
        <span class="k">for</span> <span class="n">extern</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">__defs</span><span class="o">.</span><span class="n">externs</span><span class="p">:</span>for node in node_container.nodes:
            if isinstance(node, ecflow.Task):
            <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="s">&quot;extern &quot;</span> <span class="o">+</span> <span class="n">extern</span><span class="p">)</span>    self.__write("task ")
                self.__print_node(node)
        <span class="k">for</span> <span class="n">suite</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">__defs</span><span class="o">.</span><span class="n">suites</span><span class="p">:</span>
    else: 
                self.__write("family ")
              <span class="bp">self</span><span class="o">.</span><span class="n">__write</span><span class="p">(</span><span class="s">&quot;suite &quot;</span><span class="p">)</span>
 self.__print_node(node)
                self.__print_nc(node)
             <span class="bp">self</span><span class="o">.</span><span class="n">__print_node</span><span class="p">(</span><span class="n">suite</span><span class="p">)</span>   self.__writeln("endfamily")
        del  indent

  <span class="n">clock</span> <span class="o">=</span> <span class="n">suite</span><span class="o">.</span><span class="n">get_clock</span><span class="p">()</span> def __print_node(self, node):
        self.__file.write(node.name() + " # <spanstate: class="k">if</span> <span class="n">clock</span><span class="p">:</span>" + str(node.get_state()) + "\n")
        
        <spanindent class="n">indent</span> <span class="o">=</span> <span class="n">Indentor</span><span class="p">()</span>
      = Indentor()
        defStatus = node.get_defstatus()
        if defStatus != ecflow.DState.queued: 
          <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">clock</span><span class="p">))</span>
 self.__writeln("defstatus " + str(defStatus))
            
        <spanautocancel class="k">del</span> <span class="n">indent</span>
= node.get_autocancel()
        if autocancel: self.__writeln(str(autocancel))
     <span class="bp">self</span><span class="o">.</span><span class="n">__print_nc</span><span class="p">(</span><span class="n">suite</span><span class="p">)</span>   
        repeat = node.get_repeat()
        if not repeat.empty():  <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="s">&quot;endsuite&quot;</span><span class="p">)</span>self.__writeln(str(repeat)  + " # value: " + str(repeat.value()))
    
        <spanlate class="bp">self</span><span class="o">.</span><span class="n">__file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> node.get_late()
        if late: self.__writeln(str(late) + " # is_late: " + str(late.is_late()))

    <span class="k">def</span> <span class="nf">__print_nc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node_container</span><span class="p">):</span>    complete_expr = node.get_complete()
        if complete_expr:
        <span class="n">indent</span> <span class="o">=</span> <span class="n">Indentor</span><span class="p">()</span>
    for part_expr in complete_expr.parts:
            <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> trig = "complete "
                if part_expr.and_expr(): trig = trig + "-a "
            <span class="k">if</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>
    if part_expr.or_expr():  trig = trig + "-o "
                 <span class="bp">self</span><span class="o">.</span><span class="n">__write</span><span class="p">(</span><span class="s">&quot;task &quot;</span><span class="p">)</span>
self.__write(trig)
                self.__file.write( part_expr.get_expression()    + "\n")
   <span class="bp">self</span><span class="o">.</span><span class="n">__print_node</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>     trigger_expr = node.get_trigger()
        if trigger_expr:
            <span class="k">else</span><span class="p">:</span> for part_expr in trigger_expr.parts:
                <spantrig class= "bp">self</span><span class="o">.</span><span class="n">__write</span><span class="p">(</span><span class="s">&quot;family &quot;</span><span class="p">)</span>
trigger "
                if part_expr.and_expr(): trig = trig + "-a "
                 <span class="bp">self</span><span class="o">.</span><span class="n">__print_node</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>if part_expr.or_expr():  trig = trig + "-o "
                self.__write(trig)
                <span class="bp">self</span><span class="o">.</span><span class="n">__print_nc</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
self.__file.write( part_expr.get_expression() + "\n")
                
        for <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="s">&quot;endfamily&quot;</span><span class="p">)</span>var in node.variables:    self.__writeln("edit " + var.name() + " '" + var.value() + "'")
        <span class="k">del</span> <span class="n">indent</span>

for meter in node.meters:    <span class="k">def</span> <span class="nf">__print_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
 self.__writeln(str(meter) + " # value: " + str(meter.value()))
        for <span class="bp">self</span><span class="o">.</span><span class="n">__file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">name</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot; # state: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">get_state</span><span class="p">())</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
        event in node.events:     self.__writeln(str(event) + " # value: " + str(event.value()))
        for label in node.labels:     self.__writeln(str(label) + " # value: " + label.value())
        for limit in node.limits:     self.__writeln(str(limit) + " # value: " + str(limit.value()))
        <span class="n">indent</span> <span class="o">=</span> <span class="n">Indentor</span><span class="p">()</span>for inlimit in node.inlimits: self.__writeln(str(inlimit))
        <span class="n">defStatus</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">get_defstatus</span><span class="p">()</span>for the_time in node.times:   self.__writeln(str(the_time))
        for <span class="k">if</span> <span class="n">defStatus</span> <span class="o">!=</span> <span class="n">ecflow</span><span class="o">.</span><span class="n">DState</span><span class="o">.</span><span class="n">queued</span><span class="p">:</span> 
       today in node.todays :    self.__writeln(str(today))   
        for date in node.dates:     <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="s">&quot;defstatus &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">defStatus</span><span class="p">))</span> self.__writeln(str(date))
        for day in node.days:         self.__writeln(str(day))  
        for cron in node.crons: 
      self.__writeln(str(cron))
  <span class="n">autocancel</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">get_autocancel</span><span class="p">()</span>
        <span class="k">if</span> <span class="n">autocancel</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">autocancel</span><span class="p">))</span>
        
        <span class="n">repeat</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">get_repeat</span><span class="p">()</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="n">repeat</span><span class="o">.</span><span class="n">empty</span><span class="p">():</span> <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">repeat</span><span class="p">)</span>  <span class="o">+</span> <span class="s">&quot; # value: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">repeat</span><span class="o">.</span><span class="n">value</span><span class="p">()))</span>
    
        <span class="n">late</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">get_late</span><span class="p">()</span>
        <span class="k">if</span> <span class="n">late</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">late</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot; # is_late: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">late</span><span class="o">.</span><span class="n">is_late</span><span class="p">()))</span>

        <span class="n">complete_expr</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">get_complete</span><span class="p">()</span>
        <span class="k">if</span> <span class="n">complete_expr</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">part_expr</span> <span class="ow">in</span> <span class="n">complete_expr</span><span class="o">.</span><span class="n">parts</span><span class="p">:</span>
                <span class="n">trig</span> <span class="o">=</span> <span class="s">&quot;complete &quot;</span>
                <span class="k">if</span> <span class="n">part_expr</span><span class="o">.</span><span class="n">and_expr</span><span class="p">():</span> <span class="n">trig</span> <span class="o">=</span> <span class="n">trig</span> <span class="o">+</span> <span class="s">&quot;-a &quot;</span>
                <span class="k">if</span> <span class="n">part_expr</span><span class="o">.</span><span class="n">or_expr</span><span class="p">():</span>  <span class="n">trig</span> <span class="o">=</span> <span class="n">trig</span> <span class="o">+</span> <span class="s">&quot;-o &quot;</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">__write</span><span class="p">(</span><span class="n">trig</span><span class="p">)</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">__file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span> <span class="n">part_expr</span><span class="o">.</span><span class="n">get_expression</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
        <span class="n">trigger_expr</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">get_trigger</span><span class="p">()</span>
        <span class="k">if</span> <span class="n">trigger_expr</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">part_expr</span> <span class="ow">in</span> <span class="n">trigger_expr</span><span class="o">.</span><span class="n">parts</span><span class="p">:</span>
                <span class="n">trig</span> <span class="o">=</span> <span class="s">&quot;trigger &quot;</span>
                <span class="k">if</span> <span class="n">part_expr</span><span class="o">.</span><span class="n">and_expr</span><span class="p">():</span> <span class="n">trig</span> <span class="o">=</span> <span class="n">trig</span> <span class="o">+</span> <span class="s">&quot;-a &quot;</span>
                <span class="k">if</span> <span class="n">part_expr</span><span class="o">.</span><span class="n">or_expr</span><span class="p">():</span>  <span class="n">trig</span> <span class="o">=</span> <span class="n">trig</span> <span class="o">+</span> <span class="s">&quot;-o &quot;</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">__write</span><span class="p">(</span><span class="n">trig</span><span class="p">)</span>
                <span class="bp">self</span><span class="o">.</span><span class="n">__file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span> <span class="n">part_expr</span><span class="o">.</span><span class="n">get_expression</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
                
        <span class="k">for</span> <span class="n">var</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">variables</span><span class="p">:</span>    <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="s">&quot;edit &quot;</span> <span class="o">+</span> <span class="n">var</span><span class="o">.</span><span class="n">name</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot; &#39;&quot;</span> <span class="o">+</span> <span class="n">var</span><span class="o">.</span><span class="n">value</span><span class="p">()</span> <span class="o">+</span> <span class="s">&quot;&#39;&quot;</span><span class="p">)</span>
        <span class="k">for</span> <span class="n">meter</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">meters</span><span class="p">:</span>     <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">meter</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot; # value: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">meter</span><span class="o">.</span><span class="n">value</span><span class="p">()))</span>
        <span class="k">for</span> <span class="n">event</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">events</span><span class="p">:</span>     <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">event</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot; # value: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">value</span><span class="p">()))</span>
        <span class="k">for</span> <span class="n">label</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">labels</span><span class="p">:</span>     <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">label</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot; # value: &quot;</span> <span class="o">+</span> <span class="n">label</span><span class="o">.</span><span class="n">value</span><span class="p">())</span>
        <span class="k">for</span> <span class="n">limit</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">limits</span><span class="p">:</span>     <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">limit</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot; # value: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">limit</span><span class="o">.</span><span class="n">value</span><span class="p">()))</span>
        <span class="k">for</span> <span class="n">inlimit</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">inlimits</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">inlimit</span><span class="p">))</span>
        <span class="k">for</span> <span class="n">the_time</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">times</span><span class="p">:</span>   <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">the_time</span><span class="p">)</span> <span class="o">+</span> <span class="s">&quot; # is_free: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">the_time</span><span class="o">.</span><span class="n">is_free</span><span class="p">()))</span>
        <span class="k">for</span> <span class="n">today</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">todays</span><span class="p">:</span>     <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">today</span><span class="p">)</span>    <span class="o">+</span> <span class="s">&quot; # is_free: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">today</span><span class="o">.</span><span class="n">is_free</span><span class="p">()))</span>
        <span class="k">for</span> <span class="n">date</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">dates</span><span class="p">:</span>       <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">date</span><span class="p">)</span>     <span class="o">+</span> <span class="s">&quot; # is_free: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">date</span><span class="o">.</span><span class="n">is_free</span><span class="p">()))</span>
        <span class="k">for</span> <span class="n">day</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">days</span><span class="p">:</span>         <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">day</span><span class="p">)</span>      <span class="o">+</span> <span class="s">&quot; # is_free: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">day</span><span class="o">.</span><span class="n">is_free</span><span class="p">()))</span>
        <span class="k">for</span> <span class="n">cron</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">crons</span><span class="p">:</span>       <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">cron</span><span class="p">)</span>     <span class="o">+</span> <span class="s">&quot; # is_free: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">cron</span><span class="o">.</span><span class="n">is_free</span><span class="p">()))</span>
        <span class="k">for</span> <span class="n">verify</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">verifies</span><span class="p">:</span>  <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">verify</span><span class="p">))</span>
        <span class="k">for</span> <span class="n">zombie</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">zombies</span><span class="p">:</span>   <span class="bp">self</span><span class="o">.</span><span class="n">__writeln</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">zombie</span><span class="p">))</span>
        
        <span class="k">del</span> <span class="n">indent</span>

    <span class="k">def</span> <span class="nf">__write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">the_string</span><span class="p">):</span>
        <span class="n">Indentor</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__file</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">__file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">the_string</span><span class="p">)</span>

    <span class="k">def</span> <span class="nf">__writeln</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">the_string</span><span class="p">):</span>
        <span class="n">Indentor</span><span class="o">.</span><span class="n">indent</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__file</span><span class="p">)</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">__file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">the_string</span> <span class="o">+</span> <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>

   
<span class="k">try</span><span class="p">:</span>
    <span class="c"># Create the client. This will read the default environment variables</span>
    <span class="n">ci</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="s">&quot;localhost&quot;</span><span class="p">,</span> <span class="s">&quot;4141&quot;</span><span class="p">)</span>
    
    <span class="c"># Get the node tree suite definition as stored in the server</span>
    <span class="c"># The definition is retrieved and stored on the variable &#39;ci&#39;</span>
    <span class="n">ci</span><span class="o">.</span><span class="n">sync_local</span><span class="p">()</span>

    <span class="c"># access the definition retrieved from the server</span>
    <span class="n">server_defs</span> <span class="o">=</span> <span class="n">ci</span><span class="o">.</span><span class="n">get_defs</span><span class="p">()</span>
    
    <span class="k">if</span> <span class="n">server_defs</span> <span class="o">==</span> <span class="bp">None</span> <span class="p">:</span>
        <span class="k">print</span> <span class="s">&quot;The server has no definition&quot;</span>
        <span class="nb">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
    
    <span class="c"># Traverse server definition writing all state as comments.</span>
    <span class="n">traverser</span> <span class="o">=</span> <span class="n">DefsTraverser</span><span class="p">(</span><span class="n">server_defs</span><span class="p">)</span>
    <span class="n">traverser</span><span class="o">.</span><span class="n">write_to_file</span><span class="p">(</span><span class="s">&quot;server.defs&quot;</span><span class="p">)</span>
        
<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
    <span class="k">print</span> <span class="s">&quot;failed: &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
    
</pre></div>
</div>
</div>

 for verify in node.verifies:  self.__writeln(str(verify))
        for zombie in node.zombies:   self.__writeln(str(zombie))
        
        del indent

    def __write(self, the_string):
        Indentor.indent(self.__file)
        self.__file.write(the_string)

    def __writeln(self, the_string):
        Indentor.indent(self.__file)
        self.__file.write(the_string + "\n")

   
try:
    # Create the client. This will read the default environment variables
    ci = ecflow.Client("localhost", "4143")
    
    # Get the node tree suite definition as stored in the server
    # The definition is retrieved and stored on the variable 'ci'
    ci.sync_local()

    # access the definition retrieved from the server
    server_defs = ci.get_defs()
    
    if len(server_defs) == 0 :
        print "The server has no suites"
        sys.exit(1)
    
    # Traverse server definition writing all state as comments.
    traverser = DefsTraverser(server_defs)
    traverser.write_to_file("server.defs")
        
except RuntimeError, e:
    print("failed: " + str(e))