server/repository.py
changeset 9033 614bf73cc126
parent 9020 cb87e831c183
child 9034 cc3442054e48
equal deleted inserted replaced
9032:629a8d49d6f5 9033:614bf73cc126
   888         if threading.currentThread() in self._pyro_sessions:
   888         if threading.currentThread() in self._pyro_sessions:
   889             self._pyro_sessions[threading.currentThread()] = None
   889             self._pyro_sessions[threading.currentThread()] = None
   890         del self._sessions[sessionid]
   890         del self._sessions[sessionid]
   891         self.info('closed session %s for user %s', sessionid, session.user.login)
   891         self.info('closed session %s for user %s', sessionid, session.user.login)
   892 
   892 
   893     def call_service(self, sessionid, regid, async, **kwargs):
   893     def call_service(self, sessionid, regid, **kwargs):
   894         """
   894         """
   895         See :class:`cubicweb.dbapi.Connection.call_service`
   895         See :class:`cubicweb.dbapi.Connection.call_service`
   896         and :class:`cubicweb.server.Service`
   896         and :class:`cubicweb.server.Service`
   897         """
   897         """
   898         session = self._get_session(sessionid)
   898         session = self._get_session(sessionid)
   899         return self._call_service_with_session(session, regid, async, **kwargs)
   899         return self._call_service_with_session(session, regid, **kwargs)
   900 
   900 
   901     def _call_service_with_session(self, session, regid, async, **kwargs):
   901     def _call_service_with_session(self, session, regid, **kwargs):
   902         if async:
   902         self.info('calling service %s synchronously', regid)
   903             self.info('calling service %s asynchronously', regid)
   903         session.set_cnxset()
   904             def task():
   904         try:
   905                 session.set_cnxset()
   905             service = session.vreg['services'].select(regid, session, **kwargs)
   906                 try:
   906             return service.call(**kwargs)
   907                     service = session.vreg['services'].select(regid, session, **kwargs)
   907         finally:
   908                     return service.call(**kwargs)
   908             session.free_cnxset()
   909                 finally:
       
   910                     session.rollback() # free cnxset
       
   911             self.threaded_task(task)
       
   912         else:
       
   913             self.info('calling service %s synchronously', regid)
       
   914             session.set_cnxset()
       
   915             try:
       
   916                 service = session.vreg['services'].select(regid, session, **kwargs)
       
   917                 return service.call(**kwargs)
       
   918             finally:
       
   919                 session.free_cnxset()
       
   920 
   909 
   921     def user_info(self, sessionid, props=None):
   910     def user_info(self, sessionid, props=None):
   922         """this method should be used by client to:
   911         """this method should be used by client to:
   923         * check session id validity
   912         * check session id validity
   924         * update user information on each user's request (i.e. groups and
   913         * update user information on each user's request (i.e. groups and