diff options
author | Michael DeHaan <mdehaan@redhat.com> | 2007-10-17 13:29:00 -0400 |
---|---|---|
committer | Michael DeHaan <mdehaan@redhat.com> | 2007-10-17 13:29:00 -0400 |
commit | 940a0bbbe44db52c06514423823f865a6c579e3a (patch) | |
tree | 759405a71065b9427e5765f76b9fd310358ae802 /cobbler | |
parent | 3e339bdfd00dc822fba3880e28e738d64bcb0fc2 (diff) | |
download | third_party-cobbler-940a0bbbe44db52c06514423823f865a6c579e3a.tar.gz third_party-cobbler-940a0bbbe44db52c06514423823f865a6c579e3a.tar.xz third_party-cobbler-940a0bbbe44db52c06514423823f865a6c579e3a.zip |
Make experimental shelve module explicitly use gdbm.
Diffstat (limited to 'cobbler')
-rw-r--r-- | cobbler/modules/serializer_shelve.py | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/cobbler/modules/serializer_shelve.py b/cobbler/modules/serializer_shelve.py index e1dd7e4..f7a5c65 100644 --- a/cobbler/modules/serializer_shelve.py +++ b/cobbler/modules/serializer_shelve.py @@ -21,17 +21,30 @@ import os import sys import glob import traceback - -plib = distutils.sysconfig.get_python_lib() -mod_path="%s/cobbler" % plib -sys.path.insert(0, mod_path) - - from rhpl.translate import _, N_, textdomain, utf8 from cexceptions import * import os import shelve +# FIXME: this is only needed for loading other modules, right? +# plib = distutils.sysconfig.get_python_lib() +# mod_path="%s/cobbler" % plib +# sys.path.insert(0, mod_path) + + +import gdbm # FIXME: check if available in EL4? + +def open_db(obj): + while 1: + try: + filename = obj.filename() + ".gdbm" + internal_db = gdbm.open(filename, 'c', 0644) + return shelve.BsdDbShelf(internal_db) + except gdbm.error: + print "- can't access %s right now, waiting..." % filename + time.sleep(1) + continue + def register(): """ The mandatory cobbler module registration hook. @@ -44,10 +57,10 @@ def serialize(obj): Will create intermediate paths if it can. Returns True on Success, False on permission errors. """ - fd = shelve.open(obj.filename() + ".shelve","c") # FIXME: this needs to understand deletes # FIXME: create partial serializer and don't use this + fd = open_db(obj) for entry in obj: fd[entry.name] = entry.to_datastruct() @@ -55,14 +68,14 @@ def serialize(obj): return True def serialize_item(obj, item): - fd = shelve.open(obj.filename() + ".shelve","w") + fd = open_db(obj) fd[item.name] = item.to_datastruct() fd.sync() return True # NOTE: not heavily tested def serialize_delete(obj, item): - fd = shelve.open(obj.filename() + ".shelve","w") + fd = open_db(obj) if fd.has_key(item.name): del fd[item.name] fd.sync() @@ -75,15 +88,7 @@ def deserialize(obj,topological=False): files could be read and contained decent YAML. Otherwise returns False. """ - filename = obj.filename() + ".shelve" - try: - fd = shelve.open(filename, "r") - except: - if not os.path.exists(filename): - return True - else: - traceback.print_exc() - raise CX(_("Can't access storage file")) + fd = open_db(obj) datastruct = [] for (key,value) in fd.iteritems(): |