[Zope3-checkins] CVS: Zope3/lib/python/Persistence - IPersistent.py:1.4
Jim Fulton
jim@zope.com
Thu, 3 Oct 2002 10:18:43 -0400
Update of /cvs-repository/Zope3/lib/python/Persistence
In directory cvs.zope.org:/tmp/cvs-serv27849
Modified Files:
IPersistent.py
Log Message:
Added a detailed description of the state model to the interface doc
string.
=== Zope3/lib/python/Persistence/IPersistent.py 1.3 => 1.4 ===
--- Zope3/lib/python/Persistence/IPersistent.py:1.3 Sun Jun 23 12:44:37 2002
+++ Zope3/lib/python/Persistence/IPersistent.py Thu Oct 3 10:18:42 2002
@@ -21,10 +21,103 @@
class IPersistent(Interface):
"""Python persistence interface
+ A persistent object can eb 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 it's 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 ot 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 it's data manager,
+ passing itself as the only argument.
+
+ - Saved -> Sticky
+
+ This transition occurs when C code marks the object as sticky to
+ prevent it's 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 it's 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 an
- additional state, 'sticky' that is used to pevent object
- deactivation while in C routines.
+ The C API requires a specific data layout and defines the sticky
+ state that is used to pevent object deactivation while in C
+ routines.
+
"""
_p_jar=Attribute(
@@ -49,7 +142,7 @@
None -- The object is a ghost. It is not active.
- false -- The object is up to date (or has never been saved).
+ false -- The object is saved (or has never been saved).
true -- The object has been modified.