def shutdown(self):
        self.shutdownEvt.wait()
        self.logger.info('Initiating shutdown...')

        # stop services
        self.logger.info('Stopping services...')
        for service in [x for x in self.services.values()
                        if x is not self]:
            service.shutdown()

        self.running = False
        
        # shutdown session manager
        if SessionManager.sm:
            self.logger.info('Closing session manager...')
            SessionManager.close()
        
        # close database
        if _db.db_handle:
            self.logger.info('Closing database...')
            _db.close()

        self.logger.info('All services have been shut down successfully')
        # shutdown logging
        logging.shutdown()
        self.shutdowninprogress = False
 def __init__(self, request=None, response=None):
     self.request = request
     self.response = response
     self.session = None
     
     if request:
         path_info = request.serverVariables['PATH_INFO'] or '/'
         
         # get session
         session = None
         
         cookiesEnabled = True
         if request.cookies.has_key('_sid'):
             session = SessionManager.fetchSession(request.cookies['_sid'].value)
         else:
             cookiesEnabled = False
             session_match = re.match(self.sid_pattern, path_info)
             if session_match:
                 path_info = path_info.replace(session_match.group(), '', 1) or '/'
                 request.serverVariables['PATH_INFO'] = path_info
                 session = SessionManager.fetchSession(session_match.group(1))
         
         if session != None:
             self.session = session
             request.serverVariables["AUTH_USER"] = session.user.displayName.value
             
             if not cookiesEnabled:
                 if not session.sessionid in request.serverVariables["SCRIPT_NAME"]:
                     request.serverVariables["SCRIPT_NAME"] += '/{%s}' % session.sessionid
                 else:
                     lstScript = request.serverVariables["SCRIPT_NAME"].split('/')
                     request.serverVariables["SCRIPT_NAME"] = \
                         "/%s/{%s}" %(lstScript[1], session.sessionid)
         else:
             self.session = self.__create_guest_session()
def getHandle():
    #open database
    _db.open(misc.getCallableByName(settings['store']['interface']))
    #create in-memory session manager
    SessionManager.open(inMemorySessionManager.SessionManager, 1200)
    oSystemUser = _db.getItem('system')
    context = HttpContext()
    context.session = SessionManager.create(oSystemUser)
    
    currentThread().context = context
    currentThread().trans = None
    return _db
    def start(self):
        try:
            # read configuration file
            from porcupine.config.settings import settings
            # initialize logging
            log.initialize_logging()
            self.logger.info('Server starting...')
            
            # register request interfaces
            for key, value in settings['requestinterfaces'].items():
                settings['requestinterfaces'][key] = \
                    misc.getCallableByName(value)
            self.logger.info('Succesfullly registered %i request interfaces' % \
                             len(settings['requestinterfaces']))
            
            # register template languages
            for key, value in settings['templatelanguages'].items():
                settings['templatelanguages'][key] = \
                    misc.getCallableByName(value)
            self.logger.info('Succesfullly registered %i template languages' % \
                             len(settings['templatelanguages']))
                        
            # load published directories
            self.logger.info('Loading published directories\' registrations...')
            from porcupine.config import pubdirs

            # open database
            self.logger.info('Opening database...')
            _db.open(misc.getCallableByName(
                     settings['store']['interface']))

            # create session manager
            self.logger.info('Creating session manager...')
            SessionManager.open(misc.getCallableByName(
                            settings['sessionmanager']['interface']),
                            int(settings['sessionmanager']['timeout']))
            
            self.services['_controller'] = self
            # start services
            self.logger.info('Starting services...')
            services.startServices()
            
        except Exception, e:
            self.logger.log(logging.ERROR, e[0], *(), **{'exc_info' : True})
            raise e
 def __create_guest_session(self):
     # create new session with the specified guest user
     self.user = _db.getItem(settings['sessionmanager']['guest'])
     new_session = SessionManager.create(settings['sessionmanager']['guest'])
     
     session_id = new_session.sessionid
     query_string = self.request.getQueryString()
     
     if '_nojavascript' in query_string:
         root_url = self.request.getRootUrl()
         path = self.request.serverVariables['PATH_INFO']
         self.response.redirect(
             '%(root_url)s/{%(session_id)s}%(path)s' % locals()
         )
     
     # add cookie with sessionid
     self.response.cookies['_sid'] = session_id
     self.response.cookies['_sid']['path'] = \
         self.request.serverVariables['SCRIPT_NAME']
     return new_session
 def __init__(self, name, target, identity):
     Thread.__init__(self, name=name, target=target)
     id = _db.getItem(identity)
     self.context = HttpContext()
     self.context.session = SessionManager.create(id)
     self.trans = None
def close():
    SessionManager.close()
    _db.close()