version 1.80, 2008/10/08 10:51:53
|
version 1.90, 2009/05/06 07:53:46
|
Line 488 from zope.interface import implements
|
Line 488 from zope.interface import implements
|
from zope.publisher.interfaces import NotFound |
from zope.publisher.interfaces import NotFound |
from zope.app import zapi |
from zope.app import zapi |
from zope.component import queryMultiAdapter |
from zope.component import queryMultiAdapter |
|
try: |
from ZPublisher.BaseRequest import DefaultPublishTraverse |
from ZPublisher.BaseRequest import DefaultPublishTraverse |
|
except: |
|
pass |
|
|
class VLP_collection(ECHO_collection,Acquisition.Explicit): |
class VLP_collection(ECHO_collection,Acquisition.Explicit): |
"""VLP spezifische Erweiterung der Collection""" |
"""VLP spezifische Erweiterung der Collection""" |
Line 520 class VLP_collection(ECHO_collection,Acq
|
Line 523 class VLP_collection(ECHO_collection,Acq
|
|
|
actual_url=request['ACTUAL_URL'] |
actual_url=request['ACTUAL_URL'] |
lastActual=actual_url.split("/")[-1] |
lastActual=actual_url.split("/")[-1] |
|
logging.debug("pub_trav:"+actual_url) |
|
|
if name.startswith("lit"): #umleitung wenn lit aufgerufen wirk |
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 |
# 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") or (lastActual=="hasTranscription") or (lastActual=="transcription"): |
#obj=self. ZopeFind(self,obj_ids=[name],search_sub=1) |
#obj=self. ZopeFind(self,obj_ids=[name],search_sub=1) |
ob=self.findObjFromLitName(name) |
ob=self.findObjFromLitName(name) |
if not ob: |
if not ob: |
return "LIt not found" |
return "LIt not found" |
else: |
else: |
|
|
logging.error("request:"+repr(ob)) |
logging.debug("request:"+repr(ob)) |
request.response.setStatus(200) |
request.response.setStatus(200) |
|
#if (lastActual=="index_meta"): |
|
# logging.debug("index_meta requested") |
|
# return ob.index_meta |
return ob |
return ob |
|
|
else: ## andern falls transversiere zum parent. |
else: ## andern falls transversiere zum parent. |
obj = self.aq_parent |
obj = self.aq_parent |
return obj |
return obj |
Line 553 class VLP_collection(ECHO_collection,Acq
|
Line 560 class VLP_collection(ECHO_collection,Acq
|
{'label':'Update Library','action':'updateCollection'}, |
{'label':'Update Library','action':'updateCollection'}, |
{'label':'Update Metadata','action':'updateCollectionMD'}, |
{'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): |
def generateSubCollections(self,errorsTXT="",forceUpdate=False,RESPONSE=None): |
"""erzeuge subcollectionen""" |
"""erzeuge subcollectionen""" |
Line 570 class VLP_collection(ECHO_collection,Acq
|
Line 585 class VLP_collection(ECHO_collection,Acq
|
if foundCol: |
if foundCol: |
col = foundCol |
col = foundCol |
logging.debug("generateSubCollections: subcollection %s exists (%s)"%(repr(col),found.reference)) |
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) != unicodify(found.titlerefdisplay)) or (unicodify(col.label) != unicodify(found.titlerefdisplay)): |
# subcollection seems to have changed |
# subcollection seems to have changed |
logging.debug("generateSubCollections: subcollection has changed, recreating!") |
logging.debug("generateSubCollections: subcollection has changed, recreating!") |
col.aq_parent.manage_delObjects([col.getId()]) |
col.aq_parent.manage_delObjects([col.getId()]) |
Line 599 class VLP_collection(ECHO_collection,Acq
|
Line 615 class VLP_collection(ECHO_collection,Acq
|
error=sys.exc_info()[0:2] |
error=sys.exc_info()[0:2] |
logging.error("generateSubCollections: ERROR in %s"%litid) |
logging.error("generateSubCollections: ERROR in %s"%litid) |
if RESPONSE is not None: |
if RESPONSE is not None: |
|
RESPONSE.write("<p>(ERROR updateII(%s): %s %s TXT: %s)\n</p>"%(litid,error[0],error[1],sys.exc_info()[2])) |
RESPONSE.write("<p>(ERROR (%s): %s %s)</p>\n"%(litid,error[0],error[1])) |
RESPONSE.write("<p>(ERROR (%s): %s %s)</p>\n"%(litid,error[0],error[1])) |
#logging.error("generateSubCollections: %s %s"%error) |
logging.error("generateSubCollections: %s %s"%error) |
#self.REQUEST.RESPONSE.write("(ERROR (%s): %s %s)\n"%(litid,repr(error[0]),repr(error[1]))) |
self.REQUEST.RESPONSE.write("(ERROR (%s): %s %s)\n"%(litid,repr(error[0]),repr(error[1]))) |
errorsTXT+="<p>ERROR: No subcollection of %s (ERROR: %s %s)</p>\n"%(litid,error[0],error[1]) |
errorsTXT+="<p>ERROR: No subcollection of %s (ERROR: %s %s)</p>\n"%(litid,error[0],error[1]) |
#errorsTXT+="<p>No subcollection of %s "%litid+"(ERROR: %s %s)</p>"%error |
errorsTXT+="<p>No subcollection of %s "%litid+"(ERROR: %s %s)</p>"%error |
|
|
return errorsTXT |
return errorsTXT |
|
|
Line 625 class VLP_collection(ECHO_collection,Acq
|
Line 642 class VLP_collection(ECHO_collection,Acq
|
logging.error("getOrCreateFolder wrong filename: %s"%fileName) |
logging.error("getOrCreateFolder wrong filename: %s"%fileName) |
return None |
return None |
|
|
|
try: |
restName="%08d"%int(fileName[3:]) |
restName="%08d"%int(fileName[3:]) |
|
except: |
|
logging.error("getOrCreateFolder wrong filename: %s"%fileName) |
|
return None |
|
|
fs=(restName[0:2],restName[0:4],restName[0:6]) |
fs=(restName[0:2],restName[0:4],restName[0:6]) |
|
|
Line 641 class VLP_collection(ECHO_collection,Acq
|
Line 661 class VLP_collection(ECHO_collection,Acq
|
|
|
return current |
return current |
|
|
def updateCollection(self,forceUpdate=False,RESPONSE=None): |
def changeOrAddResources(self,forceUpdate=False,RESPONSE=None): |
"""liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner""" |
"""changes ord updates all resources found in the file system""" |
|
|
errorsTXT="<h2>Errors</h2>" |
errorsTXT="<h2>Errors</h2>" |
if RESPONSE is not None: |
if RESPONSE is not None: |
RESPONSE.setHeader('Content-Type','text/html') |
RESPONSE.setHeader('Content-Type','text/html') |
Line 699 class VLP_collection(ECHO_collection,Acq
|
Line 720 class VLP_collection(ECHO_collection,Acq
|
except: |
except: |
error=sys.exc_info()[0:2] |
error=sys.exc_info()[0:2] |
if RESPONSE is not None: |
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+="<p>ERROR creating index for %s "%fileName+"(ERROR: %s %s)</p>\n"%error |
errorsTXT+="<p>ERROR creating index for %s "%fileName+"(ERROR: %s %s)</p>\n"%error |
|
|
# update pageSizeSum for subcollections |
# update pageSizeSum for subcollections |
Line 718 class VLP_collection(ECHO_collection,Acq
|
Line 739 class VLP_collection(ECHO_collection,Acq
|
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])) |
logging.error("updateCollection: ERROR in %s (%s %s)"%(fileName,error[0],error[1])) |
if RESPONSE is not None: |
if RESPONSE is not None: |
RESPONSE.write("<p>(ERROR (%s): %s %s)</p>\n"%(fileName,error[0],error[1])) |
RESPONSE.write("(ERROR updateII(%s): %s %s %s) "%(fileName,error[0],error[1],sys.exc_info()[2])) |
errorsTXT+="<p>File not created:%s (ERROR: %s %s)</p>\n"%(fileName,error[0],error[1]) |
errorsTXT+="<p>File not created:%s (ERROR: %s %s)</p>\n"%(fileName,error[0],error[1]) |
|
return errorsTXT |
|
|
|
def updateCollection(self,forceUpdate=True,RESPONSE=None): |
|
"""liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner""" |
|
|
# update subcollections |
# update subcollections |
|
errorsTXT="" |
|
errorsTXT+=self.changeOrAddResources(forceUpdate, RESPONSE); |
errorsTXT+=self.generateSubCollections(forceUpdate=forceUpdate,RESPONSE=RESPONSE) |
errorsTXT+=self.generateSubCollections(forceUpdate=forceUpdate,RESPONSE=RESPONSE) |
errorsTXT+="\n" |
errorsTXT+="\n" |
if RESPONSE is not None: |
if RESPONSE is not None: |
Line 783 class VLP_resource(ECHO_resource,Cacheab
|
Line 810 class VLP_resource(ECHO_resource,Cacheab
|
|
|
meta_type="VLP_resource" |
meta_type="VLP_resource" |
|
|
|
def _p_resolveConflict(self,oldstate,savedstate,newstate): |
|
logging.debug("updateCollection: Have to resolve conflict!") |
|
return newstate |
|
|
#vlp_basis="/mpiwg/online/permanent/vlp" |
#vlp_basis="/mpiwg/online/permanent/vlp" |
|
|
|
|
|
|
referencetypes=[] |
referencetypes=[] |
|
|
manage_options=ECHO_resource.manage_options+Cacheable.manage_options+( |
manage_options=ECHO_resource.manage_options+Cacheable.manage_options+( |
Line 795 class VLP_resource(ECHO_resource,Cacheab
|
Line 827 class VLP_resource(ECHO_resource,Cacheab
|
{'label':'Generate Library Template','action':'generateLibraryTemplateHTML'}, |
{'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): |
def getImagePath(self): |
"""Pfad zu den Images""" |
"""Pfad zu den Images""" |
|
path=None |
|
|
if os.path.isdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg')): |
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')): |
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')): |
|
|
|
|
|
pagesHi = os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi')) |
|
if path is None: |
|
return os.path.join(self.vlp_basis,self.resourceID,'pagesHi') |
|
|
|
pages = os.listdir(path) |
|
|
|
if len (pagesHi) > len(pages): |
|
|
|
countHi=0 |
|
for p in pagesHi: |
|
dat,ext = os.path.splitext(p) |
|
if ext.lower() in [".tiff",".tif",".jpg"]: |
|
countHi+=1 |
|
count=0 |
|
for p in pages: |
|
dat,ext = os.path.splitext(p) |
|
if ext.lower() in [".tiff",".tif",".jpg"]: |
|
count+=1 |
|
|
|
if countHi > count: |
|
path=os.path.join(self.vlp_basis,self.resourceID,'pagesHi') |
|
|
|
logging.error("pages < pagesHi: %s"%self.resourceID) |
|
if path is None: |
|
|
|
|
|
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: |
else: |
return "<error>no images </error>" |
|
|
|
|
logging.error("no images: %s"%self.resourceID) |
|
return None |
|
|
|
return path |
|
|
|
|
def transcription(self): |
def transcription(self): |
Line 866 class VLP_resource(ECHO_resource,Cacheab
|
Line 949 class VLP_resource(ECHO_resource,Cacheab
|
|
|
ret+="</text>" |
ret+="</text>" |
re2=ret[0:] |
re2=ret[0:] |
re3=re2.decode('latin-1').encode('utf-8') |
re3=self.unicodify(re2) |
#re3=re2 |
#re3=re2 |
ft=self.ZopeFind(self,obj_metatypes=['ECHO_fullText']) |
ft=self.ZopeFind(self,obj_metatypes=['ECHO_fullText']) |
|
|
Line 887 class VLP_resource(ECHO_resource,Cacheab
|
Line 970 class VLP_resource(ECHO_resource,Cacheab
|
else: |
else: |
return "no: %s"%self.getId() |
return "no: %s"%self.getId() |
|
|
|
def hasTranscription(self): |
|
"""transcription""" |
|
|
|
if not hasattr(self,'fulltext'): |
|
self.copyTranscriptionFromDB() |
|
if not hasattr(self,'fulltext'): #still not |
|
self._setObject('fulltext',None) |
|
|
|
if self.fulltext is None: |
|
return False |
|
else: |
|
return True |
|
|
def resetMetaLink(self,all="no",RESPONSE=None): |
def resetMetaLink(self,all="no",RESPONSE=None): |
"""resets metalink to standard resp. in case of server change it sets to the new server url""" |
"""resets metalink to standard resp. in case of server change it sets to the new server url""" |
if all=="yes": |
if all=="yes": |
Line 955 class VLP_resource(ECHO_resource,Cacheab
|
Line 1051 class VLP_resource(ECHO_resource,Cacheab
|
RESPONSE.redirect('manage_main') |
RESPONSE.redirect('manage_main') |
|
|
|
|
def index_meta(self): |
def index_meta(self,RESPONSE=None): |
"""index_meta""" |
"""index_meta""" |
|
|
pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','index_meta.zpt')).__of__(self) |
pt=PageTemplateFile(os.path.join(package_home(globals()),'vlp','index_meta.zpt')).__of__(self) |
pt.content_type="text/html" |
pt.content_type="text/xml" |
return pt() |
x= pt.pt_render() |
|
#logging.debug("index_meta 4:"+x) |
|
if RESPONSE: |
|
RESPONSE.setHeader("Content-Type","text/xml") |
|
return x |
def file2page(self,p): |
def file2page(self,p): |
"""converts filename to pagenumber""" |
"""converts filename to pagenumber""" |
|
|
Line 1029 class VLP_resource(ECHO_resource,Cacheab
|
Line 1128 class VLP_resource(ECHO_resource,Cacheab
|
ret="%s: %s"%(str[0],name) |
ret="%s: %s"%(str[0],name) |
return ret |
return ret |
|
|
try: |
self.imagePathFull=self.getImagePath(); |
ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg')) |
self.imagePath=self.imagePathFull.split("/")[-1] |
self.imagePath='pageimg' |
if (self.imagePath is None): |
except: |
return None |
ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pages')) |
|
self.imagePath='pages' |
|
temp=[] |
temp=[] |
|
ret = os.listdir(self.imagePathFull) |
|
|
ret.sort() |
ret.sort() |
for x in ret: |
for x in ret: |
if (not (x[0] in ('.',':'))) and (not x[0:4] in excludeNames): |
if (not (x[0] in ('.',':'))) and (not x[0:4] in excludeNames): |
Line 1154 class VLP_resource(ECHO_resource,Cacheab
|
Line 1254 class VLP_resource(ECHO_resource,Cacheab
|
zt=getattr(self,'index.xml') |
zt=getattr(self,'index.xml') |
if not forceUpdate: |
if not forceUpdate: |
# check if directory is newer (self.imagePath sould be set by now) |
# 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) |
dirtime = os.path.getmtime(imgdir) |
zttime = zt.bobobase_modification_time() |
zttime = zt.bobobase_modification_time() |
logging.debug("createindexfile: dir %s of %s index of %s"%(imgdir,dirtime,zttime)) |
logging.debug("createindexfile: dir %s of %s index of %s"%(imgdir,dirtime,zttime)) |