201 |
201 |
202 def __init__(self, repo, login, requestcls): |
202 def __init__(self, repo, login, requestcls): |
203 self._repo = repo |
203 self._repo = repo |
204 self._login = login |
204 self._login = login |
205 self.requestcls = requestcls |
205 self.requestcls = requestcls |
206 # opening session |
206 self._session = self._unsafe_connect(login) |
207 # |
207 |
208 # XXX this very hackish code should be cleaned and move on repo. |
208 def _unsafe_connect(self, login, **kwargs): |
209 with repo.internal_cnx() as cnx: |
209 """ a completely unsafe connect method for the tests """ |
210 rset = cnx.execute('CWUser U WHERE U login %(u)s', {'u': login}) |
210 # use an internal connection |
211 user = rset.get_entity(0, 0) |
211 with self._repo.internal_cnx() as cnx: |
|
212 # try to get a user object |
|
213 user = cnx.find('CWUser', login=login).one() |
212 user.groups |
214 user.groups |
213 user.properties |
215 user.properties |
214 self._session = Session(user, repo) |
216 user.login |
215 repo._sessions[self._session.sessionid] = self._session |
217 session = Session(user, self._repo) |
216 self._session.user._cw = self._session |
218 self._repo._sessions[session.sessionid] = session |
|
219 user._cw = user.cw_rset.req = session |
|
220 with session.new_cnx() as cnx: |
|
221 self._repo.hm.call_hooks('session_open', cnx) |
|
222 # commit connection at this point in case write operation has been |
|
223 # done during `session_open` hooks |
|
224 cnx.commit() |
|
225 return session |
217 |
226 |
218 @contextmanager |
227 @contextmanager |
219 def repo_cnx(self): |
228 def repo_cnx(self): |
220 """Context manager returning a server side connection for the user""" |
229 """Context manager returning a server side connection for the user""" |
221 with self._session.new_cnx() as cnx: |
230 with self._session.new_cnx() as cnx: |