buildframework/helium/sf/python/pythoncore/lib/atsant.py
changeset 587 85df38eb4012
child 588 c7c26511138f
child 618 df88fead2976
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/buildframework/helium/sf/python/pythoncore/lib/atsant.py	Tue Apr 27 08:33:08 2010 +0300
@@ -0,0 +1,133 @@
+# -*- encoding: latin-1 -*-
+
+#============================================================================ 
+#Name        : atsant.py 
+#Part of     : Helium 
+
+#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+#All rights reserved.
+#This component and the accompanying materials are made available
+#under the terms of the License "Eclipse Public License v1.0"
+#which accompanies this distribution, and is available
+#at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+#Initial Contributors:
+#Nokia Corporation - initial contribution.
+#
+#Contributors:
+#
+#Description:
+#===============================================================================
+
+""" get the files needed to test ATS"""
+
+import re
+import sysdef.api
+import os
+import logging
+import configuration
+
+_logger = logging.getLogger('atsant')
+
+class IConfigATS(object):
+    """ Class used to read configuration file iconfig.xml """
+    def __init__(self, imagesdir):
+        self.imagesdir = imagesdir
+        self.config = self.getconfig()
+        
+    def getconfig(self, type=None):
+        """get configuration"""
+        noncust = None
+        for root, _, files in os.walk(self.imagesdir, topdown=False):
+            for fname in files:
+                if 'iconfig.xml' in fname:
+                    filePath = os.path.join(root, fname)
+                    configBuilder = configuration.NestedConfigurationBuilder(open(filePath, 'r'))
+                    configSet = configBuilder.getConfiguration()
+                    for config in configSet.getConfigurations():
+                        if type:
+                            if type in config.type:
+                                return config
+                        else:
+                            noncust = config
+        if type:
+            return None
+        if noncust:
+            return noncust
+        raise Exception('iconfig not found in ' + self.imagesdir)
+    
+    def getimage(self, name):
+        """get image"""
+        for root, _, files in os.walk(self.imagesdir, topdown=False):
+            for fname in files:
+                if fname.lower() == name.lower():
+                    return os.path.join(root, fname)
+        raise Exception(name + ' not found in ' + self.imagesdir)
+    
+    def findimages(self): 
+        """find images"""
+        output = ''
+        for imagetype, imagetypename in [('core', 'CORE'), ('langpack', 'ROFS2'), ('cust', 'ROFS3'), ('udaerase', 'UDAERASE')]:
+            iconfigxml = self.getconfig(imagetype)
+            if iconfigxml == None:
+                iconfigxml = self.config
+
+            if iconfigxml.has_key(imagetypename + '_FLASH'):
+                (drive, _) = os.path.splitdrive(self.imagesdir)
+                image = os.path.join(drive, iconfigxml[imagetypename + '_FLASH'])
+                if not os.path.exists(image):
+                    image = self.getimage(os.path.basename(image))
+                if os.path.exists(image):
+                    output = output + image + ','
+                else:
+                    raise Exception(image + ' not found')
+            else:
+                if imagetype == 'core':
+                    raise Exception(imagetypename + '_FLASH not found in iconfig.xml')
+                print imagetypename + '_FLASH not found in iconfig.xml'
+        return output
+
+def files_to_test(canonicalsysdeffile, excludetestlayers, idobuildfilter, builddrive):
+    """list the files to test"""
+    sdf = sysdef.api.SystemDefinition(canonicalsysdeffile)
+
+    modules = {}
+    for layr in sdf.layers:
+        if re.match(r".*_test_layer$", layr):
+# pylint: disable-msg=W0704
+            try:
+                if re.search(r"\b%s\b" % layr, excludetestlayers):
+                    continue
+            except TypeError:       #needed to catch exceptions and not have them printed
+                pass
+# pylint: enable-msg=W0704
+
+            layer = sdf.layers[layr]
+            for mod in layer.modules:
+                if mod.name not in modules:
+                    modules[mod.name] = []
+                for unit in mod.units:
+                    include_unit = True
+                    if idobuildfilter != None:
+                        if idobuildfilter != "":
+                            include_unit = False
+                            if hasattr(unit, 'filters'):
+                                if len(unit.filters) > 0:
+                                    for afilter in unit.filters:
+                                        if re.search(r"\b%s\b" % afilter, idobuildfilter):
+                                            include_unit = True
+                                        else:
+                                            include_unit = False
+                                elif len(unit.filters) == 0:
+                                    include_unit = True
+                            else:
+                                include_unit = False
+                        else:
+                            include_unit = False
+                            if hasattr(unit, 'filters'):
+                                if len(unit.filters) == 0:
+                                    include_unit = True
+                    if include_unit:
+                        modules[mod.name].append(os.path.join(builddrive + os.sep, unit.path))
+
+    return modules