1
0
mirror of https://github.com/django/django.git synced 2025-06-05 03:29:12 +00:00

magic-removal: slight event cleanup

git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@1721 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Robert Wittams 2005-12-18 00:59:11 +00:00
parent 4f609faf3f
commit 39c6f4fb88
7 changed files with 53 additions and 36 deletions

View File

@ -16,7 +16,7 @@ from django.db.models.fields.related import *
from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured
from django.db.models.exceptions import FieldDoesNotExist, BadKeywordArguments from django.db.models.exceptions import FieldDoesNotExist, BadKeywordArguments
from django.db.models.signals import Signals from django.db.models import signals
# Admin stages. # Admin stages.

View File

@ -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 import AutoField
from django.db.models.fields.related import OneToOne, ManyToOne from django.db.models.fields.related import OneToOne, ManyToOne
from django.db.models.related import RelatedObject 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.query import orderlist2sql
from django.db.models.options import Options from django.db.models.options import Options
from django.db import connection, backend 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.dispatch import dispatcher
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
@ -133,7 +134,7 @@ class Model(object):
return not self.__eq__(other) return not self.__eq__(other)
def __init__(self, *args, **kwargs): 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: if kwargs:
for f in self._meta.fields: for f in self._meta.fields:
if isinstance(f.rel, ManyToOne): 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] raise TypeError, "'%s' is an invalid keyword argument for this function" % kwargs.keys()[0]
for i, arg in enumerate(args): for i, arg in enumerate(args):
setattr(self, self._meta.fields[i].attname, arg) 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): 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. # Creates some methods once self._meta has been populated.
if cls._meta.order_with_respect_to: 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_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) 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) #RelatedField.do_pending_lookups(cls)
_prepare = classmethod(_prepare) _prepare = classmethod(_prepare)
@ -192,7 +182,7 @@ class Model(object):
# Run any pre-save hooks. # Run any pre-save hooks.
if hasattr(self, '_pre_save'): if hasattr(self, '_pre_save'):
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] non_pks = [f for f in self._meta.fields if not f.primary_key]
cursor = connection.cursor() cursor = connection.cursor()
@ -237,7 +227,7 @@ class Model(object):
connection.commit() connection.commit()
# Run any post-save hooks. # 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'): if hasattr(self, '_post_save'):
self._post_save() self._post_save()
@ -292,7 +282,7 @@ class Model(object):
if hasattr(instance, '_pre_delete'): if hasattr(instance, '_pre_delete'):
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(): for related in cls._meta.get_all_related_many_to_many_objects():
cursor.execute("DELETE FROM %s WHERE %s=%%s" % \ cursor.execute("DELETE FROM %s WHERE %s=%%s" % \
@ -322,7 +312,7 @@ class Model(object):
setattr(self, cls._meta.pk.attname, None) 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'): if hasattr(instance, '_post_delete'):
instance._post_delete() instance._post_delete()

View File

@ -1,4 +1,4 @@
from django.db.models.signals import Signals from django.db.models import signals
from django.dispatch import dispatcher from django.dispatch import dispatcher
from django.conf import settings from django.conf import settings
from django.core import formfields, validators 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)) setattr(cls, 'save_%s_file' % self.name, curry(cls._save_FIELD_file, field=self))
dispatcher.connect( dispatcher.connect(
self.delete_file, self.delete_file,
signal = Signals.post_delete, signal = signals.post_delete,
sender = cls sender = cls
) )

View File

@ -3,7 +3,7 @@ from django.db.models.related import RelatedObject
from django.utils.translation import gettext_lazy, string_concat from django.utils.translation import gettext_lazy, string_concat
from django.utils.functional import curry from django.utils.functional import curry
from django.core import formfields from django.core import formfields
from django.db.models.signals import Signals from django.db.models import signals
from django.dispatch import dispatcher from django.dispatch import dispatcher
@ -18,7 +18,7 @@ class RelatedField(object):
dispatcher.connect( dispatcher.connect(
lambda sender: RelatedField.do_pending_lookups(sender) , lambda sender: RelatedField.do_pending_lookups(sender) ,
signal = Signals.class_prepared, signal = signals.class_prepared,
weak = False) weak = False)
@ -320,13 +320,13 @@ class ManyToManyFieldNew(RelatedField):
# We need to wait until the class we were in was fully defined # We need to wait until the class we were in was fully defined
dispatcher.connect( dispatcher.connect(
self.from_prepared, self.from_prepared,
signal = Signals.class_prepared, signal = signals.class_prepared,
sender = self.from_ sender = self.from_
) )
def from_prepared(self): def from_prepared(self):
from django.db.models.base import Model from django.db.models.base import Model
class M2M(Model): class M2M(Model):
__module__ = self.from_.__module__ __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__) M2M.__name__ = "M2M_%s_%s_%s" % (self.name,self.from_.__name__, self.to.__name__)
class ManyToOne: class ManyToOne:
def __init__(self, to, field_name, num_in_admin=3, min_num_in_admin=None, 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, max_num_in_admin=None, num_extra_on_change=1, edit_inline=False,

View File

@ -3,11 +3,26 @@ from django.utils.functional import curry
from django.db import backend, connection 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 Q, parse_lookup, fill_table_cache, get_cached_row
from django.db.models.query import handle_legacy_orderlist, orderlist2sql, orderfield2column 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. # Size of each "chunk" for get_iterator calls.
# Larger values are slightly faster at the expense of more storage space. # Larger values are slightly faster at the expense of more storage space.
GET_ITERATOR_CHUNK_SIZE = 100 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): class Manager(object):
# Tracks each time a Manager instance is created. Used to retain order. # Tracks each time a Manager instance is created. Used to retain order.
creation_counter = 0 creation_counter = 0

View File

@ -1,6 +1,18 @@
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.core.formfields import Manipulator from django.core.formfields import Manipulator
from django.db.models.fields import FileField, AutoField 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 ManipulatorDescriptor(object):
class empty: class empty:

View File

@ -1,11 +1,10 @@
class Signals(object): class_prepared = object()
class_prepared = object()
pre_init= object() pre_init= object()
post_init = object() post_init = object()
pre_save = object() pre_save = object()
post_save = object() post_save = object()
pre_delete = object() pre_delete = object()
post_delete = object() post_delete = object()