def _open_shelve(self, db_file, db_desc): if self.options.dry_run: open_flag = "r" else: open_flag = "c" if self.options.dry_run and not os.path.exists(db_file): db = {} else: try: db = shelve.open(db_file, flag=open_flag) except ImportError as e: # ImportError has different attributes for python2 vs. python3 if (getattr(e, 'name', None) == 'bsddb' or getattr(e, 'message', None) == 'No module named bsddb'): from bsddb3 import dbshelve db = dbshelve.open(db_file, flags=open_flag) if sys.hexversion < 0x3000000: db = ShelveUnicodeWrapper(db) if self.options.dry_run: logging.warning("dry-run: %s db opened in readonly mode" % db_desc) if not isinstance(db, dict): volatile_db = dict((k, db[k]) for k in db) db.close() db = volatile_db else: self._open_files.append(db) return db
def _open_shelve(self, db_file, db_desc): if self.options.dry_run: open_flag = "r" else: open_flag = "c" if self.options.dry_run and not os.path.exists(db_file): db = {} else: try: db = shelve.open(db_file, flag=open_flag) except ImportError as e: # ImportError has different attributes for python2 vs. python3 if (getattr(e, 'name', None) == 'bsddb' or getattr( e, 'message', None) == 'No module named bsddb'): from bsddb3 import dbshelve db = dbshelve.open(db_file, flags=open_flag) if sys.hexversion < 0x3000000: db = ShelveUnicodeWrapper(db) if self.options.dry_run: logging.warning("dry-run: %s db opened in readonly mode" % db_desc) if not isinstance(db, dict): volatile_db = dict((k, db[k]) for k in db) db.close() db = volatile_db else: self._open_files.append(db) return db
def _open_shelve(self, db_file, db_desc): if self.options.dry_run: open_flag = "r" else: open_flag = "c" if self.options.dry_run and not os.path.exists(db_file): db = {} else: db = shelve.open(db_file, flag=open_flag) if sys.hexversion < 0x3000000: db = ShelveUnicodeWrapper(db) if self.options.dry_run: logging.warn("dry-run: %s db opened in readonly mode" % db_desc) if not isinstance(db, dict): volatile_db = dict((k, db[k]) for k in db) db.close() db = volatile_db else: self._open_files.append(db) return db