[transaction] handle ``mode`` default value in Transaction
authorPierre-Yves David <pierre-yves.david@logilab.fr>
Fri, 22 Mar 2013 18:51:03 +0100
changeset 8763 0144b26e958d
parent 8762 6b397a0ba1d6
child 8764 c4f022a6c7dd
[transaction] handle ``mode`` default value in Transaction The transaction mode is now explicitly passed at creation time and always read from the Transaction object. Note that there is a slight behavior change. The transaction mode is now set at the creation of the transaction. Changes made to the default value have no longer any effect on existing transaction.
server/session.py
--- a/server/session.py	Fri Mar 22 17:47:45 2013 +0100
+++ b/server/session.py	Fri Mar 22 18:51:03 2013 +0100
@@ -161,14 +161,14 @@
       transaction, with or without writing)
     """
 
-    def __init__(self, txid):
+    def __init__(self, txid, mode='read'):
         #: transaction unique id
         self.transactionid = txid
         #: reentrance handling
         self.ctx_count = 0
 
         #: connection handling mode
-        self.mode = None
+        self.mode = mode
         #: connection set used to execute queries on sources
         self.cnxset = None
 
@@ -342,7 +342,8 @@
         try:
             self.__threaddata.txdata = self._tx_data[txid]
         except KeyError:
-            self.__threaddata.txdata = self._tx_data[txid] = Transaction(txid)
+            tx = Transaction(txid, self.default_mode)
+            self.__threaddata.txdata = self._tx_data[txid] = tx
 
     @property
     def _threaddata(self):
@@ -784,7 +785,7 @@
             self.default_mode = 'read'
 
     def get_mode(self):
-        return getattr(self._threaddata, 'mode', self.default_mode)
+        return self._threaddata.mode
     def set_mode(self, value):
         self._threaddata.mode = value
     mode = property(get_mode, set_mode,