sbsv2/raptor/python/filter_interface.py
author lorewang
Wed, 01 Dec 2010 16:05:36 +0800
changeset 715 e0739b8406dd
parent 674 37ee82a83d43
permissions -rw-r--r--
Specify extenal tool with path
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
590
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
     1
#
674
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
     2
# Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
590
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
     3
# All rights reserved.
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
     4
# This component and the accompanying materials are made available
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
     5
# under the terms of the License "Eclipse Public License v1.0"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
     6
# which accompanies this distribution, and is available
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
     7
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
     8
#
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
     9
# Initial Contributors:
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    10
# Nokia Corporation - initial contribution.
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    11
#
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    12
# Contributors:
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    13
#
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    14
# Description: 
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    15
# Base Class for defining filter classes
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    16
# All filter classes that get defined should derive from this base class
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    17
#
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    18
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    19
class Filter(object):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    20
	
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    21
	def open(self, params):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    22
		return False
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    23
	
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    24
	def write(self, text):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    25
		return False
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    26
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    27
	def summary(self):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    28
		return False
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    29
	
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    30
	def close(self):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    31
		return False
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    32
	
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    33
	def formatError(self, message):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    34
		return "sbs: error: " + message + "\n"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    35
		
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    36
	def formatWarning(self, message):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    37
		return "sbs: warning: " + message + "\n"	
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    38
674
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    39
	def parseNamedParams(self, names, params):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    40
		''' Match named parameters e.g. ['a=b','c=d'] against a list of expected
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    41
		names.  Allow for abbreviations.
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    42
		'''
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    43
		r = {}
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    44
		
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    45
		# Shorten all the names so they match abbreviations
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    46
		shortnames = []
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    47
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    48
		for name in names:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    49
			shortname = ""
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    50
			conflict = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    51
			while len(shortname)<len(name) and conflict:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    52
				shortname+=name[len(shortname)]
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    53
				conflict = False
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    54
				othernames = names[:] # Copy
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    55
				othernames.remove(name)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    56
				for othername in othernames:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    57
					if othername.startswith(shortname):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    58
						conflict = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    59
						break
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    60
				if conflict == False:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    61
					shortnames.append((shortname,name))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    62
					r[name] = [] # Prime the hash key for this param
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    63
			if conflict:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    64
				raise KeyError("Parameter name '{0}' duplicated".format(name))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    65
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    66
		# Parse the params
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    67
		for param in params:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    68
			if '=' in param:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    69
				(key,value) = param.split('=')
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    70
				matched = False
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    71
				for (shortname, name) in shortnames:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    72
					if key.strip().startswith(shortname):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    73
						r[name].append(value.strip())
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    74
						matched = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    75
						break
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    76
				if not matched:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    77
					raise ValueError("Named parameter '{0}' not valid in filter {1}".format(key,self.__class__.__name__))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    78
			else:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    79
				# Unnamed arg
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    80
				if not '' in names:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    81
					raise ValueError("All parameters to the {0} filter must be named".format(self.__class__.__name__))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    82
				else:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    83
					r[''].append(param.strip())
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    84
		return r	
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
    85
			
590
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    86
import sys
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    87
import xml.sax
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    88
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    89
class FilterSAX(Filter, xml.sax.handler.ContentHandler, xml.sax.handler.ErrorHandler):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    90
	"base class for filters using a SAX parser"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    91
	
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    92
	# define these methods in your subclass
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    93
	
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    94
	def startDocument(self):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    95
		"called once before any elements are seen"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    96
		pass
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    97
		
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    98
	def startElement(self, name, attributes):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
    99
		"called on the opening of any element"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   100
		pass
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   101
	
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   102
	def characters(self, char):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   103
		"called one or more times with body text from an element"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   104
		pass
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   105
		
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   106
	def endElement(self, name):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   107
		"called on the closing of any element"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   108
		pass
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   109
	
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   110
	def endDocument(self):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   111
		"called once when all elements are closed"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   112
		pass
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   113
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   114
	def error(self, exception):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   115
		"the parse found an error which is (possibly) recoverable"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   116
		pass
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   117
		
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   118
	def fatalError(self, exception):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   119
		"the parser thinks an error occurred which should stop everything"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   120
		pass
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   121
		
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   122
	def warning(self, exception):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   123
		"the parser found something to complain about that might not matter"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   124
		pass
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   125
		
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   126
	# these methods are from the Filter base class
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   127
	
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   128
	def open(self, params):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   129
		"initialise"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   130
		
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   131
		self.params = params
674
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   132
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   133
		self.parser = xml.sax.make_parser(['xml.sax.expatreader'])
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   134
		self.parser.setContentHandler(self)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   135
		self.parser.setErrorHandler(self)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   136
		
590
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   137
		self.ok = True
674
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   138
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   139
		return self.ok
590
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   140
			
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   141
	def write(self, text):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   142
		"process some log text"
