home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / dist-packages / checkbox / report.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  5.4 KB  |  155 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. from xml.dom.minidom import Document, Element, parseString
  5.  
  6. class ReportManager(object):
  7.     '''The central point for dumping and loading information.
  8.  
  9.     This keeps references to all reports which have been added to the
  10.     instance of this manager. These reports will be able to register
  11.     handlers to understand the formats for dumping and loading actions.
  12.     '''
  13.     
  14.     def __init__(self, name, version = None, stylesheet = None):
  15.         self.name = name
  16.         self.version = version
  17.         self.stylesheet = stylesheet
  18.         self.dumps_table = { }
  19.         self.loads_table = { }
  20.         self.document = None
  21.  
  22.     
  23.     def handle_dumps(self, type, handler):
  24.         '''
  25.         Call back method for reports to register dump handlers.
  26.         '''
  27.         if type in self.dumps_table:
  28.             raise Exception, 'Dumps type already handled: %s' % type
  29.         type in self.dumps_table
  30.         self.dumps_table[type] = handler
  31.  
  32.     
  33.     def handle_loads(self, type, handler):
  34.         '''
  35.         Call back method for reports to register load handlers.
  36.         '''
  37.         if type in self.loads_table:
  38.             raise Exception, 'Loads type already handled: %s' % type
  39.         type in self.loads_table
  40.         self.loads_table[type] = handler
  41.  
  42.     
  43.     def call_dumps(self, obj, node):
  44.         '''
  45.         Convenience method for reports to call the dump handler
  46.         corresponding to the type of the given object.
  47.         '''
  48.         return self.dumps_table[type(obj)](obj, node)
  49.  
  50.     
  51.     def call_loads(self, node):
  52.         '''
  53.         Convenience method for reports to call the load handler
  54.         corresponding to the content of the given node.
  55.         '''
  56.         if self.loads_table.has_key(node.localName):
  57.             ret = self.loads_table[node.localName](node)
  58.         elif isinstance(node, Element) and node.hasAttribute('type'):
  59.             type = node.getAttribute('type')
  60.             ret = self.loads_table[type](node)
  61.         else:
  62.             ret = self.loads_table['default'](node)
  63.         return ret
  64.  
  65.     
  66.     def add(self, report):
  67.         '''
  68.         Add a new report to the manager.
  69.         '''
  70.         report.register(self)
  71.  
  72.     
  73.     def dumps(self, obj):
  74.         '''
  75.         Dump the given object which may be a container of any objects
  76.         supported by the reports added to the manager.
  77.         '''
  78.         self.document = Document()
  79.         if self.stylesheet:
  80.             type = 'text/xsl'
  81.             href = 'file://%s' % self.stylesheet
  82.             style = self.document.createProcessingInstruction('xml-stylesheet', 'type="%s" href="%s"' % (type, href))
  83.             self.document.appendChild(style)
  84.         
  85.         node = self.document.createElement(self.name)
  86.         self.document.appendChild(node)
  87.         if self.version:
  88.             node.setAttribute('version', self.version)
  89.         
  90.         
  91.         try:
  92.             self.call_dumps(obj, node)
  93.         except KeyError:
  94.             e = None
  95.             raise ValueError, 'Unsupported type: %s' % e
  96.  
  97.         document = self.document
  98.         self.document = None
  99.         return document
  100.  
  101.     
  102.     def loads(self, str):
  103.         '''
  104.         Load the given string which may be a container of any nodes
  105.         supported by the reports added to the manager.
  106.         '''
  107.         document = parseString(str)
  108.         node = document.childNodes[0]
  109.         if not node.localName == self.name:
  110.             raise AssertionError
  111.         
  112.         try:
  113.             ret = self.call_loads(document)
  114.         except KeyError:
  115.             node.localName == self.name
  116.             e = node.localName == self.name
  117.             raise ValueError, 'Unsupported type: %s' % e
  118.         except:
  119.             node.localName == self.name
  120.  
  121.         return ret
  122.  
  123.  
  124.  
  125. class Report(object):
  126.     '''A convenience for writing reports.
  127.  
  128.     This provides a register method which will set the manager attribute
  129.     and optionally call the C{register_dumps} and C{register_loads}
  130.     methods.
  131.     '''
  132.     
  133.     def _create_element(self, name, parent):
  134.         element = self._manager.document.createElement(name)
  135.         parent.appendChild(element)
  136.         return element
  137.  
  138.     
  139.     def _create_text_node(self, text, parent):
  140.         text_node = self._manager.document.createTextNode(text)
  141.         parent.appendChild(text_node)
  142.         return text_node
  143.  
  144.     
  145.     def register(self, manager):
  146.         self._manager = manager
  147.         if hasattr(self, 'register_dumps'):
  148.             self.register_dumps()
  149.         
  150.         if hasattr(self, 'register_loads'):
  151.             self.register_loads()
  152.         
  153.  
  154.  
  155.