On Jun 23, 2009, at 9:45 AM, Vishal Shetye wrote: > I initially thought of putting all the queries per operation in a > runInteraction. However this results in code-duplication as many > queries are shared between different operations.
It seems like the easiest way to deal with this would be to make 'private' methods for all the standard queries; these methods/ functions would accept a transaction object like you said, but the methods themselves would only be called from an interaction, which can supply the transaction object. Then in each public ObjectGateway method you can just define an inner function to serve as the interaction, calling each private query method in turn, using the transaction object provided to that interaction. Here's a stupidly trivial example: class ObjectGateway(object): def __init__(self, pool): self.pool = pool def _getUserName(self, trans, user_id): result = trans.execute('SELECT username FROM user WHERE id = %s', user_id); return result[0][0] def _sessionUpdateQuery(self, trans, sid, username): trans.execute('UPDATE session SET username = %s WHERE sid = %s', [username, sid]); def handleLogin(self, sid, user_id): def _loginInteraction(trans): u = self._getUserName(trans, user_id) self._sessionUpdateQuery(trans, sid, username) return u return self.pool.runInteraction(_loginInteraction) Other than being careful not to mess around with the instance state during those interactions (they are running in a thread, after all), this should be pretty straightforward. Hope this helps, -phil _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python