File:  [Repository] / OSA_system2 / OSAS_server.py
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Thu Feb 10 19:50:18 2005 UTC (19 years, 3 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
server client solution per xmlrpc

    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>