--- ZSQLExtend/ZSQLExtend.py 2006/04/20 14:08:35 1.80
+++ ZSQLExtend/ZSQLExtend.py 2006/08/29 17:09:49 1.88
@@ -19,15 +19,6 @@ import os.path
import os
from OFS.SimpleItem import SimpleItem
-def getTextFromNode(nodename):
- nodelist=nodename.childNodes
- rc = ""
- for node in nodelist:
- if node.nodeType == node.TEXT_NODE:
- rc = rc + node.data
- return rc
-
-
def analyseIntSearch(word):
#analyse integer searches
@@ -80,111 +71,34 @@ class ZSQLExtendFolder(Folder,Persistent
"""quote str for sql"""
return sql_quote(str)
-
- def importXMLFile(self,table,data=None,identify=None,filename=None,RESPONSE=None):
+ def importXMLFile(self,table,containerTagName,file,identify=None,RESPONSE=None):
#TODO: finish importXMLFile
'''
Import XML file into the table
@param table: name of the table the xml shall be imported into
@param containerTagName: XML-Tag which describes a dataset
- @param data: data to be imported
+ @param file: xmlfile handle
@param identify: (optional) field res. tag which identifies a entry uniquely for updating purposes.
@param RESPONSE: (optional)
'''
- from xml.dom.pulldom import parseString,parse
-
- zLOG.LOG("import xml",zLOG.INFO,"called")
- #fh=file("/tmp/fmpxml.xml")
- import bz2
- import base64
-
- ret=""
- if data:
- data=bz2.decompress(base64.decodestring(data))
-
- zLOG.LOG("import xml",zLOG.INFO,"received file")
- doc=parseString(data)
- zLOG.LOG("import xml",zLOG.INFO,"parsed file")
-
- elif filename:
- fh=file(filename)
- doc=parse(fh)
- zLOG.LOG("import xml",zLOG.INFO,"parsed file")
+ from xml.dom.pulldom import parseString
+
+ doc=parseString(file.read())
while 1:
node=doc.getEvent()
-
+
if node is None:
break;
else:
- if node[1].nodeName=='ROW':
- doc.expandNode(node[1])
- cols=node[1].getElementsByTagName('COL')
- dataSet=[]
- for col in cols:
- data=col.getElementsByTagName('DATA')
- dataSet.append(getTextFromNode(data[0]))
- update=False
- if identify:
-
- nr=fieldNames.index(identify)
- field=dataSet[nr]
-
- searchStr="""select %s from %s where %s = '%s'"""%(identify,table,identify,field)
- zLOG.LOG("import xml",zLOG.INFO,searchStr)
- search=self.ZSQLSimpleSearch(searchStr)
- if search:
- update=True
-
- if update:
- tmp=[]
- for fieldName in fieldNames:
- tmp.append("""%s = %s"""%(fieldName,self.ZSQLQuote(dataSet[fieldNames.index(fieldName)])))
- setStr=",".join(tmp)
- nr=fieldNames.index(identify)
- field=dataSet[nr]
-
- queryStr="""UPDATE %s SET %s WHERE %s = '%s' """%(table,setStr,identify,field)
- zLOG.LOG("update xml",zLOG.INFO,queryStr)
- self.ZSQLSimpleSearch(queryStr)
- ret+="ud: %s \n"%field
- else:
-
-
- fields=",".join(fieldNames)
- values=",".join([""" %s """%self.ZSQLQuote(x) for x in dataSet])
-
-
- queryStr="""INSERT INTO %s (%s) VALUES (%s)"""%(table,fields,values)
- self.ZSQLSimpleSearch(queryStr)
- zLOG.LOG("update xml",zLOG.INFO,queryStr)
- ret+="ad: %s \n"%field
-
- elif node[1].nodeName=="METADATA":
- fieldNames=[]
+ if node[1].nodeName==containerTagName:
doc.expandNode(node[1])
-
- names=node[1].getElementsByTagName('FIELD')
-
- for name in names:
- fieldNames.append(name.getAttribute('NAME'))
-
- zLOG.LOG("update xml: fieldnames",zLOG.INFO,repr(fieldNames))
- 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)]
-
- for fieldName in fieldNames:
- zLOG.LOG("update xml: fieldname",zLOG.INFO,repr(fieldName))
- if fieldName not in columns:
- qstr="""alter table %s add %s %s"""
- self.ZSQLSimpleSearch(qstr%(table,fieldName,'text'))
- zLOG.LOG("update xml: fieldname add",zLOG.INFO,qstr%(table,fieldName,'text'))
#fn=node[1].getAttribute("xml:id")
#nf=file("xtf/"+fn+".xtf",'w')
#nf.write(""""""+node[1].toxml()+"")
#print "wrote: %s"%fn
- return ret
-
+
+
def generateIndex(self,field,index_name,table,RESPONSE=None):
"""erzeuge index aus feld"""
index={}
@@ -257,22 +171,14 @@ class ZSQLExtendFolder(Folder,Persistent
return ""
def getLabel(self):
- """getLabel"""
+ """getLabe"""
try:
return self.label
except:
return ""
-
- def getTitle(self):
- """getTitle"""
- try:
- return self.title
- except:
- return ""
-
def getDescription(self):
- """getDescription"""
+ """getLabe"""
try:
return self.description
except:
@@ -301,10 +207,6 @@ class ZSQLExtendFolder(Folder,Persistent
def formatAscii(self,str,url=None):
"""ersetze ascii umbrueche durch
"""
#url=None
-
- if not str:
- return ""
-
str=str.rstrip().lstrip()
if url and str:
@@ -467,8 +369,16 @@ class ZSQLExtendFolder(Folder,Persistent
field=getattr(result,fieldName)
fieldValue=getattr(result,valueName)
if fieldValue:
+
if not linelen:
- ret+=""""""%(field,fieldValue)
+
+
+ if field == selected:
+
+ ret+=""""""%(field,fieldValue)
+ else:
+ ret+=""""""%(field,fieldValue)
+
else:
mist = """%s"""%(fieldValue)
if len(mist) > string.atoi(linelen):
@@ -478,7 +388,7 @@ class ZSQLExtendFolder(Folder,Persistent
return ret
- def ZSQLInlineSearchU(self,storename=None,**argv):
+ def ZSQLInlineSearchU(self,storename=None,args=None,**argv):
"""one element if exists"""
qs=[]
if storename:
@@ -487,11 +397,15 @@ class ZSQLExtendFolder(Folder,Persistent
else:
storename="foundCount"
-
+ if args:
+ argTmp=args
+ else:
+ argTmp=argv
+
#print "INLINE:",argv
- for a in argv.keys():
- qs.append(a+"="+urllib.quote(str(argv[a])))
+ for a in argTmp.keys():
+ qs.append(a+"="+urllib.quote(str(argTmp[a])))
#return []
ret = self.parseQueryString(string.join(qs,","),"_",storename=storename)
@@ -511,6 +425,12 @@ class ZSQLExtendFolder(Folder,Persistent
+ if args:
+ argTmp=args
+ else:
+ argTmp=argv
+
+
#print "INLINE:",argv
for a in argv.keys():
try:
@@ -520,6 +440,7 @@ class ZSQLExtendFolder(Folder,Persistent
qs.append(a+"="+urllib.quote(str(argv[a])))
#return []
+
return self.parseQueryString(string.join(qs,","),"_",storename=storename)
def ZSQLInlineSearch2(self,query):
@@ -541,15 +462,14 @@ class ZSQLExtendFolder(Folder,Persistent
except:
zLOG.LOG("ZSQLResetConnection",zLOG.ERROR, '%s %s'%sys.exc_info()[:2])
- def ZSQLSimpleSearch(self,query=None,max_rows=1000000,debug=None):
+ def ZSQLSimpleSearch(self,query=None,max_rows=1000000):
"""simple search"""
if not query:
query=self.query
-
- if debug:
- print "DEBUG: ZSQLSimpleSearch:", query
+
+
if (hasattr(self,"_v_searchSQL") and (self._v_searchSQL == None)) or (not hasattr(self,"_v_searchSQL")):
self._v_searchSQL=Shared.DC.ZRDB.DA.DA("_v_searchSQL","_v_searchSQL",self.getConnectionObj().getId(),"var","")
@@ -633,7 +553,7 @@ class ZSQLExtendFolder(Folder,Persistent
name=re.sub("r'+'"," ",q.split("=")[0].lower())
value=q.split("=")[1]
value=re.sub(r'\+'," ",value)
- value=urllib.unquote(value)
+ value=urllib.unquote(value)
if name=="-table":
table=urllib.unquote(value)
elif name=="-format":
@@ -663,10 +583,11 @@ class ZSQLExtendFolder(Folder,Persistent
"""change entries"""
#qs=self.REQUEST['QUERY_STRING']
# very bad hack
-
+
qs_temp=[]
if USE_FORM or RESPONSE:
for a in self.REQUEST.form.keys():
+
qs_temp.append(a+"="+urllib.quote(str(self.REQUEST.form[a])))
@@ -684,12 +605,12 @@ class ZSQLExtendFolder(Folder,Persistent
changeList=[]
for q in qs_temp:
-
+
name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower()))
value="=".join(q.split("=")[1:])
value=re.sub(r'\+'," ",value)
value=urllib.unquote(value)
-
+
if name=="-table":
table=urllib.unquote(value)
elif name=="-identify":
@@ -697,13 +618,15 @@ class ZSQLExtendFolder(Folder,Persistent
identify=identify.split("=")[0]+"="+sql_quote(identify.split("=")[1])
elif name=="-format":
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):
+ elif (not (name[0]=="-" or name[0]=="_")):
changeList.append("\""+name+"\"="+sql_quote(urllib.unquote(value)))
changeString=string.join(changeList,",")
queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify)
+ zLOG.LOG("ZSQLExtend",zLOG.INFO,"CHANGE: "+queryString)
self.ZSQLSimpleSearch(queryString)
@@ -760,7 +683,7 @@ class ZSQLExtendFolder(Folder,Persistent
if field[0]=="_":
fieldTmp="-"+field[1:]
else:
- fieldTmp=urllib.unqoute(field)
+ fieldTmp=field
qs+=",%s=%s"%(fieldTmp,argv[field])
@@ -1080,7 +1003,7 @@ class ZSQLExtendFolder(Folder,Persistent
elif (not name[0]==iCT) and (not len(value)==0):
- #print "OP",op,name
+ #print "OP",op,name
value=value.lower()
tmp=""
if opfields.has_key(name):
@@ -1200,9 +1123,9 @@ class ZSQLExtendFolder(Folder,Persistent
self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)
self.REQUEST.SESSION[storename]['rangeSize']=limit
self.REQUEST.SESSION[storename]['searchFields']=searchFields
+
self.REQUEST.SESSION[storename]['searchFieldsOnly']=searchFieldsOnly
-
if not NoQuery:
return self.ZSQLQuery(query)
@@ -1324,7 +1247,7 @@ class ZSQLExtendFolder(Folder,Persistent
newquery.append(query)
newquerystring=string.join(newquery,"&")
- return "%s"%(self.REQUEST['URL']+"?"+newquerystring,html)
+ return "%s"%(self.REQUEST['URL']+"?"+newquerystring,html)
@@ -1568,16 +1491,16 @@ class ZSQLBibliography(Folder,ZSQLExtend
retdata={}
fieldlist=self.standardMD.fieldList
- for referenceTypeF in self.referencetypes:
- #print referenceType,referenceTypeF[1].title
- if referenceTypeF[1].title == referenceType:
- bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
- bibdata['data']=referenceTypeF[1]
- self.fields=bibdata[referenceType]
+ for referenceTypeF in self.referencetypes:
+ #print referenceType,referenceTypeF[1].title
+ if referenceTypeF[1].title == referenceType:
+ bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
+ bibdata['data']=referenceTypeF[1]
+ self.fields=bibdata[referenceType]
for field in fieldlist:
- if referenceTypeF[1].getValue(field)[0]==None:
- retdata[field]=field
- else:
+ if referenceTypeF[1].getValue(field)[0]==None:
+ retdata[field]=field
+ else:
retdata[field]=referenceTypeF[1].getValue(field)[0]
return retdata,fieldlist
@@ -1589,12 +1512,12 @@ class ZSQLBibliography(Folder,ZSQLExtend
retdata={}
fieldlist=self.standardMD.fieldList
- for referenceTypeF in self.referencetypes:
- #print referenceType,referenceTypeF[1].title
- if referenceTypeF[1].title == referenceType:
- bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
- bibdata['data']=referenceTypeF[1]
- self.fields=bibdata[referenceType]
+ for referenceTypeF in self.referencetypes:
+ #print referenceType,referenceTypeF[1].title
+ if referenceTypeF[1].title == referenceType:
+ bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
+ bibdata['data']=referenceTypeF[1]
+ self.fields=bibdata[referenceType]
for field in fieldlist:
retdata[field]=referenceTypeF[1].getValue(field)[1]
@@ -1693,7 +1616,7 @@ class ZSQLBibliography(Folder,ZSQLExtend
fix_host = http_host + ":" + host_port
ret="""
- """
+ """
for found in self.ZSQLSimpleSearch("select oid from %s limit ALL"%self.tableName):
base_url = self.absolute_url()
if fix_host: