Diff for /OSA_system2/OSAS_root.py between versions 1.1.1.1 and 1.7

version 1.1.1.1, 2004/11/29 09:48:07 version 1.7, 2005/03/07 21:25:41
Line 1 Line 1
 """ OSAS_contains the basic classes for configuring the OSAS and basic objects for displaying data. All site specific adaptation should be made in OSAS_Root"""  """ OSAS_contains the basic classes for configuring the OSAS and
   basic objects for displaying data.
   All site specific adaptation should be made in OSAS_Root
   """
   
 from OSAS_helpers import *  from OSAS_helpers import *
 import OSAS_helpers  import OSAS_helpers
Line 15  import xml.dom.minidom Line 18  import xml.dom.minidom
 from types import *  from types import *
 import zLOG  import zLOG
 import os.path  import os.path
   import Globals
 from Globals import package_home  from Globals import package_home
   from AccessControl import ClassSecurityInfo
   import xmlrpclib
   from xml.sax import make_parser
   from xml.sax.handler import ContentHandler
   import sys
   
   class OSAS_add_contextData(Folder):
       """Einfuegen eines Documentes in eine Collection"""
       
       security=ClassSecurityInfo()
   
               
       meta_type='OSAS_addObjectToCollection'    
   
       def XmlToTree(self,URL,pwstr=None):
           """Collection XML to Tree"""
           def spaces(depth):
               
               tmp=""
               k=0
               while k<2*depth:
                   k+=1
                   tmp=tmp+"&nbsp;"+"&nbsp;"
               return tmp
   
           class requestHandler(ContentHandler):
               def __init__(self):
                   self.depth=0
                   self.retStr=""
                   
               def startElement(self,name,attrs):
                   if name=="element":
                       self.depth+=1
                       begin=""
                       end=""
                       if self.depth==1:
                           begin="<b>"
                           end="</b>"
                           
                       self.retStr+=spaces(self.depth)+"<input type='radio' name='collection' value='%s'>%s</input>"%(attrs.get('url'),begin+urllib.unquote(attrs.get('name')))+end+"<br>\n"
   
   
                       
               def endElement(self,name):
                   if name=="element":
                       self.depth-=1
   
           if pwstr=="":
               pwstr=None
               
   
   
 class OSAS_viewerObject(Folder):          try:
               if pwstr:
                   URL+="/getCollectionTreeXML?pwstr=%s"%pwstr    
               else:
                   URL+="/getCollectionTreeXML"
               parser=make_parser()
               curHandler=requestHandler()
               parser.setContentHandler(curHandler)
   
               parser.parse(urllib.urlopen(URL))
               return curHandler.retStr.encode('utf-8')
   
           except:
               zLOG.LOG('OSAS_Root (addFileToDollection)',zLOG.ERROR,'%s %s'%sys.exc_info()[:2])
           return URL
               return urllib.urlopen(URL).read()
           
         
       def __init__(self,id,collection):
           self.id=id
           self.collection=collection
   
     
      
   
       def getPartners(self,URL):
           """Zeige Partnerliste"""
           class requestHandler(ContentHandler):
               def __init__(self):
                   self.ret=[]
                   
               def startElement(self,name,attrs):
                   if name=="partner":
                       self.ret.append((attrs.get('id'),attrs.get('title').encode('utf-8')))
   
   
           URL+="/getPartnersXML"
           parser=make_parser()    
       curHandler=requestHandler()
           parser.setContentHandler(curHandler)
       parser.parse(urllib.urlopen(URL))           
           try:    
                     
               return curHandler.ret
           except:
               return [("",URL)]
   
       
       
       def addContextData(self,path):
           """Hinzufuegen zu einer Sammlung"""
   
           server=xmlrpclib.Server(self.serverUrl)
           
   
           self.REQUEST.SESSION['images']=server.getImages(path)
   
   
           self.REQUEST.SESSION['movies']=server.getMovies(path)
   
   
           
           pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','contextDataMain.zpt')).__of__(self)
           return pt()
       
       index_html=addContextData
       
       def addContextData2(self,path,collection,thumb,streamingfile,rawfile,label,description,content_type,responsible,weight,credits=None):
           """Hinzufuegen der Resource"""
           splitted=path.split("/")
           #print "BLU"
           id=splitted[len(splitted)-1]
           title=splitted[len(splitted)-1]
           metalink=self.REQUEST['SERVER_URL']+path+"/index.meta"
           
           #link=TOBEDONE"
           """Hinzufuegen der Ressource"""
       gifPath=path.replace("/mpiwg/online/","")
       rawPath=path.replace("/mpiwg/online/permanent/einstein_exhibition/movies/","")
           thumbUrl="http://einst3.mpiwg-berlin.mpg.de/"+gifPath+"/"+thumb
           link="rtsp://einst1.mpiwg-berlin.mpg.de/"+gifPath+"/"+streamingfile
           rawFile="file:///Volumes/einstein_movies/"+rawPath+"/"+rawfile
   
           
           params=urllib.urlencode({'id':id,'title':title,'link':link,'thumbUrl':thumbUrl,'rawFile':rawFile,'label':label,'description':description,'contentType':content_type,'responsible':responsible,'weight':weight,'credits':credits,'metalink':metalink})
   
           #retStr=urllib.urlopen(collection+"/addMovie",params).read()
           try:
               server=xmlrpclib.Server(collection,allow_none=True)
               retStr=server.addMovie(id,title,label,description,content_type,responsible,link,thumbUrl,rawFile,metalink,weight,credits)
           except:
               zLOG.LOG('OSAS_Root (addFileToDollection2)',zLOG.ERROR,'%s %s'%sys.exc_info()[:2])
               return "An Error occured adding the resource\n", collection,params
           
       #print "added"
       if not retStr:
               return "An Error occured adding the resource\n", collection,params
       
           #print collection+"/"+id+"/copyIndex_meta2echo_resource"
   
           urllib.urlopen(collection+"/"+id+"/copyIndex_meta2echo_resource").read()
       #print "copy2res"
           urllib.urlopen(collection+"/"+id+"/generate_label").read()
       #print "label"
           urllib.urlopen(collection+"/"+id+"/generate_title").read()
       #print "title"
           return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL2']+'?path='+path)
           
       manage_options = Folder.manage_options+(
               {'label':'Main Config','action':'add_contextData_config'},
               )
           
        
       def add_contextData_config(self):
           """Main configuration"""
           pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeAddContextData.zpt')).__of__(self)
           return pt()
       
       
       def change_OSAS_add_contextData(self,collection,pwstr=None,RESPONSE=None):
           """Change"""
           self.pwstr=pwstr
           self.collection=collection
           if RESPONSE is not None:
               RESPONSE.redirect('manage_main')
               
   def manage_AddOSAS_add_contextDataForm(self):
       """interface for adding the OSAS_add_Metadata"""
       pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','addContextData.zpt')).__of__(self)
       return pt()
   
   def manage_AddOSAS_add_contextData(self,id,collection,RESPONSE=None):
       """add the OSAS_root"""
       newObj=OSAS_add_contextData(id,collection)
       self.Destination()._setObject(id,newObj)
       if RESPONSE is not None:
           RESPONSE.redirect('manage_main')
   
               
   
   
       
   
   class OSAS_handlerObject(Folder):
     """      """
     Grundlegende Klasse fuer Viewer zur Zeit noch in Entwicklung      Grundlegende Klasse fuer Handler zur Zeit noch in Entwicklung
   
     """      """
     meta_type="OSAS_ViewerObject__neu"      meta_type="OSAS_HandlerObject__neu"
   
           
     def __init__(self,id,title,prefix,objectTypes,ignorePath=""):      def __init__(self,id,title,prefix,objectTypes,ignorePath=""):
         """inititialisiere die Klasse          """inititialisiere die Klasse
