--- ECHO_content/VLPExtension.py 2005/12/05 14:17:59 1.53 +++ ECHO_content/VLPExtension.py 2008/10/08 10:18:04 1.79 @@ -2,16 +2,10 @@ This module contains extensions which where originally made for the VLP. """ from OFS.Cache import Cacheable -from Products.ECHO_content.ECHO_collection import * from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from OFS.Image import File -try: - from Products.zogiLib import zogiLib -except: - print "Zogilib not installed, VLP_resource will not work" - import xml.dom.minidom import urllib import xmlrpclib @@ -21,7 +15,15 @@ import os from stat import * from types import * from Globals import package_home +import transaction +import Acquisition +from Products.ECHO_content.ECHO_collection import * +from vlp_xmlhelpers import * +try: + from Products.zogiLib import zogiLib +except: + print "Zogilib not installed, VLP_resource will not work" def lemmatize(str): @@ -46,6 +48,22 @@ def makeXML(str): %s """%str + +def checkXMLfrag(str): + """checks and returns str as XML fragment""" + + xmltempl = """ + %s""" + + try: + dom=xml.dom.minidom.parseString(xmltempl%utf8ify(str)) + return str + except: + str=str.replace("& ","& ") + + dom=xml.dom.minidom.parseString(xmltempl%utf8ify(str)) + return str + def getText(nodelist): @@ -144,8 +162,12 @@ def manage_addSendMailForm(self, id, toA return '' +class VLP_collectionFolder(Folder): + """klasse fŸr folder innheralb der collection""" + meta_type="VLP_collectionFolder" + class VLP_essay(Folder): - """classe für VLP essays""" + """classe fr VLP essays""" meta_type="VLP_essay" @@ -217,6 +239,56 @@ class VLP_essay(Folder): if RESPONSE is not None: RESPONSE.redirect('manage_main') + def getPageList(self): + """returns sorted list of (id,object) of page objects""" + + def sortFind(x,y): + return cmp(x[0],y[0]) + +# pages=[] +# pagestmp=self.ZopeFind(self,obj_metatypes=['DTML Document','File']) +# for page in pagestmp: +# if not (page[1].getId()[0]=="."): +# pages.append(page) + + pages = self.objectItems(['DTML Document','File']) + pages.sort(sortFind) + #logging.debug("pageList=%s"%repr(pages)) + return pages + + + def getPageXMLfrag(self, pageNum=None, pageId=None, pageObj=None): + """returns XML fragment of page with id""" + xml = None + + if pageNum is not None: + pl = self.getPageList() + pageObj = pl[int(pageNum)-1][1] + + if pageId is not None: + pageObj = getattr(self, pageId, None) + + if pageObj is not None: + txt = "" + if pageObj.meta_type == 'File': + data = pageObj.data + #logging.debug("data=%s txt=%s"%(repr(data),txt)) + while data is not None: + if isinstance(data, str): + txt += data + data = None + else: + txt += data.data + data = data.next + + else: + # not a File object... perhaps its executable + txt += pageObj() + + xml = checkXMLfrag(txt) + + return unicodify(xml) + def getPage(self,pagenum): """gibt essay page mit num aus""" @@ -225,25 +297,20 @@ class VLP_essay(Folder): pages=[] pagestmp=self.ZopeFind(self,obj_metatypes=['DTML Document','File']) for page in pagestmp: - if not (page[1].getId()[0]=="."): - pages.append(page) + if not (page[1].getId()[0]=="."): + pages.append(page) pages.sort(sortFind) #print str(pages[int(pagenum)][1]()) if pages[int(pagenum)-1][1].meta_type=='File': - - #return makeXML(str(pages[int(pagenum)-1][1])) - #txt=pages[int(pagenum)-1][1].data.decode('utf-8') - txt=pages[int(pagenum)-1][1].data - #print txt.encode('utf-8') - - return self.xml2html(makeXML(txt),quote="no") + #return makeXML(str(pages[int(pagenum)-1][1])) + #txt=pages[int(pagenum)-1][1].data.decode('utf-8') + txt=pages[int(pagenum)-1][1].data + #print txt.encode('utf-8') + return self.xml2html(makeXML(txt),quote="no") else: - - - - return self.xml2html(makeXML(pages[int(pagenum)-1][1]()),quote="no") + return self.xml2html(makeXML(pages[int(pagenum)-1][1]()),quote="no") def nextPage(self,pagenum,url): pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) # teste ob performance ok, sonst in variable @@ -263,6 +330,12 @@ class VLP_essay(Folder): retstr=url+"?p="+str(int(pagenum)+1) return retstr + def lastURL(self,pagenum,url): + # teste ob performance ok, sonst in variable + pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) + + return url+"?p="+str(pages) + def previousURL(self,pagenum,url): if int(pagenum)-1 > 0: @@ -357,19 +430,19 @@ class VLP_subcollection(ECHO_collection) #content of journals also displayed if not online - if (type == "(Journal)"): + if (type == "(JournalVolume)"): online ="" else: online ="AND online = 1" sort=self.collectionSort(type) item = [x for x in self.ZSQLSimpleSearch("""SELECT * FROM vl_literature - WHERE volumeid = '%s' """%self.getId() + WHERE volumeid ~ '%s\\\\M' """%self.getId() + """ %s AND not referenceType='%s' """%(online,type) + """ORDER BY """ + sort)] tocItem = [x for x in self.ZSQLSimpleSearch("""SELECT * FROM vl_literature - WHERE volumeid = '%s' """%self.getId() + WHERE reference = '%s' """%self.getId() + """AND online = 1 AND referenceType='%s' """%type + """ORDER BY """ + sort)] @@ -410,10 +483,69 @@ def manage_addVLP_subCollection(self,id, if RESPONSE is not None: RESPONSE.redirect('manage_main') +from zope.publisher.interfaces import IPublishTraverse +from zope.interface import implements +from zope.publisher.interfaces import NotFound +from zope.app import zapi +from zope.component import queryMultiAdapter +from ZPublisher.BaseRequest import DefaultPublishTraverse -class VLP_collection(ECHO_collection): +class VLP_collection(ECHO_collection,Acquisition.Explicit): """VLP spezifische Erweiterung der Collection""" + + + implements(IPublishTraverse) + def findObjFromLitName(self,fileName): + if not fileName[0:3]=="lit": + logging.error("getOrCreateFolder wrong filename: %s"%fileName) + return None + + + restName="%08d"%int(fileName[3:]) + + fs=(restName[0:2],restName[0:4],restName[0:6]) + + current =self + for f in fs: + obj = getattr(current,f,None) + if not obj: #subfolder existiert nicht + return None + current=obj + + return getattr(current,fileName,None) + + def publishTraverse(self,request,name): + """change the traversal if literature object""" + + actual_url=request['ACTUAL_URL'] + lastActual=actual_url.split("/")[-1] + + + if name.startswith("lit"): #umleitung wenn lit aufgerufen wirk + # umleitung auf den eigentlichen folder nur wenn direkt der Folder litXXX oder dessen index_html methode aufgerufen wird + if lastActual.startswith("lit") or (lastActual=="index_html"): + #obj=self. ZopeFind(self,obj_ids=[name],search_sub=1) + ob=self.findObjFromLitName(name) + if not ob: + return "LIt not found" + else: + + logging.error("request:"+repr(ob)) + request.response.setStatus(200) + return ob + else: ## andern falls transversiere zum parent. + obj = self.aq_parent + return obj + else: # mache gar nichts falls nicht lit aufgerufen wird + + + tr=DefaultPublishTraverse(self, request) + ob= tr.publishTraverse(request, name) + + return ob + #raise NotFound(self.context, name, request) + #return repr(request) meta_type="VLP_collection" manage_options=ECHO_collection.manage_options+( @@ -422,40 +554,58 @@ class VLP_collection(ECHO_collection): {'label':'Update Metadata','action':'updateCollectionMD'}, ) - - - def generateSubCollections(self,errorsTXT=""): - """erzeuge subcollectionen""" - founds=self.ZSQLSimpleSearch("select * from vl_literature where referencetype in ('(Book)','(Collection)','(Journal)')") - + def generateSubCollections(self,errorsTXT="",forceUpdate=False,RESPONSE=None): + """erzeuge subcollectionen""" + logging.debug("generateSubCollections") + founds=self.ZSQLSimpleSearch("select * from vl_literature where referencetype in ('(Edited Book)','(Book)','(Collection)','(JournalVolume)','(Generic Container)')") + + if RESPONSE is not None: + RESPONSE.setHeader('Content-Type','text/html') self.REQUEST.RESPONSE.write("

Create Subcollections

\n") - for found in founds: - try: - foundCol=self.ZopeFind(self,obj_ids=[found.reference]) - if foundCol: - - self.manage_delObjects([foundCol[0][0]]) - - manage_addVLP_subCollection(self,found.reference,found.titlerefdisplay,found.titlerefdisplay) - #getattr(self,found.reference).generateSubCollectionFromDB() - #teste ob es Images auf dem Server gibt mit gleichem Namen (frontmatter) - if os.path.exists(os.path.join(self.vlp_basis,found.reference)): - - obj=getattr(self,found.reference) - if not self.ZopeFind(obj,obj_ids=[found.reference]): - metalink=self.REQUEST['URL1']+"/"+found.reference+"/"+found.reference+"/index_meta" - newObj=VLP_resource(found.reference,'',metalink,found.reference,found.reference,found.reference,'generated','book','','','','','','') - obj._setObject(found.reference,newObj) - genObj=getattr(obj,found.reference) - genObj.createIndexFile() + for found in founds: + try: + litid = str(found.reference) + foundCol=self.findObjFromLitName(litid) + #foundCol=self.ZopeFind(self,obj_ids=[litid]) + if foundCol: + col = foundCol + logging.debug("generateSubCollections: subcollection %s exists (%s)"%(repr(col),found.reference)) + if (col.title != found.titlerefdisplay) or (col.label != found.titlerefdisplay): + # subcollection seems to have changed + logging.debug("generateSubCollections: subcollection has changed, recreating!") + col.aq_parent.manage_delObjects([col.getId()]) + manage_addVLP_subCollection(self.getOrCreateFolderForFile(litid),litid,found.titlerefdisplay,found.titlerefdisplay) + else: + logging.debug("generateSubCollections: creating new subcollection %s"%found.reference) + manage_addVLP_subCollection(self.getOrCreateFolderForFile(litid),litid,found.titlerefdisplay,found.titlerefdisplay) + + #teste ob es Images auf dem Server gibt mit gleichem Namen (frontmatter) + if os.path.exists(os.path.join(self.vlp_basis,litid)): + logging.debug("generateSubCollections: found frontmatter in %s"%litid) + obj=self.findObjFromLitName(litid) + if not self.ZopeFind(obj,obj_ids=[litid]): + metalink=self.REQUEST['URL1']+"/"+litid+"/"+litid+"/index_meta" + newObj=VLP_resource(litid,'',metalink,litid,litid,litid,'generated','book','','','','','','') + obj._setObject(litid,newObj) + + genObj=getattr(obj,litid) + genObj.createIndexFile(forceUpdate=forceUpdate) - self.REQUEST.RESPONSE.write("

%s

\n"%found.reference) - except: - error=sys.exc_info()[0:2] - RESPONSE.write("(ERROR (%s): %s %s)\n"%(found.reference,error[0],error[1])) - errorsTXT+="

No subcollection of %s "+"(ERROR: %s %s)

"%error + if RESPONSE is not None: + self.REQUEST.RESPONSE.write("

%s

\n"%litid) + logging.debug("

%s

\n"%litid) - return errorsTXT + except: + error=sys.exc_info()[0:2] + logging.error("generateSubCollections: ERROR in %s"%litid) + if RESPONSE is not None: + RESPONSE.write("

(ERROR (%s): %s %s)

\n"%(litid,error[0],error[1])) + #logging.error("generateSubCollections: %s %s"%error) + #self.REQUEST.RESPONSE.write("(ERROR (%s): %s %s)\n"%(litid,repr(error[0]),repr(error[1]))) + errorsTXT+="

ERROR: No subcollection of %s (ERROR: %s %s)

\n"%(litid,error[0],error[1]) + #errorsTXT+="

No subcollection of %s "%litid+"(ERROR: %s %s)

"%error + + return errorsTXT def VLP_path_configForm(self): """change pt""" @@ -468,48 +618,115 @@ class VLP_collection(ECHO_collection): if RESPONSE is not None: RESPONSE.redirect('manage_main') - def updateCollection(self,RESPONSE=None): + + def getOrCreateFolderForFile(self,fileName): + + if not fileName[0:3]=="lit": + logging.error("getOrCreateFolder wrong filename: %s"%fileName) + return None + + + restName="%08d"%int(fileName[3:]) + + fs=(restName[0:2],restName[0:4],restName[0:6]) + + current =self + for f in fs: + obj = getattr(current,f,None) + if not obj: + newObj=VLP_collectionFolder(f) + current._setObject(f,newObj) + obj = getattr(current,f) + current=obj + + return current + + def updateCollection(self,forceUpdate=False,RESPONSE=None): """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner""" errorsTXT="

Errors

" - RESPONSE.write("") - files=os.listdir(self.vlp_basis) + if RESPONSE is not None: + RESPONSE.setHeader('Content-Type','text/html') + RESPONSE.write("") - errorsTXT+="

New Ressources

" + files=os.listdir(self.vlp_basis) + i=0 for fileName in files: - + if i<100: + i+=1 + else: + i=0 + j=0 + while j<5: + try: + transaction.get().commit() + j=6 + except: + logging.error("Commit: %s"%j) + j+=1 + + RESPONSE.write("

committed

") if fileName[0:3]=="lit": - metalink=self.REQUEST['URL1']+"/"+fileName+"/index_meta" + + folder=self.getOrCreateFolderForFile(fileName) #get the folder where fileName lives or should live + if not folder: #folder gave an error + continue try: - if not hasattr(self,fileName): - newObj=VLP_resource(fileName,'',metalink,fileName,fileName,fileName,'generated','book','','','','','','') - self._setObject(fileName,newObj) - - RESPONSE.write("

got: %s\n

"%fileName) - genObj=getattr(self,fileName) - if hasattr(genObj,'createIndexFile'): - try: - genObj.createIndexFile() - except: - error=sys.exc_info()[0:2] - RESPONSE.write("

(ERROR (%s): %s %s)

\n"%(fileName,error[0],error[1])) - errorsTXT+="

No indexfile of %s "+"(ERROR: %s %s)

"%error - - if genObj.meta_type=="VLP_subcollection": - genObj.pageSizeSum=getattr(genObj,fileName).getPageSizeSum() - else: - genObj.pageSizeSum=genObj.getPageSizeSum() + if not hasattr(folder,fileName): + # create new resource + logging.debug("updateCollection: new %s"%fileName) + if RESPONSE is not None: + RESPONSE.write("

new: %s

\n"%fileName) + logging.debug("new: %s \n"%fileName) + newObj=VLP_resource(fileName,'',metalink,fileName,fileName,fileName,'generated','book','','','','','','') + folder._setObject(fileName,newObj) + + if RESPONSE is not None: + RESPONSE.write("

got: %s "%fileName) + + genObj=getattr(folder,fileName) + logging.debug("got: %s "%fileName) + + logging.debug("updateCollection: inspecting %s"%fileName) + # create index + if hasattr(genObj,'createIndexFile'): + try: + logging.debug("updateCollection: creating index for %s"%fileName) + msg = genObj.createIndexFile(forceUpdate=forceUpdate) + if msg and RESPONSE is not None: + RESPONSE.write(msg) + except: + error=sys.exc_info()[0:2] + if RESPONSE is not None: + RESPONSE.write("(ERROR (%s): %s %s) "%(fileName,error[0],error[1])) + errorsTXT+="

ERROR creating index for %s "%fileName+"(ERROR: %s %s)

\n"%error + + # update pageSizeSum for subcollections + if genObj.meta_type=="VLP_subcollection": + if RESPONSE is not None: + RESPONSE.write(" is subcollection") + logging.debug("updateCollection: %s is subcollection"%fileName) + genObj.pageSizeSum=getattr(genObj,fileName).getPageSizeSum() + else: + genObj.pageSizeSum=genObj.getPageSizeSum() + + if RESPONSE is not None: + RESPONSE.write("

\n") + except: - error=sys.exc_info()[0:2] + error=sys.exc_info()[0:2] + logging.error("updateCollection: ERROR in %s (%s %s)"%(fileName,error[0],error[1])) + if RESPONSE is not None: RESPONSE.write("

(ERROR (%s): %s %s)

\n"%(fileName,error[0],error[1])) - errorsTXT+="

File not created:%s "+"(ERROR: %s %s)

"%error - - errorsTXT+=self.generateSubCollections() - errorsTXT+="/n" - RESPONSE.write(errorsTXT) + errorsTXT+="

File not created:%s (ERROR: %s %s)

\n"%(fileName,error[0],error[1]) + + # update subcollections + errorsTXT+=self.generateSubCollections(forceUpdate=forceUpdate,RESPONSE=RESPONSE) + errorsTXT+="\n" if RESPONSE is not None: - RESPONSE.redirect('manage_main') + RESPONSE.write(errorsTXT) + RESPONSE.write("") def updateCollectionMD(self,RESPONSE=None): """updateMD""" @@ -584,8 +801,8 @@ class VLP_resource(ECHO_resource,Cacheab if os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg')): return os.path.join(self.vlp_basis,self.resourceID,'pageimg') - elif os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi')): - return os.path.join(self.vlp_basis,self.resourceID,'pagesHi') + elif os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pages')): + return os.path.join(self.vlp_basis,self.resourceID,'pages') else: return "no images " @@ -603,6 +820,34 @@ class VLP_resource(ECHO_resource,Cacheab + def identifyMediaType(self): + """identifiziert den Medientype aus der VLP Datenbank""" + founds=self.ZSQLSimpleSearch('select * from vl_literature where reference=\''+self.resourceID+'\' order by id') + if (not founds) or (len(founds)==0): + self.mediaType="generic" # steht nicht in der Datenbank, dann nimm generisch an + return self.mediaType + + + if founds[0].referencetype =="Audio": + self.mediaType ="audio" + elif founds[0].referencetype =="Film": + self.mediaType ="video" + else: + self.mediaType ="image" # nimm an, dass alle anderen Eintrage in der Datenbank auf images verweisen (Buecher oder Fotografien). + + return self.mediaType + + def getMediaType(self,cached=False): + """give the Media-type back, if chached False, then get it from the database""" + + if (not hasattr(self,'mediaType')) or (self.mediaType=="") or (not cached): + self.identifyMediaType() + + return self.mediaType + + + + def copyTranscriptionFromDB(self): """checks if transcription exits in DB""" founds=self.ZSQLSimpleSearch('select * from vl_transcript where source=\''+self.resourceID+'\' order by id') @@ -657,17 +902,32 @@ class VLP_resource(ECHO_resource,Cacheab def show(self): """show the rendered file""" - if self.REQUEST.get('p',None): - #self.REQUEST.set('pn',self.file2page(self.REQUEST.get('p',None))) - self.REQUEST.RESPONSE.redirect(self.REQUEST['URL']+"?pn="+self.file2page(self.REQUEST.get('p',None))) + mt = self.getMediaType() + + if (mt in ['video','audio']): + pt = self.getVLPTemplate('libraryMovieTemplate') + else: #zur zeit werden alle anderen type auf das libraryTemplate abgebildet. + + if self.REQUEST.get('p',None): #make sure that parameter p exists + #self.REQUEST.set('pn',self.file2page(self.REQUEST.get('p',None))) + params = "pn=%s"%self.file2page(self.REQUEST.get('p',None)) + mk = self.REQUEST.get('mk',None) + if mk: + params += "&mk=%s"%mk + self.REQUEST.RESPONSE.redirect(self.REQUEST['URL']+'?'+params) + + pt = self.getVLPTemplate('libraryTemplate') + + return pt() - - if hasattr(self,'libraryTemplate.html'): - return getattr(self,'libraryTemplate.html')() + def getVLPTemplate(self,name): + html=name+".html" + if hasattr(self,html): + return getattr(self,html) - pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','library_template.zpt')).__of__(self) + pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp',name+'.zpt')).__of__(self) pt.content_type="text/html" - return pt() + return pt def index_html(self): """index_html""" @@ -719,7 +979,7 @@ class VLP_resource(ECHO_resource,Cacheab #size of hi resolution files=[] try: - pathHi=os.path.join(self.vlp_basis,self.resourceID,'pagesHi') + pathHi=os.path.join(self.vlp_basis,self.resourceID,'pages') files=os.listdir(pathHi) hi=0 for f in files: @@ -766,13 +1026,12 @@ class VLP_resource(ECHO_resource,Cacheab ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg')) self.imagePath='pageimg' except: - ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi')) - self.imagePath='pagesHi' + ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pages')) + self.imagePath='pages' temp=[] ret.sort() for x in ret: - if (not (x[0]==".")) and (not x[0:4] in excludeNames): - + if (not (x[0] in ('.',':'))) and (not x[0:4] in excludeNames): temp.append((calculateName(x),os.path.splitext(x)[0])) return temp @@ -780,12 +1039,12 @@ class VLP_resource(ECHO_resource,Cacheab def firstPage(self,url=None): """showlink to the first image""" if self.REQUEST.get('pn','1')=="1": #erste seinte dann kein a tag - return """first
first""" + return """first
first""" else: ws=self.REQUEST.get('ws','1') return """ - first
first + first
first
"""%(self.REQUEST['URL']+"?pn=1&ws=%s"%ws) @@ -796,12 +1055,12 @@ class VLP_resource(ECHO_resource,Cacheab ln=len(pages) if (self.REQUEST.get('pn')==str(ln)) or (ln==1): #letzte seite dann kein a tag oder nur eine Seite - return """last
last""" + return """last
last""" else: ws=self.REQUEST.get('ws','1') return """ - last
last + last
last
"""%(self.REQUEST['URL']+"?pn="+str(ln)+"&ws="+ws) @@ -811,12 +1070,12 @@ class VLP_resource(ECHO_resource,Cacheab nn = int(self.REQUEST.get('pn','1'))-1 if nn < 1: #letzte seite dann kein a tag - return """prev
prev""" + return """prev
prev""" else: ws=self.REQUEST.get('ws','1') return """ - prev
prev + prev
prev
"""%(self.REQUEST['URL']+"?pn="+str(nn)+"&ws="+ws) @@ -828,12 +1087,12 @@ class VLP_resource(ECHO_resource,Cacheab nn = int(self.REQUEST.get('pn','1'))+1 if (nn>int(ln)) or (ln==1): #letzte seite dann kein a tag - return """next
next""" + return """next
next""" else: ws=self.REQUEST.get('ws','1') return """ - next
next + next
next
"""%(self.REQUEST['URL']+"?pn="+str(nn)+"&ws="+ws) @@ -879,22 +1138,34 @@ class VLP_resource(ECHO_resource,Cacheab pageinfo=self.readIndexFile()[pn-1] return pageinfo[2] - def createIndexFile(self,RESPONSE=None): + def createIndexFile(self,forceUpdate=False,RESPONSE=None): """create index file""" + logging.debug("createindexfile of %s"%self.id) - - pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','index_template.zpt')).__of__(self)() - - - - if not hasattr(self,'index.xml'): + if hasattr(self,'index.xml'): + # index exists + zt=getattr(self,'index.xml') + if not forceUpdate: + # check if directory is newer (self.imagePath sould be set by now) + imgdir = os.path.join(self.vlp_basis, self.resourceID, self.imagePath) + dirtime = os.path.getmtime(imgdir) + zttime = zt.bobobase_modification_time() + logging.debug("createindexfile: dir %s of %s index of %s"%(imgdir,dirtime,zttime)) + if dirtime < zttime: + # nothing to do + logging.debug("createindexfile: dir %s older than index"%(imgdir)) + return "index is up to date" + + else: + # create new index template zt=ZopePageTemplate('index.xml') self._setObject('index.xml',zt) - else: - zt=getattr(self,'index.xml') - - + + # fill index template + pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','index_template.zpt')).__of__(self)() + #logging.debug("createindexfile uses %s"%pt) zt.pt_edit(pt, 'text/xml') + transaction.get().commit() if RESPONSE is not None: RESPONSE.redirect('manage_main')