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 session = self._get_session(sessionid) |
885 session = self._get_session(sessionid) |
886 def task(): |
|
887 session.set_cnxset() |
|
888 try: |
|
889 service = session.vreg['services'].select(regid, session, **kwargs) |
|
890 return service.call(**kwargs) |
|
891 finally: |
|
892 session.rollback() # free cnxset |
|
893 if async: |
886 if async: |
894 self.info('calling service %s asynchronously', regid) |
887 self.info('calling service %s asynchronously', regid) |
|
888 def task(): |
|
889 session.set_cnxset() |
|
890 try: |
|
891 service = session.vreg['services'].select(regid, session, **kwargs) |
|
892 return service.call(**kwargs) |
|
893 finally: |
|
894 session.rollback() # free cnxset |
895 self.threaded_task(task) |
895 self.threaded_task(task) |
896 else: |
896 else: |
897 self.info('calling service %s synchronously', regid) |
897 self.info('calling service %s synchronously', regid) |
898 return task() |
898 service = session.vreg['services'].select(regid, session, **kwargs) |
|
899 return service.call(**kwargs) |
899 |
900 |
900 def user_info(self, sessionid, props=None): |
901 def user_info(self, sessionid, props=None): |
901 """this method should be used by client to: |
902 """this method should be used by client to: |
902 * check session id validity |
903 * check session id validity |
903 * update user information on each user's request (i.e. groups and |
904 * update user information on each user's request (i.e. groups and |