sbsv2/raptor/python/filter_interface.py
branchwip
changeset 5 593a8820b912
parent 3 e1eecf4d390d
child 9 b211d87c390a
equal deleted inserted replaced
3:e1eecf4d390d 5:593a8820b912
    16 # All filter classes that get defined should derive from this base class
    16 # All filter classes that get defined should derive from this base class
    17 #
    17 #
    18 
    18 
    19 class Filter(object):
    19 class Filter(object):
    20 	
    20 	
    21 	def open(self, raptor):
    21 	def open(self, params):
    22 		return False
    22 		return False
    23 	
    23 	
    24 	def write(self, text):
    24 	def write(self, text):
    25 		return False
    25 		return False
    26 
    26 
    30 	def close(self):
    30 	def close(self):
    31 		return False
    31 		return False
    32 	
    32 	
    33 	def formatError(self, message):
    33 	def formatError(self, message):
    34 		return "sbs: error: " + message + "\n"
    34 		return "sbs: error: " + message + "\n"
       
    35 		
       
    36 
       
    37 import sys
       
    38 import xml.sax
       
    39 
       
    40 class FilterSAX(Filter, xml.sax.handler.ContentHandler, xml.sax.handler.ErrorHandler):
       
    41 	"base class for filters using a SAX parser"
       
    42 	
       
    43 	# define these methods in your subclass
       
    44 	
       
    45 	def startDocument(self):
       
    46 		"called once before any elements are seen"
       
    47 		pass
       
    48 		
       
    49 	def startElement(self, name, attributes):
       
    50 		"called on the opening of any element"
       
    51 		pass
       
    52 	
       
    53 	def characters(self, char):
       
    54 		"called one or more times with body text from an element"
       
    55 		pass
       
    56 		
       
    57 	def endElement(self, name):
       
    58 		"called on the closing of any element"
       
    59 		pass
       
    60 	
       
    61 	def endDocument(self):
       
    62 		"called once when all elements are closed"
       
    63 		pass
       
    64 
       
    65 	def error(self, exception):
       
    66 		"the parse found an error which is (possibly) recoverable"
       
    67 		pass
       
    68 		
       
    69 	def fatalError(self, exception):
       
    70 		"the parser thinks an error occurred which should stop everything"
       
    71 		pass
       
    72 		
       
    73 	def warning(self, exception):
       
    74 		"the parser found something to complain about that might not matter"
       
    75 		pass
       
    76 		
       
    77 	# these methods are from the Filter base class
       
    78 	
       
    79 	def open(self, params):
       
    80 		"initialise"
       
    81 		
       
    82 		self.params = params
       
    83 		self.ok = True
       
    84 		try:
       
    85 			self.parser = xml.sax.make_parser(['xml.sax.expatreader'])
       
    86 			self.parser.setContentHandler(self)
       
    87 			self.parser.setErrorHandler(self)
       
    88 			
       
    89 		except Exception, ex:
       
    90 			sys.stderr.write(self.formatError(str(ex)))
       
    91 			self.ok = False
       
    92 		
       
    93 		return self.ok
       
    94 	
       
    95 		
       
    96 	def write(self, text):
       
    97 		"process some log text"
       
    98 		try:
       
    99 			self.parser.feed(text)
       
   100 		except Exception, ex:
       
   101 			sys.stderr.write(self.formatError(str(ex)))
       
   102 			self.ok = False
       
   103 				
       
   104 		return self.ok
       
   105 	
       
   106 
       
   107 	def close(self):
       
   108 		"finish off"
       
   109 		try:
       
   110 			self.parser.close()
       
   111 		except Exception, ex:
       
   112 			sys.stderr.write(self.formatError(str(ex)))
       
   113 			self.ok = False
       
   114 			
       
   115 		return self.ok
       
   116 	
       
   117 
       
   118 # the end