File:  [Repository] / OSA_system2 / OSAS_helpers.py
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Thu Dec 23 08:30:56 2004 UTC (19 years, 5 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
metadata oriented browser added

    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','OSAS_dir_archive','OSAS_file_archive']
    7: OSASExcludedFiles=['TheVolumeSettingsFolder','TheFindByContentFolder']
    8: 
    9: 
   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: 
   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):
   71:     """get index.meta and translate it to HTML"""
   72:     html=[]
   73:     if not os.path.exists(path+"/index.meta"):
   74:           return self.getMetaInfoFromIndexMeta(path)
   75:           #return "NO_METADATA"
   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>