Diff for /MPIWGWeb/Attic/updatePersonalWWW.py between versions 1.1.2.11 and 1.1.2.12

version 1.1.2.11, 2012/01/09 07:33:31 version 1.1.2.12, 2012/01/10 12:37:03
Line 5  import logging Line 5  import logging
 from MPIWGHelper import unicodify, utf8ify  from MPIWGHelper import unicodify, utf8ify
   
 from xml import sax  from xml import sax
 from amara import saxtools  from xml.sax.handler import ContentHandler
   #from amara import saxtools
   
 # namespace for FileMaker8  # namespace for FileMaker8
 fm_ns = 'http://www.filemaker.com/fmpxmlresult'  fm_ns = 'http://www.filemaker.com/fmpxmlresult'
Line 40  def SimpleSearch(curs,query, args=None): Line 41  def SimpleSearch(curs,query, args=None):
     except:      except:
         return None          return None
           
 class xml_handler:  class xml_handler(ContentHandler):
           
     def __init__(self):      def __init__(self):
         '''          '''
Line 52  class xml_handler: Line 53  class xml_handler:
         # set up parser          # set up parser
         self.result={}          self.result={}
         self.event = None          self.event = None
         self.top_dispatcher = {   #        self.top_dispatcher = { 
             (saxtools.START_ELEMENT, fm_ns, u'METADATA'):   #            (saxtools.START_ELEMENT, fm_ns, u'METADATA'): 
             self.handle_meta_fields,  #            self.handle_meta_fields,
             (saxtools.START_ELEMENT, fm_ns, u'RESULTSET'):   #            (saxtools.START_ELEMENT, fm_ns, u'RESULTSET'): 
             self.handle_data,  #            self.handle_data,
             }  #            }
                   
         # connect database          # connect database
               
