# HG changeset patch # User dwinter # Date 1319398142 -7200 # Node ID 9a1e75e708e1730484078fdb8015ee84a7ec5459 # Parent bd3025a6a6c06a4c2e1d3e056682313815878451 small bugs in metadata context field in metadata docinfo added osa_system2 nicht mehr noetig diff -r bd3025a6a6c0 -r 9a1e75e708e1 MetaData.py --- a/MetaData.py Thu Aug 04 16:55:22 2011 +0200 +++ b/MetaData.py Sun Oct 23 21:29:02 2011 +0200 @@ -96,7 +96,7 @@ """returns the subtree (list) of the dom rooted in this element""" if dom is None: # get from server - md = self.getDomFromPathOrUrl(path) + dom = self.getDomFromPathOrUrl(path) # ElementTree doesn't like absolute paths # lets assume dom is rooted in the first element @@ -253,13 +253,15 @@ if allFields and len(mappedData) < len(data): # add fields that were not in fields for bk in data.keys(): - if bk in mappedData or not data[bk]: + if bk in mappedData or not data[bk] or bk[0]=='@': continue + mappedData[bk] = {'tag':bk, 'label':bk, 'value':data[bk]} mappedList.append(bk) mappedData['@fieldList'] = mappedList + mappedData['@type'] = data.get('@type',None) return mappedData def getDCMappedData(self, data, allFields=False): diff -r bd3025a6a6c0 -r 9a1e75e708e1 MetaDataFolder.py --- a/MetaDataFolder.py Thu Aug 04 16:55:22 2011 +0200 +++ b/MetaDataFolder.py Sun Oct 23 21:29:02 2011 +0200 @@ -125,6 +125,7 @@ def getXmlPathObj(self, xmlpath): """returns object at xmlpath""" # make xmlpath relative for Zope + logging.debug("XMlPAth:"+xmlpath) if xmlpath[0] == '/': xmlpath = xmlpath[1:] @@ -198,6 +199,13 @@ # information is two tags deep - recursive=1 return self.getXmlPathFormatted('resource/meta/access-conditions/copyright', template, path=path, dom=dom, data=data, recursive=recursive, all=all) + def getContextData(self, path=None, dom=None, all=True): + """returns contents of context tag as dict""" + # information is two tags deep - recursive=1 + + return self.getXmlPathData('resource/meta/context', path=path, dom=dom, all=all) + + def getBibData(self, path=None, dom=None): """returns contents of bib tag as dict""" return self.resource.meta.bib.getData(path=path, dom=dom) diff -r bd3025a6a6c0 -r 9a1e75e708e1 MetaDataMapping.py --- a/MetaDataMapping.py Thu Aug 04 16:55:22 2011 +0200 +++ b/MetaDataMapping.py Sun Oct 23 21:29:02 2011 +0200 @@ -59,7 +59,10 @@ def getFieldList(self): """returns ordered list of fields""" - return self.fieldList + if self.fieldList is None: + # create fieldList + self.fieldList = fields.keys() + return self.fieldList # convenience method def getAt(self, array, idx, default=None): diff -r bd3025a6a6c0 -r 9a1e75e708e1 OSAS_helpers.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/OSAS_helpers.py Sun Oct 23 21:29:02 2011 +0200 @@ -0,0 +1,203 @@ +# hilfsfunktionen +import os.path +from types import * +import xml.dom.minidom +import logging + +#ersetzt logging +def logger(txt,method,txt2): + """logging""" + logging.info(txt+ txt2) + + + +OSASObjectTypes=['OSAS_metaDataFile','OSAS_dir','Osas_file','OSAS_imageFolder','OSAS_dir_archive','OSAS_file_archive','OSAS_videoFolder','OSAS_videoFile','OSAS_videoFolder'] +OSASDirObjects=['OSAS_dir','OSAS_imageFolder',] +OSASExcludedFiles=['TheVolumeSettingsFolder','TheFindByContentFolder'] + + +def getText(nodelist): + """gibt text aus nodelist""" + rc = "" + for node in nodelist: + if node.nodeType == node.TEXT_NODE: + rc = rc + node.data + return rc + +def getMetaInfoFromXML(path,xmlInfo): + """get index.meta and translate it to HTML""" + html=[] + + dom = xml.dom.minidom.parseString(xmlInfo) + try: + name=getText(dom.getElementsByTagName("name")[0].childNodes) + except: + name="NOT_DEFINED!!!" + try: + creator=getText(dom.getElementsByTagName("creator")[0].childNodes) + except: + creator="NOT_DEFINED!!!" + + try: + creation_date=getText(dom.getElementsByTagName("archive-creation-date")[0].childNodes) + except: + creation_date="NOT_DEFINED!!!" + + try: + description=getText(dom.getElementsByTagName("description")[0].childNodes) + except: + description="NOT_DEFINED!!!" + + try: + type=getText(dom.getElementsByTagName("content-type")[0].childNodes) + except: + type="" + if type=="scanned document": + html="

