File:  [Repository] / OSA_system2 / OSAS_helpers.py
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Thu Dec 23 10:48:28 2004 UTC (19 years, 5 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
added cache for indexmetafiles

    1: # hilfsfunktionen
    2: import os.path
    3: from types import *
    4: import xml.dom.minidom
    5: import zLOG
    6: 
    7: OSASObjectTypes=['OSAS_metaDataFile','OSAS_dir','OSAS_file','OSAS_imageFolder','OSAS_dir_archive','OSAS_file_archive']
    8: OSASExcludedFiles=['TheVolumeSettingsFolder','TheFindByContentFolder']
    9: 
   10: 
   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: 
   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')
   68: 
   69:     
   70:     return html
   71: 
   72: def getMetaFile(self,path):
   73:     """get index.meta and translate it to HTML"""
   74:     html=[]
   75:     if not os.path.exists(path+"/index.meta"):
   76:           return self.getMetaInfoFromIndexMeta(path)
   77:           #return "NO_METADATA"
   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:        
  127:        return html
  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>