error(), previous_error() and reset_error_history()

This commit is contained in:
Mike Dirolf 2009-01-23 13:13:24 -05:00
parent 9a0e4b6bd7
commit 4180922a45
2 changed files with 59 additions and 0 deletions

View File

@ -238,6 +238,37 @@ class Database(object):
"""
return list(self.system.profile.find())
def error(self):
"""Get a database error if one occured on the last operation.
Return None if the last operation was error-free. Otherwise return the
error that occurred.
"""
error = self._command({"getlasterror": 1})
if error.get("err", 0) is None:
return None
return error
def previous_error(self):
"""Get the most recent error to have occurred on this database.
Only returns errors that have occurred since the last call to
`Database.reset_error_history`. Returns None if no such errors have
occurred.
"""
error = self._command({"getpreverror": 1})
if error.get("err", 0) is None:
return None
return error
def reset_error_history(self):
"""Reset the error history of this database.
Calls to `Database.previous_error` will only return errors that have
occurred since the most recent call to this method.
"""
self._command({"reseterror": 1})
def __iter__(self):
return self

View File

@ -163,6 +163,34 @@ class TestDatabase(unittest.TestCase):
self.assertRaises(TypeError, iterate)
def test_errors(self):
db = self.connection.test
db.reset_error_history()
self.assertEqual(None, db.error())
self.assertEqual(None, db.previous_error())
db._command({"forceerror": 1})
self.assertTrue(db.error())
self.assertTrue(db.previous_error())
db._command({"forceerror": 1})
self.assertTrue(db.error())
prev_error = db.previous_error()
self.assertEqual(prev_error["nPrev"], 1)
del prev_error["nPrev"]
self.assertEqual(db.error(), prev_error)
db.test.find_one()
self.assertEqual(None, db.error())
self.assertTrue(db.previous_error())
self.assertEqual(db.previous_error()["nPrev"], 2)
db.reset_error_history()
self.assertEqual(None, db.error())
self.assertEqual(None, db.previous_error())
# TODO some of these tests belong in the collection level testing.
def test_save_find_one(self):
db = Database(self.connection, "test")
db.test.remove({})