Table of Contents

Class: IPersistent ./src/peak/persistence/interfaces.py

Python persistence interface

A persistent object can be in one of several states:

  • Unsaved

    The object has been created but not saved in a data manager.

    In this state, the _p_changed attribute is non-None and false and the _p_jar attribute is None.

  • Saved

    The object has been saved and has not been changed since it was saved.

    In this state, the _p_changed attribute is non-None and false and the _p_jar attribute is set to a data manager.

  • Sticky

    This state is identical to the up-to-date state except that the object cannot transition to the ghost state. This is a special state used by C methods of persistent objects to make sure that state is not unloaded in the middle of computation.

    In this state, the _p_changed attribute is non-None and false and the _p_jar attribute is set to a data manager.

    There is, currently, no official way to detect whether an object is in the sticky state.

  • Changed

    The object has been changed.

    In this state, the _p_changed attribute is true and the _p_jar attribute is set to a data manager.

  • Ghost

    the object is in memory but its state has not been loaded from the database (or has been unloaded). In this state, the object doesn't contain any data.

The following state transactions are possible:

  • Unsaved -> Saved

    This transition occurs when an object is saved in the database. This usually happens when an unsaved object is added to (e.g. as an attribute or item of) a saved (or changed) object and the transaction is committed.

  • Saved -> Changed Sticky -> Changed

    This transition occurs when someone sets an attribute or sets _p_changed to a true value on an up-to-date or sticky object. When the transition occurs, the persistent object is required to call the register method on its data manager, passing itself as the only argument.

  • Saved -> Sticky

    This transition occurs when C code marks the object as sticky to prevent its deactivation and transition to the ghost state.

  • Saved -> Ghost

    This transition occurs when an saved object is deactivated, by: calling _p_deactivate, setting _p_changed to None, or deleting _p_changed.

  • Sticky -> Saved

    This transition occurs when C code unmarks the object as sticky to allow its deactivation and transition to the ghost state.

  • Changed -> Saved

    This transition occurs when a transaction is committed. The data manager affects the transaction by setting _p_changed to a true value.

  • Changed -> Ghost

    This transition occurs when a transaction is aborted. The data manager affects the transaction by deleting _p_changed.

  • Ghost -> Saved

    This transition occurs when an attribute or operation of a ghost is accessed and the object's state is loaded from the database.

Note that there is a separate C API that is not included here. The C API requires a specific data layout and defines the sticky state that is used to prevent object deactivation while in C routines.

Base Classes   
Interface
Methods   
__getstate__
__setstate__
_p_activate
_p_deactivate
  __getstate__ 
__getstate__ ()

Get the object state data

The state should not include persistent attributes ("_p_name")

  __setstate__ 
__setstate__ ( state )

Set the object state data

Note that this does not affect the object's persistence state.

  _p_activate 
_p_activate ()

Activate the object

Change the object to the up-to-date state if it is a ghost.

  _p_deactivate 
_p_deactivate ()

Deactivate the object

If possible, change an object in the up-to-date state to the ghost state. It may not be possible to make some persistent objects ghosts.


Table of Contents

This document was automatically generated on Mon May 13 01:11:05 2024 by HappyDoc version 2.1