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>