from objectbroker import Persistence,NoPersistence,Aquisition,AquisitionProxy from hserver.api.WebCallable import WebCallable from hserver.session.SessionHandler import SessionHandler import hserver import hserver.api class WebObject(WebCallable,Aquisition): WO_Accepts = None def wo_accepts(self): woa = getattr(self,"WO_Accepts",None) if woa is None: if (self.__class__ == WebObject) or (self._aq_parent is None): return hserver.api.ListKnownWebObjects() else: return self._aq_parent.wo_accepts() return woa def __init__(self): self.__default = None self.__sessionhandlers = [] def __getitem__(self,name): try: return getattr( self, name ) except: raise IndexError("%s not found in %s" % (name,self)) def __setitem__(self,name,value): setattr( self, name, value ) if isinstance(value, SessionHandler): self.__sessionhandlers.append(value) def __delitem__(self,name): c = getattr( self, name ) if isinstance(c, SessionHandler): self.__sessionhandlers.remove(c) delattr( self, name ) def __contains__(self,name): o = getattr(self,name,None) return not o is None def default(self): return self.__default def setDefault(self,default): self.__default = default def setChild(self,name,child): self[name] = child def children(self): ls = [] for an in dir(self): if isinstance( self[an], WebObject ): ls.append( an ) return ls def walk(self,request): for shandler in self.__sessionhandlers: shandler.applySession(request) next, stack = request.pathwalker().walk() no = getattr(self, next, None) if no is None: raise hserver.HttpException(404,"%s in /%s" % (next,request.pathwalker().walked(-1))) if (len(stack)==0) or (not isinstance(no,WebObject)): if (isinstance(no,WebCallable)): no(request, o=self) else: raise hserver.HttpException(404,"%s in /%s" % (next,request.pathwalker().walked(-1))) else: no.walk(request) def __call__(self,request,o = None): if not self.__default is None: request.redirect( request.pathwalker().walked() + "/" + self.__default ) elif "index_html" in self: request.redirect( request.pathwalker().walked() + "/index_html" ) request.getContentFile().write("