예제 #1
0
파일: Config.py 프로젝트: tclh123/portage
    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
예제 #2
0
파일: Config.py 프로젝트: ezc/portage
    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