# hilfsfunktionen
import os.path
from types import *
import xml.dom.minidom
import zLOG
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+""+str(node.nodeName)+": | "+getText(node.childNodes)+" |
"
#print rc
return rc+"
"
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 zurück 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
print "test video",path
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())