--- OSA_system2/OSAS_root.py 2005/02/10 19:50:18 1.4
+++ OSA_system2/OSAS_root.py 2007/01/31 14:30:30 1.13
@@ -16,12 +16,215 @@ from urlparse import *
import re
import xml.dom.minidom
from types import *
-import zLOG
+import logging
+
+#ersetzt logging
+def logger(txt,method,txt2):
+ """logging"""
+ logging.info(txt+ txt2)
+
+
import os.path
import Globals
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+" "+" "
+ 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=""
+ end=""
+
+ self.retStr+=spaces(self.depth)+"%s"%(attrs.get('url'),begin+urllib.unquote(attrs.get('name')))+end+"
\n"
+
+
+
+ def endElement(self,name):
+ if name=="element":
+ self.depth-=1
+
+ if pwstr=="":
+ pwstr=None
+
+
+
+ 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:
+ logger('OSAS_Root (addFileToDollection)',logging.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,label,description,content_type,responsible,weight,thumb="",streamingfile="",rawfile="",lowresfile="",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/","")
+ lowresPath=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
+ lowresFile="rtsp://einst1.mpiwg-berlin.mpg.de/"+gifPath+"/"+lowresfile
+
+ 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})
+
+
+ try:
+ server=xmlrpclib.Server(collection,allow_none=True)
+ retStr=server.addMovie(id,title,label,description,content_type,responsible,link,thumbUrl,rawFile,lowresFile,metalink,weight,credits)
+ except:
+ logger('OSAS_Root (addFileToDollection2)',logging.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']+'/browse?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):
"""
@@ -56,12 +259,13 @@ class OSAS_handlerObject(Folder):
pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt','changeHandlerObjectForm.zpt')).__of__(self)
return pt()
- def changeHandlerObject(self,title,prefix,objectTypes,ignorePath=None,RESPONSE=None):
+ def changeHandlerObject(self,title,prefix,objectTypes="",ignorePath=None,newTarget="yes",RESPONSE=None):
"""Change RootFolderName"""
self.title=title
self.prefix=prefix
self.ignorePath=ignorePath
self.objectTypes=toList(objectTypes)
+ self.newTarget=newTarget
if RESPONSE is not None:
RESPONSE.redirect('manage_main')
@@ -100,7 +304,7 @@ class OSAS_root(Folder,Implicit):
self.rootFolderName = rootFolderName
self.uploadServletUrl=uploadServletUrl
self.serverUrl=serverUrl
- meta_type="OSAS_Root__neu"
+ meta_type="OSAS_Root"
manage_options = Folder.manage_options+(
{'label':'Main Config','action':'changeRootForm'},
@@ -108,6 +312,46 @@ class OSAS_root(Folder,Implicit):
OSASObjectTypes=OSAS_helpers.OSASObjectTypes
+
+ def extendDict(self,dict1,dict2):
+ """add two dicts"""
+ ret=dict1
+ for name in dict2.keys():
+ ret[name]=dict2[name]
+ return ret
+
+
+ def generateMovieThumb(self,name):
+ """generate movie"""
+ server=xmlrpclib.Server(self.serverUrl)
+ name="/mpiwg/online/permanent/einstein_exhibition/movies/"+name
+
+
+ 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):
"""Main configuration"""
@@ -181,7 +425,7 @@ class OSAS_root(Folder,Implicit):
dom=self.validateIndexMeta(xmlneu)
if not dom:
- zLOG.LOG('OSAS_Root (downloadExternalXML)',zLOG.ERROR,'cannot parse: %s', xml_url)
+ logger('OSAS_Root (downloadExternalXML)',logging.ERROR,'cannot parse: %s', xml_url)
return "error"