Ron Adam wrote:
A minor correction to the Block class due to re-editing. > def __call__(self, *args): > self.block(*args) > self.__del__() This should have been. def __call__(self, *args): try: self.block(*args) except Exception, self.__err__: pass self.__del__() Which catches the error in the overriden "block", (I need to change that to say "body"), method so it can be re-raised after the "final" method is run. The "final" method can handle it if it chooses. Thanks to Jim Jewett for noticing. It should make more sense now. :-) In example (1.), Lock_It lost a carriage return. It should be. class Lock_It(Get_Lock): def block(self): print "Do stuff while locked" Lock_It(mylock())() And example (3.) should be, although it may not run as is... ## 3. A template for committing or rolling back a database: class Transactional(Block): def start(self, db): self.db = db self.cursor = self.db.cursor() def final(self): if self.__err__: self.db.rollback() print "db rolled back due to err:", __err__ self.__err__ = None else: db.commit() def block(self, batch): for statement in batch: self.cursor.execute(statement) statement_batch = [ "insert into PEP340 values ('Guido','BDFL')", "insert into PEP340 values ('More examples are needed')"] db = pgdb.connect(dsn = 'localhost:pythonpeps') Transactional(db)(statement_batch) disconnect(db) Another Block class could be used for connecting and disconecting. Cheers, Ron_Adam _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com