blob: dd305885212dade5f6e244cbbef232719e18295d [file] [log] [blame]
# Copyright 2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id: /var/cvsroot/gentoo-src/portage/pym/Attic/portage_db_cpickle.py,v 1.9.2.2 2005/04/23 07:26:04 jstubbs Exp $
import anydbm,cPickle,types
from os import chown,access,R_OK,unlink
import os
import portage_db_template
class database(portage_db_template.database):
def module_init(self):
self.modified = False
prevmask=os.umask(0)
if not os.path.exists(self.path):
os.makedirs(self.path, 02775)
self.filename = self.path + "/" + self.category + ".cpickle"
if access(self.filename, R_OK):
try:
mypickle=cPickle.Unpickler(open(self.filename,"r"))
mypickle.find_global=None
self.db = mypickle.load()
except SystemExit, e:
raise
except:
self.db = {}
else:
self.db = {}
os.umask(prevmask)
def has_key(self,key):
self.check_key(key)
if self.db.has_key(key):
return 1
return 0
def keys(self):
return self.db.keys()
def get_values(self,key):
self.check_key(key)
if self.db.has_key(key):
return self.db[key]
return None
def set_values(self,key,val):
self.modified = True
self.check_key(key)
self.db[key] = val
def del_key(self,key):
if self.has_key(key):
del self.db[key]
self.modified = True
return True
return False
def sync(self):
if self.modified:
try:
if os.path.exists(self.filename):
unlink(self.filename)
cPickle.dump(self.db, open(self.filename,"w"), -1)
os.chown(self.filename,self.uid,self.gid)
os.chmod(self.filename, 0664)
except SystemExit, e:
raise
except:
pass
def close(self):
self.sync()
self.db = None;