The attached patch solves the problem in a better way: It replaces all asserts with "if ...: raise AssertionError" constructions. It needs also testing.
diff -Nru offlineimap-6.2.0.2/offlineimap/folder/Gmail.py offlineimap-6.2.0.3/offlineimap/folder/Gmail.py --- offlineimap-6.2.0.2/offlineimap/folder/Gmail.py 2009-08-12 22:25:27.000000000 +0200 +++ offlineimap-6.2.0.3/offlineimap/folder/Gmail.py 2010-07-17 23:05:34.000000000 +0200 @@ -59,8 +59,8 @@ result = imapobj.uid('copy', imaputil.listjoin(uidlist), self.trash_folder) - assert result[0] == 'OK', \ - "Bad IMAPlib result: %s" % result[0] + if result[0] != 'OK': + raise AssertionError("Bad IMAPlib result: %s" % result[0]) finally: self.imapserver.releaseconnection(imapobj) for uid in uidlist: @@ -89,7 +89,8 @@ imaputil.listjoin(uidlist), operation + 'FLAGS', imaputil.flagsmaildir2imap(flags)) - assert r[0] == 'OK', 'Error with store: ' + '. '.join(r[1]) + if r[0] != 'OK': + raise AssertionError('Error with store: ' + '. '.join(r[1])) r = r[1] finally: self.imapserver.releaseconnection(imapobj) diff -Nru offlineimap-6.2.0.2/offlineimap/folder/IMAP.py offlineimap-6.2.0.3/offlineimap/folder/IMAP.py --- offlineimap-6.2.0.2/offlineimap/folder/IMAP.py 2010-06-29 23:49:59.000000000 +0200 +++ offlineimap-6.2.0.3/offlineimap/folder/IMAP.py 2010-07-17 23:19:10.000000000 +0200 @@ -336,12 +336,14 @@ ui.debug('imap', 'savemessage: new content length is ' + \ str(len(content))) - assert(imapobj.append(self.getfullname(), + if imapobj.append(self.getfullname(), imaputil.flagsmaildir2imap(flags), - date, content)[0] == 'OK') + date, content)[0] != 'OK': + raise AssertionError # Checkpoint. Let it write out the messages, etc. - assert(imapobj.check()[0] == 'OK') + if imapobj.check()[0] != 'OK': + raise AssertionError # Keep trying until we get the UID. ui.debug('imap', 'savemessage: first attempt to get new UID') @@ -350,7 +352,8 @@ # See docs for savemessage in Base.py for explanation of this and other return values if uid <= 0: ui.debug('imap', 'savemessage: first attempt to get new UID failed. Going to run a NOOP and try again.') - assert(imapobj.noop()[0] == 'OK') + if imapobj.noop()[0] != 'OK': + raise AssertionError uid = self.savemessage_searchforheader(imapobj, headername, headervalue) finally: @@ -372,7 +375,8 @@ return result = imapobj.uid('store', '%d' % uid, 'FLAGS', imaputil.flagsmaildir2imap(flags)) - assert result[0] == 'OK', 'Error with store: ' + '. '.join(r[1]) + if result[0] != 'OK': + raise AssertionError('Error with store: ' + '. '.join(r[1])) finally: self.imapserver.releaseconnection(imapobj) result = result[1][0] @@ -418,7 +422,8 @@ imaputil.listjoin(uidlist), operation + 'FLAGS', imaputil.flagsmaildir2imap(flags)) - assert r[0] == 'OK', 'Error with store: ' + '. '.join(r[1]) + if r[0] != 'OK': + raise AssertionError('Error with store: ' + '. '.join(r[1])) r = r[1] finally: self.imapserver.releaseconnection(imapobj) @@ -474,7 +479,8 @@ UIBase.getglobalui().deletereadonly(self, uidlist) return if self.expunge: - assert(imapobj.expunge()[0] == 'OK') + if imapobj.expunge()[0] != 'OK': + raise AssertionError finally: self.imapserver.releaseconnection(imapobj) for uid in uidlist: diff -Nru offlineimap-6.2.0.2/offlineimap/folder/LocalStatus.py offlineimap-6.2.0.3/offlineimap/folder/LocalStatus.py --- offlineimap-6.2.0.2/offlineimap/folder/LocalStatus.py 2010-06-29 23:49:59.000000000 +0200 +++ offlineimap-6.2.0.3/offlineimap/folder/LocalStatus.py 2010-07-17 23:03:14.000000000 +0200 @@ -74,7 +74,8 @@ # but somehow did. file.close() return - assert(line == magicline) + if line != magicline: + raise AssertionError for line in file.xreadlines(): line = line.strip() uid, flags = line.split(':') diff -Nru offlineimap-6.2.0.2/offlineimap/folder/Maildir.py offlineimap-6.2.0.3/offlineimap/folder/Maildir.py --- offlineimap-6.2.0.2/offlineimap/folder/Maildir.py 2010-06-29 23:49:59.000000000 +0200 +++ offlineimap-6.2.0.3/offlineimap/folder/Maildir.py 2010-07-17 23:02:26.000000000 +0200 @@ -290,7 +290,8 @@ # By now, the message had better not be in tmp/ land! final_dir, final_name = os.path.split(self.messagelist[uid]['filename']) - assert final_dir != tmpdir + if final_dir == tmpdir: + raise AssertionError def deletemessage(self, uid): if not uid in self.messagelist: diff -Nru offlineimap-6.2.0.2/offlineimap/init.py offlineimap-6.2.0.3/offlineimap/init.py --- offlineimap-6.2.0.2/offlineimap/init.py 2010-06-29 23:49:59.000000000 +0200 +++ offlineimap-6.2.0.3/offlineimap/init.py 2010-07-17 23:18:02.000000000 +0200 @@ -48,7 +48,8 @@ ui.terminate(1) def startup(versionno): - assert versionno == version.versionstr, "Revision of main program (%s) does not match that of library (%s). Please double-check your PYTHONPATH and installation locations." % (versionno, version.versionstr) + if versionno != version.versionstr: + raise AssertionError("Revision of main program (%s) does not match that of library (%s). Please double-check your PYTHONPATH and installation locations." % (versionno, version.versionstr)) options = {} options['-k'] = [] if '--help' in sys.argv[1:]: diff -Nru offlineimap-6.2.0.2/offlineimap/repository/Maildir.py offlineimap-6.2.0.3/offlineimap/repository/Maildir.py --- offlineimap-6.2.0.2/offlineimap/repository/Maildir.py 2008-09-30 01:07:45.000000000 +0200 +++ offlineimap-6.2.0.3/offlineimap/repository/Maildir.py 2010-07-17 23:17:24.000000000 +0200 @@ -75,10 +75,13 @@ if self.getsep() == '/': for invalid in ['new', 'cur', 'tmp', 'offlineimap.uidvalidity']: for component in foldername.split('/'): - assert component != invalid, "When using nested folders (/ as a separator in the account config), your folder names may not contain 'new', 'cur', 'tmp', or 'offlineimap.uidvalidity'." + if component == invalid: + raise AssertionError("When using nested folders (/ as a separator in the account config), your folder names may not contain 'new', 'cur', 'tmp', or 'offlineimap.uidvalidity'.") - assert foldername.find('./') == -1, "Folder names may not contain ../" - assert not foldername.startswith('/'), "Folder names may not begin with /" + if not foldername.find('./') == -1: + raise AssertionError("Folder names may not contain ../") + if foldername.startswith('/'): + raise AssertionError("Folder names may not begin with /") oldcwd = os.getcwd() os.chdir(self.root) @@ -93,9 +96,9 @@ self.debug("makefolder: %s already is a directory" % foldername) # Already exists. Sanity-check that it's not a Maildir. for subdir in ['cur', 'new', 'tmp']: - assert not os.path.isdir(os.path.join(foldername, subdir)), \ - "Tried to create folder %s but it already had dir %s" %\ - (foldername, subdir) + if os.path.isdir(os.path.join(foldername, subdir)): + raise AssertionError("Tried to create folder %s but it already had dir %s" %\ + (foldername, subdir)) else: self.debug("makefolder: calling makedirs %s" % foldername) os.makedirs(foldername, 0700)