home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / python-support / python-rdflib / rdflib / store / NodePickler.py < prev    next >
Encoding:
Python Source  |  2007-04-04  |  940 b   |  38 lines

  1. ##############
  2.  
  3. from cPickle import Pickler, Unpickler, UnpicklingError
  4. from cStringIO import StringIO
  5.  
  6.  
  7. class NodePickler(object):
  8.     def __init__(self):
  9.         self._objects = {}
  10.         self._ids = {}
  11.         self._get_object = self._objects.__getitem__
  12.  
  13.     def _get_ids(self, key):
  14.         try:
  15.             return self._ids.get(key)
  16.         except TypeError, e:
  17.             return None
  18.  
  19.     def register(self, object, id):
  20.         self._objects[id] = object
  21.         self._ids[object] = id
  22.  
  23.     def loads(self, s):
  24.         up = Unpickler(StringIO(s))
  25.         up.persistent_load = self._get_object
  26.         try:
  27.             return up.load()
  28.         except KeyError, e:
  29.             raise UnpicklingError, "Could not find Node class for %s" % e
  30.  
  31.     def dumps(self, obj, protocol=None, bin=None):
  32.         src = StringIO()
  33.         p = Pickler(src)
  34.         p.persistent_id = self._get_ids
  35.         p.dump(obj)
  36.         return src.getvalue()
  37.  
  38.