Annotation of OSA_system2/OSAS_server.py, revision 1.1
1.1 ! dwinter 1: import os
! 2: import os.path
! 3: import stat
! 4: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
! 5: from Globals import InitializeClass,package_home
! 6: from OFS.SimpleItem import SimpleItem
! 7: import xml.dom.minidom
! 8: import OSAS_helpers
! 9: from OSAS_helpers import *
! 10:
! 11: class OSAS_storeOnlineServer(SimpleItem):
! 12: """Server for store Online system"""
! 13:
! 14: meta_type="OSAS_server"
! 15:
! 16: def findIndexMeta(self,realPath=""):
! 17: """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file
! 18: @keyword path: default ist "", Pfad auf das Object
! 19: @return: None falls kein index.meta existiert sonst Pfad auf das index.meta
! 20: """
! 21:
! 22: #suche index.meta
! 23: while (not os.path.exists(os.path.join(realPath,'index.meta'))) and (not ((realPath=="") or (realPath=="/"))):
! 24: realPath=os.path.split(realPath)[0]
! 25:
! 26: if realPath=='' or realPath=='/':
! 27: if os.path.exists(os.path.join(realPath,'index.meta')):
! 28: return (os.path.join(realPath,'index.meta'))
! 29: else:
! 30: return None
! 31: else:
! 32: return os.path.join(realPath,'index.meta')
! 33:
! 34: def findIndexMetaWithStats(self,path=""):
! 35: """finde Rueckwaerts im Baum von Pfad ausgehend, dass erste index.meta file
! 36: @keyword path: default ist "", Pfad auf das Object
! 37: @return: None falls kein index.meta existiert sonst Tupel (Pfad auf das index.meta,stats(indexMeta)
! 38: """
! 39:
! 40: indexMeta=self.findIndexMeta(path)
! 41: if indexMeta:
! 42: return (indexMeta,self.getStat(indexMeta))
! 43: else:
! 44: return (None,[])
! 45:
! 46:
! 47: def getStat(self,path=""):
! 48: """Gibt stat von path aus
! 49: @keyword path: default ist "", Pfad
! 50: @return: stat[path]"""
! 51:
! 52: if not os.path.exists(path):
! 53: #return None,"(ERROR) path %s does not exist."%path
! 54: return None
! 55: else:
! 56: return [x for x in os.stat(path)]
! 57:
! 58:
! 59:
! 60:
! 61: def listdir(self,path=""):
! 62: """list dir"""
! 63: return os.listdir(path)
! 64:
! 65:
! 66: def getMetaFile(self,path):
! 67: """get index.meta and translate it to HTML"""
! 68: html=[]
! 69:
! 70: if not os.path.exists(path+"/index.meta"):
! 71:
! 72: return self.getMetaInfoFromIndexMeta(path)
! 73: #return "NO_METADATA"
! 74: else:
! 75:
! 76: f = os.popen("cat "+path+"/index.meta","r")
! 77: lines = f.read()
! 78:
! 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
! 126:
! 127:
! 128: def getMetaInfoFromIndexMeta(self,path):
! 129: """metadaten zu path als html aus dem index.meta file zu path (meta tag im file bzw. dir container)
! 130: @param path: Pfad auf das Object relativ zum rootFolderName
! 131: @return: metadata als html
! 132: """
! 133: xmlInfos=self.findEntryInIndexMeta(path)
! 134: if xmlInfos:
! 135: return OSAS_helpers.getMetaInfoFromXML(path,xmlInfos)
! 136: else:
! 137: return ""
! 138:
! 139: def findEntryInIndexMeta(self,path):
! 140: """Finde im naechstgelegenden index.meta relativ zu path den entprechenden Eintrag fuer diesen Pfad.
! 141: @param path: Pfad auf das Object relativ zum rootFolderName
! 142: @return: den Teil von Index.meta der Informationen zu path enthaelt, None wenn error.
! 143: """
! 144:
! 145: indexMeta=self.findIndexMeta(path) # suche index.meta
! 146:
! 147: if not indexMeta:
! 148: return None
! 149:
! 150: realPath=os.path.split(indexMeta)[0]
! 151: path=os.path.normpath(path)
! 152:
! 153: try:
! 154: dom=xml.dom.minidom.parse(indexMeta)
! 155: except:
! 156: zLOG.LOG("OSAS_browser (findEntryInIndexMeta)",zLOG.ERROR,"Cannot parse: %s"%indexMeta)
! 157: #ist path ein directory?
! 158: dirs=dom.getElementsByTagName('dir')
! 159: for dir in dirs:
! 160: pathes=dir.getElementsByTagName('path')
! 161: if pathes:
! 162: pathX=OSAS_helpers.getText(pathes[0].childNodes)
! 163: else:
! 164: pathX=""
! 165: names=dir.getElementsByTagName('name')
! 166: if names:
! 167: name=OSAS_helpers.getText(names[0].childNodes)
! 168: else:
! 169: name=""
! 170:
! 171: checkpath=os.path.normpath(os.path.join(realPath,pathX,name))
! 172: if checkpath==path:
! 173:
! 174: return dir.toxml()
! 175:
! 176: #ist path ein file?
! 177: files=dom.getElementsByTagName('file')
! 178: for dir in dirs:
! 179: pathes=dir.getElementsByTagName('path')
! 180: if pathes:
! 181: pathX=OSAS_helpers.getText(pathes[0].childNodes)
! 182: else:
! 183: pathX=""
! 184: names=dir.getElementsByTagName('name')
! 185: if names:
! 186: name=OSAS_helpers.getText(names[0].childNodes)
! 187: else:
! 188: name=""
! 189:
! 190: checkpath=os.path.normpath(os.path.join(realPath,pathX,name))
! 191: if checkpath==path:
! 192:
! 193: return dir.toxml()
! 194:
! 195:
! 196: return None
! 197:
! 198:
! 199: def manage_addOSAS_storeOnlineServerForm(self):
! 200: """interface for adding the OSAS_storeOnline"""
! 201: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addStoreOnlineServer.zpt')).__of__(self)
! 202: return pt()
! 203:
! 204: def manage_addOSAS_storeOnlineServer(self,id,RESPONSE=None):
! 205: """add the OSAS_storeOnline
! 206: @param id: id
! 207: """
! 208: newObj=OSAS_storeOnlineServer(id)
! 209: self._setObject(id,newObj)
! 210: if RESPONSE is not None:
! 211: RESPONSE.redirect('manage_main')
! 212:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>