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