--- ECHO_content/VLPExtension.py 2008/10/08 10:51:53 1.80 +++ ECHO_content/VLPExtension.py 2008/12/17 12:05:00 1.87 @@ -488,7 +488,10 @@ 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 +try: + from ZPublisher.BaseRequest import DefaultPublishTraverse +except: + pass class VLP_collection(ECHO_collection,Acquisition.Explicit): """VLP spezifische Erweiterung der Collection""" @@ -520,20 +523,24 @@ class VLP_collection(ECHO_collection,Acq actual_url=request['ACTUAL_URL'] lastActual=actual_url.split("/")[-1] - + logging.debug("pub_trav:"+actual_url) 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"): + if lastActual.startswith("lit") or (lastActual=="index_html") or (lastActual=="index_meta") or (lastActual=="getTitle") or (lastActual=="getMetaDataLink"): #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)) + logging.debug("request:"+repr(ob)) request.response.setStatus(200) + #if (lastActual=="index_meta"): + # logging.debug("index_meta requested") + # return ob.index_meta return ob + else: ## andern falls transversiere zum parent. obj = self.aq_parent return obj @@ -553,7 +560,15 @@ class VLP_collection(ECHO_collection,Acq {'label':'Update Library','action':'updateCollection'}, {'label':'Update Metadata','action':'updateCollectionMD'}, ) - + def getAllRessources(self): + """getallressources""" + res=self.ZopeFind(self,obj_metatypes=['VLP_resource'],search_sub=1) + ret=[] + for r in res: + ret.append([r[0],r[1].absolute_url()]) + + return ret + def generateSubCollections(self,errorsTXT="",forceUpdate=False,RESPONSE=None): """erzeuge subcollectionen""" logging.debug("generateSubCollections") @@ -570,7 +585,8 @@ class VLP_collection(ECHO_collection,Acq 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): + logging.debug(repr([col.title,found.titlerefdisplay,col.label,found.titlerefdisplay])) + if (unicodify(col.title) != found.titlerefdisplay) or (unicodify(col.label) != found.titlerefdisplay): # subcollection seems to have changed logging.debug("generateSubCollections: subcollection has changed, recreating!") col.aq_parent.manage_delObjects([col.getId()]) @@ -599,11 +615,12 @@ class VLP_collection(ECHO_collection,Acq error=sys.exc_info()[0:2] logging.error("generateSubCollections: ERROR in %s"%litid) if RESPONSE is not None: + RESPONSE.write("

(ERROR updateII(%s): %s %s TXT: %s)\n

"%(litid,error[0],error[1],sys.exc_info()[2])) 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]))) + 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 + errorsTXT+="

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

"%error return errorsTXT @@ -641,8 +658,9 @@ class VLP_collection(ECHO_collection,Acq return current - def updateCollection(self,forceUpdate=False,RESPONSE=None): - """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner""" + def changeOrAddResources(self,forceUpdate=False,RESPONSE=None): + """changes ord updates all resources found in the file system""" + errorsTXT="

Errors

" if RESPONSE is not None: RESPONSE.setHeader('Content-Type','text/html') @@ -699,7 +717,7 @@ class VLP_collection(ECHO_collection,Acq except: error=sys.exc_info()[0:2] if RESPONSE is not None: - RESPONSE.write("(ERROR (%s): %s %s) "%(fileName,error[0],error[1])) + RESPONSE.write("(ERROR Update(%s): %s %s %s) "%(fileName,error[0],error[1],sys.exc_info()[2])) errorsTXT+="

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

\n"%error # update pageSizeSum for subcollections @@ -718,10 +736,16 @@ class VLP_collection(ECHO_collection,Acq 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])) + RESPONSE.write("(ERROR updateII(%s): %s %s %s) "%(fileName,error[0],error[1],sys.exc_info()[2])) errorsTXT+="

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

\n"%(fileName,error[0],error[1]) - - # update subcollections + return errorsTXT + + def updateCollection(self,forceUpdate=False,RESPONSE=None): + """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner""" + + # update subcollections + errorsTXT="" + errorsTXT+=self.changeOrAddResources(forceUpdate, RESPONSE); errorsTXT+=self.generateSubCollections(forceUpdate=forceUpdate,RESPONSE=RESPONSE) errorsTXT+="\n" if RESPONSE is not None: @@ -786,6 +810,7 @@ class VLP_resource(ECHO_resource,Cacheab #vlp_basis="/mpiwg/online/permanent/vlp" + referencetypes=[] manage_options=ECHO_resource.manage_options+Cacheable.manage_options+( @@ -795,17 +820,38 @@ class VLP_resource(ECHO_resource,Cacheab {'label':'Generate Library Template','action':'generateLibraryTemplateHTML'}, ) + def getMetaDataLink(self): + """link auf die metatdaten""" + return self.absolute_url()+"/index_meta" + + def getTitle(self): + """Title der Ressource""" + title= self.ZSQLSimpleSearch("""select title from vl_literature where reference= \'%s\' """ %self.getId())[0].title + logging.debug(title) + return title + def getImagePath(self): """Pfad zu den Images""" + path=None if os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg')): - return os.path.join(self.vlp_basis,self.resourceID,'pageimg') + path= os.path.join(self.vlp_basis,self.resourceID,'pageimg') elif os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pages')): - return os.path.join(self.vlp_basis,self.resourceID,'pages') + path = os.path.join(self.vlp_basis,self.resourceID,'pages') + # workaround in some cases there seem to be no pictures in pages + + if os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi')): + + if len (os.listdir(self.vlp_basis,self.resourceID,'pagesHi')) > len(os.listdir(path)): + + + + path=os.path.join(self.vlp_basis,self.resourceID,'pagesHi') + logging.error("pages < pagesHi: %s"%self.resourceID) else: - return "no images " - + logging.error("no images: %s"%self.resourceID) + return None def transcription(self): @@ -955,13 +1001,16 @@ class VLP_resource(ECHO_resource,Cacheab RESPONSE.redirect('manage_main') - def index_meta(self): + def index_meta(self,RESPONSE=None): """index_meta""" - + pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','index_meta.zpt')).__of__(self) - pt.content_type="text/html" - return pt() - + pt.content_type="text/xml" + x= pt.pt_render() + #logging.debug("index_meta 4:"+x) + if RESPONSE: + RESPONSE.setHeader("Content-Type","text/xml") + return x def file2page(self,p): """converts filename to pagenumber""" @@ -1029,13 +1078,13 @@ class VLP_resource(ECHO_resource,Cacheab ret="%s: %s"%(str[0],name) return ret - try: - 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,'pages')) - self.imagePath='pages' + self.imagePath=self.getImagePath(); + if (selfImagePath is None): + return None + temp=[] + ret = os.listdir(self.imagePathj); + ret.sort() for x in ret: if (not (x[0] in ('.',':'))) and (not x[0:4] in excludeNames): @@ -1154,7 +1203,10 @@ class VLP_resource(ECHO_resource,Cacheab 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) + path = self.getImagePath() + if (path is None): + return "CREATE INDEX FILE NOT POSSIBLE" + imgdir = os.path.join(path) dirtime = os.path.getmtime(imgdir) zttime = zt.bobobase_modification_time() logging.debug("createindexfile: dir %s of %s index of %s"%(imgdir,dirtime,zttime))