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 |