Line 67  class xml_handler: Line 68  class xml_handler:
         self.dbIDs = {}          self.dbIDs = {}
         self.rowcnt = 0          self.rowcnt = 0
                             
            self.currentName=None
               
         self.newDataset = []          self.newDataset = []
         self.conflicts = []          self.conflicts = []
         self.ok = []          self.ok = []
         self.fieldNames=[]          self.fieldNames=[]
           self.currentRow={}
           self.currentTag=""
         return          return
   
     def handle_meta_fields(self, end_condition):      def startElement(self, name, attrs):
         dispatcher = {          logging.debug(name)
             (saxtools.START_ELEMENT, fm_ns, u'FIELD'):          if (name.lower() == "field") :
             self.handle_meta_field,              self.handle_meta_fields(attrs)
             }          if (name.lower() == "row") :
         #First round through the generator corresponds to the              logging.debug("handleROW")
         #start element event              self.currentRow={} # new Row
         logging.debug("START METADATA")              self.currentData=0
         yield None  
           
         #delegate is a generator that handles all the events "within"  
         #this element  
         delegate = None  
         while not self.event == end_condition:  
             delegate = saxtools.tenorsax.event_loop_body(  
                 dispatcher, delegate, self.event)  
             yield None  
                   
         #Element closed. Wrap up          if (name.lower()=="data"):
         logging.debug("END METADATA")  
             
         self.update_fields = self.fieldNames              self.currentName=self.fieldNames[self.currentData]
               self.currentData+=1
               self.currentTag="data"
                   
         logging.debug("xml-fieldnames:"+repr(self.fieldNames))      def endElement(self,name):
         # get list of fields in db table          if (name.lower() == "data") :
               self.currentTag=""
           if (name.lower() == "row"):
               self.handle_end_row()
             
         #print "upQ: ", self.updQuery      def characters(self,content):
         #print "adQ: ", self.addQuery  
                                                   
         return          if self.currentName is not None:
               logging.debug(self.currentName+"    "+content)
               self.currentRow[self.currentName]=content;
   
     def handle_meta_field(self, end_condition):  
         name = self.params.get((None, u'NAME'))  
         yield None  
         #Element closed.  Wrap up  
         name=name.replace(" ","_")# make sure no spaces  
         self.fieldNames.append(name)  
         logging.debug("FIELD name: "+name)  
         return  
   
     def handle_data(self, end_condition):      def handle_end_row(self):
         dispatcher = {  
             (saxtools.START_ELEMENT, fm_ns, u'ROW'):  
             self.handle_row,  
             }  
         #First round through the generator corresponds to the  
         #start element event  
         logging.debug("START RESULTSET")  
         self.rowcnt = 0  
         yield None  
           
         #delegate is a generator that handles all the events "within"          logging.debug("edd ROW")
         #this element  
         delegate = None  
         while not self.event == end_condition:  
             delegate = saxtools.tenorsax.event_loop_body(  
                 dispatcher, delegate, self.event)  
             yield None  
                   
         #Element closed.  Wrap up          if self.result.has_key(self.currentRow['key']):
         logging.debug("END RESULTSET")               logging.error("Key %s not unique"%self.currentRow['key'])
               
           if self.currentName is not None:
               self.result[self.currentRow['key']]=self.currentRow.copy()
   #      
   #       
   #        return
                   
       def handle_meta_fields(self,attrs):
       
         return          #First round through the generator corresponds to the
           #start element event
     def handle_row(self, end_condition):          logging.debug("START -FIELD")
         dispatcher = {          name = attrs.get('NAME')
             (saxtools.START_ELEMENT, fm_ns, u'COL'):          name=name.replace(" ","_")# make sure no spaces
             self.handle_col,          self.fieldNames.append(name)
             }  
         logging.debug("START ROW")  
         self.dataSet = {}  
         self.colIdx = 0  
         yield None  
       
         #delegate is a generator that handles all the events "within"  
         #this element  
         delegate = None  
         while not self.event == end_condition:  
             delegate = saxtools.tenorsax.event_loop_body(  
                 dispatcher, delegate, self.event)  
             yield None  
           
         #Element closed.  Wrap up  
         logging.debug("END ROW")  
         self.rowcnt += 1  
         # process collected row data  
         update=False  
         id_val=''  
           
         if self.result.has_key(self.dataSet['key']):  
             logging.error("Key %s not unique"%self.dataSet['key'])  
                   
         self.result[self.dataSet['key']]=self.dataSet          self.update_fields = self.fieldNames
               
           logging.debug("xml-fieldnames:"+repr(self.fieldNames))
           # get list of fields in db table
                 
         return          #print "upQ: ", self.updQuery
           #print "adQ: ", self.addQuery
   
     def handle_col(self, end_condition):  
         dispatcher = {  
             (saxtools.START_ELEMENT, fm_ns, u'DATA'):  
             self.handle_data_tag,  
             }  
         #print "START COL"  
         yield None  
         #delegate is a generator that handles all the events "within"  
         #this element  
         delegate = None  
         while not self.event == end_condition:  
             delegate = saxtools.tenorsax.event_loop_body(  
                 dispatcher, delegate, self.event)  
             yield None  
         #Element closed.  Wrap up  
         #print "END COL"  
         self.colIdx += 1  
         return          return
   
     def handle_data_tag(self, end_condition):  #    def handle_meta_field(self, end_condition):
         #print "START DATA"  #        name = self.params.get((None, u'NAME'))
         content = u''  #        yield None
         yield None  #        #Element closed.  Wrap up
         # gather child elements  #        name=name.replace(" ","_")# make sure no spaces
         while not self.event == end_condition:  #        self.fieldNames.append(name)
             if self.event[0] == saxtools.CHARACTER_DATA:  #        logging.debug("FIELD name: "+name)
                 content += self.params  #        return
             yield None  
         #Element closed.  Wrap up  #    def handle_data(self, end_condition):
         field = self.fieldNames[self.colIdx]  #        dispatcher = {
         self.dataSet[field.lower()] = content  #            (saxtools.START_ELEMENT, fm_ns, u'ROW'):
         #print "  DATA(", field, ") ", repr(content)  #            self.handle_row,
         return  #            }
   #        #First round through the generator corresponds to the
   #        #start element event
   #        logging.debug("START RESULTSET")
   #        self.rowcnt = 0
   #        yield None
   #    
   #        #delegate is a generator that handles all the events "within"
   #        #this element
   #        delegate = None
   #        while not self.event == end_condition:
   #            delegate = saxtools.tenorsax.event_loop_body(
   #                dispatcher, delegate, self.event)
   #            yield None
   #        
   #        #Element closed.  Wrap up
   #        logging.debug("END RESULTSET")
   #      
   #        
   #  
   #        return
   
   #    def handle_row(self, end_condition):
   #        dispatcher = {
   #            (saxtools.START_ELEMENT, fm_ns, u'COL'):
   #            self.handle_col,
   #            }
   #        logging.debug("START ROW")
   #        self.dataSet = {}
   #        self.colIdx = 0
   #        yield None
   #    
   #        #delegate is a generator that handles all the events "within"
   #        #this element
   #        delegate = None
   #        while not self.event == end_condition:
   #            delegate = saxtools.tenorsax.event_loop_body(
   #                dispatcher, delegate, self.event)
   #            yield None
   #        
   #        #Element closed.  Wrap up
   #        logging.debug("END ROW")
   #        self.rowcnt += 1
   #        # process collected row data
   #        update=False
   #        id_val=''
   #        
   #        if self.result.has_key(self.dataSet['key']):
   #            logging.error("Key %s not unique"%self.dataSet['key'])
   #        
   #        self.result[self.dataSet['key']]=self.dataSet
   #      
   #       
   #        return
   
   #    def handle_col(self, end_condition):
   #        dispatcher = {
   #            (saxtools.START_ELEMENT, fm_ns, u'DATA'):
   #            self.handle_data_tag,
   #            }
   #        #print "START COL"
   #        yield None
   #        #delegate is a generator that handles all the events "within"
   #        #this element
   #        delegate = None
   #        while not self.event == end_condition:
   #            delegate = saxtools.tenorsax.event_loop_body(
   #                dispatcher, delegate, self.event)
   #            yield None
   #        #Element closed.  Wrap up
   #        #print "END COL"
   #        self.colIdx += 1
   #        return
   #
   #    def handle_data_tag(self, end_condition):
   #        #print "START DATA"
   #        content = u''
   #        yield None
   #        # gather child elements
   #        while not self.event == end_condition:
   #            if self.event[0] == saxtools.CHARACTER_DATA:
   #                content += self.params
   #            yield None
   #        #Element closed.  Wrap up
   #        field = self.fieldNames[self.colIdx]
   #        self.dataSet[field.lower()] = content
   #        #print "  DATA(", field, ") ", repr(content)
   #        return
   
   
 def checkImport(dsn,resultSet):  def checkImport(dsn,resultSet):
