diff --git a/CHANGES.rst b/CHANGES.rst
index c9272ea..69afaec 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,7 +4,10 @@
 4.4.3 (unreleased)
 ------------------
 
-- Nothing changed yet.
+- Fix the repr of the persistent objects to include the module name
+  when using the C extension. This matches the pure-Python behaviour
+  and the behaviour prior to 4.4.0. See `issue 92
+  <https://github.com/zopefoundation/persistent/issues/92>`_.
 
 
 4.4.2 (2018-08-28)
diff --git a/persistent/cPersistence.c b/persistent/cPersistence.c
index 9e0f3ae..5e78cdc 100644
--- a/persistent/cPersistence.c
+++ b/persistent/cPersistence.c
@@ -1423,6 +1423,8 @@ Per_repr(cPersistentObject *self)
     PyObject *prepr = NULL;
     PyObject *prepr_exc_str = NULL;
 
+    PyObject *module = NULL;
+    PyObject *name = NULL;
     PyObject *oid_str = NULL;
     PyObject *jar_str = NULL;
     PyObject *result = NULL;
@@ -1454,15 +1456,32 @@ Per_repr(cPersistentObject *self)
     if (!jar_str)
         goto cleanup;
 
-    result = PyUnicode_FromFormat("<%s object at %p%S%S%S>",
-                                  Py_TYPE(self)->tp_name, self,
-                                  oid_str, jar_str, prepr_exc_str);
+    module = PyObject_GetAttrString((PyObject*)Py_TYPE(self), "__module__");
+    name = PyObject_GetAttrString((PyObject*)Py_TYPE(self), "__name__");
+
+    if (!module || !name) {
+        /*
+          Some error retrieving __module__ or __name__. Ignore it, use the
+          C data.
+        */
+        PyErr_Clear();
+        result = PyUnicode_FromFormat("<%s object at %p%S%S%S>",
+                                      Py_TYPE(self)->tp_name, self,
+                                      oid_str, jar_str, prepr_exc_str);
+    }
+    else {
+        result = PyUnicode_FromFormat("<%S.%S object at %p%S%S%S>",
+                                      module, name, self,
+                                      oid_str, jar_str, prepr_exc_str);
+    }
 
 cleanup:
     Py_XDECREF(prepr);
     Py_XDECREF(prepr_exc_str);
     Py_XDECREF(oid_str);
     Py_XDECREF(jar_str);
+    Py_XDECREF(name);
+    Py_XDECREF(module);
 
     return result;
 }
diff --git a/persistent/persistence.py b/persistent/persistence.py
index 8d72ce1..8af2b8a 100644
--- a/persistent/persistence.py
+++ b/persistent/persistence.py
@@ -585,7 +585,9 @@ class Persistent(object):
                 jar_str = ' in %r' % (e,)
 
         return '<%s.%s object at 0x%x%s%s%s>' % (
-            type(self).__module__, type(self).__name__, id(self),
+            # Match the C name for this exact class
+            type(self).__module__ if type(self) is not Persistent else 'persistent',
+            type(self).__name__, id(self),
             oid_str, jar_str, p_repr_str
         )
 

