def make_persistent(self, instance): print 'Make persistent called with %s' % (instance, ) if not IPersistent.providedBy(instance): print '\tIPersistent not provided, directly providing' directly_provides(instance, IPersistent) persistent = IPersistentObject(instance) self._configure_persistence(persistent) persistent.set_unsaved() self.notify_modified(instance)
def store(self, instance): written = {} persistent = IPersistentObject(instance) oid = persistent.get_oid() instance = persistent.get_object() print 'Store %s with OID %s' % (instance, oid) transformation_writer = self.writer_factory(instance) transformation_writer.set_manager(self) for instance in transformation_writer: persistent = IPersistentObject(instance) oid = persistent.get_oid() if written.has_key(oid): continue if persistent.is_persistent() and not persistent.is_saved(): instance = persistent.get_object() transformation = transformation_writer.write(instance) print '\t-> storing %s with OID %s' % (instance, oid) self.storage.store_record(oid, transformation) written[oid] = None persistent.set_saved() self.cache.add_instance(oid, instance) else: print '\t-> not storing %s with OID %s' % (instance, oid)
def load(self, oid): print 'Loading %s' % oid instance = self.cache.get_instance(oid, None) if instance is None or isinstance(instance, DeferredObject): transformation = self.storage.load_record(oid) instance = self._transformation_reader.read(transformation) persistent = IPersistentObject(instance) self._configure_persistence(persistent, oid) persistent.set_loaded() persistent.set_saved() instance = persistent.get_object() else: print '\tloaded from cache!' print '\tload(%s) -> %s' % (oid, instance) return instance
def get_oid(self, instance): print 'get_oid(%s)' % (instance, ) if isinstance(instance, _never_persistent): print '\t-> None, is instance of _never_persistent' return None if type(instance) in (dict, list): print '\t-> None, type in dict, list' return None if not IPersistent.providedBy(instance): print '\t-> None, IPersistent not provided by instance' return None persistent = IPersistentObject(instance) if persistent.get_oid() is None: self._configure_persistence(persistent) persistent.set_loaded() persistent.set_unsaved() elif not persistent.is_persistent(): print '\t-> None, not persistent.is_persistent()' return None oid = persistent.get_oid() print '\t%s OID => %s' % (instance, oid) return oid
def notify_modified(self, instance): persistent = IPersistentObject(instance) self.policy.note_modified(persistent)
def make_transient(self, instance): persistent = IPersistentObject(instance) persistent.disable_persistence() persistent.clear_manager()