# HG changeset patch # User Pierre-Yves David # Date 1372250155 -7200 # Node ID 6a4070e2849da12a1abc0eb73cd67e3d06d9c812 # Parent 1e145b36edf0f215864491cdde70e28a00215c67 [connection] handle and explicitly life cycle on Connection Like ClientConnection, Connection object need to be explicitly started and stop. They aims to be used as context manager. diff -r 1e145b36edf0 -r 6a4070e2849d server/session.py --- a/server/session.py Wed Jun 26 14:00:32 2013 +0200 +++ b/server/session.py Wed Jun 26 14:35:55 2013 +0200 @@ -435,6 +435,7 @@ # using super(Connection, self) confuse some test hack RequestSessionBase.__init__(self, session.vreg) #: connection unique id + self._open = None self.connectionid = cnxid #: self._session_handled #: are the life cycle of this Connection automatically controlled by the @@ -504,6 +505,21 @@ self._set_user(session.user) + # live cycle handling #################################################### + + def __enter__(self): + assert self._open is None # first opening + self._open = True + return self + + def __exit__(self, exctype=None, excvalue=None, tb=None): + assert self._open # actually already open + self.free_cnxset(ignoremode=True) + self.clear() + self._open = False + + + # shared data handling ################################################### @property @@ -1308,19 +1324,19 @@ except KeyError: cnx = Connection(self, cnxid=cnxid, session_handled=True) self._cnxs[cnxid] = cnx + cnx.__enter__() return cnx def close_cnx(self, cnx): """Close a Connection related to a session""" assert cnx._session_handled - cnx.free_cnxset(ignoremode=True) + cnx.__exit__() self._cnxs.pop(cnx.connectionid, None) try: if self.__threaddata.cnx is cnx: del self.__threaddata.cnx except AttributeError: pass - cnx.clear() def set_cnx(self, cnxid=None): """set the default connection of the current thread to