From 39c6f4fb88c2ed86bf4578c17e01646ff525ffdd Mon Sep 17 00:00:00 2001 From: Robert Wittams Date: Sun, 18 Dec 2005 00:59:11 +0000 Subject: [PATCH] magic-removal: slight event cleanup git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@1721 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/__init__.py | 2 +- django/db/models/base.py | 32 ++++++++++------------------- django/db/models/fields/__init__.py | 4 ++-- django/db/models/fields/related.py | 9 ++++---- django/db/models/manager.py | 15 ++++++++++++++ django/db/models/manipulators.py | 12 +++++++++++ django/db/models/signals.py | 15 +++++++------- 7 files changed, 53 insertions(+), 36 deletions(-) diff --git a/django/db/models/__init__.py b/django/db/models/__init__.py index 156c61ada0..f874cb0516 100644 --- a/django/db/models/__init__.py +++ b/django/db/models/__init__.py @@ -16,7 +16,7 @@ from django.db.models.fields.related import * from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured from django.db.models.exceptions import FieldDoesNotExist, BadKeywordArguments -from django.db.models.signals import Signals +from django.db.models import signals # Admin stages. diff --git a/django/db/models/base.py b/django/db/models/base.py index e3712f645e..ddb515cfe2 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -1,12 +1,13 @@ -from django.db.models.manipulators import ModelAddManipulator, ModelChangeManipulator +import django.db.models.manipulators +import django.db.models.manager + from django.db.models.fields import AutoField from django.db.models.fields.related import OneToOne, ManyToOne from django.db.models.related import RelatedObject -from django.db.models.manager import Manager from django.db.models.query import orderlist2sql from django.db.models.options import Options from django.db import connection, backend -from django.db.models.signals import Signals +from django.db.models import signals from django.dispatch import dispatcher from django.core.exceptions import ObjectDoesNotExist @@ -133,7 +134,7 @@ class Model(object): return not self.__eq__(other) def __init__(self, *args, **kwargs): - dispatcher.send( signal = Signals.pre_init, sender = self.__class__, args=args, kwargs=kwargs) + dispatcher.send( signal = signals.pre_init, sender = self.__class__, args=args, kwargs=kwargs) if kwargs: for f in self._meta.fields: if isinstance(f.rel, ManyToOne): @@ -164,26 +165,15 @@ class Model(object): raise TypeError, "'%s' is an invalid keyword argument for this function" % kwargs.keys()[0] for i, arg in enumerate(args): setattr(self, self._meta.fields[i].attname, arg) - dispatcher.send( signal = Signals.post_init, sender = self.__class__, instance=self) + dispatcher.send( signal = signals.post_init, sender = self.__class__, instance=self) def _prepare(cls): - if not hasattr(cls, '_default_manager'): - # Create the default manager, if needed. - if hasattr(cls, 'objects'): - raise ValueError, "Model %s must specify a custom Manager, because it has a field named 'objects'" % name - cls.add_to_class('objects', Manager()) - - cls.add_to_class( 'AddManipulator', ModelAddManipulator) - cls.add_to_class( 'ChangeManipulator', ModelChangeManipulator) - # Creates some methods once self._meta has been populated. - if cls._meta.order_with_respect_to: cls.get_next_in_order = curry(cls._get_next_or_previous_in_order, is_next=True) cls.get_previous_in_order = curry(cls._get_next_or_previous_in_order, is_next=False) - dispatcher.send( signal = Signals.class_prepared, sender = cls) - + dispatcher.send( signal = signals.class_prepared, sender = cls) #RelatedField.do_pending_lookups(cls) _prepare = classmethod(_prepare) @@ -192,7 +182,7 @@ class Model(object): # Run any pre-save hooks. if hasattr(self, '_pre_save'): self._pre_save() - dispatcher.send( signal=Signals.pre_save, sender = self.__class__, instance = self ) + dispatcher.send( signal=signals.pre_save, sender = self.__class__, instance = self ) non_pks = [f for f in self._meta.fields if not f.primary_key] cursor = connection.cursor() @@ -237,7 +227,7 @@ class Model(object): connection.commit() # Run any post-save hooks. - dispatcher.send(signal=Signals.pre_save, sender = self.__class__, instance = self ) + dispatcher.send(signal=signals.pre_save, sender = self.__class__, instance = self ) if hasattr(self, '_post_save'): self._post_save() @@ -292,7 +282,7 @@ class Model(object): if hasattr(instance, '_pre_delete'): instance._pre_delete() - dispatcher.send(signal=Signals.pre_delete, sender = cls, instance = instance ) + dispatcher.send(signal=signals.pre_delete, sender = cls, instance = instance ) for related in cls._meta.get_all_related_many_to_many_objects(): cursor.execute("DELETE FROM %s WHERE %s=%%s" % \ @@ -322,7 +312,7 @@ class Model(object): setattr(self, cls._meta.pk.attname, None) - dispatcher.send(signal=Signals.post_delete, sender = cls, instance = instance ) + dispatcher.send(signal=signals.post_delete, sender = cls, instance = instance ) if hasattr(instance, '_post_delete'): instance._post_delete() diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index d53d0bc694..fe7a16639b 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -1,4 +1,4 @@ -from django.db.models.signals import Signals +from django.db.models import signals from django.dispatch import dispatcher from django.conf import settings from django.core import formfields, validators @@ -507,7 +507,7 @@ class FileField(Field): setattr(cls, 'save_%s_file' % self.name, curry(cls._save_FIELD_file, field=self)) dispatcher.connect( self.delete_file, - signal = Signals.post_delete, + signal = signals.post_delete, sender = cls ) diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index 8873cd503a..6db6dc1e0d 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -3,7 +3,7 @@ from django.db.models.related import RelatedObject from django.utils.translation import gettext_lazy, string_concat from django.utils.functional import curry from django.core import formfields -from django.db.models.signals import Signals +from django.db.models import signals from django.dispatch import dispatcher @@ -18,7 +18,7 @@ class RelatedField(object): dispatcher.connect( lambda sender: RelatedField.do_pending_lookups(sender) , - signal = Signals.class_prepared, + signal = signals.class_prepared, weak = False) @@ -320,13 +320,13 @@ class ManyToManyFieldNew(RelatedField): # We need to wait until the class we were in was fully defined dispatcher.connect( self.from_prepared, - signal = Signals.class_prepared, + signal = signals.class_prepared, sender = self.from_ ) def from_prepared(self): from django.db.models.base import Model - + class M2M(Model): __module__ = self.from_.__module__ @@ -340,6 +340,7 @@ class ManyToManyFieldNew(RelatedField): M2M.__name__ = "M2M_%s_%s_%s" % (self.name,self.from_.__name__, self.to.__name__) + class ManyToOne: def __init__(self, to, field_name, num_in_admin=3, min_num_in_admin=None, max_num_in_admin=None, num_extra_on_change=1, edit_inline=False, diff --git a/django/db/models/manager.py b/django/db/models/manager.py index 22715c40c1..8aaef95a5a 100644 --- a/django/db/models/manager.py +++ b/django/db/models/manager.py @@ -3,11 +3,26 @@ from django.utils.functional import curry from django.db import backend, connection from django.db.models.query import Q, parse_lookup, fill_table_cache, get_cached_row from django.db.models.query import handle_legacy_orderlist, orderlist2sql, orderfield2column +from django.dispatch import dispatcher +from django.db.models import signals # Size of each "chunk" for get_iterator calls. # Larger values are slightly faster at the expense of more storage space. GET_ITERATOR_CHUNK_SIZE = 100 +def ensure_default_manager(sender): + cls = sender + if not hasattr(cls, '_default_manager'): + # Create the default manager, if needed. + if hasattr(cls, 'objects'): + raise ValueError, "Model %s must specify a custom Manager, because it has a field named 'objects'" % name + cls.add_to_class('objects', Manager()) + +dispatcher.connect( + ensure_default_manager, + signal=signals.class_prepared +) + class Manager(object): # Tracks each time a Manager instance is created. Used to retain order. creation_counter = 0 diff --git a/django/db/models/manipulators.py b/django/db/models/manipulators.py index 629736a850..54804eeb64 100644 --- a/django/db/models/manipulators.py +++ b/django/db/models/manipulators.py @@ -1,6 +1,18 @@ from django.core.exceptions import ObjectDoesNotExist from django.core.formfields import Manipulator from django.db.models.fields import FileField, AutoField +from django.dispatch import dispatcher +from django.db.models import signals + +def add_manipulators(sender): + cls = sender + cls.add_to_class( 'AddManipulator', ModelAddManipulator) + cls.add_to_class( 'ChangeManipulator', ModelChangeManipulator) + +dispatcher.connect( + add_manipulators, + signal=signals.class_prepared +) class ManipulatorDescriptor(object): class empty: diff --git a/django/db/models/signals.py b/django/db/models/signals.py index 5d33ddf1ad..e73cd40884 100644 --- a/django/db/models/signals.py +++ b/django/db/models/signals.py @@ -1,11 +1,10 @@ -class Signals(object): - class_prepared = object() +class_prepared = object() - pre_init= object() - post_init = object() +pre_init= object() +post_init = object() - pre_save = object() - post_save = object() +pre_save = object() +post_save = object() - pre_delete = object() - post_delete = object() +pre_delete = object() +post_delete = object()