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.
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.
|
|