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