# HG changeset patch # User Sylvain Thénault # Date 1280139311 -7200 # Node ID 8ca424bc393b5517b83c0e9808780ec1dabbef6c # Parent d56fd78006cd1888c26182a28b11c943622ad1c2 [dbapi] cleanup shared data api: let access to transaction from dbapi, we can write it after all... Also, querydata is better named txdata diff -r d56fd78006cd -r 8ca424bc393b dbapi.py --- a/dbapi.py Mon Jul 26 12:08:24 2010 +0200 +++ b/dbapi.py Mon Jul 26 12:15:11 2010 +0200 @@ -313,19 +313,17 @@ # low level session data management ####################################### - def get_shared_data(self, key, default=None, pop=False): - """return value associated to `key` in shared data""" - return self.cnx.get_shared_data(key, default, pop) - - def set_shared_data(self, key, value, querydata=False): - """set value associated to `key` in shared data + def get_shared_data(self, key, default=None, pop=False, txdata=False): + """see :meth:`Connection.get_shared_data`""" + return self.cnx.get_shared_data(key, default, pop, txdata) - if `querydata` is true, the value will be added to the repository - session's query data which are cleared on commit/rollback of the current - transaction, and won't be available through the connexion, only on the - repository side. - """ - return self.cnx.set_shared_data(key, value, querydata) + def set_shared_data(self, key, value, txdata=False, querydata=None): + """see :meth:`Connection.set_shared_data`""" + if querydata is not None: + txdata = querydata + warn('[3.10] querydata argument has been renamed to txdata', + DeprecationWarning, stacklevel=2) + return self.cnx.set_shared_data(key, value, txdata) # server session compat layer ############################################# @@ -520,23 +518,29 @@ raise ProgrammingError('Closed connection') self._repo.set_session_props(self.sessionid, props) - def get_shared_data(self, key, default=None, pop=False): - """return value associated to `key` in shared data""" - if self._closed is not None: - raise ProgrammingError('Closed connection') - return self._repo.get_shared_data(self.sessionid, key, default, pop) + def get_shared_data(self, key, default=None, pop=False, txdata=False): + """return value associated to key in the session's data dictionary or + session's transaction's data if `txdata` is true. - def set_shared_data(self, key, value, querydata=False): - """set value associated to `key` in shared data + If pop is True, value will be removed from the dictionnary. - if `querydata` is true, the value will be added to the repository - session's query data which are cleared on commit/rollback of the current - transaction, and won't be available through the connexion, only on the - repository side. + If key isn't defined in the dictionnary, value specified by the + `default` argument will be returned. """ if self._closed is not None: raise ProgrammingError('Closed connection') - return self._repo.set_shared_data(self.sessionid, key, value, querydata) + return self._repo.get_shared_data(self.sessionid, key, default, pop, txdata) + + def set_shared_data(self, key, value, txdata=False): + """set value associated to `key` in shared data + + if `txdata` is true, the value will be added to the repository session's + transaction's data which are cleared on commit/rollback of the current + transaction. + """ + if self._closed is not None: + raise ProgrammingError('Closed connection') + return self._repo.set_shared_data(self.sessionid, key, value, txdata) def get_schema(self): """Return the schema currently used by the repository. diff -r d56fd78006cd -r 8ca424bc393b server/repository.py --- a/server/repository.py Mon Jul 26 12:08:24 2010 +0200 +++ b/server/repository.py Mon Jul 26 12:15:11 2010 +0200 @@ -630,21 +630,27 @@ """ return self._get_session(sessionid, setpool=False).timestamp - def get_shared_data(self, sessionid, key, default=None, pop=False): - """return the session's data dictionary""" + def get_shared_data(self, sessionid, key, default=None, pop=False, txdata=False): + """return value associated to key in the session's data dictionary or + session's transaction's data if `txdata` is true. + + If pop is True, value will be removed from the dictionnary. + + If key isn't defined in the dictionnary, value specified by the + `default` argument will be returned. + """ session = self._get_session(sessionid, setpool=False) - return session.get_shared_data(key, default, pop) + return session.get_shared_data(key, default, pop, txdata) - def set_shared_data(self, sessionid, key, value, querydata=False): + def set_shared_data(self, sessionid, key, value, txdata=False): """set value associated to `key` in shared data - if `querydata` is true, the value will be added to the repository - session's query data which are cleared on commit/rollback of the current - transaction, and won't be available through the connexion, only on the - repository side. + if `txdata` is true, the value will be added to the repository session's + transaction's data which are cleared on commit/rollback of the current + transaction. """ session = self._get_session(sessionid, setpool=False) - session.set_shared_data(key, value, querydata) + session.set_shared_data(key, value, txdata) def commit(self, sessionid, txid=None): """commit transaction for the session with the given id""" diff -r d56fd78006cd -r 8ca424bc393b server/session.py --- a/server/session.py Mon Jul 26 12:08:24 2010 +0200 +++ b/server/session.py Mon Jul 26 12:15:11 2010 +0200 @@ -618,16 +618,20 @@ # shared data handling ################################################### - def get_shared_data(self, key, default=None, pop=False): + def get_shared_data(self, key, default=None, pop=False, txdata=False): """return value associated to `key` in session data""" - if pop: - return self.data.pop(key, default) + if txdata: + data = self.transaction_data else: - return self.data.get(key, default) + data = self.data + if pop: + return data.pop(key, default) + else: + return data.get(key, default) - def set_shared_data(self, key, value, querydata=False): + def set_shared_data(self, key, value, txdata=False): """set value associated to `key` in session data""" - if querydata: + if txdata: self.transaction_data[key] = value else: self.data[key] = value