Merge r58434:
Fixes http://bugs.python.org/issue1233 - bsddb.dbshelve.DBShelf.append
was useless due to inverted logic.  Also adds a test case for RECNO dbs
to test_dbshelve.
diff --git a/Lib/bsddb/dbshelve.py b/Lib/bsddb/dbshelve.py
index 2959f25..c687ab5 100644
--- a/Lib/bsddb/dbshelve.py
+++ b/Lib/bsddb/dbshelve.py
@@ -77,6 +77,9 @@
 
 #---------------------------------------------------------------------------
 
+class DBShelveError(db.DBError): pass
+
+
 class DBShelf(DictMixin):
     """A shelf to hold pickled objects, built upon a bsddb DB object.  It
     automatically pickles/unpickles data objects going to/from the DB.
@@ -152,10 +155,10 @@
         return self.db.append(data, txn)
 
     def append(self, value, txn=None):
-        if self.get_type() != db.DB_RECNO:
+        if self.get_type() == db.DB_RECNO:
             self.append = self.__append
             return self.append(value, txn=txn)
-        raise db.DBError("append() only supported when dbshelve opened with filetype=dbshelve.db.DB_RECNO")
+        raise DBShelveError("append() only supported when dbshelve opened with filetype=dbshelve.db.DB_RECNO")
 
 
     def associate(self, secondaryDB, callback, flags=0):