Line 32  class OSAS_viewerObject(Folder): Line 230  class OSAS_viewerObject(Folder):
          - `id` : Zope ID des Objektes           - `id` : Zope ID des Objektes
          - `title`: Titel des Objektes           - `title`: Titel des Objektes
          - `prefix` : URL bzw. URL Rumpf der Zusammen mit dem Pfad des Objectes die Anzeige URL ergibt           - `prefix` : URL bzw. URL Rumpf der Zusammen mit dem Pfad des Objectes die Anzeige URL ergibt
          - `objectType` : liste von Objekttypen die mittels dieses Viewers angezeigt werden können.           - `objectType` : liste von Objekttypen die mittels dieses Handlers angezeigt werden können.
          - `ignorePath` : Pfad der bei dem übergebenen Pfad element ingnoriert werden soll. Optional.           - `ignorePath` : Pfad der bei dem übergebenen Pfad element ingnoriert werden soll. Optional.
         """          """
         self.id=id          self.id=id
Line 42  class OSAS_viewerObject(Folder): Line 240  class OSAS_viewerObject(Folder):
         self.ignorePath=ignorePath          self.ignorePath=ignorePath
   
     manage_options = Folder.manage_options+(      manage_options = Folder.manage_options+(
         {'label':'Main Config','action':'changeViewerObjectForm'},          {'label':'Main Config','action':'changeHandlerObjectForm'},
         )          )
   
     def changeViewerObjectForm(self):      def changeHandlerObjectForm(self):
         """Main configuration"""          """Main configuration"""
         pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeViewerObjectForm.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeHandlerObjectForm.zpt')).__of__(self)
         return pt()          return pt()
   
     def changeViewerObject(self,title,prefix,objectTypes,ignorePath=None,RESPONSE=None):      def changeHandlerObject(self,title,prefix,objectTypes="",ignorePath=None,newTarget="yes",RESPONSE=None):
         """Change RootFolderName"""          """Change RootFolderName"""
         self.title=title          self.title=title
         self.prefix=prefix          self.prefix=prefix
         self.ignorePath=ignorePath          self.ignorePath=ignorePath
         self.objectTypes=toList(objectTypes)          self.objectTypes=toList(objectTypes)
           self.newTarget=newTarget
                   
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
   
 def manage_addViewerObjectForm(self):  def manage_addHandlerObjectForm(self):
     """form for adding a viewer Object"""      """form for adding a handler Object"""
     pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','addViewerObjectForm.zpt')).__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','addHandlerObjectForm.zpt')).__of__(self)
     return pt()      return pt()
   
 def manage_addViewerObject(self,id,title,prefix,objectTypes,ignorePath,RESPONSE=None):  def manage_addHandlerObject(self,id,title,prefix,objectTypes,ignorePath,RESPONSE=None):
     """add the OSAS_root"""      """add the OSAS_root"""
     newObj=OSAS_viewerObject(id,title,prefix,objectTypes,ignorePath)      newObj=OSAS_handlerObject(id,title,prefix,objectTypes,ignorePath)
     self._setObject(id,newObj)      self._setObject(id,newObj)
           
     if RESPONSE is not None:      if RESPONSE is not None:
