server/repository.py
changeset 8848 08bb2dd18fd2
parent 8773 21edcb0a5ed7
parent 8839 49eb84b80b96
child 8889 be91151107f6
equal deleted inserted replaced
8847:074f9f385f6b 8848:08bb2dd18fd2
   880     def call_service(self, sessionid, regid, async, **kwargs):
   880     def call_service(self, sessionid, regid, async, **kwargs):
   881         """
   881         """
   882         See :class:`cubicweb.dbapi.Connection.call_service`
   882         See :class:`cubicweb.dbapi.Connection.call_service`
   883         and :class:`cubicweb.server.Service`
   883         and :class:`cubicweb.server.Service`
   884         """
   884         """
   885         def task():
   885         session = self._get_session(sessionid)
   886             session = self._get_session(sessionid, setcnxset=True)
   886         return self._call_service_with_session(session, regid, async, **kwargs)
   887             service = session.vreg['services'].select(regid, session, **kwargs)
   887 
   888             try:
   888     def _call_service_with_session(self, session, regid, async, **kwargs):
   889                 return service.call(**kwargs)
       
   890             finally:
       
   891                 session.rollback() # free cnxset
       
   892         if async:
   889         if async:
   893             self.info('calling service %s asynchronously', regid)
   890             self.info('calling service %s asynchronously', regid)
       
   891             def task():
       
   892                 session.set_cnxset()
       
   893                 try:
       
   894                     service = session.vreg['services'].select(regid, session, **kwargs)
       
   895                     return service.call(**kwargs)
       
   896                 finally:
       
   897                     session.rollback() # free cnxset
   894             self.threaded_task(task)
   898             self.threaded_task(task)
   895         else:
   899         else:
   896             self.info('calling service %s synchronously', regid)
   900             self.info('calling service %s synchronously', regid)
   897             return task()
   901             service = session.vreg['services'].select(regid, session, **kwargs)
       
   902             return service.call(**kwargs)
   898 
   903 
   899     def user_info(self, sessionid, props=None):
   904     def user_info(self, sessionid, props=None):
   900         """this method should be used by client to:
   905         """this method should be used by client to:
   901         * check session id validity
   906         * check session id validity
   902         * update user information on each user's request (i.e. groups and
   907         * update user information on each user's request (i.e. groups and