Print more information on xml parsing error plus minor cleanup

    - Also fix some tabbing style issues
    - Remove unused file core/iniparser.py
    - Remove unused file core/dicttoobject.py
    - Remove unused file core/jsonparser.py and reference in teston.cfg

Change-Id: I6e14bb75650c6a516cfb15fe7aec8aa396c18f04
diff --git a/TestON/config/teston.cfg b/TestON/config/teston.cfg
index c7442f6..b255f45 100644
--- a/TestON/config/teston.cfg
+++ b/TestON/config/teston.cfg
@@ -11,9 +11,5 @@
         <class>Logger</class>
     </logger>
 
-    <responseparser>
-        <file>core/jsonparser.py</file>
-        <class>JsonParser</class>
-    </responseparser>
 </config>
 
diff --git a/TestON/core/dicttoobject.py b/TestON/core/dicttoobject.py
deleted file mode 100644
index 13c2aa6..0000000
--- a/TestON/core/dicttoobject.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env python
-
-class DictToObject( dict ):
-    def __init__( self, data = None ):
-        super( DictToObject, self ).__init__()
-        if data:
-            self.__update( data, {} )
-
-    def __update( self, data, did ):
-        dataid = id(data)
-        did[ dataid ] = self
-
-        for k in data:
-            dkid = id(data[k])
-            if did.has_key(dkid):
-                self[k] = did[dkid]
-            elif isinstance( data[k], DictToObject ):
-                self[k] = data[k]
-            elif isinstance( data[k], dict ):
-                obj = DictToObject()
-                obj.__update( data[k], did )
-                self[k] = obj
-                obj = None
-            else:
-                self[k] = data[k]
-
-    def __getattr__( self, key ):
-        return self.get( key, None )
-
-    def __setattr__( self, key, value ):
-        if isinstance(value,dict):
-            self[key] = DictToObject( value )
-        else:
-            self[key] = value
-
-    def update( self, *args ):
-        for obj in args:
-            for k in obj:
-                if isinstance(obj[k],dict):
-                    self[k] = DictToObject( obj[k] )
-                else:
-                    self[k] = obj[k]
-        return self
-
-    def merge( self, *args ):
-        for obj in args:
-            for k in obj:
-                if self.has_key(k):
-                    if isinstance(self[k],list) and isinstance(obj[k],list):
-                        self[k] += obj[k]
-                    elif isinstance(self[k],list):
-                        self[k].append( obj[k] )
-                    elif isinstance(obj[k],list):
-                        self[k] = [self[k]] + obj[k]
-                    elif isinstance(self[k],DictToObject) and isinstance(obj[k],Object):
-                        self[k].merge( obj[k] )
-                    elif isinstance(self[k],DictToObject) and isinstance(obj[k],dict):
-                        self[k].merge( obj[k] )
-                    else:
-                        self[k] = [ self[k], obj[k] ]
-                else:
-                    if isinstance(obj[k],dict):
-                        self[k] = DictToObject( obj[k] )
-                    else:
-                        self[k] = obj[k]
-        return self
-
diff --git a/TestON/core/iniparser.py b/TestON/core/iniparser.py
deleted file mode 100644
index c416b4f..0000000
--- a/TestON/core/iniparser.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#/usr/bin/env python
-'''
-Created on 07-Jan-2013
-
-@author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
-
-    TestON is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 2 of the License, or
-    (at your option) any later version.
-
-    TestON is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with TestON.  If not, see <http://www.gnu.org/licenses/>.
-
-
-'''
-
-import re
-from configobj import ConfigObj
-class iniparser:
-    '''
-    Manages authoring, parsing and execution of the test. Sub components are
-    Test-Topology parser
-    Module that parses the test from plain English and topology
-    from a specification file and prepares for execution.
-    Test sequencer
-    Module that executes the tests case by case,
-    step by step adding ability for step by step pause and debug later.
-    Object loader
-    Module that connects and loads all the component connection objects
-    for access in the test
-    '''
-    def __init__(self) :
-        self.default = ''
-
-    def parse(self,fileName):
-        '''
-         This will parse the params or topo or cfg file and return content in the file as Dictionary
-        '''
-        self.fileName = fileName
-        matchFileName = re.match(r'(.*)\.(params|topo)',self.fileName,re.M|re.I)
-        if matchFileName:
-            try :
-                parsedInfo = ConfigObj(self.fileName)
-                return parsedInfo
-            except Exception:
-                print "There is no such file to parse "+fileName
-        else:
-            return 0
-
-    def parseParams(self,paramsPath):
-        '''
-        It will take the params file path and will return the params dictionary
-        '''
-
-        paramsPath = re.sub("\.","/",paramsPath)
-        paramsPath = re.sub("tests|examples","",paramsPath)
-        #print main.tests_path+"/"+paramsPath+".params"
-        params = self.parse(main.tests_path+paramsPath+".params")
-        paramsAsString = str(params)
-        return eval(paramsAsString)
-
-    def parseTopology(self,topologyPath):
-        '''
-        It will take topology file path and will return topology dictionary
-        '''
-        topologyPath = re.sub("\.","/",topologyPath)
-        topologyPath = re.sub("tests|examples","",topologyPath)
-        topology = self.parse(main.tests_path+"/"+topologyPath+".topo")
-        topoAsString = str(topology)
-        return eval(topoAsString)
-
diff --git a/TestON/core/jsonparser.py b/TestON/core/jsonparser.py
deleted file mode 100644
index c33a9b0..0000000
--- a/TestON/core/jsonparser.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#/usr/bin/env python
-'''
-Created on 07-Jan-2013
-
-@author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
-
-    TestON is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 2 of the License, or
-    (at your option) any later version.
-
-    TestON is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-
-    You should have received a copy of the GNU General Public License
-    along with TestON.  If not, see <http://www.gnu.org/licenses/>.
-
-
-'''
-
-import json
-class JsonParser:
-    '''
-    Module that parses the response Json to Dictionary and Vice versa.
-    '''
-    def __init__(self) :
-        self.default = ''
-
-    def response_parse(self,json_response):
-        '''
-         This will parse the json formatted string and return content as Dictionary
-        '''
-        response_dict = {}
-        try :
-            response_dict = json.loads(json_response)
-        except Exception:
-            main.log.error("Json Parser is unable to parse the string")
-        return response_dict
-
-    '''
-
-    def dict_json(self,response_dict):
-
-        # This will parse the Python Dictionary and return content as Json string.
-
-        json_response = {}
-        try :
-            json_response = json.dumps(response_dict)
-        except Exception:
-            main.log.error("Json Parser is unable to parse the string")
-        return json_response
-    '''
diff --git a/TestON/core/xmlparser.py b/TestON/core/xmlparser.py
index fea0ce9..e2cfb1d 100644
--- a/TestON/core/xmlparser.py
+++ b/TestON/core/xmlparser.py
@@ -39,10 +39,10 @@
             try :
                 parsedInfo = xmldict.xml_to_dict(xml)
                 return parsedInfo
