1: # hilfsfunktionen
2: import os.path
3: from types import *
4: import xml.dom.minidom
5: import zLOG
6:
7: OSASObjectTypes=['OSAS_metaDataFile','OSAS_dir','OSAS_file','OSAS_imageFolder','OSAS_dir_archive','OSAS_file_archive','OSAS_videoFolder','OSAS_videoFile']
8: OSASExcludedFiles=['TheVolumeSettingsFolder','TheFindByContentFolder']
9:
10:
11: def getText(nodelist):
12: """gibt text aus nodelist"""
13: rc = ""
14: for node in nodelist:
15: if node.nodeType == node.TEXT_NODE:
16: rc = rc + node.data
17: return rc
18:
19: def getMetaInfoFromXML(path,xmlInfo):
20: """get index.meta and translate it to HTML"""
21: html=[]
22:
23: dom = xml.dom.minidom.parseString(xmlInfo)
24: try:
25: name=getText(dom.getElementsByTagName("name")[0].childNodes)
26: except:
27: name="NOT_DEFINED!!!"
28: try:
29: creator=getText(dom.getElementsByTagName("creator")[0].childNodes)
30: except:
31: creator="NOT_DEFINED!!!"
32:
33: try:
34: creation_date=getText(dom.getElementsByTagName("archive-creation-date")[0].childNodes)
35: except:
36: creation_date="NOT_DEFINED!!!"
37:
38: try:
39: description=getText(dom.getElementsByTagName("description")[0].childNodes)
40: except:
41: description="NOT_DEFINED!!!"
42:
43: try:
44: type=getText(dom.getElementsByTagName("content-type")[0].childNodes)
45: except:
46: type=""
47: if type=="scanned document":
48: html="<h3>Document: "+name+"</h3>"
49: elif type=="folder":
50: html="<h3>Folder: "+name+"</h3>"
51: else:
52: html="<h3>Document: "+name+"</h3>"
53:
54: html=html+"<p><i>created by: "+creator+" at: "+creation_date+"</i></p>"
55: html=html+"<h4>Description</h4><p>"+description+"</p>"
56: try:
57: bib = dom.getElementsByTagName("meta")[0].getElementsByTagName("bib")[0]
58: if bib.attributes.has_key('type'):
59: html=html+"<h4>Info ("+bib.attributes['type'].value+")</h4>"
60: else:
61: html=html+"<h4>Info</h4>"
62: html=html+getBib(bib.childNodes)
63:
64: except:
65: """none"""
66:
67: # html=html.encode('utf-8','replace')+getBib(bib.childNodes).encode('utf-8','replace')
68:
69:
70: return html
71:
72:
73: def getBib(nodelist):
74: """ translate bibliographical entries """
75: rc= "<table border='0'>"
76:
77: for node in nodelist:
78:
79: if node.nodeType == node.ELEMENT_NODE:
80: """nothing"""
81:
82: rc = rc+"<tr><td valign='right'>"+str(node.nodeName)+":</td><td> "+getText(node.childNodes)+"</td></tr>"
83:
84: #print rc
85: return rc+"</table>"
86:
87: def getPropertyOfDirs(indexMeta,propertyName):
88: """gibt Eigenschaften der directorys gemaess Index.metas file in path aus
89: @param indexMeta: index.meta file
90: @param propertyName: Property die ausgegebenwerden soll
91: @return: Hash mit key name des Directories and Value von property, None if error.
92: """
93: ret={}
94:
95: try:
96: dom=xml.dom.minidom.parseString(indexMeta)
97:
98: rootProp=xml.xpath.Evaluate("/resource/%s"%propertyName,dom)
99: if len(rootProp)==1:
100: property= getText(rootProp[0].childNodes)
101: ret["."]=property
102:
103: for node in dom.getElementsByTagName("dir"):
104: try:
105: property= getText(node.getElementsByTagName(propertyName)[0].childNodes)
106: dirName=getText(node.getElementsByTagName("name")[0].childNodes)
107: ret[dirName]=property
108: except:
109: ret[dirName]=none
110: return ret
111: except:
112:
113: return ret
114:
115:
116: def dirHasProperty(path,indexMeta,propertyName,propertyValue):
117: """gibt 1 zurück falls path hat propertyName und properName=propertyValue
118: @param propertyName:Property von path in index.meta des parent folders von path
119: @param propertyValue:Wert der Property
120: @param path: Pfad der getestet werden soll
121: """
122: if getPropertyOfDirs(indexMeta,propertyName).get(os.path.split(path)[1],None)==propertyValue:
123: return 1
124: else:
125: return 0
126:
127: def isImageFolder(path,indexMeta):
128: """check if folder contains images without metadata or with metadata"""
129: # metadaten ergeben imagefolder
130: if dirHasProperty(path,indexMeta,'content-type','images'):
131: return 1
132:
133: def isVideoFolder(path,indexMeta):
134: """check if folder contains images without metadata or with metadata"""
135: # metadaten ergeben imagefolder
136: print "test video",path
137: if dirHasProperty(path,indexMeta,'media-type','video'):
138: return 1
139:
140: def isVideoStream(path,indexMeta):
141: if dirHasProperty(path,indexMeta,'container-format','quicktime'):
142: return 1
143:
144: def isImageFolderGuess(path):
145: """check if folder contains images without metadata or with metadata"""
146: #sonst rate ob folder images enthaelten durch test nach suffix
147: try:
148: dir=os.listdir(path)
149:
150: imagesuffixes=['.gif','.jpg','.jpeg','.png','.tiff','.tif']
151: ret=""
152: for a in dir:
153:
154: suffix=os.path.splitext(a)[1].lower()
155:
156: if suffix in imagesuffixes:
157: return 1
158:
159: return 0
160:
161: except:
162: return 0
163:
164: def checkOSASFileType(object):
165: """checke filetype
166: nicht erkannte type auf werden auf none gesetzt
167: """
168: if os.path.split(object)[1][0]=="." or os.path.split(object)[1] in OSASExcludedFiles:
169: return None
170: elif isImageFolderGuess(object):
171: return 'OSAS_imageFolder'
172: elif os.path.split(object)[1]=="index.meta":
173: return 'OSAS_metaDataFile'
174: elif os.path.isdir(object):
175: return 'OSAS_dir'
176: elif os.path.isfile(object):
177: return 'OSAS_file'
178:
179: def toList(fields):
180: """Einzelfeld in Liste umwandeln
181: @param fields: String oder Array
182: @return: gibt liste zurueck
183:
184: """
185: if type(fields)==StringType:
186: return [fields]
187: else:
188: return fields
189:
190:
191: def localDate():
192: """gives formatted local date"""
193: return strftime("%d.%m.%Y",localtime())
194:
195:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>