--- ZSQLExtend/ZSQLExtend.py 2007/04/19 20:47:00 1.113 +++ ZSQLExtend/ZSQLExtend.py 2007/04/20 06:36:01 1.114 @@ -88,7 +88,9 @@ class ZSQLIndex(SimpleItem): return self.index class ZSQLExtendFolder(Folder,Persistent, Implicit): - """Folder""" + """Klasse die Methoden fuer die Abfrage einer SQL-Datenbank zur Verfuegung stellt. + + """ meta_type="ZSQLExtendFolder" def ZSQLQuote(self,str): @@ -97,17 +99,25 @@ class ZSQLExtendFolder(Folder,Persistent 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 if not newFieldName: newFieldName=fieldname+"_normal" - + + #normalisierungs routine def normal(str): if str: return unicodedata.normalize('NFKD', str.decode('utf-8')).encode('ASCII', 'ignore') else: return "" + if mode=="create": # create the field qstr="""alter table %s add %s %s""" self.ZSQLSimpleSearch(qstr%(table,newFieldName,'text')) @@ -443,7 +453,7 @@ class ZSQLExtendFolder(Folder,Persistent options.sync_mode=sync_mode options.replace_table=replace options.lc_names=True - options.ascii_db=ascii_db + options.ascii_db=ascii_db importFMPXML(options) os.remove(filename) @@ -452,9 +462,14 @@ class ZSQLExtendFolder(Folder,Persistent RESPONSE.redirect(redirect_url) 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={} - 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: tmp=getattr(found,field,None) @@ -474,26 +489,23 @@ class ZSQLExtendFolder(Folder,Persistent self._getOb(index_name).setIndex(index) def getIndex(self,index_name): - """getIndex""" + """getIndex from index_name + return an indexObject with index_name + """ + founds=self.ZopeFind(self,obj_ids=[index_name]) 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): - """urlquote""" + """urlquote" + @param txt: text der urlgequoted werden soll. + """ return urllib.quote(txt) def searchRel(self,relStatement,statement,wherePart,classes): - """suche relative haufigkeiten""" + """suche relative haufigkeiten (experimental)""" ret={} allRecords=len(self.ZSQLSimpleSearch(statement + " where "+wherePart)) @@ -503,7 +515,7 @@ class ZSQLExtendFolder(Folder,Persistent return (ret,allRecords) def content_html(self): - """template fuer content""" + """template fuer content_html Aufruf, notwendig fuer Kompatibiliaet bei gemeinsamem Einsatz mich ECHO-Produkt""" try: obj=getattr(self,"ZSQLBibliography_template") @@ -516,21 +528,21 @@ class ZSQLExtendFolder(Folder,Persistent def getWeight(self): - """getLabe""" + """getWeight, gewicht notwendig fuer Kompatibiliaet bei gemeinsamem Einsatz mich ECHO-Produkt""" try: return self.weight except: return "" def getLabel(self): - """getLabe""" + """getLabel notwendig fuer Kompatibiliaet bei gemeinsamem Einsatz mich ECHO-Produkt""" try: return self.label except: return "" def getDescription(self): - """getLabe""" + """getDEscription: notwendig fuer Kompatibiliaet bei gemeinsamem Einsatz mich ECHO-Produkt""" try: return self.description except: @@ -547,7 +559,7 @@ class ZSQLExtendFolder(Folder,Persistent def changeZSQLExtend(self,label,description,weight=0,REQUEST=None,connection_id=None): - """change it""" + """change the Konfiguration""" self.connection_id=connection_id self.weight=weight self.label=label @@ -557,7 +569,10 @@ class ZSQLExtendFolder(Folder,Persistent return self.manage_main(self, REQUEST) def formatAscii(self,str,url=None): - """ersetze ascii umbrueche durch
""" + """ersetze ascii umbrueche durch
+ @param str: string der Formatiert werden soll. + @param url: (optional) default ist "None", sonderfall erzeugt einen Link aus String mit unterliegender url + """ #url=None str=str.rstrip().lstrip() @@ -614,20 +629,29 @@ class ZSQLExtendFolder(Folder,Persistent """oinly for demo""" return os.path.splitext(path)[0]+".jpg" - def ZSQLisEmpty(self,field): - """Teste ob Treffer leer""" + def ZSQLisEmpty(self,str): + """Teste ob String leer bzw. none ist. + """ #print "field",field - if not field: + if not str: return 1 - if field.strip()=="": + if str.strip()=="": return 1 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 realisiert, + 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""" @@ -652,13 +676,13 @@ class ZSQLExtendFolder(Folder,Persistent query+=")" #noch die klammern schliessen - if _additionalStatement: - query=query+" " 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(".") @@ -672,7 +696,7 @@ class ZSQLExtendFolder(Folder,Persistent 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]={} @@ -692,7 +716,12 @@ class ZSQLExtendFolder(Folder,Persistent return ret 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") ret="" for field in fields: @@ -703,7 +732,14 @@ class ZSQLExtendFolder(Folder,Persistent return ret 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="" if not results: return ""