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