Document: "+name+"

" + elif type=="folder": + html="

Folder: "+name+"

" + else: + html="

Document: "+name+"

" + + html=html+"

created by: "+creator+" at: "+creation_date+"

" + html=html+"

Description

"+description+"

" + try: + bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0] + if bib.attributes.has_key('type'): + html=html+"

Info ("+bib.attributes['type'].value+")

" + else: + html=html+"

Info

" + html=html+getBib(bib.childNodes) + + except: + """none""" + +# html=html.encode('utf-8','replace')+getBib(bib.childNodes).encode('utf-8','replace') + + + return html + + +def getBib(nodelist): + """ translate bibliographical entries """ + rc= "" + + for node in nodelist: + + if node.nodeType == node.ELEMENT_NODE: + """nothing""" + + rc = rc+"" + + #print rc + return rc+"
"+str(node.nodeName)+": "+getText(node.childNodes)+"
" + +def getPropertyOfDirs(indexMeta,propertyName): + """gibt Eigenschaften der directorys gemaess Index.metas file in path aus + @param indexMeta: index.meta file + @param propertyName: Property die ausgegebenwerden soll + @return: Hash mit key name des Directories and Value von property, None if error. + """ + ret={} + + try: + dom=xml.dom.minidom.parseString(indexMeta) + + rootProp=xml.xpath.Evaluate("/resource/%s"%propertyName,dom) + if len(rootProp)==1: + property= getText(rootProp[0].childNodes) + ret["."]=property + + for node in dom.getElementsByTagName("dir"): + try: + property= getText(node.getElementsByTagName(propertyName)[0].childNodes) + dirName=getText(node.getElementsByTagName("name")[0].childNodes) + ret[dirName]=property + except: + ret[dirName]=none + return ret + except: + + return ret + + +def dirHasProperty(path,indexMeta,propertyName,propertyValue): + """gibt 1 zurueck falls path hat propertyName und properName=propertyValue + @param propertyName:Property von path in index.meta des parent folders von path + @param propertyValue:Wert der Property + @param path: Pfad der getestet werden soll + """ + if getPropertyOfDirs(indexMeta,propertyName).get(os.path.split(path)[1],None)==propertyValue: + return 1 + else: + return 0 + +def isImageFolder(path,indexMeta): + """check if folder contains images without metadata or with metadata""" + # metadaten ergeben imagefolder + if dirHasProperty(path,indexMeta,'content-type','images'): + return 1 + +def isVideoFolder(path,indexMeta): + """check if folder contains images without metadata or with metadata""" + # metadaten ergeben imagefolder + + if dirHasProperty(path,indexMeta,'media-type','video'): + return 1 + +def isVideoStream(path,indexMeta): + if dirHasProperty(path,indexMeta,'container-format','quicktime'): + return 1 + +def isImageFolderGuess(path): + """check if folder contains images without metadata or with metadata""" + #sonst rate ob folder images enthaelten durch test nach suffix + try: + dir=os.listdir(path) + + imagesuffixes=['.gif','.jpg','.jpeg','.png','.tiff','.tif'] + ret="" + for a in dir: + + suffix=os.path.splitext(a)[1].lower() + + if suffix in imagesuffixes: + return 1 + + return 0 + + except: + return 0 + +def checkOSASFileType(object): + """checke filetype + nicht erkannte type auf werden auf none gesetzt + """ + if os.path.split(object)[1][0]=="." or os.path.split(object)[1] in OSASExcludedFiles: + return None + elif isImageFolderGuess(object): + return 'OSAS_imageFolder' + elif os.path.split(object)[1]=="index.meta": + return 'OSAS_metaDataFile' + elif os.path.isdir(object): + return 'OSAS_dir' + elif os.path.isfile(object): + return 'OSAS_file' + +def toList(fields): + """Einzelfeld in Liste umwandeln + @param fields: String oder Array + @return: gibt liste zurueck + + """ + if type(fields)==StringType: + return [fields] + else: + return fields + + +def localDate(): + """gives formatted local date""" + return strftime("%d.%m.%Y",localtime()) + + diff -r bd3025a6a6c0 -r 9a1e75e708e1 OSAS_metadata.py --- a/OSAS_metadata.py Thu Aug 04 16:55:22 2011 +0200 +++ b/OSAS_metadata.py Sun Oct 23 21:29:02 2011 +0200 @@ -10,7 +10,7 @@ import xml.dom.minidom import xml.dom.pulldom #TODO: get rid of this -from Products.OSA_system2 import OSAS_helpers +import OSAS_helpers import logging #ersetzt logging