Line 77  def manage_addViewerObject(self,id,title Line 276  def manage_addViewerObject(self,id,title
           
 class OSAS_root(Folder,Implicit):  class OSAS_root(Folder,Implicit):
     """Implicit Folder of the  Storage Systems"""      """Implicit Folder of the  Storage Systems"""
     def __init__(self,id,rootFolderName,uploadServletUrl=None):  
       security=ClassSecurityInfo()
   
       def __init__(self,id,rootFolderName,serverUrl,uploadServletUrl=None):
         """initialize a new instance          """initialize a new instance
   
   
Line 90  class OSAS_root(Folder,Implicit): Line 292  class OSAS_root(Folder,Implicit):
         self.id = id          self.id = id
         self.rootFolderName = rootFolderName          self.rootFolderName = rootFolderName
         self.uploadServletUrl=uploadServletUrl          self.uploadServletUrl=uploadServletUrl
                   self.serverUrl=serverUrl
     meta_type="OSAS_Root__neu"      meta_type="OSAS_Root"
   
     manage_options = Folder.manage_options+(      manage_options = Folder.manage_options+(
         {'label':'Main Config','action':'changeRootForm'},          {'label':'Main Config','action':'changeRootForm'},
Line 100  class OSAS_root(Folder,Implicit): Line 302  class OSAS_root(Folder,Implicit):
   
     OSASObjectTypes=OSAS_helpers.OSASObjectTypes      OSASObjectTypes=OSAS_helpers.OSASObjectTypes
           
       def generateMovieThumb(self,name):
           """generate movie"""
           server=xmlrpclib.Server(self.serverUrl)
           name="/mpiwg/online/permanent/einstein_exhibition/movies/"+name
   
           print "bl",name,os.path.splitext(name)[0]+".gif"
           ret=server.generateMovieThumb(name,os.path.splitext(name)[0]+".gif")
           return ret
       
       security.declareProtected("View management screens","getOSASObjectTypes")
       def getOSASObjectTypes(self):
           """return list of objecttypes"""
           return OSASObjectTypes
   
       def setProxy(self,name,value):
           """set proxy"""
           self.REQUEST.SESSION[name]=value
           return True
   
       def listToSingle(self,path):
           """list to single"""
           if type(path)==ListType:
               return path[0]
           else:
               return path
   
       def splitPath(self,path):
           """split path"""
           if type(path)==ListType:
               path=path[0]
           return os.path.split(path)
       
     def changeRootForm(self):      def changeRootForm(self):
         """Main configuration"""          """Main configuration"""
         pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeRootForm.zpt')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeRootForm.zpt')).__of__(self)
                   
         return pt()          return pt()
   
     def changeRoot(self,rootFolderName,uploadServletUrl,RESPONSE=None):      def changeRoot(self,rootFolderName,uploadServletUrl,serverUrl,RESPONSE=None):
         """Change RootFolderName"""          """Change RootFolderName"""
         self.rootFolderName=rootFolderName          self.rootFolderName=rootFolderName
           self.serverUrl=serverUrl
         self.uploadServletUrl=uploadServletUrl          self.uploadServletUrl=uploadServletUrl
                   
         if RESPONSE is not None:          if RESPONSE is not None:
Line 122  class OSAS_root(Folder,Implicit): Line 356  class OSAS_root(Folder,Implicit):
         return self.uploadServletUrl          return self.uploadServletUrl
                   
   
     def downloadExternalXML(self,index_meta_url,xml_url):      def validateIndexMeta(self,data):
         """lade lese ein xml file aus URL und schreibe es in den localen Filebaum          """TO BE DONE testet ob data ein gueltiges index.meta file ist, zur Zeit wird dom erzeugt ohne validierung.
           @param data: zu testendes XML file als string
           @return: zeiger auf dom  falls ok, None  andernfalls (z.Z: immmer dom falls parse possible)
           """
           try:
               return xml.dom.minidom.parseString(xmlneu)
           except:
               return None
           
       security.declareProtected('View management screens','uploadExternalXMLString','uploadExternalXMLUrl','uploadExternalXML')
       
       def uploadExternalXMLString(self,index_meta_url,xml_string):
           """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum
                   
         @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server.           @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server. 
         @param xml_url: externe url file hier ersetzt obiges index.meta          @param xml_string: string mit index_meta ersetzt obiges index.meta
         @return: 'error' als String bei Fehler 'ok' bei ok.          @return: 'error' als String bei Fehler 'ok' bei ok.
         """          """
                   
           return self.uploadExternalXML(index_meta_url,xml_string)
   
         xmlneu=urllib.urlopen(xml_url).read()  
                   
         try:      def uploadExternalXMLUrl(self,index_meta_url,xml_url):
             dom=xml.dom.minidom.parseString(xmlneu)          """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum
         except:          
           @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server. 
           @param xml_url: externe url auf ein index_meta ersetzt obiges index.meta
           @return: 'error' als String bei Fehler 'ok' bei ok.
           """
   
           return self.uploadExternalXML(index_meta_url,xml_url)
   
       
       def uploadExternalXML(self,index_meta_url,xml_url=None,xml_string=None):
           """lese ein xml file aus xml_url und schreibe es in den lokalen Filebaum
   
           @param index_meta_url: url eines index.meta files auf dem lokalen Server, es gilt rootFolderName + pfad teil der url = pfad auf dem Server. 
           @param xml_url: (optional, default=None) externe url auf ein index_meta ersetzt obiges index.meta
           @param xml_string: (optional, default=None) string mit index_meta ersetzt obiges index.meta
           @return: 'error' als String bei Fehler 'ok' bei ok.
           """
   
           if xml_url:
               xmlneu=urllib.urlopen(xml_url).read()
           else:
               xmlneu=xml_string
           
           dom=self.validateIndexMeta(xmlneu)
           if not dom:
             zLOG.LOG('OSAS_Root (downloadExternalXML)',zLOG.ERROR,'cannot parse: %s', xml_url)              zLOG.LOG('OSAS_Root (downloadExternalXML)',zLOG.ERROR,'cannot parse: %s', xml_url)
             return "error"              return "error"
   
Line 149  class OSAS_root(Folder,Implicit): Line 418  class OSAS_root(Folder,Implicit):
         fh.close()          fh.close()
         return "ok"          return "ok"
   
       security.declareProtected('View','getIndexMetaFile')
   
      
       def getIndexMetaFile(self,index_meta):
           """gibt index metafile aus
           @param index_meta: index_meta ist eine URI entweder url des index_meta oder file mit file://
           """
           filearray=[]
           urlparsed=urlparse(index_meta)[1:]
   
           for x in urlparsed:
               
               if not (x==''):
                   filearray.append(x)
   
           path=os.sep.join(filearray)
   
           realPath=os.path.normpath(os.path.join(self.rootFolderName,path))
           
           if realPath.find(self.rootFolderName) <0: #versuch auf Pfad unterhalb des Rootfolder zuzugreifen
               return {}
               
   
           if not os.path.isfile(realPath):
               return None,"(ERROR) path %s does not exist."%path
   
       
           fh=file(realPath,'r')
           str=fh.read()
           fh.close()
           return str
   
   
   Globals.InitializeClass(OSAS_root)
                   
 def manage_addOSAS_rootForm(self):  def manage_addOSAS_rootForm(self):
     """interface for adding the OSAS_root"""      """interface for adding the OSAS_root"""
     pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addOSAS_rootForm.zpt')).__of__(self)      pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','addOSAS_rootForm.zpt')).__of__(self)
     return pt()      return pt()
   
 def manage_addOSAS_root(self,id,RootFolderName,uploadServletUrl,RESPONSE=None):  def manage_addOSAS_root(self,id,RootFolderName,uploadServletUrl,serverUrl,RESPONSE=None):
     """add the OSAS_root"""      """add the OSAS_root"""
     newObj=OSAS_root(id,RootFolderName,uploadServletUrl)      newObj=OSAS_root(id,RootFolderName,serverUrl,uploadServletUrl)
     self._setObject(id,newObj)      self._setObject(id,newObj)
     if RESPONSE is not None:      if RESPONSE is not None:
         RESPONSE.redirect('manage_main')          RESPONSE.redirect('manage_main')

Removed from v.1.1.1.1  
changed lines
  Added in v.1.7


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>