Line 255  def importFMPXML(filename): Line 288  def importFMPXML(filename):
     #The "consumer" is our own handler      #The "consumer" is our own handler
     consumer = xml_handler()      consumer = xml_handler()
     #Initialize Tenorsax with handler      #Initialize Tenorsax with handler
     handler = saxtools.tenorsax(consumer)      #handler = saxtools.tenorsax(consumer)
     #Resulting tenorsax instance is the SAX handler       #Resulting tenorsax instance is the SAX handler 
     parser.setContentHandler(handler)      parser.setContentHandler(consumer)
     parser.setFeature(sax.handler.feature_namespaces, 1)      #parser.setFeature(sax.handler.feature_namespaces, 1)
     parser.parse(filename)        parser.parse(filename)  
     resultSet=consumer.result # xml now transformed into an dictionary      resultSet=consumer.result # xml now transformed into an dictionary
           
Line 320  if __name__ == "__main__": Line 353  if __name__ == "__main__":
                         datefmt='%H:%M:%S')                          datefmt='%H:%M:%S')
           
     resultSet=importFMPXML(filename="/Users/dwinter/Desktop/personalwww.xml")      resultSet=importFMPXML(filename="/Users/dwinter/Desktop/personalwww.xml")
     news,conflicts=checkImport(dsn="dbname=personalwww host=xserve02a user=mysql password=e1nste1n", resultSet=resultSet)      news,conflicts=checkImport(dsn="dbname=personalwww user=www password=e1nste1n", resultSet=resultSet)
           
           
     print "new"      print "new"

Removed from v.1.1.2.11  
changed lines
  Added in v.1.1.2.12


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>