Diff for /ZSQLExtend/ZSQLExtend.py between versions 1.110 and 1.114

version 1.110, 2007/04/05 14:20:08 version 1.114, 2007/04/20 06:36:01
Line 88  class ZSQLIndex(SimpleItem): Line 88  class ZSQLIndex(SimpleItem):
         return self.index          return self.index
   
 class ZSQLExtendFolder(Folder,Persistent, Implicit):  class ZSQLExtendFolder(Folder,Persistent, Implicit):
     """Folder"""      """Klasse die Methoden fuer die Abfrage einer SQL-Datenbank zur Verfuegung stellt.
       
       """
     meta_type="ZSQLExtendFolder"      meta_type="ZSQLExtendFolder"
           
     def ZSQLQuote(self,str):      def ZSQLQuote(self,str):
Line 97  class ZSQLExtendFolder(Folder,Persistent Line 99  class ZSQLExtendFolder(Folder,Persistent
           
           
     def normalizeField(self,table,fieldname, newFieldName=None,mode="alter", RESPONSE=None):      def normalizeField(self,table,fieldname, newFieldName=None,mode="alter", RESPONSE=None):
         """normalize a field"""          """normalize a field, d.h. entfernt alle diakritischen Zeichen und ersetzt diese 
           durch den Grundbuchstaben in einer Spalte einer Tabelle
           @param table: Tabellename
           @param fieldname: Name der Spalte
           @param newFieldName: (optional) default ist fieldname+"_normal"
           @param mode: (optional) default ist "alter". Mode "alter" aendert ein bestehendes Feld newFieldName, mode "create" erzeugt diese zuerst. 
           """
         import unicodedata          import unicodedata
                   
         if not newFieldName:          if not newFieldName:
             newFieldName=fieldname+"_normal"              newFieldName=fieldname+"_normal"
                           
          #normalisierungs routine 
         def normal(str):          def normal(str):
             if str:              if str:
                 return unicodedata.normalize('NFKD', str.decode('utf-8')).encode('ASCII', 'ignore')                  return unicodedata.normalize('NFKD', str.decode('utf-8')).encode('ASCII', 'ignore')
             else:              else:
                 return ""                  return ""
               
         if mode=="create": # create the field          if mode=="create": # create the field
             qstr="""alter table %s add %s %s"""              qstr="""alter table %s add %s %s"""
             self.ZSQLSimpleSearch(qstr%(table,newFieldName,'text'))              self.ZSQLSimpleSearch(qstr%(table,newFieldName,'text'))
Line 452  class ZSQLExtendFolder(Folder,Persistent Line 462  class ZSQLExtendFolder(Folder,Persistent
             RESPONSE.redirect(redirect_url)              RESPONSE.redirect(redirect_url)
                           
     def generateIndex(self,field,index_name,table,RESPONSE=None):      def generateIndex(self,field,index_name,table,RESPONSE=None):
         """erzeuge index aus feld"""          """erzeuge ein Index Objekt einem Feld (experimental)
           @param field: Feldname zu dem ein Index erzeugt werden soll
           @param index_name: Name des Index
           @param table: Tabellen name"""
           
           
         index={}          index={}
         founds=self.ZSQLSimpleSearch("""SELECT %s,oid FROM %s LIMIT 2000"""%(field,table))          founds=self.ZSQLSimpleSearch("""SELECT %s,oid FROM %s """%(field,table))
   
         for found in founds:          for found in founds:
             tmp=getattr(found,field,None)              tmp=getattr(found,field,None)
Line 474  class ZSQLExtendFolder(Folder,Persistent Line 489  class ZSQLExtendFolder(Folder,Persistent
         self._getOb(index_name).setIndex(index)          self._getOb(index_name).setIndex(index)
                   
     def getIndex(self,index_name):      def getIndex(self,index_name):
         """getIndex"""          """getIndex from index_name
           return an indexObject with index_name
           """
           
         founds=self.ZopeFind(self,obj_ids=[index_name])          founds=self.ZopeFind(self,obj_ids=[index_name])
                   
         return founds[0][1].getIndex()          return founds[0][1].getIndex()
           
                           
     def testneu(self):  
         """test"""  
         relStatement="""period like '%s%%'"""  
         statement="select * from cdli_cat"  
         wherePart="museum_no like 'VAT%'"  
         classes=['Uruk III','Uruk IV']  
         return self.searchRel(relStatement,statement,wherePart,classes)  
   
     def URLquote(self,txt):      def URLquote(self,txt):
         """urlquote"""          """urlquote"
           @param txt: text der urlgequoted werden soll.
           """
         return urllib.quote(txt)          return urllib.quote(txt)
           
     def searchRel(self,relStatement,statement,wherePart,classes):      def searchRel(self,relStatement,statement,wherePart,classes):
         """suche relative haufigkeiten"""          """suche relative haufigkeiten (experimental)"""
         ret={}          ret={}
         allRecords=len(self.ZSQLSimpleSearch(statement + " where "+wherePart))          allRecords=len(self.ZSQLSimpleSearch(statement + " where "+wherePart))
                   
Line 503  class ZSQLExtendFolder(Folder,Persistent Line 515  class ZSQLExtendFolder(Folder,Persistent
         return (ret,allRecords)          return (ret,allRecords)
                                       
     def content_html(self):      def content_html(self):
         """template fuer content"""          """template fuer content_html Aufruf, notwendig fuer Kompatibiliaet bei gemeinsamem Einsatz mich ECHO-Produkt"""
                   
         try:          try:
             obj=getattr(self,"ZSQLBibliography_template")              obj=getattr(self,"ZSQLBibliography_template")
Line 516  class ZSQLExtendFolder(Folder,Persistent Line 528  class ZSQLExtendFolder(Folder,Persistent
   
                   
     def getWeight(self):      def getWeight(self):
         """getLabe"""          """getWeight, gewicht notwendig fuer Kompatibiliaet bei gemeinsamem Einsatz mich ECHO-Produkt"""
         try:          try:
             return self.weight              return self.weight
         except:          except:
             return ""              return ""
   
     def getLabel(self):      def getLabel(self):
         """getLabe"""          """getLabel notwendig fuer Kompatibiliaet bei gemeinsamem Einsatz mich ECHO-Produkt"""
         try:          try:
             return self.label              return self.label
         except:          except:
             return ""              return ""
   
     def getDescription(self):      def getDescription(self):
         """getLabe"""          """getDEscription: notwendig fuer Kompatibiliaet bei gemeinsamem Einsatz mich ECHO-Produkt"""
         try:          try:
             return self.description              return self.description
         except:          except:
Line 547  class ZSQLExtendFolder(Folder,Persistent Line 559  class ZSQLExtendFolder(Folder,Persistent
   
   
     def changeZSQLExtend(self,label,description,weight=0,REQUEST=None,connection_id=None):      def changeZSQLExtend(self,label,description,weight=0,REQUEST=None,connection_id=None):
         """change it"""          """change the Konfiguration"""
         self.connection_id=connection_id          self.connection_id=connection_id
         self.weight=weight          self.weight=weight
         self.label=label          self.label=label
Line 557  class ZSQLExtendFolder(Folder,Persistent Line 569  class ZSQLExtendFolder(Folder,Persistent
             return self.manage_main(self, REQUEST)              return self.manage_main(self, REQUEST)
   
     def formatAscii(self,str,url=None):      def formatAscii(self,str,url=None):
         """ersetze ascii umbrueche durch <br>"""          """ersetze ascii umbrueche durch <br>
           @param str: string der Formatiert werden soll.
           @param url:  (optional) default ist "None", sonderfall erzeugt einen Link aus String mit unterliegender url
           """
         #url=None          #url=None
         str=str.rstrip().lstrip()          str=str.rstrip().lstrip()
                   
Line 614  class ZSQLExtendFolder(Folder,Persistent Line 629  class ZSQLExtendFolder(Folder,Persistent
         """oinly for demo"""          """oinly for demo"""
         return os.path.splitext(path)[0]+".jpg"          return os.path.splitext(path)[0]+".jpg"
                   
     def ZSQLisEmpty(self,field):      def ZSQLisEmpty(self,str):
         """Teste ob Treffer leer"""          """Teste ob String leer bzw. none ist.
           """
         #print "field",field          #print "field",field
         if not field:          if not str:
             return 1              return 1
         if field.strip()=="":          if str.strip()=="":
             return 1              return 1
         return 0          return 0
   
       def ZSQLMultiSearch(self,_table,_searchField,_value,_idField,_additionalStatement="",_select=None,_storename=None):
           """
           Durchsucht in einer Tabelle "table" die Spalte "searchfield" nach dem allen Vorkommnissen 
           von Worten in value und gibt alle Werte mit gleichem id field zurŸck, d.h. es wird die "und" suche Ÿber mehrere Eintrsege in einer
           Tabelle mit gleichem idField werd realisiert, 
           z.B. fŸr simplesearch ueber mehrere Felder
           @param _table: Tabelle, die durchsucht werden soll.
           @param _searchField: Feld, das durchsucht wird
           @param _value: String der gesucht werden soll, gesucht wird nach allen Worten des Strings, die durch " "-getrennt sind.
           @param _idField: Feld mit id fŸr die identifikation gleicher EintrŠge
           @param _additionalStatement: (optional) Zusaetzliches SQL Statement, dass zwischen dem ersten "select from" und dem ersten "where" eingegefŸgt wird.
           @param _select: (optional) Alternativer Wert fŸr den ersten SELECT Aufruf.
           @param _storename: (optional) Name fuer die Zwischenspeicherung von Werten in der Session
           """
           if _storename:
               """store"""
           else:
               _storename="foundCount"
               
           queries=[]
           #baue jede einzelne abfrage
           splitted=_value.split(" ")
           if not _select:
               _select=_idField
               
           queries.append("select %s from  %s %s where lower(%s) like '%%%s%%'"%(_select,_table,_additionalStatement,_searchField,splitted[0].lower()))
           
           if len(splitted)>1:
               for v in splitted[1:]:
                   queries.append("select %s from  %s where lower(%s) like '%%%s%%'"%(_idField,_table,_searchField,v.lower()))
                   
           q=" and %s in ("%_idField
           query=q.join(queries) # nun baue sie zusammen
           for i in range(len(queries)-1):
               query+=")" #noch die klammern schliessen
           
           
           
           logging.info("ZSQLSimple: %s"%query)
           retT=self.ZSQLSimpleSearch(query)
           logging.info("ZSQLSimple: %s"%retT)
           
           #das Ergebis enthaelt unter u.U. eine id mehrfach, dieses wir jetzt vereinheitlicht.
           
           retFinalT={}
           for x in retT:
               split=_idField.split(".")
               if len(split)>1:
                   f=split[1]
               else:
                   f=_idField
                   
               retFinalT[getattr(x,f)]=x
           
           ret=list(retFinalT.values())
           
           
           #aus Kompatibilaetsgruenen mit ZSQLSearch / ZSQLInlineSeach  noch einzelne Felder in der SESSION belegen.
           if not self.REQUEST.SESSION.has_key(_storename):
                   self.REQUEST.SESSION[_storename]={}
           
           self.REQUEST.SESSION[_storename]['searchFieldsOnly']={}
           self.REQUEST.SESSION[_storename]['qs']=query
           return ret
       
     def ZSQLsearchOptions(self,fieldname=""):      def ZSQLsearchOptions(self,fieldname=""):
         """return HTML Fragment with search options"""          """return HTML Fragment with search options"""
                   
Line 635  class ZSQLExtendFolder(Folder,Persistent Line 716  class ZSQLExtendFolder(Folder,Persistent
         return ret          return ret
   
     def ZSQLSelectionFromCRList(self,fieldname,listField,boxType="checkbox",checked=None):      def ZSQLSelectionFromCRList(self,fieldname,listField,boxType="checkbox",checked=None):
         """generate select options from a cr seperated list"""          """generate selection HTML Fragemnt from a cr seperated list
           @param fieldname: Wert fuer das "name"-Attribute der erzeugten input-Tags
           @param listField: "cr" (\n) getrennte Liste der Werte
           @param boxType: (optional) default ist "checkbox", moegliche Werte "checkbox" und "radio"
           @param checked: "cr" getrennt Liste von Werten aus listField, die als ausgewahlt markiert werden sollen.
           """
         fields=listField.split("\n")          fields=listField.split("\n")
         ret=""          ret=""
         for field in fields:          for field in fields:
Line 646  class ZSQLExtendFolder(Folder,Persistent Line 732  class ZSQLExtendFolder(Folder,Persistent
         return ret          return ret
   
     def ZSQLSelectionFromSearchList(self,fieldname,results,fieldnameResult,boxType="checkbox",checked=None):      def ZSQLSelectionFromSearchList(self,fieldname,results,fieldnameResult,boxType="checkbox",checked=None):
         """generate select options from a cr seperated list"""          """generate select options from  research-results Objekt
           generate selection HTML Fragemnt from a cr seperated list
           @param fieldname: Wert fuer das "name"-Attribute der erzeugten input-Tags
           @param results: result Object einer SQL-suche
           @param fieldNameResult: Feldname des Resultobjekts, das angezeigt werden soll. 
           @param boxType: (optional) default ist "checkbox", moegliche Werte "checkbox" und "radio"
           @param checked: "cr" getrennt Liste von Werten aus results.fieldNameResult, die als ausgewahlt markiert werden sollen.     
           """
   
         ret=""          ret=""
         if not results: return ""          if not results: return ""
Line 829  class ZSQLExtendFolder(Folder,Persistent Line 922  class ZSQLExtendFolder(Folder,Persistent
                         if x:                          if x:
                             value=x                              value=x
             else:              else:
                  
                 value=str(argTmp[a])                  value=str(argTmp[a])
             qs.append(aFiltered+"="+urllib.quote(value))              qs.append(aFiltered+"="+urllib.quote(value))
                           
Line 858  class ZSQLExtendFolder(Folder,Persistent Line 952  class ZSQLExtendFolder(Folder,Persistent
   
     def ZSQLSimpleSearch(self,query=None,max_rows=1000000):      def ZSQLSimpleSearch(self,query=None,max_rows=1000000):
         """simple search"""          """simple search"""
         #logging.error("ZSQLSimpleSearch X %s"%query)          logging.error("ZSQLSimpleSearch X %s"%query)
         #print query          #print query
         if not query:          if not query:
             query=self.query              query=self.query
Line 1021  class ZSQLExtendFolder(Folder,Persistent Line 1115  class ZSQLExtendFolder(Folder,Persistent
                     table=urllib.unquote(value)                      table=urllib.unquote(value)
             elif name=="-identify":              elif name=="-identify":
                 identify=urllib.unquote(value)                  identify=urllib.unquote(value)
                 identify=identify.split("=")[0]+"="+sql_quote(identify.split("=")[1])                  identify="lower("+identify.split("=")[0]+")="+sql_quote(identify.split("=")[1].lower())
             elif name=="-format":              elif name=="-format":
                 format=urllib.unquote(value)                  format=urllib.unquote(value)
             #elif (not (name[0]=="-" or name[0]=="_")) and (not len(value)==0):              #elif (not (name[0]=="-" or name[0]=="_")) and (not len(value)==0):
Line 1132  class ZSQLExtendFolder(Folder,Persistent Line 1226  class ZSQLExtendFolder(Folder,Persistent
                   
                                 
         #print "calling Query with",repr(NoQuery)          #print "calling Query with",repr(NoQuery)
         logging.error("blo")  
         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"]
                   
         logging.error("BlAAAAAAAAAA %s"%ret)  
                   
         return ret          return ret
   
Line 1184  class ZSQLExtendFolder(Folder,Persistent Line 1278  class ZSQLExtendFolder(Folder,Persistent
         for query in querys:          for query in querys:
             arg=query.split("=")[0]              arg=query.split("=")[0]
             if arg[0]=="_": arg="-"+arg[1:] # sicherstellen, dass an Anfang stets "_"              if arg[0]=="_": arg="-"+arg[1:] # sicherstellen, dass an Anfang stets "_"
               try:
             queryList[arg]=query.split("=")[1]              queryList[arg]=query.split("=")[1]
                       except:
                   queryList[arg]=''   
   
         argList=[]          argList=[]
         arg=""          arg=""

Removed from v.1.110  
changed lines
  Added in v.1.114


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