Diff for /ZSQLExtend/ZSQLExtend.py between versions 1.99 and 1.106

version 1.99, 2006/12/14 17:10:23 version 1.106, 2007/03/08 17:00:48
Line 14  from Products.ZSQLMethods.SQL import SQL Line 14  from Products.ZSQLMethods.SQL import SQL
 from xml.sax.saxutils import escape  from xml.sax.saxutils import escape
 from types import *  from types import *
 import Shared.DC.ZRDB.DA  import Shared.DC.ZRDB.DA
 import zLOG  import logging
 import os.path  import os.path
 import os  import os
 import copy  import copy
 import unicodedata  import unicodedata
   
   import logging
   
   #ersetzt logging
   def logger(txt,method,txt2):
       """logging"""
       logging.info(txt+ txt2)
   
   
 from OFS.SimpleItem import SimpleItem  from OFS.SimpleItem import SimpleItem
   
 def getTextFromNode(nodename):  def getTextFromNode(nodename):
Line 161  class ZSQLExtendFolder(Folder,Persistent Line 169  class ZSQLExtendFolder(Folder,Persistent
         #from xml.dom.minidom import parseString,parse          #from xml.dom.minidom import parseString,parse
                   
         from Ft.Xml import Parse          from Ft.Xml import Parse
         zLOG.LOG("import xsd",zLOG.INFO,"called")          logger("import xsd",logging.INFO,"called")
         #fh=file("/tmp/fmpxml.xml")          #fh=file("/tmp/fmpxml.xml")
         import bz2          import bz2
         import base64          import base64
Line 171  class ZSQLExtendFolder(Folder,Persistent Line 179  class ZSQLExtendFolder(Folder,Persistent
         if data:          if data:
           data=bz2.decompress(base64.decodestring(data))            data=bz2.decompress(base64.decodestring(data))
                   
           #zLOG.LOG("import xsd",zLOG.INFO,"received file")            #logger("import xsd",logging.INFO,"received file")
           doc=Parse(data)            doc=Parse(data)
           #zLOG.LOG("import xsd",zLOG.INFO,"parsed file")            #logger("import xsd",logging.INFO,"parsed file")
                   
         elif filename:          elif filename:
           fh=file(filename)            fh=file(filename)
           txt=fh.read()            txt=fh.read()
                       
           doc=Parse(txt)            doc=Parse(txt)
           #zLOG.LOG("import xsd",zLOG.INFO,"parsed file")            #logger("import xsd",logging.INFO,"parsed file")
                   
                   
         Nss={'xsd':'http://www.w3.org/2001/XMLSchema'}          Nss={'xsd':'http://www.w3.org/2001/XMLSchema'}
Line 199  class ZSQLExtendFolder(Folder,Persistent Line 207  class ZSQLExtendFolder(Folder,Persistent
         else:          else:
             create=False              create=False
                           
             zLOG.LOG("update xsd: fieldnames",zLOG.INFO,repr(fieldNames))                                     logger("update xsd: fieldnames",logging.INFO,repr(fieldNames))                       
             qstr="""select attname from pg_attribute, pg_class where attrelid = pg_class.oid and relname = '%s' """              qstr="""select attname from pg_attribute, pg_class where attrelid = pg_class.oid and relname = '%s' """
             columns=[x.attname for x in self.ZSQLSimpleSearch(qstr%table)]                          columns=[x.attname for x in self.ZSQLSimpleSearch(qstr%table)]            
                   
Line 214  class ZSQLExtendFolder(Folder,Persistent Line 222  class ZSQLExtendFolder(Folder,Persistent
         for fieldName in fieldNames:          for fieldName in fieldNames:
             if type(fieldName) is UnicodeType:              if type(fieldName) is UnicodeType:
                 fieldName=fieldName.encode('utf-8')                  fieldName=fieldName.encode('utf-8')
             zLOG.LOG("update xml: fieldname",zLOG.INFO,repr(fieldName))                                   logging.info("update xml: fieldname",logging.INFO,repr(fieldName))                     
             if fieldName.lower() not in columns:              if fieldName.lower() not in columns:
                                   
                 if create:# table does not exist therefore create with one column                  if create:# table does not exist therefore create with one column
Line 224  class ZSQLExtendFolder(Folder,Persistent Line 232  class ZSQLExtendFolder(Folder,Persistent
                     qstr="""alter table %s add %s %s"""                      qstr="""alter table %s add %s %s"""
                                   
                 self.ZSQLSimpleSearch(qstr%(table,fieldName,'text'))                  self.ZSQLSimpleSearch(qstr%(table,fieldName,'text'))
                 zLOG.LOG("update xsd: fieldname add",zLOG.INFO,qstr%(table,fieldName,'text'))                                         logger("update xsd: fieldname add",logging.INFO,qstr%(table,fieldName,'text'))                       
         
   
     def importXMLFileAccess(self,table,container,data=None,identify=None,filename=None,RESPONSE=None):      def importXMLFileAccess(self,table,container,data=None,identify=None,filename=None,RESPONSE=None):
Line 238  class ZSQLExtendFolder(Folder,Persistent Line 246  class ZSQLExtendFolder(Folder,Persistent
         '''          '''
         from xml.dom.pulldom import parseString,parse          from xml.dom.pulldom import parseString,parse
                   
         zLOG.LOG("import xml",zLOG.INFO,"called")          logger("import xml",logging.INFO,"called")
         #fh=file("/tmp/fmpxml.xml")          #fh=file("/tmp/fmpxml.xml")
         import bz2          import bz2
         import base64          import base64
Line 247  class ZSQLExtendFolder(Folder,Persistent Line 255  class ZSQLExtendFolder(Folder,Persistent
         if data:          if data:
           data=bz2.decompress(base64.decodestring(data))            data=bz2.decompress(base64.decodestring(data))
                   
           zLOG.LOG("import xml",zLOG.INFO,"received file")            logger("import xml",logging.INFO,"received file")
           doc=parseString(data)            doc=parseString(data)
           zLOG.LOG("import xml",zLOG.INFO,"parsed file")            logger("import xml",logging.INFO,"parsed file")
   
         elif filename:          elif filename:
           fh=file(filename)            fh=file(filename)
           doc=parse(fh)            doc=parse(fh)
           zLOG.LOG("import xml",zLOG.INFO,"parsed file")            logger("import xml",logging.INFO,"parsed file")
         while 1:          while 1:
             node=doc.getEvent()              node=doc.getEvent()
   
Line 277  class ZSQLExtendFolder(Folder,Persistent Line 285  class ZSQLExtendFolder(Folder,Persistent
                         field=dataSet[identify]                          field=dataSet[identify]
   
                         searchStr="""select %s from %s where %s = '%s'"""%(identify,table,identify,field)                          searchStr="""select %s from %s where %s = '%s'"""%(identify,table,identify,field)
                         zLOG.LOG("import xml",zLOG.INFO,searchStr)                          logger("import xml",logging.INFO,searchStr)
                         search=self.ZSQLSimpleSearch(searchStr)                          search=self.ZSQLSimpleSearch(searchStr)
                         if search:                          if search:
                             update=True                              update=True
Line 291  class ZSQLExtendFolder(Folder,Persistent Line 299  class ZSQLExtendFolder(Folder,Persistent
                         field=dataSet[identify]                          field=dataSet[identify]
                                       
                         queryStr="""UPDATE %s SET %s WHERE %s = '%s' """%(table,setStr,identify,field)                          queryStr="""UPDATE %s SET %s WHERE %s = '%s' """%(table,setStr,identify,field)
                         zLOG.LOG("update xml",zLOG.INFO,queryStr)                          logger("update xml",logging.INFO,queryStr)
                         self.ZSQLSimpleSearch(queryStr)                          self.ZSQLSimpleSearch(queryStr)
                         ret+="ud: %s \n"%field                          ret+="ud: %s \n"%field
                     else:                      else:
Line 303  class ZSQLExtendFolder(Folder,Persistent Line 311  class ZSQLExtendFolder(Folder,Persistent
                                                   
                         queryStr="""INSERT INTO %s  (%s) VALUES (%s)"""%(table,fields,values)                          queryStr="""INSERT INTO %s  (%s) VALUES (%s)"""%(table,fields,values)
                         self.ZSQLSimpleSearch(queryStr)                          self.ZSQLSimpleSearch(queryStr)
                         zLOG.LOG("update xml",zLOG.INFO,queryStr)                          logger("update xml",logging.INFO,queryStr)
                                                   
                                                   
                                                   
Line 344  class ZSQLExtendFolder(Folder,Persistent Line 352  class ZSQLExtendFolder(Folder,Persistent
                         field=dataSet[nr]                          field=dataSet[nr]
   
                         searchStr="""select %s from %s where %s = '%s'"""%(identify,table,identify,field)                          searchStr="""select %s from %s where %s = '%s'"""%(identify,table,identify,field)
                         zLOG.LOG("import xml",zLOG.INFO,searchStr)                          logger("import xml",logging.INFO,searchStr)
                         search=self.ZSQLSimpleSearch(searchStr)                          search=self.ZSQLSimpleSearch(searchStr)
                         if search:                          if search:
                             update=True                              update=True
Line 358  class ZSQLExtendFolder(Folder,Persistent Line 366  class ZSQLExtendFolder(Folder,Persistent
                         field=dataSet[nr]                          field=dataSet[nr]
                                       
                         queryStr="""UPDATE %s SET %s WHERE %s = '%s' """%(table,setStr,identify,field)                          queryStr="""UPDATE %s SET %s WHERE %s = '%s' """%(table,setStr,identify,field)
                         zLOG.LOG("update xml",zLOG.INFO,queryStr)                          logger("update xml",logging.INFO,queryStr)
                         self.ZSQLSimpleSearch(queryStr)                          self.ZSQLSimpleSearch(queryStr)
                         ret+="ud: %s \n"%field                          ret+="ud: %s \n"%field
                     else:                      else:
Line 370  class ZSQLExtendFolder(Folder,Persistent Line 378  class ZSQLExtendFolder(Folder,Persistent
                                                   
                         queryStr="""INSERT INTO %s  (%s) VALUES (%s)"""%(table,fields,values)                          queryStr="""INSERT INTO %s  (%s) VALUES (%s)"""%(table,fields,values)
                         self.ZSQLSimpleSearch(queryStr)                          self.ZSQLSimpleSearch(queryStr)
                         zLOG.LOG("update xml",zLOG.INFO,queryStr)                          logger("update xml",logging.INFO,queryStr)
                         ret+="ad: %s \n"%field                          ret+="ad: %s \n"%field
                                                   
                 elif node[1].nodeName=="METADATA":                  elif node[1].nodeName=="METADATA":
Line 382  class ZSQLExtendFolder(Folder,Persistent Line 390  class ZSQLExtendFolder(Folder,Persistent
                     for name in names:                      for name in names:
                         fieldNames.append(name.getAttribute('NAME'))                          fieldNames.append(name.getAttribute('NAME'))
                                           
                     zLOG.LOG("update xml: fieldnames",zLOG.INFO,repr(fieldNames))                                             logger("update xml: fieldnames",logging.INFO,repr(fieldNames))                       
                     qstr="""select attname from pg_attribute, pg_class where attrelid = pg_class.oid and relname = '%s' """                      qstr="""select attname from pg_attribute, pg_class where attrelid = pg_class.oid and relname = '%s' """
                     columns=[x.attname for x in self.ZSQLSimpleSearch(qstr%table)]                      columns=[x.attname for x in self.ZSQLSimpleSearch(qstr%table)]
                                     
                     for fieldName in fieldNames:                      for fieldName in fieldNames:
                         zLOG.LOG("update xml: fieldname",zLOG.INFO,repr(fieldName))                                               logger("update xml: fieldname",logging.INFO,repr(fieldName))                     
                         if fieldName not in columns:                          if fieldName not in columns:
                             qstr="""alter table %s add %s %s"""                              qstr="""alter table %s add %s %s"""
                             self.ZSQLSimpleSearch(qstr%(table,fieldName,'text'))                              self.ZSQLSimpleSearch(qstr%(table,fieldName,'text'))
                             zLOG.LOG("update xml: fieldname add",zLOG.INFO,qstr%(table,fieldName,'text'))                                                     logger("update xml: fieldname add",logging.INFO,qstr%(table,fieldName,'text'))                       
                 #fn=node[1].getAttribute("xml:id")                  #fn=node[1].getAttribute("xml:id")
                 #nf=file("xtf/"+fn+".xtf",'w')                  #nf=file("xtf/"+fn+".xtf",'w')
                 #nf.write("""<texts xmlns="http://emegir.info/xtf" xmlns:lem="http://emegir.info/lemma" >"""+node[1].toxml()+"</texts>")                  #nf.write("""<texts xmlns="http://emegir.info/xtf" xmlns:lem="http://emegir.info/lemma" >"""+node[1].toxml()+"</texts>")
Line 416  class ZSQLExtendFolder(Folder,Persistent Line 424  class ZSQLExtendFolder(Folder,Persistent
   
         if data:          if data:
             data=bz2.decompress(base64.decodestring(data))              data=bz2.decompress(base64.decodestring(data))
             zLOG.LOG("fmpxml",zLOG.INFO,"received file")              logger("fmpxml",logging.INFO,"received file")
             doc=parseString(data)              doc=parseString(data)
             zLOG.LOG("fmpxml",zLOG.INFO,"parsed file")              logger("fmpxml",logging.INFO,"parsed file")
   
         elif filename:          elif filename:
             fh=file(filename)              fh=file(filename)
             zLOG.LOG("fmpxml",zLOG.INFO,"reading file")              logger("fmpxml",logging.INFO,"reading file")
             doc=parse(fh)              doc=parse(fh)
             zLOG.LOG("fmpxml",zLOG.INFO,"parsed file")              logger("fmpxml",logging.INFO,"parsed file")
   
         dbIDs = {}          dbIDs = {}
         rowcnt = 0          rowcnt = 0
Line 437  class ZSQLExtendFolder(Folder,Persistent Line 445  class ZSQLExtendFolder(Folder,Persistent
                 dbIDs[id[0]] = 0;                  dbIDs[id[0]] = 0;
                 rowcnt += 1                  rowcnt += 1
                                   
             zLOG.LOG("fmpxml",zLOG.INFO,"%d entries in DB to sync"%rowcnt)              logger("fmpxml",logging.INFO,"%d entries in DB to sync"%rowcnt)
                   
         fieldNames = []          fieldNames = []
         rowcnt = 0          rowcnt = 0
Line 463  class ZSQLExtendFolder(Folder,Persistent Line 471  class ZSQLExtendFolder(Folder,Persistent
                     # update all fields                      # update all fields
                     update_fields = fieldNames                      update_fields = fieldNames
                                   
                 zLOG.LOG("fmpxml fieldnames:",zLOG.INFO,repr(fieldNames))                  logger("fmpxml fieldnames:",logging.INFO,repr(fieldNames))
                 # get list of fields in db table                  # get list of fields in db table
                 qstr="""select attname from pg_attribute, pg_class where attrelid = pg_class.oid and relname = '%s'"""                  qstr="""select attname from pg_attribute, pg_class where attrelid = pg_class.oid and relname = '%s'"""
                 columns=[x.attname for x in self.ZSQLSimpleSearch(qstr%table)]                  columns=[x.attname for x in self.ZSQLSimpleSearch(qstr%table)]
                                   
                 # adjust db table to fields in XML and fieldlist                  # adjust db table to fields in XML and fieldlist
                 for fieldName in fieldNames:                  for fieldName in fieldNames:
                     zLOG.LOG("fmpxml fieldname:",zLOG.INFO,repr(fieldName))                                           logger("fmpxml fieldname:",logging.INFO,repr(fieldName))                     
                     if (fieldName not in columns) and (fieldName in update_fields):                      if (fieldName not in columns) and (fieldName in update_fields):
                         qstr="""alter table %s add %s %s"""                          qstr="""alter table %s add %s %s"""
                         self.ZSQLSimpleSearch(qstr%(table,fieldName,'text'))                          self.ZSQLSimpleSearch(qstr%(table,fieldName,'text'))
                         zLOG.LOG("fmpxml add field:",zLOG.INFO,qstr%(table,fieldName,'text'))                          logger("fmpxml add field:",logging.INFO,qstr%(table,fieldName,'text'))
                                                   
             # ROW tags (in RESULTSET tag) hold data              # ROW tags (in RESULTSET tag) hold data
             elif node[1].nodeName == 'ROW':              elif node[1].nodeName == 'ROW':
Line 507  class ZSQLExtendFolder(Folder,Persistent Line 515  class ZSQLExtendFolder(Folder,Persistent
                     setStr=string.join(setvals, ',')                      setStr=string.join(setvals, ',')
                     id_val=dataSet[id_field]                      id_val=dataSet[id_field]
                     qstr="""UPDATE %s SET %s WHERE %s = '%s' """%(table,setStr,id_field,id_val)                      qstr="""UPDATE %s SET %s WHERE %s = '%s' """%(table,setStr,id_field,id_val)
                     #zLOG.LOG("fmpxml update:",zLOG.INFO,queryStr)                      #logger("fmpxml update:",logging.INFO,queryStr)
                     self.ZSQLSimpleSearch(qstr)                      self.ZSQLSimpleSearch(qstr)
                     ret+="up: %s \n"%id_val                      ret+="up: %s \n"%id_val
                 else:                  else:
Line 516  class ZSQLExtendFolder(Folder,Persistent Line 524  class ZSQLExtendFolder(Folder,Persistent
                     values=string.join([" %s "%self.ZSQLQuote(dataSet[x]) for x in update_fields], ',')                      values=string.join([" %s "%self.ZSQLQuote(dataSet[x]) for x in update_fields], ',')
                     qstr="""INSERT INTO %s (%s) VALUES (%s)"""%(table,fields,values)                      qstr="""INSERT INTO %s (%s) VALUES (%s)"""%(table,fields,values)
                     self.ZSQLSimpleSearch(qstr)                      self.ZSQLSimpleSearch(qstr)
                     #zLOG.LOG("fmpxml: insert",zLOG.INFO,queryStr)                      #logger("fmpxml: insert",logging.INFO,queryStr)
                     ret+="ad: %s \n"%dataSet.get(id_field, rowcnt)                      ret+="ad: %s \n"%dataSet.get(id_field, rowcnt)
   
                 #zLOG.LOG("fmpxml row:",zLOG.INFO,"%d (%s)"%(rowcnt,id_val))                  #logger("fmpxml row:",logging.INFO,"%d (%s)"%(rowcnt,id_val))
                 if (rowcnt % 10) == 0:                  if (rowcnt % 10) == 0:
                     zLOG.LOG("fmpxml row:",zLOG.INFO,"%d (%s)"%(rowcnt,id_val))                      logger("fmpxml row:",logging.INFO,"%d (%s)"%(rowcnt,id_val))
                     transaction.commit()                      transaction.commit()
   
         transaction.commit()          transaction.commit()
Line 530  class ZSQLExtendFolder(Folder,Persistent Line 538  class ZSQLExtendFolder(Folder,Persistent
             for id in dbIDs.keys():              for id in dbIDs.keys():
                 # find all not-updated fields                  # find all not-updated fields
                 if dbIDs[id] == 0:                  if dbIDs[id] == 0:
                     zLOG.LOG("fmpxml delete:",zLOG.INFO,id)                      logger("fmpxml delete:",logging.INFO,id)
                     qstr = "DELETE FROM %s WHERE %s = '%s'"                      qstr = "DELETE FROM %s WHERE %s = '%s'"
                     self.ZSQLSimpleSearch(qstr%(table,id_field,id))                      self.ZSQLSimpleSearch(qstr%(table,id_field,id))
                                           
                 elif dbIDs[id] > 1:                  elif dbIDs[id] > 1:
                     zLOG.LOG("fmpxml sync:",zLOG.INFO,"id used more than once?"+id)                      logger("fmpxml sync:",logging.INFO,"id used more than once?"+id)
                           
             transaction.commit()              transaction.commit()
                           
Line 709  class ZSQLExtendFolder(Folder,Persistent Line 717  class ZSQLExtendFolder(Folder,Persistent
         #print "field",field          #print "field",field
         if not field:          if not field:
             return 1              return 1
         if field=="":          if field.strip()=="":
             return 1              return 1
         return 0          return 0
   
Line 776  class ZSQLExtendFolder(Folder,Persistent Line 784  class ZSQLExtendFolder(Folder,Persistent
         ret+="""</select>"""          ret+="""</select>"""
         return ret          return ret
   
     def ZSQLOptionsFromSearchList(self,fieldname,results,fieldName,valueName=None,start=None, multiple='',startValue=None,additionalSelect="",size=None,linelen=None,selected=None):      def ZSQLOptionsFromSearchList(self,fieldname,
                                     results,fieldName,
                                     valueName=None,start=None, 
                                     multiple='',startValue=None,
                                     additionalSelect="",size=None,
                                     linelen=None,selected=None):
         """generate select options form a search list          """generate select options form a search list
         es wird          es wird
         <select name=fieldname mutiple>          <select name=fieldname mutiple>
Line 789  class ZSQLExtendFolder(Folder,Persistent Line 802  class ZSQLExtendFolder(Folder,Persistent
         @parameter fieldName: Name des Feldes, das als value in den option-tag geschrieben werden soll.          @parameter fieldName: Name des Feldes, das als value in den option-tag geschrieben werden soll.
         @parameter valueName: (optional) Name des Feldes, dass als im option-tag ausgegeben wird, default wert ist valueName=fieldName          @parameter valueName: (optional) Name des Feldes, dass als im option-tag ausgegeben wird, default wert ist valueName=fieldName
         @start: (optional) falls zusaetzliches option tag erzeugt werden soll, gibt start an was im option tag steht          @start: (optional) falls zusaetzliches option tag erzeugt werden soll, gibt start an was im option tag steht
         @startValue: gibt den entsprechenden Wert an.          @startValue (optional): gibt den entsprechenden Wert an.
           @selected (optional): Wert der ausgewaehlt sein soll.
           @linelen: (optional) maximale laenge eines Eintrages 
                       der im Klappmenue noch angezeigt wird, laengeres wird abgeschnitten.
           @addionalSaelect (optional): zusaetzlicher text fuer den select tag
         """          """
         if not valueName:          if not valueName:
             valueName=fieldName              valueName=fieldName
Line 807  class ZSQLExtendFolder(Folder,Persistent Line 824  class ZSQLExtendFolder(Folder,Persistent
                     startValue=start                      startValue=start
                                                           
             ret+="""<option value="%s" >%s</option>"""%(startValue,start)              ret+="""<option value="%s" >%s</option>"""%(startValue,start)
         
         for result in results:          for result in results:
             field=getattr(result,fieldName)              field=getattr(result,fieldName)
             fieldValue=getattr(result,valueName)              fieldValue=getattr(result,valueName)
             if fieldValue:  
   
                 if not linelen:              if linelen and fieldValue and (len(fieldValue) > string.atoi(linelen)):
                   displayValue = fieldValue[:string.atoi(linelen)]
               else: 
                   displayValue = fieldValue
   
                                           
                     if field == selected:                      if field == selected:
   
                         ret+="""<option value="%s" selected>%s</option>"""%(field,fieldValue)                  ret+="""<option value="%s" selected>%s</option>"""%(field,displayValue)
                     else:                      else:
                         ret+="""<option value="%s">%s</option>"""%(field,fieldValue)                  ret+="""<option value="%s">%s</option>"""%(field,displayValue)
   
                 else:  
                     mist = """%s"""%(fieldValue)  
                     if len(mist) > string.atoi(linelen):  
                         mist = mist[:string.atoi(linelen)]  
                     ret+="""<option value="%s">%s</option>"""%(field,mist)  
         ret+="""</select>"""          ret+="""</select>"""
         return ret          return ret
   
Line 899  class ZSQLExtendFolder(Folder,Persistent Line 914  class ZSQLExtendFolder(Folder,Persistent
         #print "INLINE:",argv          #print "INLINE:",argv
         for a in argTmp.keys():          for a in argTmp.keys():
         aFiltered=re.sub(r"^-","_",a) # beginning of a command should always be "_"          aFiltered=re.sub(r"^-","_",a) # beginning of a command should always be "_"
         qs.append(aFiltered+"="+urllib.quote(str(argTmp[a])))        
               if type(argTmp[a]) is ListType: # ein parameter zweimal
                       value=""
                       #TODO find a better solution, currently only the last non empty entry is used.
                       for x in argTmp[a]:
                           if x:
                               value=x
               else:
                   value=str(argTmp[a])
               qs.append(aFiltered+"="+urllib.quote(value))
                           
                                   
         #return []            #return []  
Line 919  class ZSQLExtendFolder(Folder,Persistent Line 943  class ZSQLExtendFolder(Folder,Persistent
         try:          try:
             self.getConnectionObj().manage_close_connection()              self.getConnectionObj().manage_close_connection()
         except:          except:
             zLOG.LOG("ZSQLResetConnection",zLOG.ERROR, '%s %s'%sys.exc_info()[:2])              logger("ZSQLResetConnection",logging.ERROR, '%s %s'%sys.exc_info()[:2])
         try:          try:
             self.getConnectionObj().manage_open_connection()              self.getConnectionObj().manage_open_connection()
         except:          except:
             zLOG.LOG("ZSQLResetConnection",zLOG.ERROR, '%s %s'%sys.exc_info()[:2])              logger("ZSQLResetConnection",logging.ERROR, '%s %s'%sys.exc_info()[:2])
   
     def ZSQLSimpleSearch(self,query=None,max_rows=1000000):      def ZSQLSimpleSearch(self,query=None,max_rows=1000000):
         """simple search"""          """simple search"""
Line 946  class ZSQLExtendFolder(Folder,Persistent Line 970  class ZSQLExtendFolder(Folder,Persistent
                     try:                      try:
                         self.getConnectionObj().manage_open_connection()                          self.getConnectionObj().manage_open_connection()
                     except:                      except:
                         zLOG.LOG("ZSQLSimpleSearch",zLOG.ERROR, '%s %s'%sys.exc_info()[:2])                          logger("ZSQLSimpleSearch",logging.ERROR, '%s %s'%sys.exc_info()[:2])
         else:          else:
             try:              try:
   
Line 959  class ZSQLExtendFolder(Folder,Persistent Line 983  class ZSQLExtendFolder(Folder,Persistent
                     try:                      try:
                         self.getConnectionObj().manage_open_connection()                          self.getConnectionObj().manage_open_connection()
                     except:                      except:
                         zLOG.LOG("ZSQLSimpleSearch",zLOG.ERROR, '%s %s'%sys.exc_info()[:2])                          logger("ZSQLSimpleSearch",logging.ERROR, '%s %s'%sys.exc_info()[:2])
   
     def getConnectionObj(self):      def getConnectionObj(self):
         if hasattr(self,'connection_id'):          if hasattr(self,'connection_id'):
Line 1047  class ZSQLExtendFolder(Folder,Persistent Line 1071  class ZSQLExtendFolder(Folder,Persistent
         else:          else:
             return True              return True
                   
     def ZSQLChange(self,format=None,RESPONSE=None,USE_FORM=None,**argv):      def ZSQLChange(self,format=None,RESPONSE=None,USE_FORM=None,args=None,**argv):
         """change entries"""          """change entries"""
         #qs=self.REQUEST['QUERY_STRING']          #qs=self.REQUEST['QUERY_STRING']
         # very bad hack          # very bad hack
Line 1059  class ZSQLExtendFolder(Folder,Persistent Line 1083  class ZSQLExtendFolder(Folder,Persistent
                 qs_temp.append(a+"="+urllib.quote(str(self.REQUEST.form[a])))                  qs_temp.append(a+"="+urllib.quote(str(self.REQUEST.form[a])))
   
                   
           if args:
               arg_tmp=args
           else:
               arg_tmp=argv
                   
         for field in argv.keys():          for field in arg_tmp.keys():
                                   
                    if field[0]=="_":                     if field[0]=="_":
                        fieldTmp="-"+field[1:]                         fieldTmp="-"+field[1:]
                    else:                     else:
                        fieldTmp=field                         fieldTmp=field
                                                 
                    qs_temp.append("%s=%s"%(fieldTmp,argv[field]))                     qs_temp.append("%s=%s"%(fieldTmp,arg_tmp[field]))
                   
                   
         changeList=[]          changeList=[]
                   logging.info("ZSQLChange qs_temp: %s"%repr(qs_temp))
         for q in qs_temp:          for q in qs_temp:
                 
             name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower()))              name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower()))
Line 1097  class ZSQLExtendFolder(Folder,Persistent Line 1125  class ZSQLExtendFolder(Folder,Persistent
         changeString=string.join(changeList,",")          changeString=string.join(changeList,",")
   
         queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify)          queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify)
         zLOG.LOG("ZSQLExtend",zLOG.INFO,"CHANGE: "+queryString)          logger("ZSQLExtend",logging.INFO,"CHANGE: "+queryString)
   
         self.ZSQLSimpleSearch(queryString)          self.ZSQLSimpleSearch(queryString)
                   
Line 1131  class ZSQLExtendFolder(Folder,Persistent Line 1159  class ZSQLExtendFolder(Folder,Persistent
           
               
           
     def ZSQLFind(self,qs="",select="oid,*",storename=None,tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None,**argv):      def ZSQLFind(self,qs="",select="oid,*",storename="foundCount",tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None,**argv):
         """search in database"""          """search in database"""
   
         def delEmpty(list):          def delEmpty(list):
Line 1183  class ZSQLExtendFolder(Folder,Persistent Line 1211  class ZSQLExtendFolder(Folder,Persistent
   
         qs=string.join(delEmpty(qs.split(",")),",")          qs=string.join(delEmpty(qs.split(",")),",")
   
         if storename:  
             """store"""  
         else:  
             storename="foundCount"  
   
         #store query for further usage          #store query for further usage
           #TODO: erste der beiden ist ueberfluessig
         self.REQUEST.SESSION['query']=qs          self.REQUEST.SESSION['query']=qs
           if not self.REQUEST.SESSION.has_key(storename):
                   self.REQUEST.SESSION[storename]={}
                   
           self.REQUEST.SESSION[storename]['qs']=qs
           
   
         #print "calling Query with",repr(NoQuery)          #print "calling Query with",repr(NoQuery)
         ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename,tableExt=tableExt,NoQuery=NoQuery,NoLimit=NoLimit,restrictField=restrictField,restrictConnect=restrictConnect,filter=filter)          ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename,tableExt=tableExt,NoQuery=NoQuery,NoLimit=NoLimit,restrictField=restrictField,restrictConnect=restrictConnect,filter=filter)
         #print self.REQUEST.SESSION["foundCount"]          #print self.REQUEST.SESSION["foundCount"]
                   
                   
   
         return ret          return ret
   
     def ZSQLFoundCountLen(self,var):      def ZSQLFoundCountLen(self,var):
         return len(var)          return len(var)
                           
     def ZSQLFoundCount(self,qs="",select="*",storename=None):      def ZSQLFoundCount(self,qs="",select="*",storename="foundCount"):
           
        ##  if qs=="":  
               
 ##             if self.REQUEST['QUERY_STRING']:  
               
 ##                 qs=self.REQUEST['QUERY_STRING']  
 ##                 qs=string.join(qs.split("&"),",")  
 ##             else:  
               
 ##                 qs=self.REQUEST.SESSION['query']  
 ##         else:  
 ##             qs=string.join(qs.split("&"),",")  
   
   
 ##         temp= self.parseQueryString(qs,"-",select=select,storemax="yes",nostore="yes")  
         if storename:  
             """store"""  
         else:  
             storename="foundCount"  
                   
         return self.REQUEST.SESSION[storename]['count']          return self.REQUEST.SESSION[storename]['count']
   
     def ZSQLRangeStart(self,storename=None):      def ZSQLRangeStart(self,storename="foundCount"):
           
         if storename:  
             """store"""  
         else:  
             storename="foundCount"  
                   
         return int(self.REQUEST.SESSION[storename]['rangeStart'])+1          return int(self.REQUEST.SESSION[storename]['rangeStart'])+1
           
     def ZSQLRangeSize(self,storename=None):      def ZSQLRangeSize(self,storename="foundCount"):
           
         if storename:  
             """store"""  
         else:  
             storename="foundCount"  
                           
         return self.REQUEST.SESSION[storename]['rangeSize']          return self.REQUEST.SESSION[storename]['rangeSize']
   
     def ZSQLRangeEnd(self,storename=None):      def ZSQLRangeEnd(self,storename="foundCount"):
           
         if storename:  
             """store"""  
         else:  
             storename="foundCount"  
                   
         return str(min(int(self.REQUEST.SESSION[storename]['rangeEnd']),int(self.REQUEST.SESSION[storename]['count'])))          return str(min(int(self.REQUEST.SESSION[storename]['rangeEnd']),int(self.REQUEST.SESSION[storename]['count'])))
   
     def ZSQLNewQuery(self,linkText,storename=None,**argv):      def ZSQLNewQuery(self,linkText,storename="foundCount",**argv):
         """suche neu"""          """suche neu"""
         return self.ZSQLNewSearch(linkText,storename,url=self.REQUEST['URL'],args=argv)          return self.ZSQLNewSearch(linkText,storename,url=self.REQUEST['URL'],args=argv)
           
     def ZSQLNewSearch(self,linkText,storename=None,url=None,args=None,**argv):      def ZSQLNewSearch(self,linkText,storename="foundCount",url=None,args=None,**argv):
         """suche mit alten parametern bis auf die in argv getauschten"""          """suche mit alten parametern bis auf die in argv getauschten"""
         str = self.ZSQLNewSearchURL(storename, url, args, **argv)          str = self.ZSQLNewSearchURL(storename, url, args, **argv)
         return """<a href="%s"> %s</a>"""%(str,linkText)          return """<a href="%s"> %s</a>"""%(str,linkText)
                   
   
     def ZSQLNewSearchURL(self, storename=None,url=None,args=None,**argv):      def ZSQLNewSearchURL(self, storename="foundCount",url=None,args=None,**argv):
         """suche mit alten parametern bis auf die in argv getauschten"""          """suche mit alten parametern bis auf die in argv getauschten"""
                   
         if storename:   
             """store"""    
         else:  
             storename="foundCount"  
         qs=self.REQUEST.SESSION[storename]['qs']  
   
         if args:          if args:
             argv=args              argv=args
                           
           #get the old queries
           qs=self.REQUEST.SESSION[storename]['qs']
         querys=qs.split(",")          querys=qs.split(",")
         argList=[]  
         arg=""  
         queryList=[x.split("=")[0] for x in querys]  
                   
         for argTmp in argv.keys():          #which arguments are in the old query string
           
           queryList={}
           for query in querys:
               arg=query.split("=")[0]
               if arg[0]=="_": arg="-"+arg[1:] # sicherstellen, dass an Anfang stets "_"
               queryList[arg]=query.split("=")[1]
                           
                           
             arg=argTmp[0:]          argList=[]
             if arg[0]=="_":arg="-"+argTmp[1:] # aender _ in - als standard          arg=""
   
             if arg not in queryList: # noch nicht drin  
                 querys.append("%s=%s"%(arg,argv[argTmp]))  
             argList.append(arg)  
   
   
           #gehe durch die zu aendernden Argumente
           for argTmp in argv.keys():
                   
         newquery=[]              arg=argTmp[0:]# sicherstellen, dass der string auh kopiert wird
         for query in querys:              if arg[0]=="_": arg="-"+arg[1:] # sicherstellen, dass an Anfang stets "_"            
             queryArg=query.split("=")[0]  
             qarg=queryArg[0:]  
             if qarg[0]=="-":qarg="_"+queryArg[1:] # aender _ in - als standard  
                           
             if  queryArg in argList:              queryList[arg]=argv[argTmp]
                 newquery.append("%s=%s"%(queryArg,argv[qarg]))  
             else:  
                 newquery.append(query)  
   
         if url:          if url:
             str=url+"?"+"&".join(newquery)              str=url+"?"+urllib.urlencode(queryList)
         else:          else:
             str="ZSQLSearch?"+"&".join(newquery)              str="ZSQLSearch?"+urllib.urlencode(queryList)
                   
         return str          return str
           
     def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename=None,tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None):      def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename="foundCount",tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None):
         """analysieren den QueryString"""          """analysieren den QueryString"""
                   
                   
Line 1332  class ZSQLExtendFolder(Folder,Persistent Line 1318  class ZSQLExtendFolder(Folder,Persistent
         searchFields={}          searchFields={}
         searchFieldsOnly={}          searchFieldsOnly={}
         queryTemplate=[]          queryTemplate=[]
           outerjoin=""
           debug=None
                   
         if not select:          if not select:
             select="oid,*"              select="oid,*"
Line 1350  class ZSQLExtendFolder(Folder,Persistent Line 1338  class ZSQLExtendFolder(Folder,Persistent
         for q in splitted:          for q in splitted:
                                   
                 name=re.sub("r'+'"," ",q.split("=")[0].lower())                  name=re.sub("r'+'"," ",q.split("=")[0].lower())
                   if name=="_debug":
                       debug=True
                       
                 try:                  try:
                     value=urllib.unquote(q.split("=",1)[1])                      value=urllib.unquote(q.split("=",1)[1])
                 except:                  except:
Line 1388  class ZSQLExtendFolder(Folder,Persistent Line 1379  class ZSQLExtendFolder(Folder,Persistent
                           
                       
             name=re.sub("r'+'"," ",q.split("=")[0].lower())              name=re.sub("r'+'"," ",q.split("=")[0].lower())
              
             try:              try:
                 value=urllib.unquote(q.split("=",1)[1])                  value=urllib.unquote(q.split("=",1)[1])
               
             except:              except:
                 value=""                  value=""
                           
Line 1417  class ZSQLExtendFolder(Folder,Persistent Line 1410  class ZSQLExtendFolder(Folder,Persistent
                 skip="OFFSET "+str(value)                  skip="OFFSET "+str(value)
                 rangeStart=str(value)                  rangeStart=str(value)
             elif name==iCT+"join":              elif name==iCT+"join":
                   
                 whereList.append(value)                  whereList.append(value)
               elif name==iCT+"outerjoin":
                   
                   outerjoin=value
             elif name==iCT+"sort":              elif name==iCT+"sort":
                 sortstrs=[]                  sortstrs=[]
            
                 for word in value.split(','):                  for word in value.split(','):
                     wordstr=word.lstrip().rstrip()                      wordstr=word.lstrip().rstrip()
                     if sortAllFields:                      if sortAllFields:
Line 1499  class ZSQLExtendFolder(Folder,Persistent Line 1497  class ZSQLExtendFolder(Folder,Persistent
   
                 #print "OP",op,name                  #print "OP",op,name
                 value=value.lower()                  value=value.lower()
                   
                 tmp=""                  tmp=""
                 if opfields.has_key(name):                  if opfields.has_key(name):
                     op=opfields[name]                      op=opfields[name]
Line 1572  class ZSQLExtendFolder(Folder,Persistent Line 1571  class ZSQLExtendFolder(Folder,Persistent
                                   
         #print "QE",table          #print "QE",table
         #print (select,table,where,sort,maxstr,skip)          #print (select,table,where,sort,maxstr,skip)
         query="SELECT %s FROM %s %s %s %s %s"%(select,table,where,sort,maxstr,skip)          query="SELECT %s FROM %s %s %s %s %s %s"%(select,table,outerjoin,where,sort,maxstr,skip)
   
         if not nostore=="yes":          if not nostore=="yes":
                           
             self.REQUEST.SESSION['qs']=opfields              self.REQUEST.SESSION['qs']=opfields
         #print "IAMHERE again:", query          #print "IAMHERE again:", query
   
         if storename and (not NoQuery):          if not NoQuery:
   
             query2="SELECT count(*) FROM %s %s"%(table,where)              query2="SELECT count(*) FROM %s %s"%(table,where)
                           
Line 1604  class ZSQLExtendFolder(Folder,Persistent Line 1603  class ZSQLExtendFolder(Folder,Persistent
   
                 self.REQUEST.SESSION[storename]['queryString2']=query2                  self.REQUEST.SESSION[storename]['queryString2']=query2
                 if self.ZSQLSimpleSearch(query2):                  if self.ZSQLSimpleSearch(query2):
           
                     self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(query2)[0].count                      self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(query2)[0].count
                 else:                  else:
                     self.REQUEST.SESSION[storename]['count']=0                      self.REQUEST.SESSION[storename]['count']=0
Line 1611  class ZSQLExtendFolder(Folder,Persistent Line 1611  class ZSQLExtendFolder(Folder,Persistent
                           
                           
             self.REQUEST.SESSION[storename]['rangeStart']=rangeStart              self.REQUEST.SESSION[storename]['rangeStart']=rangeStart
             if limit=="all":              
               
               self.REQUEST.SESSION[storename]['rangeEnd']=self.REQUEST.SESSION[storename]['count']
               
               if (limit=="all") or (limit==int(limit)):
                 self.REQUEST.SESSION[storename]['rangeEnd']=self.REQUEST.SESSION[storename]['count']                  self.REQUEST.SESSION[storename]['rangeEnd']=self.REQUEST.SESSION[storename]['count']
             else:              else:
                 self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)                  self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)
Line 1620  class ZSQLExtendFolder(Folder,Persistent Line 1624  class ZSQLExtendFolder(Folder,Persistent
   
             self.REQUEST.SESSION[storename]['searchFieldsOnly']=searchFieldsOnly              self.REQUEST.SESSION[storename]['searchFieldsOnly']=searchFieldsOnly
           
           if debug:
               logging.error("ZSQLSimpleSearch %s"%query)
         if not NoQuery:          if not NoQuery:
                                   
             return self.ZSQLQuery(query)              return self.ZSQLQuery(query)
Line 1642  class ZSQLExtendFolder(Folder,Persistent Line 1648  class ZSQLExtendFolder(Folder,Persistent
     def ZSQLQuery(self,query,debug=None):      def ZSQLQuery(self,query,debug=None):
         """query"""          """query"""
         if debug:          if debug:
             zLOG.LOG("ZSQLQuery", zLOG.INFO, query)              logger("ZSQLQuery", logging.INFO, query)
                           
         return self.ZSQLSimpleSearch(query)          return self.ZSQLSimpleSearch(query)
   
Line 1670  class ZSQLExtendFolder(Folder,Persistent Line 1676  class ZSQLExtendFolder(Folder,Persistent
         self.REQUEST.SESSION['query']=string.join(self.REQUEST['QUERY_STRING'].split("&"),",")          self.REQUEST.SESSION['query']=string.join(self.REQUEST['QUERY_STRING'].split("&"),",")
         self.REQUEST.SESSION['come_from_search']="yes"          self.REQUEST.SESSION['come_from_search']="yes"
                   
         return self.REQUEST.RESPONSE.redirect(urllib.unquote(formatfile))          return self.REQUEST.RESPONSE.redirect(urllib.unquote(formatfile)+"?"+rq)
   
           
     def ZSQLint(self,string):      def ZSQLint(self,string):
Line 1704  class ZSQLExtendFolder(Folder,Persistent Line 1710  class ZSQLExtendFolder(Folder,Persistent
             limit=1              limit=1
             newRangeStart=0              newRangeStart=0
                           
         if newRangeStart>=self.REQUEST.SESSION[storename]['count']:          if (newRangeStart>=self.REQUEST.SESSION[storename]['count']) or (self.REQUEST.SESSION[storename]['count']==self.REQUEST.SESSION[storename]['rangeEnd']):
             #newRangeStart=self.REQUEST.SESSION[storename]['count']-1              #newRangeStart=self.REQUEST.SESSION[storename]['count']-1
             return ""              return ""
                   
Line 1803  class ZSQLExtendFolder(Folder,Persistent Line 1809  class ZSQLExtendFolder(Folder,Persistent
   
   
           
     def prevLink_old(self,html):  
         """prev link"""  
         if self.REQUEST['QUERY_STRING']=="":  
             qs=self.REQUEST.SESSION['query']  
         else:  
             qs=self.REQUEST['QUERY_STRING']  
         max=re.search(r'max\=(.*)\,',qs.lower())  
         offset=re.search(r'offset\=(.*)\,',qs.lower())  
         if not offset:  
             offsetnew=0  
         else:  
             offsetnew=int(offset)-max  
             if offsetnew<0:  
                 offsetnew=0  
         queries=string.split(qs,",")  
         newquery=[]  
         if offset:  
             for query in queries:  
                 if query.split("=")[0].lower()=="offset":  
                     query="-offset=%i"%offsetnew  
                 newquery.append(query)  
                 newquerystring=string.join(newquery,"&")  
         else:  
             queries.append("-offset=%i"%offsetnew)  
             newquerystring=string.join(queries,"&")  
         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)  
           
     def nextLink_old(self,html):  
         """prev link"""  
         if self.REQUEST['QUERY_STRING']=="":  
             qs=self.REQUEST.SESSION['query']  
         else:  
             qs=self.REQUEST['QUERY_STRING']  
         max=re.search(r'max\=(.*)\,',qs.lower())  
       
         offset=re.search(r'offset\=(.*)\,',qs.lower())  
         if not offset:  
             offsetnew=1  
         else:  
             offsetnew=int(offset)+int(max)  
             if offsetnew<0:  
                 offsetnew=0  
         queries=string.split(qs,",")  
         newquery=[]  
         if offset:  
             for query in queries:  
   
                 if query.split("=")[0].lower()=="-offset":  
                     query="-offset=%i"%offsetnew  
                 newquery.append(query)  
                 newquerystring=string.join(newquery,"&")  
         else:  
             queries.append("-offset=%i"%offsetnew)  
             newquerystring=string.join(queries,"&")  
           
         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)  
           
           
 manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())  manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())
   

Removed from v.1.99  
changed lines
  Added in v.1.106


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