-            except Exception:
-                print "There is no such file to parse " + fileName
+            except Exception as e:
+                print "Error parsing file " + fileName + ": " + e.message
         else :
-            print "file name is not correct"
+            print "File name is not correct"
 
     def parseParams(self,paramsPath):
         '''
diff --git a/TestON/tests/FUNCintentRest/Dependency/newFuncTopo.py b/TestON/tests/FUNCintentRest/Dependency/newFuncTopo.py
index 5552aa9..5edf7f7 100755
--- a/TestON/tests/FUNCintentRest/Dependency/newFuncTopo.py
+++ b/TestON/tests/FUNCintentRest/Dependency/newFuncTopo.py
@@ -16,121 +16,121 @@
 
 class VLANHost( Host ):
     def config( self, vlan=100, **params ):
-		r = super( Host, self ).config( **params )
-		intf = self.defaultIntf()
-		self.cmd( 'ifconfig %s inet 0' % intf )
-                self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
-		self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
-		newName = '%s.%d' % ( intf, vlan )
-		intf.name = newName
-		self.nameToIntf[ newName ] = intf
-		return r
+        r = super( Host, self ).config( **params )
+        intf = self.defaultIntf()
+        self.cmd( 'ifconfig %s inet 0' % intf )
+        self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
+        self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
+        newName = '%s.%d' % ( intf, vlan )
+        intf.name = newName
+        self.nameToIntf[ newName ] = intf
+        return r
 
 class IPv6Host( Host ):
     def config( self, v6Addr='1000:1/64', **params ):
-		r = super( Host, self ).config( **params )
-		intf = self.defaultIntf()
-		self.cmd( 'ifconfig %s inet 0' % intf )
-		self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
-		return r
+        r = super( Host, self ).config( **params )
+        intf = self.defaultIntf()
+        self.cmd( 'ifconfig %s inet 0' % intf )
+        self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
+        return r
 
 class dualStackHost( Host ):
     def config( self, v6Addr='2000:1/64', **params ):
-		r = super( Host, self ).config( **params )
-		intf = self.defaultIntf()
-		self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
-		return r
+        r = super( Host, self ).config( **params )
+        intf = self.defaultIntf()
+        self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
+        return r
 
 class MyTopo( Topo ):
 
-	def __init__( self ):
-                # Initialize topology
-		Topo.__init__( self )
-		# Switch S5 Hosts
-		host1=self.addHost( 'h1', ip='10.1.0.2/24' )
-		host2=self.addHost( 'h2', cls=IPv6Host, v6Addr='1000::2/64' )
-		host3=self.addHost( 'h3', ip='10.1.0.3/24', cls=dualStackHost, v6Addr='2000::2/64' )
-		#VLAN hosts
-		host4=self.addHost( 'h4', ip='100.1.0.2/24', cls=VLANHost, vlan=100 )
-		host5=self.addHost( 'h5', ip='200.1.0.2/24', cls=VLANHost, vlan=200 )
-		#VPN-1 and VPN-2 Hosts
-		host6=self.addHost( 'h6', ip='11.1.0.2/24' )
-		host7=self.addHost( 'h7', ip='12.1.0.2/24' )
-		#Multicast Sender
-		host8=self.addHost( 'h8', ip='10.1.0.4/24' )
+    def __init__( self ):
+        # Initialize topology
+        Topo.__init__( self )
+        # Switch S5 Hosts
+        host1=self.addHost( 'h1', ip='10.1.0.2/24' )
+        host2=self.addHost( 'h2', cls=IPv6Host, v6Addr='1000::2/64' )
+        host3=self.addHost( 'h3', ip='10.1.0.3/24', cls=dualStackHost, v6Addr='2000::2/64' )
+        #VLAN hosts
+        host4=self.addHost( 'h4', ip='100.1.0.2/24', cls=VLANHost, vlan=100 )
+        host5=self.addHost( 'h5', ip='200.1.0.2/24', cls=VLANHost, vlan=200 )
+        #VPN-1 and VPN-2 Hosts
+        host6=self.addHost( 'h6', ip='11.1.0.2/24' )
+        host7=self.addHost( 'h7', ip='12.1.0.2/24' )
+        #Multicast Sender
+        host8=self.addHost( 'h8', ip='10.1.0.4/24' )
 
-		# Switch S6 Hosts
-		host9=self.addHost( 'h9', ip='10.1.0.5/24' )
-		host10=self.addHost( 'h10', cls=IPv6Host, v6Addr='1000::3/64' )
-		host11=self.addHost( 'h11', ip='10.1.0.6/24', cls=dualStackHost, v6Addr='2000::3/64' )
-		#VLAN hosts
-		host12=self.addHost( 'h12', ip='100.1.0.3/24', cls=VLANHost, vlan=100 )
-		host13=self.addHost( 'h13', ip='200.1.0.3/24', cls=VLANHost, vlan=200 )
-		#VPN-1 and VPN-2 Hosts
-		host14=self.addHost( 'h14', ip='11.1.0.3/24' )
-		host15=self.addHost( 'h15', ip='12.1.0.3/24' )
-		#Multicast Receiver
-		host16=self.addHost( 'h16', ip='10.1.0.7/24' )
+        # Switch S6 Hosts
+        host9=self.addHost( 'h9', ip='10.1.0.5/24' )
+        host10=self.addHost( 'h10', cls=IPv6Host, v6Addr='1000::3/64' )
+        host11=self.addHost( 'h11', ip='10.1.0.6/24', cls=dualStackHost, v6Addr='2000::3/64' )
+        #VLAN hosts
+        host12=self.addHost( 'h12', ip='100.1.0.3/24', cls=VLANHost, vlan=100 )
+        host13=self.addHost( 'h13', ip='200.1.0.3/24', cls=VLANHost, vlan=200 )
+        #VPN-1 and VPN-2 Hosts
+        host14=self.addHost( 'h14', ip='11.1.0.3/24' )
+        host15=self.addHost( 'h15', ip='12.1.0.3/24' )
+        #Multicast Receiver
+        host16=self.addHost( 'h16', ip='10.1.0.7/24' )
 
-		# Switch S7 Hosts
-		host17=self.addHost( 'h17', ip='10.1.0.8/24' )
-		host18=self.addHost( 'h18', cls=IPv6Host, v6Addr='1000::4/64' )
-		host19=self.addHost( 'h19', ip='10.1.0.9/24', cls=dualStackHost, v6Addr='2000::4/64' )
-		#VLAN hosts
-		host20=self.addHost( 'h20', ip='100.1.0.4/24', cls=VLANHost, vlan=100 )
-		host21=self.addHost( 'h21', ip='200.1.0.4/24', cls=VLANHost, vlan=200 )
-		#VPN-1 and VPN-2 Hosts
-		host22=self.addHost( 'h22', ip='11.1.0.4/24' )
-		host23=self.addHost( 'h23', ip='12.1.0.4/24' )
-		#Multicast Receiver
-		host24=self.addHost( 'h24', ip='10.1.0.10/24' )
+        # Switch S7 Hosts
+        host17=self.addHost( 'h17', ip='10.1.0.8/24' )
+        host18=self.addHost( 'h18', cls=IPv6Host, v6Addr='1000::4/64' )
+        host19=self.addHost( 'h19', ip='10.1.0.9/24', cls=dualStackHost, v6Addr='2000::4/64' )
+        #VLAN hosts
+        host20=self.addHost( 'h20', ip='100.1.0.4/24', cls=VLANHost, vlan=100 )
+        host21=self.addHost( 'h21', ip='200.1.0.4/24', cls=VLANHost, vlan=200 )
+        #VPN-1 and VPN-2 Hosts
+        host22=self.addHost( 'h22', ip='11.1.0.4/24' )
+        host23=self.addHost( 'h23', ip='12.1.0.4/24' )
+        #Multicast Receiver
+        host24=self.addHost( 'h24', ip='10.1.0.10/24' )
 
-		s1 = self.addSwitch( 's1' )
-		s2 = self.addSwitch( 's2' )
-		s3 = self.addSwitch( 's3' )
-		s4 = self.addSwitch( 's4' )
-		s5 = self.addSwitch( 's5' )
-		s6 = self.addSwitch( 's6' )
-		s7 = self.addSwitch( 's7' )
+        s1 = self.addSwitch( 's1' )
+        s2 = self.addSwitch( 's2' )
+        s3 = self.addSwitch( 's3' )
+        s4 = self.addSwitch( 's4' )
+        s5 = self.addSwitch( 's5' )
+        s6 = self.addSwitch( 's6' )
+        s7 = self.addSwitch( 's7' )
 
-		self.addLink(s5,host1)
-		self.addLink(s5,host2)
-		self.addLink(s5,host3)
-		self.addLink(s5,host4)
-		self.addLink(s5,host5)
-		self.addLink(s5,host6)
-		self.addLink(s5,host7)
-		self.addLink(s5,host8)
+        self.addLink(s5,host1)
+        self.addLink(s5,host2)
+        self.addLink(s5,host3)
+        self.addLink(s5,host4)
+        self.addLink(s5,host5)
+        self.addLink(s5,host6)
+        self.addLink(s5,host7)
+        self.addLink(s5,host8)
 
-		self.addLink(s6,host9)
-		self.addLink(s6,host10)
-		self.addLink(s6,host11)
-		self.addLink(s6,host12)
-		self.addLink(s6,host13)
-		self.addLink(s6,host14)
-		self.addLink(s6,host15)
-		self.addLink(s6,host16)
+        self.addLink(s6,host9)
+        self.addLink(s6,host10)
+        self.addLink(s6,host11)
+        self.addLink(s6,host12)
+        self.addLink(s6,host13)
+        self.addLink(s6,host14)
+        self.addLink(s6,host15)
+        self.addLink(s6,host16)
 
-		self.addLink(s7,host17)
-		self.addLink(s7,host18)
-		self.addLink(s7,host19)
-		self.addLink(s7,host20)
-		self.addLink(s7,host21)
-		self.addLink(s7,host22)
-		self.addLink(s7,host23)
-		self.addLink(s7,host24)
+        self.addLink(s7,host17)
+        self.addLink(s7,host18)
+        self.addLink(s7,host19)
+        self.addLink(s7,host20)
+        self.addLink(s7,host21)
+        self.addLink(s7,host22)
+        self.addLink(s7,host23)
+        self.addLink(s7,host24)
 
-		self.addLink(s1,s2)
-                self.addLink(s1,s3)
-		self.addLink(s1,s4)
-		self.addLink(s1,s5)
-		self.addLink(s2,s3)
-		self.addLink(s2,s5)
-		self.addLink(s2,s6)
-		self.addLink(s3,s4)
-		self.addLink(s3,s6)
-		self.addLink(s4,s7)
-		topos = { 'mytopo': ( lambda: MyTopo() ) }
+        self.addLink(s1,s2)
+        self.addLink(s1,s3)
+        self.addLink(s1,s4)
+        self.addLink(s1,s5)
+        self.addLink(s2,s3)
+        self.addLink(s2,s5)
+        self.addLink(s2,s6)
+        self.addLink(s3,s4)
+        self.addLink(s3,s6)
+        self.addLink(s4,s7)
+        topos = { 'mytopo': ( lambda: MyTopo() ) }
 
 # HERE THE CODE DEFINITION OF THE TOPOLOGY ENDS