--- ECHO_content/ECHO_collection.py 2007/01/23 18:53:01 1.282 +++ ECHO_content/ECHO_collection.py 2008/11/20 10:45:15 1.298 @@ -42,6 +42,7 @@ from Products.ZCatalog.CatalogPathAwaren from Products.ZCTextIndex.ZCTextIndex import manage_addLexicon import urllib +import urllib2 import cgi import smtplib import time @@ -51,7 +52,7 @@ from Ft.Xml import EMPTY_NAMESPACE import Ft.Xml.XPath import cStringIO -import zLOG + import sys try: @@ -74,20 +75,24 @@ try: except: print "no echo_language" class ECHO_language: - """ leere Klasse""" - pass + """ leere Klasse""" + pass from ECHO_movie import * import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen import xmlrpclib - +import logging +#ersetzt logging.info +def logger(txt,method,txt2): + """logging""" + logging.info(txt+ txt2) def normalizeCt(str): - """normalizes content_type""" - #str= str.replace(" ","_") - return str.replace("-"," ").lower() + """normalizes content_type""" + #str= str.replace(" ","_") + return str.replace("-"," ").lower() def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs=""): @@ -191,12 +196,15 @@ class ECHO_locale(ZopePageTemplate): meta_type="ECHO_locale" def __init__(self,id,lang,title,label,text=None,content_type=None): - self.lang=lang - self.title=title - self.label=label - if text: - self.pt_edit(text, content_type) - self.id=id + self.lang=lang + self.title=title + self.label=label + # default content + if not text: + text = open(self._default_content_fn).read() + content_type = 'text/html' + self.pt_edit(text, content_type) + self.id=id manage_options = ZopePageTemplate.manage_options+( {'label':'Main Config','action':'change_ECHO_localeForm'}, @@ -213,6 +221,8 @@ class ECHO_locale(ZopePageTemplate): self.title=title self.label=label if not text is None: + if content_type is None: + content_type = self.content_type self.pt_edit(text, content_type) if RESPONSE is not None: @@ -302,6 +312,8 @@ class ECHO_layoutTemplate(ZopePageTempla if text is None: self._default_content_fn = os.path.join(package_home(globals()),'zpt','ECHO_%s_template_standard.zpt'%EchoType) text = open(self._default_content_fn).read() + if content_type is None: + content_type = self.content_type self.pt_edit(text, content_type) @@ -359,7 +371,7 @@ class ECHO_fullText(ZopePageTemplate,ECH def getPage(self,nr='1'): """get page n""" #return self().encode('latin-1','ignore') - try: + try: dom=xml.dom.minidom.parseString(self()) except: dom=xml.dom.minidom.parseString(self().encode('latin-1')) @@ -417,6 +429,22 @@ class ECHO_resource(CatalogAware,Folder, getSubCols = ECHO_helpers.getSubCols + def index_meta(self,RESPONSE=None): + """ gibt das im metalink gespeicher xml-file zurueck""" + url = self.metalink + txt="" + logging.debug("ml:%s"%url) + try: + page = urllib.urlopen(url); + if RESPONSE: + RESPONSE.setHeader("Content-Type","text/xml") + + txt = page.read(); + except: + logging.error("Cannot read metadata of: %s"%self.getId()) + + return txt + def reindex(self): """generate fields for indexing and reindex""" @@ -619,7 +647,7 @@ class ECHO_resource(CatalogAware,Folder, try: urllib.urlopen(url) except: - zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_Resource (getAccessRightMD)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) return None,getattr(self,'accessRight','') @@ -627,7 +655,7 @@ class ECHO_resource(CatalogAware,Folder, try: dom = NonvalidatingReader.parseUri(url) except: - zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_Resource (getAccessRightMD)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) return (None,"Cannot parse: "+url+"
"+"%s (%s)"%sys.exc_info()[0:2]) @@ -763,7 +791,7 @@ class ECHO_resource(CatalogAware,Folder, if (not resourcepath) or (not digiliburlprefix) or (not images): - zLOG.LOG("ECHO (createImageUrl)",zLOG.ERROR,"Cannot create ImageUrl for %s"%self.absolute_url()) + logger("ECHO (createImageUrl)",logging.ERROR,"Cannot create ImageUrl for %s"%self.absolute_url()) return None resourcepath=resourcepath.replace('/mpiwg/online','') if not digiliburlprefix: digiliburlprefix="http://echo.mpiwg-berlin.mpg.de/zogilib?" @@ -896,8 +924,8 @@ class ECHO_resource(CatalogAware,Folder, break; except: - zLOG.LOG("ECHO_ressource (changeViewerTemplateSet)", zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2]) - zLOG.LOG("ECHO_ressource (changeViewerTemplateSet)", zLOG.ERROR,'http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))) + logger("ECHO_ressource (changeViewerTemplateSet)", logging.ERROR,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_ressource (changeViewerTemplateSet)", logging.ERROR,'http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))) #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params) # hack Pfad auf die Dokumente path=self.metalink @@ -913,8 +941,8 @@ class ECHO_resource(CatalogAware,Folder, try: return ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines() except: - zLOG.LOG("ECHO_Resource (changeViewerTemplateSet)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2]) - zLOG.LOG("ECHO_Resource (changeViewerTemplateSet)", zLOG.INFO,"http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path) + logger("ECHO_Resource (changeViewerTemplateSet)", logging.INFO,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_Resource (changeViewerTemplateSet)", logging.INFO,"http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path) if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -936,17 +964,17 @@ class ECHO_resource(CatalogAware,Folder, """getFullTextXML; gives the FullText as an XML Document, and if somthing goes wrong.""" try: - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink) + #logger("ECHO Fulltext",logging.INFO,"open %s"%self.metalink) fh=ECHO_helpers.urlopen(self.metalink) - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"opened %s"%self.metalink) + #logger("ECHO Fulltext",logging.INFO,"opened %s"%self.metalink) dom=xml.dom.minidom.parse(fh) texttools=dom.getElementsByTagName('texttool') text=texttools[0].getElementsByTagName('text') texturl=getText(text[0].childNodes) - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"found %s"%texturl) + #logger("ECHO Fulltext",logging.INFO,"found %s"%texturl) fh.close() - #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"closed fh") + #logger("ECHO Fulltext",logging.INFO,"closed fh") #keine url if not (texturl.split(":")[0] in ['http','ftp','file']): if not noredirect: @@ -956,7 +984,7 @@ class ECHO_resource(CatalogAware,Folder, if not noredirect: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') - zLOG.LOG("ECHO Fulltext",zLOG.INFO,"redirect to:%s"%texturl) + logger("ECHO Fulltext",logging.INFO,"redirect to:%s"%texturl) self.REQUEST.RESPONSE.redirect(texturl) else: return texturl @@ -1172,8 +1200,26 @@ class ECHO_resource(CatalogAware,Folder, only if metalink is set, otherwise it gives false """ + texterUrl="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Texter?fn=/" + vl,msg=self.checkValidityOfMetaLink() + if not vl: #ungueltiger link, versuche neuen + newStr=re.match(".*/mpiwg/online/(.*)",self.metalink) # suche pfad hinter /mpiwg/online + oldLink=self.metalink + + if newStr: + self.metalink=texterUrl+newStr.group(1) + vl,msg=self.checkValidityOfMetaLink() + else: + logging.error("change Viewer XX(mew Metadatafile) %s"%self.metalink) + vl=False + + if not vl: # geht immer noch nicht, dann setzte wieder zurueck + self.metalink=oldLink + + logging.info("change Viewer (mew Metadatafile) %s"%self.metalink) + if vl: self.newViewer=newViewer return vl,msg @@ -1279,7 +1325,7 @@ class ECHO_resource(CatalogAware,Folder, self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)] self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)] except: - zLOG.LOG("ECHO_collection (changeECHO_resource_metadata)",zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2]) + logger("ECHO_collection (changeECHO_resource_metadata)",logging.ERROR,"%s (%s)"%sys.exc_info()[0:2]) print self.newMetaXML() tries=0 @@ -1300,12 +1346,12 @@ class ECHO_resource(CatalogAware,Folder, """returns value for simple search""" try: - return " ".join([self.getMDValue('title',generic="yes",empty=" "), - self.getMDValue('author',generic="yes",empty=" "), - self.getMDValue('year',generic="yes",empty=" "),self.getTitle()]) + return " ".join([self.getMDValue('title',generic="yes"), + self.getMDValue('author',generic="yes"), + self.getMDValue('year',generic="yes"),self.getTitle()]) except: - #zLOG.LOG(" ECHO_collection(getMDSimpleSearchField)",zLOG.INFO," ".join([self.getMDValue('title',generic="yes"), + #logger(" ECHO_collection(getMDSimpleSearchField)",logging.INFO," ".join([self.getMDValue('title',generic="yes"), # self.getMDValue('author',generic="yes"), # self.getMDValue('year',generic="yes"),''])) return "" @@ -1320,13 +1366,13 @@ class ECHO_resource(CatalogAware,Folder, ct=self.contentType.replace(" ","_").lower() ct=self.contentType.replace("-","_").lower() else: - zLOG.LOG("ECHO_collection (getMDValue)", zLOG.INFO, "no_content type for %s"%self.getId()) + logger("ECHO_collection (getMDValue)", logging.INFO, "no_content type for %s"%self.getId()) ct="" #caching if not hasattr(self,'_v_mapHash'): #noch keine cachevariable self._v_mapHash={} - + tmp=self._v_mapHash.get(ct,None) @@ -1342,27 +1388,21 @@ class ECHO_resource(CatalogAware,Folder, self._v_mapHash[ct][fieldNameTest]=fieldName if not fieldName: fieldName=fieldNameTest - if empty is None: + if not empty: #FIXME: warum gibt es manchmal kein metadatahas try: ret =self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%normalizeCt(self.contentType)) except: - zLOG.LOG("ECHO (line 1069)",zLOG.ERROR,"no md hash for %s"%self.getId()) + logger("ECHO (line 1069)",logging.ERROR,"no md hash for %s"%self.getId()) return "" else: - try: + ret= self.metaDataHash.get(fieldNameTest,empty) - except: - zLOG.LOG("ECHO (line 1069)",zLOG.ERROR,"no md hash for %s"%self.getId()) - return "" - - if type(ret) is StringType: - return ret.decode('utf-8') - else: - return ret + + return unicodify(ret) getFieldValue=getMDValue #depricated @@ -1423,6 +1463,10 @@ class ECHO_resource(CatalogAware,Folder, self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml') return writeMetadata(self.metalink,self.metaDataHash) + def getMetaDataLink(self): + """get link to the meta data""" + return self.metalink + def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None): """Aenderung der Properties""" @@ -1518,7 +1562,7 @@ class ECHO_resource(CatalogAware,Folder, tags=self.findTagsFromMapping(normalizeCt(self.contentType)) self.referencetypes=tags[2] for referenceTypeF in self.referencetypes: - + if normalizeCt(referenceTypeF[1].title) == normalizeCt(referenceType.lower()): @@ -1755,7 +1799,7 @@ class ECHO_externalLink(Folder,ECHO_basi - def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords): + def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords,linkType): self.id = id """Festlegen der ID""" @@ -1770,6 +1814,8 @@ class ECHO_externalLink(Folder,ECHO_basi self.responsible=responsible coordsnew=[ string.split(x,",") for x in coords] self.coords=coordsnew + self.linkType = linkType # Linktypen 'otherPresentation','external' + def ECHO_externalLink_config(self): """Main configuration""" @@ -1785,25 +1831,50 @@ class ECHO_externalLink(Folder,ECHO_basi return pt() - def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None): + def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None,linkType='otherPresentation'): """Aenderung der Properties""" setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight) self.link=link + self.linkType = linkType if RESPONSE is not None: RESPONSE.redirect('manage_main') + def getLinkType(self): + """ return linkType """ + if hasattr(self,"linkType"): + return self.linkType + else : + return 'otherPresentation' + + def setLinkType(self,type): + """ set linkType """ + self.linkType = type + + def checkLink(self): + """ returns tuple (isWorking,Error) """ + try: + urllib2.urlopen(self.link) + return (True, '') + except urllib2.HTTPError, e: + return (False, e.code) + except urllib2.URLError, e: + return (False, str(e.reason)) + except: + return (False, 'unknown Error') - manage_options = Folder.manage_options+( + + manage_options = ( {'label':'Main Config','action':'ECHO_externalLink_config'}, {'label':'Graphic Coords','action':'ECHO_graphicEntry'}, - ) + )+Folder.manage_options def index_html(self): """standard page""" return self.REQUEST.RESPONSE.redirect(self.link) + def manage_addECHO_externalLinkForm(self): """Form for external Links""" @@ -1811,10 +1882,10 @@ def manage_addECHO_externalLinkForm(self return pt() -def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None): +def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None,linkType='otherPresentation'): """Add an external Link""" - newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords) + newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords,linkType) self._setObject(id,newObj) @@ -1952,7 +2023,7 @@ class ECHO_link(ECHO_externalLink): params['backLink']=self.aq_parent.absolute_url() params['startLink']=splitted[0]+"?"+urllib.urlencode(params) - + return self.REQUEST.RESPONSE.redirect(splitted[0]+"?"+urllib.urlencode(params)) else: return "" @@ -1963,10 +2034,10 @@ def manage_addECHO_linkForm(self): return pt() -def manage_addECHO_link(self,id,title,label,description="",contentType="",responsible="",link="",weight="",coords=[],credits=None,RESPONSE=None): +def manage_addECHO_link(self,id,title,label,description="",contentType="",responsible="",link="",weight="",coords=[],credits=None,linkType="external",RESPONSE=None): """Add an external Link""" - newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords) + newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords,linkType) self._setObject(id,newObj) @@ -2117,16 +2188,16 @@ class ECHO_collection(CatalogAware, Fold if obj.meta_type=="ECHO_mapText": if splitted[1]=="en": - obj.locale_en.pt_edit(REQUEST.form[key],None) + obj.locale_en.pt_edit(REQUEST.form[key],obj.locale_en.content_type) else: - obj.pt_edit(REQUEST.form[key],None) + obj.pt_edit(REQUEST.form[key],obj.content_type) else: text=obj.ZopeFind(obj,obj_metatypes=['ECHO_mapText']) if splitted[1]=="en": - text[0][1].locale_en.pt_edit(REQUEST.form[key],None) + text[0][1].locale_en.pt_edit(REQUEST.form[key],text[0][1].locale_en.content_type) else: - text[0][1].pt_edit(REQUEST.form[key],None) + text[0][1].pt_edit(REQUEST.form[key],text[0][1].content_type) if RESPONSE is not None: RESPONSE.redirect('manage_main') @@ -2422,7 +2493,7 @@ class ECHO_collection(CatalogAware, Fold if ret and RESPONSE: RESPONSE.write("ok: %s\n"%txt) - #zLOG.LOG("ECHO (copyTitleToInfoXMLFolder)",zLOG.INFO,txt) + #logger("ECHO (copyTitleToInfoXMLFolder)",logging.INFO,txt) if RESPONSE is not None: RESPONSE.write("done!\n") RESPONSE.close() @@ -2540,8 +2611,24 @@ class ECHO_collection(CatalogAware, Fold manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None) return "done" except: - return None + logging.error("ECHOcollection: (AddResource): %s %s"%sys.exc_info()[0:2]) + return None + def addResourceAndCreateLabelAndTitle(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None): + """SSS""" + ret = self.addResource(id,title,label,description,contentType,responsible,link,metalink,weight,credits,coords,RESPONSE) + if ret is None: + return None + + try: + server2=getattr(self,id) + server2.copyIndex_meta2echo_resource() + server2.generate_label() + server2.generate_title() + except: + logging.error("An Error occured adding the resource A\n %s %s"%sys.exc_info()[0:2]) + return None + return "done" def getSecondaryLink(self): """secondary link""" try: @@ -2583,9 +2670,9 @@ class ECHO_collection(CatalogAware, Fold ret="""""" return ret+""+getCollection(self,pwstr=pwstr)+"" - def createAllJSAreas(self): + def createAllJSAreas(self,mapColTypes=None): """create area calls for JavaScript""" - areas = self.getAllMapAreas() + areas = self.getAllMapAreas(mapColTypes=mapColTypes) return self.createJSAreas(areas) @@ -2810,9 +2897,11 @@ class ECHO_collection(CatalogAware, Fold """javascript""" return sendFile(self, 'js/hl_add.js', 'text/plain') - def getAllMapAreas(self,mapColTypes=['ECHO_collection','ECHO_resource','ECHO_link','ECHO_externalLink']): + def getAllMapAreas(self,mapColTypes=None): """Give list of coordinates""" - + if mapColTypes is None: + mapColTypes=['ECHO_collection','ECHO_resource','ECHO_link','ECHO_externalLink'] + areas=[] for entry in self.getSubCols(subColTypes=mapColTypes): object=entry @@ -3150,6 +3239,12 @@ class ECHO_root(Folder,Persistent,Implic ) + def getECHORootURL(self): + return self.absolute_url() + + def getECHORoot(self): + return self + def copySearchFields(self,RESPONSE=None): """copys < metadatafields to the object""" resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1) @@ -3462,8 +3557,10 @@ class ECHO_root(Folder,Persistent,Implic """ret attribute if existing""" try: - return getattr(found,field).decode('ascii','ignore') + return getattr(found,field)#.decode('utf-8','ignore') except: + logging.error("can't: decode: %s"%repr(field)) + logging.error(" %s %s"%(sys.exc_info()[0],sys.exc_info()[1])) return "" security.declarePublic('getImageTag') @@ -3700,7 +3797,10 @@ class ECHO_root(Folder,Persistent,Implic def formatAscii(self,str,url=None): """ersetze ascii umbrueche durch
""" - #url=None + + if not str: + return "" + if url: retStr="" @@ -3712,9 +3812,10 @@ class ECHO_root(Folder,Persistent,Implic retStr+="""%s
"""%(strUrl,word) str=retStr if str: - return re.sub(r"[\n]","
",str) + str = re.sub(r"[\n]","
",str) + return unicodify(str) else: - return "" + return u"" link2html=vlp_xmlhelpers.link2html related2html=vlp_xmlhelpers.related2html @@ -3851,6 +3952,20 @@ class ECHO_root(Folder,Persistent,Implic self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") self.REQUEST.RESPONSE.write(ret) + def getCollectionsXML(self,viewerType=None,filter=None): + """gebe collections aus""" + ret=""" + """ + for resource in self.ZopeFind(self,obj_metatypes=['ECHO_collection','ECHO_group'],search_sub=1): + + echo_url=resource[1].absolute_url() + + ret+="""\n"""%urllib.quote(echo_url,safe='/:?') + ret +="""\n""" + + self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml") + self.REQUEST.RESPONSE.write(ret) + def getFullTextsXML(self,viewerType=None,filter=None): """gebe all ressourcen aus""" ret=""" @@ -4085,6 +4200,8 @@ class ECHO_linkList(ZopePageTemplate,ECH self.ZBindings_edit(self._default_bindings) if text is None: text = '' + if content_type is None: + content_type = self.content_type self.pt_edit(text, contentType)