Type name varies in the repr() depending on the presence of the C extension
This manifests in breakage of [BTrees tests](https://travis-ci.org/zopefoundation/BTrees/jobs/415400906) when the C extensions are used (they pass when the pure-Python extensions are available). 

This is a somewhat common problem. There's a [python-dev thread](https://mail.python.org/pipermail/python-dev/2018-September/155150.html) and [bpo-issue](https://bugs.python.org/issue34595) about this. In particular, in the issue, and one of the [PRs that fixes it](https://github.com/python/cpython/pull/9122/) it's pointed out that getting the correct qualified name in a C type can be complex depending on things like `Py_TPFLAGS_HEAPTYPE` (and that's just on Python 3, I don't know if there's an equivalent of `ht_qualname` on Python 2).

Is this a bug here that we should fix, or should downstream consumers be prepared to deal with the difference? In one of my own downstream projects I dealt with the difference. But BTrees already deals with the difference in its own code to produce equivalent reprs in Python as we *used* to get from C.  (See https://github.com/zopefoundation/BTrees/issues/94)
diff --git a/persistent/tests/test_persistence.py b/persistent/tests/test_persistence.py
index 9ded7e2..7b502dc 100644
--- a/persistent/tests/test_persistence.py
+++ b/persistent/tests/test_persistence.py
@@ -1698,9 +1698,6 @@ class _Persistent_Base(object):
         self.assertEqual(candidate.set_by_new, 1)
 
     def _normalize_repr(self, r):
-        # Pure-python vs C
-        r = r.replace('persistent.persistence.Persistent', 'persistent.Persistent')
-        r = r.replace("persistent.tests.test_persistence.", '')
         # addresses
         r = re.sub(r'0x[0-9a-fA-F]*', '0xdeadbeef', r)
         # Python 3.7 removed the trailing , in exception reprs
@@ -1842,14 +1839,14 @@ class _Persistent_Base(object):
         result = self._normalized_repr(p)
         self.assertEqual(
             result,
-            "<P object at 0xdeadbeef"
+            "<persistent.tests.test_persistence.P object at 0xdeadbeef"
             " _p_repr Exception('_p_repr failed')>")
 
         p._p_oid = b'12345678'
         result = self._normalized_repr(p)
         self.assertEqual(
             result,
-            "<P object at 0xdeadbeef oid b'12345678'"
+            "<persistent.tests.test_persistence.P object at 0xdeadbeef oid b'12345678'"
             " _p_repr Exception('_p_repr failed')>")
 
         class Jar(object):
@@ -1860,7 +1857,7 @@ class _Persistent_Base(object):
         result = self._normalized_repr(p)
         self.assertEqual(
             result,
-            "<P object at 0xdeadbeef oid b'12345678'"
+            "<persistent.tests.test_persistence.P object at 0xdeadbeef oid b'12345678'"
             " in <SomeJar> _p_repr Exception('_p_repr failed')>")
 
     def test__p_repr_in_instance_ignored(self):
@@ -1869,7 +1866,8 @@ class _Persistent_Base(object):
         p = P()
         p._p_repr = lambda: "Instance"
         result = self._normalized_repr(p)
-        self.assertEqual(result, '<P object at 0xdeadbeef>')
+        self.assertEqual(result,
+                         '<persistent.tests.test_persistence.P object at 0xdeadbeef>')
 
     def test__p_repr_baseexception(self):
         class P(self._getTargetClass()):

pip install -e .[dev]
parse_log_pytest
requirements.txt
zope.testrunner manuel cffi coverage pytest
apt-get update apt-get install -y gcc
3.6
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
cffi==1.15.1
coverage==6.2
importlib-metadata==4.8.3
iniconfig==1.1.1
manuel==1.13.0
packaging==21.3
-e git+https://github.com/zopefoundation/persistent.git@598f9ab73dbf8b8d70cb706dc6eb53ec8598c8fe#egg=persistent
pluggy==1.0.0
py==1.11.0
pycparser==2.21
pyparsing==3.1.4
pytest==7.0.1
six==1.17.0
tomli==1.2.3
typing_extensions==4.1.1
zipp==3.6.0
zope.exceptions==4.6
zope.interface==5.5.2
zope.testrunner==5.6

name: persistent
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - cffi==1.15.1
      - coverage==6.2
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - manuel==1.13.0
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pycparser==2.21
      - pyparsing==3.1.4
      - pytest==7.0.1
      - six==1.17.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - zipp==3.6.0
      - zope-exceptions==4.6
      - zope-interface==5.5.2
      - zope-testrunner==5.6
prefix: /opt/conda/envs/persistent

persistent/tests/test_persistence.py::PyPersistentTests::test_repr_no_oid_in_jar persistent/tests/test_persistence.py::PyPersistentTests::test_repr_no_oid_no_jar persistent/tests/test_persistence.py::PyPersistentTests::test_repr_no_oid_repr_jar_raises_exception persistent/tests/test_persistence.py::PyPersistentTests::test_repr_oid_and_jar persistent/tests/test_persistence.py::PyPersistentTests::test_repr_oid_and_jar_raise_exception persistent/tests/test_persistence.py::PyPersistentTests::test_repr_oid_no_jar persistent/tests/test_persistence.py::PyPersistentTests::test_repr_oid_raises_exception_no_jar
persistent/tests/test_persistence.py::CPersistentTests::test__p_repr_exception persistent/tests/test_persistence.py::CPersistentTests::test__p_repr_in_instance_ignored
persistent/tests/test_persistence.py::PyPersistentTests::test___delattr___p__names persistent/tests/test_persistence.py::PyPersistentTests::test___delattr__normal_name_from_changed persistent/tests/test_persistence.py::PyPersistentTests::test___delattr__normal_name_from_ghost persistent/tests/test_persistence.py::PyPersistentTests::test___delattr__normal_name_from_saved persistent/tests/test_persistence.py::PyPersistentTests::test___delattr__normal_name_from_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test___getattribute___non_cooperative persistent/tests/test_persistence.py::PyPersistentTests::test___getattribute___p__names persistent/tests/test_persistence.py::PyPersistentTests::test___getattribute__normal_name_from_changed persistent/tests/test_persistence.py::PyPersistentTests::test___getattribute__normal_name_from_ghost persistent/tests/test_persistence.py::PyPersistentTests::test___getattribute__normal_name_from_saved persistent/tests/test_persistence.py::PyPersistentTests::test___getattribute__normal_name_from_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test___getattribute__special_name persistent/tests/test_persistence.py::PyPersistentTests::test___getstate__ persistent/tests/test_persistence.py::PyPersistentTests::test___getstate___derived_w_dict persistent/tests/test_persistence.py::PyPersistentTests::test___getstate___derived_w_slots persistent/tests/test_persistence.py::PyPersistentTests::test___getstate___derived_w_slots_in_base_and_derived persistent/tests/test_persistence.py::PyPersistentTests::test___getstate___derived_w_slots_in_base_but_not_derived persistent/tests/test_persistence.py::PyPersistentTests::test___reduce__ persistent/tests/test_persistence.py::PyPersistentTests::test___reduce__w_subclass_having_getnewargs persistent/tests/test_persistence.py::PyPersistentTests::test___reduce__w_subclass_having_getnewargs_and_getstate persistent/tests/test_persistence.py::PyPersistentTests::test___reduce__w_subclass_having_getstate persistent/tests/test_persistence.py::PyPersistentTests::test___setattr___p__names persistent/tests/test_persistence.py::PyPersistentTests::test___setattr___v__name persistent/tests/test_persistence.py::PyPersistentTests::test___setattr__normal_name_from_changed persistent/tests/test_persistence.py::PyPersistentTests::test___setattr__normal_name_from_ghost persistent/tests/test_persistence.py::PyPersistentTests::test___setattr__normal_name_from_saved persistent/tests/test_persistence.py::PyPersistentTests::test___setattr__normal_name_from_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test___setstate___derived_w_slots persistent/tests/test_persistence.py::PyPersistentTests::test___setstate___derived_w_slots_in_base_but_not_derived persistent/tests/test_persistence.py::PyPersistentTests::test___setstate___derived_w_slots_in_base_classes persistent/tests/test_persistence.py::PyPersistentTests::test___setstate___doesnt_fail_on_non_dict persistent/tests/test_persistence.py::PyPersistentTests::test___setstate___doesnt_fail_on_non_string_keys persistent/tests/test_persistence.py::PyPersistentTests::test___setstate___empty persistent/tests/test_persistence.py::PyPersistentTests::test___setstate___interns_dict_keys persistent/tests/test_persistence.py::PyPersistentTests::test___setstate___nonempty persistent/tests/test_persistence.py::PyPersistentTests::test___setstate___nonempty_derived_w_dict persistent/tests/test_persistence.py::PyPersistentTests::test___setstate___nonempty_derived_w_dict_w_two_keys persistent/tests/test_persistence.py::PyPersistentTests::test__ancient_dict_layout_bug persistent/tests/test_persistence.py::PyPersistentTests::test__p_activate_from_ghost persistent/tests/test_persistence.py::PyPersistentTests::test__p_activate_from_saved persistent/tests/test_persistence.py::PyPersistentTests::test__p_activate_from_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test__p_activate_leaves_object_in_saved_even_if_object_mutated_self persistent/tests/test_persistence.py::PyPersistentTests::test__p_activate_only_sets_state_once persistent/tests/test_persistence.py::PyPersistentTests::test__p_activate_w_broken_jar persistent/tests/test_persistence.py::PyPersistentTests::test__p_deactivate_from_changed persistent/tests/test_persistence.py::PyPersistentTests::test__p_deactivate_from_changed_w_dict persistent/tests/test_persistence.py::PyPersistentTests::test__p_deactivate_from_ghost persistent/tests/test_persistence.py::PyPersistentTests::test__p_deactivate_from_saved persistent/tests/test_persistence.py::PyPersistentTests::test__p_deactivate_from_saved_w_dict persistent/tests/test_persistence.py::PyPersistentTests::test__p_deactivate_from_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test__p_deactivate_from_unsaved_w_dict persistent/tests/test_persistence.py::PyPersistentTests::test__p_deactivate_when_sticky persistent/tests/test_persistence.py::PyPersistentTests::test__p_delattr_w__p__names persistent/tests/test_persistence.py::PyPersistentTests::test__p_delattr_w_normal_name persistent/tests/test_persistence.py::PyPersistentTests::test__p_getattr_w__p__names persistent/tests/test_persistence.py::PyPersistentTests::test__p_getattr_w_normal_name persistent/tests/test_persistence.py::PyPersistentTests::test__p_getattr_w_special_names persistent/tests/test_persistence.py::PyPersistentTests::test__p_invalidate_from_changed persistent/tests/test_persistence.py::PyPersistentTests::test__p_invalidate_from_changed_w_dict persistent/tests/test_persistence.py::PyPersistentTests::test__p_invalidate_from_changed_w_slots persistent/tests/test_persistence.py::PyPersistentTests::test__p_invalidate_from_changed_w_slots_compat persistent/tests/test_persistence.py::PyPersistentTests::test__p_invalidate_from_ghost persistent/tests/test_persistence.py::PyPersistentTests::test__p_invalidate_from_saved persistent/tests/test_persistence.py::PyPersistentTests::test__p_invalidate_from_saved_w_dict persistent/tests/test_persistence.py::PyPersistentTests::test__p_invalidate_from_sticky persistent/tests/test_persistence.py::PyPersistentTests::test__p_invalidate_from_sticky_w_dict persistent/tests/test_persistence.py::PyPersistentTests::test__p_invalidate_from_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test__p_invalidate_from_unsaved_w_dict persistent/tests/test_persistence.py::PyPersistentTests::test__p_mtime_activates_object persistent/tests/test_persistence.py::PyPersistentTests::test__p_mtime_no_serial persistent/tests/test_persistence.py::PyPersistentTests::test__p_mtime_w_serial persistent/tests/test_persistence.py::PyPersistentTests::test__p_repr persistent/tests/test_persistence.py::PyPersistentTests::test__p_repr_baseexception persistent/tests/test_persistence.py::PyPersistentTests::test__p_repr_exception persistent/tests/test_persistence.py::PyPersistentTests::test__p_repr_in_instance_ignored persistent/tests/test_persistence.py::PyPersistentTests::test__p_setattr_w__p__name persistent/tests/test_persistence.py::PyPersistentTests::test__p_setattr_w_normal_name persistent/tests/test_persistence.py::PyPersistentTests::test__p_state_changed persistent/tests/test_persistence.py::PyPersistentTests::test__p_state_changed_sticky persistent/tests/test_persistence.py::PyPersistentTests::test__p_state_ghost persistent/tests/test_persistence.py::PyPersistentTests::test__p_state_saved persistent/tests/test_persistence.py::PyPersistentTests::test__p_state_saved_sticky persistent/tests/test_persistence.py::PyPersistentTests::test__p_state_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test__p_status_changed persistent/tests/test_persistence.py::PyPersistentTests::test__p_status_changed_sticky persistent/tests/test_persistence.py::PyPersistentTests::test__p_status_ghost persistent/tests/test_persistence.py::PyPersistentTests::test__p_status_saved persistent/tests/test_persistence.py::PyPersistentTests::test__p_status_saved_sticky persistent/tests/test_persistence.py::PyPersistentTests::test__p_status_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test_accessed_invalidated_with_jar_and_oid_but_no_cache persistent/tests/test_persistence.py::PyPersistentTests::test_accessed_with_jar_and_oid_but_not_in_cache persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_false_from_changed persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_false_from_ghost persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_false_from_saved persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_false_from_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_none_from_changed persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_none_from_ghost persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_none_from_saved persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_none_from_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_none_when_sticky persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_true_from_changed persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_true_from_ghost persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_true_from_saved persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_changed_true_from_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_estimated_size_bigger persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_estimated_size_just_over_threshold persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_estimated_size_negative persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_estimated_size_small persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_estimated_size_wrong_type persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_jar_not_in_cache_allowed persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_jar_w_new_jar persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_jar_w_valid_jar persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_oid_not_in_cache_allowed persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_oid_w_None_wo_jar persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_oid_w_invalid_oid persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_oid_w_new_oid_w_jar persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_oid_w_new_oid_wo_jar persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_oid_w_valid_oid persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_serial_too_long persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_serial_too_short persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_serial_w_None persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_serial_w_invalid_type persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_serial_w_valid_serial persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_sticky_false_non_ghost persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_sticky_false_when_ghost persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_sticky_true_non_ghost persistent/tests/test_persistence.py::PyPersistentTests::test_assign_p_sticky_true_when_ghost persistent/tests/test_persistence.py::PyPersistentTests::test_can_set__p_attrs_if_subclass_denies_setattr persistent/tests/test_persistence.py::PyPersistentTests::test_class_conforms_to_IPersistent persistent/tests/test_persistence.py::PyPersistentTests::test_ctor persistent/tests/test_persistence.py::PyPersistentTests::test_del_jar_like_ZODB_abort persistent/tests/test_persistence.py::PyPersistentTests::test_del_jar_no_jar persistent/tests/test_persistence.py::PyPersistentTests::test_del_jar_of_inactive_object_that_has_no_state persistent/tests/test_persistence.py::PyPersistentTests::test_del_jar_while_in_cache persistent/tests/test_persistence.py::PyPersistentTests::test_del_oid_like_ZODB_abort persistent/tests/test_persistence.py::PyPersistentTests::test_delete_p_changed_from_changed persistent/tests/test_persistence.py::PyPersistentTests::test_delete_p_changed_from_ghost persistent/tests/test_persistence.py::PyPersistentTests::test_delete_p_changed_from_saved persistent/tests/test_persistence.py::PyPersistentTests::test_delete_p_changed_from_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test_delete_p_changed_from_unsaved_w_dict persistent/tests/test_persistence.py::PyPersistentTests::test_delete_p_changed_when_sticky persistent/tests/test_persistence.py::PyPersistentTests::test_delete_p_oid_of_subclass_calling_p_delattr persistent/tests/test_persistence.py::PyPersistentTests::test_delete_p_oid_w_jar persistent/tests/test_persistence.py::PyPersistentTests::test_delete_p_oid_wo_jar persistent/tests/test_persistence.py::PyPersistentTests::test_delete_p_serial persistent/tests/test_persistence.py::PyPersistentTests::test_instance_conforms_to_IPersistent persistent/tests/test_persistence.py::PyPersistentTests::test_new_ghost_success_not_already_ghost_dict persistent/tests/test_persistence.py::PyPersistentTests::test_new_ghost_success_not_already_ghost_slot persistent/tests/test_persistence.py::PyPersistentTests::test_p_accessed_with_jar_with_oid_as_ghost persistent/tests/test_persistence.py::PyPersistentTests::test_p_accessed_with_jar_without_oid persistent/tests/test_persistence.py::PyPersistentTests::test_p_activate_with_jar_without_oid persistent/tests/test_persistence.py::PyPersistentTests::test_p_invalidate_calls_p_deactivate persistent/tests/test_persistence.py::PyPersistentTests::test_p_invalidate_with_slots_broken_jar persistent/tests/test_persistence.py::PyPersistentTests::test_pickle_roundtrip_simple persistent/tests/test_persistence.py::PyPersistentTests::test_pickle_roundtrip_w_getnewargs_and_getstate persistent/tests/test_persistence.py::PyPersistentTests::test_pickle_roundtrip_w_slots_and_empty_dict persistent/tests/test_persistence.py::PyPersistentTests::test_pickle_roundtrip_w_slots_and_filled_dict persistent/tests/test_persistence.py::PyPersistentTests::test_pickle_roundtrip_w_slots_filled_slot persistent/tests/test_persistence.py::PyPersistentTests::test_pickle_roundtrip_w_slots_missing_slot persistent/tests/test_persistence.py::PyPersistentTests::test_query_p_changed_changed persistent/tests/test_persistence.py::PyPersistentTests::test_query_p_changed_ghost persistent/tests/test_persistence.py::PyPersistentTests::test_query_p_changed_saved persistent/tests/test_persistence.py::PyPersistentTests::test_query_p_changed_unsaved persistent/tests/test_persistence.py::PyPersistentTests::test_query_p_estimated_size_del persistent/tests/test_persistence.py::PyPersistentTests::test_query_p_estimated_size_new persistent/tests/test_persistence.py::PyPersistentTests::test_repr_no_oid_repr_jar_raises_baseexception persistent/tests/test_persistence.py::PyPersistentTests::test_repr_oid_raises_baseexception_no_jar persistent/tests/test_persistence.py::PyPersistentTests::test_set__p_changed_w_broken_jar persistent/tests/test_persistence.py::PyPersistentTests::test_setattr_in_subclass_is_not_called_creating_an_instance persistent/tests/test_persistence.py::PyPersistentTests::test_w_alternate_metaclass persistent/tests/test_persistence.py::PyPersistentTests::test_w_diamond_inheritance persistent/tests/test_persistence.py::CPersistentTests::test___delattr___p__names persistent/tests/test_persistence.py::CPersistentTests::test___delattr__normal_name_from_changed persistent/tests/test_persistence.py::CPersistentTests::test___delattr__normal_name_from_ghost persistent/tests/test_persistence.py::CPersistentTests::test___delattr__normal_name_from_saved persistent/tests/test_persistence.py::CPersistentTests::test___delattr__normal_name_from_unsaved persistent/tests/test_persistence.py::CPersistentTests::test___getattribute___non_cooperative persistent/tests/test_persistence.py::CPersistentTests::test___getattribute___p__names persistent/tests/test_persistence.py::CPersistentTests::test___getattribute__normal_name_from_changed persistent/tests/test_persistence.py::CPersistentTests::test___getattribute__normal_name_from_ghost persistent/tests/test_persistence.py::CPersistentTests::test___getattribute__normal_name_from_saved persistent/tests/test_persistence.py::CPersistentTests::test___getattribute__normal_name_from_unsaved persistent/tests/test_persistence.py::CPersistentTests::test___getattribute__special_name persistent/tests/test_persistence.py::CPersistentTests::test___getstate__ persistent/tests/test_persistence.py::CPersistentTests::test___getstate___derived_w_dict persistent/tests/test_persistence.py::CPersistentTests::test___getstate___derived_w_slots persistent/tests/test_persistence.py::CPersistentTests::test___getstate___derived_w_slots_in_base_and_derived persistent/tests/test_persistence.py::CPersistentTests::test___getstate___derived_w_slots_in_base_but_not_derived persistent/tests/test_persistence.py::CPersistentTests::test___reduce__ persistent/tests/test_persistence.py::CPersistentTests::test___reduce__w_subclass_having_getnewargs persistent/tests/test_persistence.py::CPersistentTests::test___reduce__w_subclass_having_getnewargs_and_getstate persistent/tests/test_persistence.py::CPersistentTests::test___reduce__w_subclass_having_getstate persistent/tests/test_persistence.py::CPersistentTests::test___setattr___p__names persistent/tests/test_persistence.py::CPersistentTests::test___setattr___v__name persistent/tests/test_persistence.py::CPersistentTests::test___setattr__normal_name_from_changed persistent/tests/test_persistence.py::CPersistentTests::test___setattr__normal_name_from_ghost persistent/tests/test_persistence.py::CPersistentTests::test___setattr__normal_name_from_saved persistent/tests/test_persistence.py::CPersistentTests::test___setattr__normal_name_from_unsaved persistent/tests/test_persistence.py::CPersistentTests::test___setstate___derived_w_slots persistent/tests/test_persistence.py::CPersistentTests::test___setstate___derived_w_slots_in_base_but_not_derived persistent/tests/test_persistence.py::CPersistentTests::test___setstate___derived_w_slots_in_base_classes persistent/tests/test_persistence.py::CPersistentTests::test___setstate___doesnt_fail_on_non_dict persistent/tests/test_persistence.py::CPersistentTests::test___setstate___doesnt_fail_on_non_string_keys persistent/tests/test_persistence.py::CPersistentTests::test___setstate___empty persistent/tests/test_persistence.py::CPersistentTests::test___setstate___interns_dict_keys persistent/tests/test_persistence.py::CPersistentTests::test___setstate___nonempty persistent/tests/test_persistence.py::CPersistentTests::test___setstate___nonempty_derived_w_dict persistent/tests/test_persistence.py::CPersistentTests::test___setstate___nonempty_derived_w_dict_w_two_keys persistent/tests/test_persistence.py::CPersistentTests::test__ancient_dict_layout_bug persistent/tests/test_persistence.py::CPersistentTests::test__p_activate_from_ghost persistent/tests/test_persistence.py::CPersistentTests::test__p_activate_from_saved persistent/tests/test_persistence.py::CPersistentTests::test__p_activate_from_unsaved persistent/tests/test_persistence.py::CPersistentTests::test__p_activate_leaves_object_in_saved_even_if_object_mutated_self persistent/tests/test_persistence.py::CPersistentTests::test__p_activate_only_sets_state_once persistent/tests/test_persistence.py::CPersistentTests::test__p_activate_w_broken_jar persistent/tests/test_persistence.py::CPersistentTests::test__p_deactivate_from_changed persistent/tests/test_persistence.py::CPersistentTests::test__p_deactivate_from_changed_w_dict persistent/tests/test_persistence.py::CPersistentTests::test__p_deactivate_from_ghost persistent/tests/test_persistence.py::CPersistentTests::test__p_deactivate_from_saved persistent/tests/test_persistence.py::CPersistentTests::test__p_deactivate_from_saved_w_dict persistent/tests/test_persistence.py::CPersistentTests::test__p_deactivate_from_unsaved persistent/tests/test_persistence.py::CPersistentTests::test__p_deactivate_from_unsaved_w_dict persistent/tests/test_persistence.py::CPersistentTests::test__p_deactivate_when_sticky persistent/tests/test_persistence.py::CPersistentTests::test__p_delattr_w__p__names persistent/tests/test_persistence.py::CPersistentTests::test__p_delattr_w_normal_name persistent/tests/test_persistence.py::CPersistentTests::test__p_getattr_w__p__names persistent/tests/test_persistence.py::CPersistentTests::test__p_getattr_w_normal_name persistent/tests/test_persistence.py::CPersistentTests::test__p_getattr_w_special_names persistent/tests/test_persistence.py::CPersistentTests::test__p_invalidate_from_changed persistent/tests/test_persistence.py::CPersistentTests::test__p_invalidate_from_changed_w_dict persistent/tests/test_persistence.py::CPersistentTests::test__p_invalidate_from_changed_w_slots persistent/tests/test_persistence.py::CPersistentTests::test__p_invalidate_from_changed_w_slots_compat persistent/tests/test_persistence.py::CPersistentTests::test__p_invalidate_from_ghost persistent/tests/test_persistence.py::CPersistentTests::test__p_invalidate_from_saved persistent/tests/test_persistence.py::CPersistentTests::test__p_invalidate_from_saved_w_dict persistent/tests/test_persistence.py::CPersistentTests::test__p_invalidate_from_sticky persistent/tests/test_persistence.py::CPersistentTests::test__p_invalidate_from_sticky_w_dict persistent/tests/test_persistence.py::CPersistentTests::test__p_invalidate_from_unsaved persistent/tests/test_persistence.py::CPersistentTests::test__p_invalidate_from_unsaved_w_dict persistent/tests/test_persistence.py::CPersistentTests::test__p_mtime_activates_object persistent/tests/test_persistence.py::CPersistentTests::test__p_mtime_no_serial persistent/tests/test_persistence.py::CPersistentTests::test__p_mtime_w_serial persistent/tests/test_persistence.py::CPersistentTests::test__p_repr persistent/tests/test_persistence.py::CPersistentTests::test__p_repr_baseexception persistent/tests/test_persistence.py::CPersistentTests::test__p_setattr_w__p__name persistent/tests/test_persistence.py::CPersistentTests::test__p_setattr_w_normal_name persistent/tests/test_persistence.py::CPersistentTests::test__p_state_changed persistent/tests/test_persistence.py::CPersistentTests::test__p_state_changed_sticky persistent/tests/test_persistence.py::CPersistentTests::test__p_state_ghost persistent/tests/test_persistence.py::CPersistentTests::test__p_state_saved persistent/tests/test_persistence.py::CPersistentTests::test__p_state_saved_sticky persistent/tests/test_persistence.py::CPersistentTests::test__p_state_unsaved persistent/tests/test_persistence.py::CPersistentTests::test__p_status_changed persistent/tests/test_persistence.py::CPersistentTests::test__p_status_changed_sticky persistent/tests/test_persistence.py::CPersistentTests::test__p_status_ghost persistent/tests/test_persistence.py::CPersistentTests::test__p_status_saved persistent/tests/test_persistence.py::CPersistentTests::test__p_status_saved_sticky persistent/tests/test_persistence.py::CPersistentTests::test__p_status_unsaved persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_false_from_changed persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_false_from_ghost persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_false_from_saved persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_false_from_unsaved persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_none_from_changed persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_none_from_ghost persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_none_from_saved persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_none_from_unsaved persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_none_when_sticky persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_true_from_changed persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_true_from_ghost persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_true_from_saved persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_changed_true_from_unsaved persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_estimated_size_bigger persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_estimated_size_just_over_threshold persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_estimated_size_negative persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_estimated_size_small persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_estimated_size_wrong_type persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_jar_not_in_cache_allowed persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_jar_w_new_jar persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_jar_w_valid_jar persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_oid_not_in_cache_allowed persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_oid_w_None_wo_jar persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_oid_w_invalid_oid persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_oid_w_new_oid_w_jar persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_oid_w_new_oid_wo_jar persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_oid_w_valid_oid persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_serial_too_long persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_serial_too_short persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_serial_w_None persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_serial_w_invalid_type persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_serial_w_valid_serial persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_sticky_false_non_ghost persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_sticky_false_when_ghost persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_sticky_true_non_ghost persistent/tests/test_persistence.py::CPersistentTests::test_assign_p_sticky_true_when_ghost persistent/tests/test_persistence.py::CPersistentTests::test_can_set__p_attrs_if_subclass_denies_setattr persistent/tests/test_persistence.py::CPersistentTests::test_class_conforms_to_IPersistent persistent/tests/test_persistence.py::CPersistentTests::test_ctor persistent/tests/test_persistence.py::CPersistentTests::test_del_jar_like_ZODB_abort persistent/tests/test_persistence.py::CPersistentTests::test_del_jar_no_jar persistent/tests/test_persistence.py::CPersistentTests::test_del_jar_of_inactive_object_that_has_no_state persistent/tests/test_persistence.py::CPersistentTests::test_del_jar_while_in_cache persistent/tests/test_persistence.py::CPersistentTests::test_del_oid_like_ZODB_abort persistent/tests/test_persistence.py::CPersistentTests::test_delete_p_changed_from_changed persistent/tests/test_persistence.py::CPersistentTests::test_delete_p_changed_from_ghost persistent/tests/test_persistence.py::CPersistentTests::test_delete_p_changed_from_saved persistent/tests/test_persistence.py::CPersistentTests::test_delete_p_changed_from_unsaved persistent/tests/test_persistence.py::CPersistentTests::test_delete_p_changed_from_unsaved_w_dict persistent/tests/test_persistence.py::CPersistentTests::test_delete_p_changed_when_sticky persistent/tests/test_persistence.py::CPersistentTests::test_delete_p_oid_of_subclass_calling_p_delattr persistent/tests/test_persistence.py::CPersistentTests::test_delete_p_oid_w_jar persistent/tests/test_persistence.py::CPersistentTests::test_delete_p_oid_wo_jar persistent/tests/test_persistence.py::CPersistentTests::test_delete_p_serial persistent/tests/test_persistence.py::CPersistentTests::test_instance_conforms_to_IPersistent persistent/tests/test_persistence.py::CPersistentTests::test_new_ghost_success_not_already_ghost_dict persistent/tests/test_persistence.py::CPersistentTests::test_new_ghost_success_not_already_ghost_slot persistent/tests/test_persistence.py::CPersistentTests::test_p_invalidate_calls_p_deactivate persistent/tests/test_persistence.py::CPersistentTests::test_p_invalidate_with_slots_broken_jar persistent/tests/test_persistence.py::CPersistentTests::test_pickle_roundtrip_simple persistent/tests/test_persistence.py::CPersistentTests::test_pickle_roundtrip_w_getnewargs_and_getstate persistent/tests/test_persistence.py::CPersistentTests::test_pickle_roundtrip_w_slots_and_empty_dict persistent/tests/test_persistence.py::CPersistentTests::test_pickle_roundtrip_w_slots_and_filled_dict persistent/tests/test_persistence.py::CPersistentTests::test_pickle_roundtrip_w_slots_filled_slot persistent/tests/test_persistence.py::CPersistentTests::test_pickle_roundtrip_w_slots_missing_slot persistent/tests/test_persistence.py::CPersistentTests::test_query_p_changed_changed persistent/tests/test_persistence.py::CPersistentTests::test_query_p_changed_ghost persistent/tests/test_persistence.py::CPersistentTests::test_query_p_changed_saved persistent/tests/test_persistence.py::CPersistentTests::test_query_p_changed_unsaved persistent/tests/test_persistence.py::CPersistentTests::test_query_p_estimated_size_del persistent/tests/test_persistence.py::CPersistentTests::test_query_p_estimated_size_new persistent/tests/test_persistence.py::CPersistentTests::test_repr_no_oid_in_jar persistent/tests/test_persistence.py::CPersistentTests::test_repr_no_oid_no_jar persistent/tests/test_persistence.py::CPersistentTests::test_repr_no_oid_repr_jar_raises_baseexception persistent/tests/test_persistence.py::CPersistentTests::test_repr_no_oid_repr_jar_raises_exception persistent/tests/test_persistence.py::CPersistentTests::test_repr_oid_and_jar persistent/tests/test_persistence.py::CPersistentTests::test_repr_oid_and_jar_raise_exception persistent/tests/test_persistence.py::CPersistentTests::test_repr_oid_no_jar persistent/tests/test_persistence.py::CPersistentTests::test_repr_oid_raises_baseexception_no_jar persistent/tests/test_persistence.py::CPersistentTests::test_repr_oid_raises_exception_no_jar persistent/tests/test_persistence.py::CPersistentTests::test_set__p_changed_w_broken_jar persistent/tests/test_persistence.py::CPersistentTests::test_setattr_in_subclass_is_not_called_creating_an_instance persistent/tests/test_persistence.py::CPersistentTests::test_w_alternate_metaclass persistent/tests/test_persistence.py::CPersistentTests::test_w_diamond_inheritance persistent/tests/test_persistence.py::Test_simple_new::test_w_non_type persistent/tests/test_persistence.py::Test_simple_new::test_w_type persistent/tests/test_persistence.py::test_suite
persistent/persistence.py CHANGES.rst persistent/cPersistence.c
persistent/persistence.py CHANGES.rst persistent/cPersistence.c