674
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   143
		if self.ok:
590
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   144
			self.parser.feed(text)
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   145
		return self.ok
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   146
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   147
	def close(self):
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   148
		"finish off"
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   149
		try:
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   150
			self.parser.close()
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   151
		except Exception, ex:
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   152
			sys.stderr.write(self.formatError(str(ex)))
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   153
			self.ok = False
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   154
			
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   155
		return self.ok
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   156
	
674
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   157
class RaptorLogNotValid(Exception):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   158
	pass
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   159
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   160
class PerRecipeFilter(FilterSAX):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   161
	# Define this in your class
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   162
	def handleRecipe(self):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   163
		# These variables are available to you:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   164
		# self.name
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   165
		# self.target
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   166
		# self.host
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   167
		# self.layer
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   168
		# self.component
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   169
		# self.bldinf
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   170
		# self.mmp
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   171
		# self.config
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   172
		# self.platform
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   173
		# self.phase
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   174
		# self.source
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   175
		# self.prereqs
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   176
		# self.text
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   177
		# self.exit
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   178
		# self.attempt (final attempt number)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   179
		# self.flags
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   180
		# self.start
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   181
		# self.elapsed
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   182
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   183
		return False
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   184
	
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   185
	# Helper functions
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   186
	def formatData(self, key, hash='self'):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   187
		'''Output prettifier - return the attribute value, or just return 'undef' if the attribute is not set.'''
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   188
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   189
		if hash=='self':
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   190
			hash=self.__dict__
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   191
		if hash.has_key(key):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   192
			return hash[key]
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   193
		else:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   194
			return 'undef'
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   195
	
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   196
	# data keys
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   197
	recipeData = set(['name','target','host','layer','component','bldinf','mmp','config','platform','phase','source','prereqs'])
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   198
	statusData = set(['exit','attempt','flags'])
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   199
	timeData = set(['start','elapsed'])
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   200
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   201
	# methods from the SAX parser
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   202
	def startDocument(self):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   203
		self.inRecipe = False
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   204
		self.text = ""
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   205
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   206
	def startElement(self, name, attributes):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   207
		if name == "recipe":
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   208
			if self.inRecipe:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   209
				self.error(RaptorLogNotValid("Nested recipes; {0} recipe for {1} inside {2} recipe for {3}".format(self.formatData('name', hash=attributes), self.formatData('target',hash=attributes), self.formatData('name'), self.formatData('target') )))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   210
			else:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   211
				self.inRecipe = True
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   212
				self.__setHashElements(attributes, self.__dict__, self.recipeData )		
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   213
		elif self.inRecipe:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   214
			if name == "status":
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   215
				self.__setHashElements(attributes, self.__dict__, self.statusData)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   216
			elif name == "time":
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   217
				self.__setHashElements(attributes, self.__dict__, self.timeData)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   218
			else:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   219
				self.error(RaptorLogNotValid("Unexpected <{0}> tag in {1} recipe for {2}".format(name, self.formatData('name'), self.formatData('target'))))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   220
	
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   221
	def endElement(self, name):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   222
		if name == "recipe":
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   223
			if not self.inRecipe:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   224
				self.error(RaptorLogNotValid("Extra recipe close tag"))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   225
			else:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   226
				if not self.handleRecipe():
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   227
					self.error(RaptorLogNotValid('Handling of {0} recipe for {1} failed'.format(self.formatData('name'), self.formatData('target'))))
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   228
				self.inRecipe = False
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   229
				
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   230
				self.__delData(self.recipeData|self.statusData|self.timeData)
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   231
				self.text=""
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   232
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   233
	def characters(self, char):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   234
		if self.inRecipe:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   235
			self.text += char
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   236
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   237
	def error(self, exception):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   238
		"the parse found an error which is (possibly) recoverable"
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   239
		pass
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   240
		
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   241
	def fatalError(self, exception):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   242
		"the parser thinks an error occurred which should stop everything"
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   243
		pass
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   244
		
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   245
	def warning(self, exception):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   246
		"the parser found something to complain about that might not matter"
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   247
		pass
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   248
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   249
	# Private methods
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   250
	def __setHashElements(self, fro, to, keys):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   251
		for key in keys:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   252
			if fro.has_key(key):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   253
				to[key] = fro[key]
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   254
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   255
	def __delData(self, keys):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   256
		for key in keys:
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   257
			if self.__dict__.has_key(key):
37ee82a83d43 sbs version 2.15.3
Jon Chatten
parents: 590
diff changeset
   258
				del self.__dict__[key]
590
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   259
360bd6b35136 buildrom v3.24.0, rombuild v2.17.3, rofsbuild v2.10.4, resource compiler v8.4.001, image check v1.4.0, elftools v2.3, elf2e32 v2.3
jjkang
parents: 0
diff changeset
   260
# the end