# HG changeset patch # User Richard Jones # Date 1265346652 0 # Node ID 0e33bf5571dc793e578d0f0290f254aafec2aad0 # Parent 4dc575b337125ef1910922f6756f558dd6da145e make some more memorydb tests pass diff -r 4dc575b33712 -r 0e33bf5571dc roundup/backends/back_anydbm.py --- a/roundup/backends/back_anydbm.py Fri Feb 05 04:10:06 2010 +0000 +++ b/roundup/backends/back_anydbm.py Fri Feb 05 05:10:52 2010 +0000 @@ -784,6 +784,8 @@ These operations trigger detectors and can be vetoed. Attempts to modify the "creation" or "activity" properties cause a KeyError. """ + if self.db.journaltag is None: + raise hyperdb.DatabaseError, _('Database open read-only') self.fireAuditors('create', None, propvalues) newid = self.create_inner(**propvalues) self.fireReactors('create', newid, None) @@ -1045,6 +1047,9 @@ These operations trigger detectors and can be vetoed. Attempts to modify the "creation" or "activity" properties cause a KeyError. """ + if self.db.journaltag is None: + raise hyperdb.DatabaseError, _('Database open read-only') + self.fireAuditors('set', nodeid, propvalues) oldvalues = copy.deepcopy(self.db.getnode(self.classname, nodeid)) for name,prop in self.getprops(protected=0).items(): @@ -1390,6 +1395,7 @@ try: for nodeid in self.getnodeids(cldb): node = self.db.getnode(self.classname, nodeid, cldb) + print (nodeid, node, node[self.key], keyvalue) if node.has_key(self.db.RETIRED_FLAG): continue if not node.has_key(self.key): diff -r 4dc575b33712 -r 0e33bf5571dc roundup/backends/blobfiles.py --- a/roundup/backends/blobfiles.py Fri Feb 05 04:10:06 2010 +0000 +++ b/roundup/backends/blobfiles.py Fri Feb 05 05:10:52 2010 +0000 @@ -304,6 +304,10 @@ # file just ain't there raise IOError('content file for %s not found'%filename) + def filesize(self, classname, nodeid, property=None, create=0): + filename = self.filename(classname, nodeid, property, create) + return os.path.getsize(filename) + def storefile(self, classname, nodeid, property, content): """Store the content of the file in the database. The property may be None, in which case the filename does not indicate which property diff -r 4dc575b33712 -r 0e33bf5571dc roundup/roundupdb.py --- a/roundup/roundupdb.py Fri Feb 05 04:10:06 2010 +0000 +++ b/roundup/roundupdb.py Fri Feb 05 05:10:52 2010 +0000 @@ -361,8 +361,7 @@ if msgid : for fileid in messages.get(msgid, 'files') : # check the attachment size - filename = self.db.filename('file', fileid, None) - filesize = os.path.getsize(filename) + filesize = self.db.filesize('file', fileid, None) if filesize <= self.db.config.NOSY_MAX_ATTACHMENT_SIZE: message_files.append(fileid) else: diff -r 4dc575b33712 -r 0e33bf5571dc test/db_test_base.py --- a/test/db_test_base.py Fri Feb 05 04:10:06 2010 +0000 +++ b/test/db_test_base.py Fri Feb 05 05:10:52 2010 +0000 @@ -1855,14 +1855,14 @@ db.issue.nosymessage(i, m, {}) mail_msg = str(res["mail_msg"]) self.assertEqual(res["mail_to"], ["fred@example.com"]) - self.failUnless("From: admin" in mail_msg) - self.failUnless("Subject: [issue1] spam" in mail_msg) - self.failUnless("New submission from admin" in mail_msg) - self.failUnless("one two" in mail_msg) - self.failIf("File 'test1.txt' not attached" in mail_msg) - self.failUnless(base64.encodestring("xxx").rstrip() in mail_msg) - self.failUnless("File 'test2.txt' not attached" in mail_msg) - self.failIf(base64.encodestring("yyy").rstrip() in mail_msg) + self.assert_("From: admin" in mail_msg) + self.assert_("Subject: [issue1] spam" in mail_msg) + self.assert_("New submission from admin" in mail_msg) + self.assert_("one two" in mail_msg) + self.assert_("File 'test1.txt' not attached" not in mail_msg) + self.assert_(base64.encodestring("xxx").rstrip() in mail_msg) + self.assert_("File 'test2.txt' not attached" in mail_msg) + self.assert_(base64.encodestring("yyy").rstrip() not in mail_msg) finally : Mailer.smtp_send = backup diff -r 4dc575b33712 -r 0e33bf5571dc test/memorydb.py --- a/test/memorydb.py Fri Feb 05 04:10:06 2010 +0000 +++ b/test/memorydb.py Fri Feb 05 05:10:52 2010 +0000 @@ -183,6 +183,9 @@ shutil.copyfile(__file__, __file__+'.dummy') return __file__+'.dummy' + def filesize(self, classname, nodeid, property=None, create=0): + return len(self.getnode(classname, nodeid)[property or 'content']) + def post_init(self): pass @@ -269,6 +272,8 @@ def newid(self, classname): self.ids[classname] += 1 return str(self.ids[classname]) + def setid(self, classname, id): + self.ids[classname] = id # # Nodes @@ -282,7 +287,10 @@ def getnode(self, classname, nodeid, db=None): if db is not None: return db[nodeid] - return self.getclassdb(classname)[nodeid] + d = self.getclassdb(classname) + if nodeid not in d: + raise IndexError(nodeid) + return d[nodeid] def destroynode(self, classname, nodeid): del self.getclassdb(classname)[nodeid] @@ -328,7 +336,10 @@ class Class(back_anydbm.Class): def getnodeids(self, db=None, retired=None): - return self.db.getclassdb(self.classname).keys() + d = self.db.getclassdb(self.classname) + if retired is None: + return d.keys() + return [k for k in d if d[k].get(self.db.RETIRED_FLAG, False) == retired] class FileClass(back_anydbm.Class): def __init__(self, db, classname, **properties):