=== modified file 'django/db/models/signals.py'
--- django/db/models/signals.py	2006-12-30 06:25:49 +0000
+++ django/db/models/signals.py	2007-06-10 12:46:58 +0000
@@ -1,12 +1,14 @@
-class_prepared = object()
-
-pre_init= object()
-post_init = object()
-
-pre_save = object()
-post_save = object()
-
-pre_delete = object()
-post_delete = object()
-
-post_syncdb = object()
+from django.dispatch import signal
+
+class_prepared = signal("class_prepared")
+
+pre_init= signal('pre_init')
+post_init = signal('post_init')
+
+pre_save = signal('pre_save')
+post_save = signal('post_save')
+
+pre_delete = signal('pre_delete')
+post_delete = signal('post_delete')
+
+post_syncdb = signal('post_syncdb')

=== modified file 'django/dispatch/__init__.py'
--- django/dispatch/__init__.py	2006-12-30 06:25:49 +0000
+++ django/dispatch/__init__.py	2007-06-10 12:46:24 +0000
@@ -4,3 +4,19 @@
 __author__ = "Patrick K. O'Brien"
 __license__ = "BSD-style, see license.txt for details"
 
+class _signal(object):
+    def __init__(self, label):
+        self.label = label
+
+    def __str__(self):
+        return self.label
+
+    def __repr__(self):
+        return "<signal signal=%r @#%x>" % (self.label, id(self))
+
+def signal(signal_name, docstring=None):
+    if docstring is None:
+        return _signal(signal_name)
+    class signal(_signal):
+        __doc__ = docstring
+    return signal(signal_name)

=== modified file 'django/dispatch/dispatcher.py'
--- django/dispatch/dispatcher.py	2007-02-26 03:17:04 +0000
+++ django/dispatch/dispatcher.py	2007-06-10 12:46:33 +0000
@@ -26,29 +26,22 @@
         vs. the original code.)
 """
 import types, weakref
-from django.dispatch import saferef, robustapply, errors
+from django.dispatch import saferef, robustapply, errors, signal
 
 __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
 __cvsid__ = "$Id: dispatcher.py,v 1.9 2005/09/17 04:55:57 mcfletch Exp $"
 __version__ = "$Revision: 1.9 $"[11:-2]
 
-
-class _Parameter:
-    """Used to represent default parameter values."""
-    def __repr__(self):
-        return self.__class__.__name__
-
-class _Any(_Parameter):
+Any = signal('Any', 
     """Singleton used to signal either "Any Sender" or "Any Signal"
 
     The Any object can be used with connect, disconnect,
     send, or sendExact to signal that the parameter given
     Any should react to all senders/signals, not just
     a particular sender/signal.
-    """
-Any = _Any()
+    """)
 
-class _Anonymous(_Parameter):
+Anonymous = signal('Anonymous',
     """Singleton used to signal "Anonymous Sender"
 
     The Anonymous object is used to signal that the sender
@@ -65,8 +58,7 @@
         in either function then all messages are routed
         as though there was a single sender (Anonymous)
         being used everywhere.
-    """
-Anonymous = _Anonymous()
+    """)
 
 WEAKREF_TYPES = (weakref.ReferenceType, saferef.BoundMethodWeakref)
 

