devtools/testlib.py
changeset 9404 3e3e9b37e177
parent 9402 2c48c091b6a2
child 9460 a2a0bc984863
equal deleted inserted replaced
9403:d81207fb9499 9404:3e3e9b37e177
   272 
   272 
   273     def _close_access(self):
   273     def _close_access(self):
   274         while self._open_access:
   274         while self._open_access:
   275             self._open_access.pop().close()
   275             self._open_access.pop().close()
   276 
   276 
   277     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   277     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   278     def set_cnx(self, cnx):
   278     def set_cnx(self, cnx):
   279         """"""
   279         """"""
   280         # XXX we want to deprecate this
   280         # XXX we want to deprecate this
   281         assert getattr(cnx, '_session', None) is not None
   281         assert getattr(cnx, '_session', None) is not None
   282         if cnx is self._admin_clt_cnx:
   282         if cnx is self._admin_clt_cnx:
   285             self._cnxs.add(cnx) # register the cns to make sure it is removed
   285             self._cnxs.add(cnx) # register the cns to make sure it is removed
   286             self._current_session = cnx._session
   286             self._current_session = cnx._session
   287             self._current_clt_cnx = cnx
   287             self._current_clt_cnx = cnx
   288 
   288 
   289     @property
   289     @property
   290     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   290     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   291     def cnx(self):
   291     def cnx(self):
   292         # XXX we want to deprecate this
   292         # XXX we want to deprecate this
   293         clt_cnx = self._current_clt_cnx
   293         clt_cnx = self._current_clt_cnx
   294         if clt_cnx is None:
   294         if clt_cnx is None:
   295             clt_cnx = self._admin_clt_cnx
   295             clt_cnx = self._admin_clt_cnx
   302                 cnx.rollback()
   302                 cnx.rollback()
   303                 cnx.close()
   303                 cnx.close()
   304             self._cnxs.remove(cnx)
   304             self._cnxs.remove(cnx)
   305 
   305 
   306     @property
   306     @property
   307     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   307     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   308     def session(self):
   308     def session(self):
   309         """return current server side session"""
   309         """return current server side session"""
   310         # XXX We want to use a srv_connection instead and deprecate this
   310         # XXX We want to use a srv_connection instead and deprecate this
   311         # property
   311         # property
   312         session = self._current_session
   312         session = self._current_session
   318             session._Session__threaddata.cnx = self._admin_clt_cnx._cnx
   318             session._Session__threaddata.cnx = self._admin_clt_cnx._cnx
   319         session.set_cnxset()
   319         session.set_cnxset()
   320         return session
   320         return session
   321 
   321 
   322     @property
   322     @property
   323     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   323     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   324     def websession(self):
   324     def websession(self):
   325         return self.session
   325         return self.session
   326 
   326 
   327     @property
   327     @property
   328     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   328     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   329     def adminsession(self):
   329     def adminsession(self):
   330         """return current server side session (using default manager account)"""
   330         """return current server side session (using default manager account)"""
   331         return self._admin_session
   331         return self._admin_session
   332 
   332 
   333     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   333     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   334     def login(self, login, **kwargs):
   334     def login(self, login, **kwargs):
   335         """return a connection for the given login/password"""
   335         """return a connection for the given login/password"""
   336         __ = kwargs.pop('autoclose', True) # not used anymore
   336         __ = kwargs.pop('autoclose', True) # not used anymore
   337         if login == self.admlogin:
   337         if login == self.admlogin:
   338             # definitly don't want autoclose when used as a context manager
   338             # definitly don't want autoclose when used as a context manager
   343             clt_cnx = repoapi.connect(self.repo, login, **kwargs)
   343             clt_cnx = repoapi.connect(self.repo, login, **kwargs)
   344         self.set_cnx(clt_cnx)
   344         self.set_cnx(clt_cnx)
   345         clt_cnx.__enter__()
   345         clt_cnx.__enter__()
   346         return TestCaseConnectionProxy(self, clt_cnx)
   346         return TestCaseConnectionProxy(self, clt_cnx)
   347 
   347 
   348     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   348     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   349     def restore_connection(self):
   349     def restore_connection(self):
   350         self._pop_custom_cnx()
   350         self._pop_custom_cnx()
   351 
   351 
   352     def _pop_custom_cnx(self):
   352     def _pop_custom_cnx(self):
   353         if self._current_clt_cnx is not None:
   353         if self._current_clt_cnx is not None:
   381         self.config.repository = lambda x=None: self.repo
   381         self.config.repository = lambda x=None: self.repo
   382 
   382 
   383     # db api ##################################################################
   383     # db api ##################################################################
   384 
   384 
   385     @nocoverage
   385     @nocoverage
   386     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   386     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   387     def cursor(self, req=None):
   387     def cursor(self, req=None):
   388         if req is not None:
   388         if req is not None:
   389             return req.cnx
   389             return req.cnx
   390         else:
   390         else:
   391             return self.cnx
   391             return self.cnx
   392 
   392 
   393     @nocoverage
   393     @nocoverage
   394     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   394     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   395     def execute(self, rql, args=None, req=None):
   395     def execute(self, rql, args=None, req=None):
   396         """executes <rql>, builds a resultset, and returns a couple (rset, req)
   396         """executes <rql>, builds a resultset, and returns a couple (rset, req)
   397         where req is a FakeRequest
   397         where req is a FakeRequest
   398         """
   398         """
   399         req = req or self.request(rql=rql)
   399         req = req or self.request(rql=rql)
   400         return req.execute(unicode(rql), args)
   400         return req.execute(unicode(rql), args)
   401 
   401 
   402     @nocoverage
   402     @nocoverage
   403     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   403     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   404     def commit(self):
   404     def commit(self):
   405         try:
   405         try:
   406             return self.cnx.commit()
   406             return self.cnx.commit()
   407         finally:
   407         finally:
   408             self.session.set_cnxset() # ensure cnxset still set after commit
   408             self.session.set_cnxset() # ensure cnxset still set after commit
   409 
   409 
   410     @nocoverage
   410     @nocoverage
   411     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   411     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   412     def rollback(self):
   412     def rollback(self):
   413         try:
   413         try:
   414             self.cnx.rollback()
   414             self.cnx.rollback()
   415         except dbapi.ProgrammingError:
   415         except dbapi.ProgrammingError:
   416             pass # connection closed
   416             pass # connection closed
   417         finally:
   417         finally:
   418             self.session.set_cnxset() # ensure cnxset still set after commit
   418             self.session.set_cnxset() # ensure cnxset still set after commit
   419 
   419 
   420     requestcls = fake.FakeRequest
   420     requestcls = fake.FakeRequest
   421     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   421     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   422     def request(self, rollbackfirst=False, url=None, headers={}, **kwargs):
   422     def request(self, rollbackfirst=False, url=None, headers={}, **kwargs):
   423         """return a web ui request"""
   423         """return a web ui request"""
   424         if rollbackfirst:
   424         if rollbackfirst:
   425             self.cnx.rollback()
   425             self.cnx.rollback()
   426         req = self.requestcls(self.vreg, url=url, headers=headers, form=kwargs)
   426         req = self.requestcls(self.vreg, url=url, headers=headers, form=kwargs)
   427         req.set_cnx(self.cnx)
   427         req.set_cnx(self.cnx)
   428         return req
   428         return req
   429 
   429 
   430     # server side db api #######################################################
   430     # server side db api #######################################################
   431 
   431 
   432     @deprecated('[4.0] explicitly use RepoAccess object in test instead')
   432     @deprecated('[3.19] explicitly use RepoAccess object in test instead')
   433     def sexecute(self, rql, args=None):
   433     def sexecute(self, rql, args=None):
   434         self.session.set_cnxset()
   434         self.session.set_cnxset()
   435         return self.session.execute(rql, args)
   435         return self.session.execute(rql, args)
   436 
   436 
   437 
   437