Commit 7e06065d authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

Fixed #13552 -- Added a 'using' parameter to database signals. Thanks to...

Fixed #13552 -- Added a 'using' parameter to database signals. Thanks to gmandx for the suggestion, and Andrew Godwin for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@13538 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 458e3a3f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -190,6 +190,7 @@ answer newbie questions, and generally made Django that much better:
    martin.glueck@gmail.com
    Artyom Gnilov <boobsd@gmail.com>
    Ben Godfrey <http://aftnn.org>
    Andrew Godwin <andrew@aeracode.org>
    GomoX <gomo@datafull.com>
    Guilherme Mesquita Gondim <semente@taurinus.org>
    Mario Gonzalez <gonzalemario@gmail.com>
+2 −2
Original line number Diff line number Diff line
@@ -456,7 +456,7 @@ class Model(object):
            meta = cls._meta

        if origin and not meta.auto_created:
            signals.pre_save.send(sender=origin, instance=self, raw=raw)
            signals.pre_save.send(sender=origin, instance=self, raw=raw, using=using)

        # If we are in a raw save, save the object exactly as presented.
        # That means that we don't try to be smart about saving attributes
@@ -540,7 +540,7 @@ class Model(object):
        # Signal that the save is complete
        if origin and not meta.auto_created:
            signals.post_save.send(sender=origin, instance=self,
                created=(not record_exists), raw=raw)
                created=(not record_exists), raw=raw, using=using)

    save_base.alters_data = True

+10 −8
Original line number Diff line number Diff line
@@ -566,7 +566,7 @@ def create_many_related_manager(superclass, rel=False):
                    # duplicate data row for symmetrical reverse entries.
                    signals.m2m_changed.send(sender=rel.through, action='pre_add',
                        instance=self.instance, reverse=self.reverse,
                        model=self.model, pk_set=new_ids)
                        model=self.model, pk_set=new_ids, using=db)
                # Add the ones that aren't there already
                for obj_id in new_ids:
                    self.through._default_manager.using(db).create(**{
@@ -578,7 +578,7 @@ def create_many_related_manager(superclass, rel=False):
                    # duplicate data row for symmetrical reverse entries.
                    signals.m2m_changed.send(sender=rel.through, action='post_add',
                        instance=self.instance, reverse=self.reverse,
                        model=self.model, pk_set=new_ids)
                        model=self.model, pk_set=new_ids, using=db)

        def _remove_items(self, source_field_name, target_field_name, *objs):
            # source_col_name: the PK colname in join_table for the source object
@@ -594,14 +594,16 @@ def create_many_related_manager(superclass, rel=False):
                        old_ids.add(obj.pk)
                    else:
                        old_ids.add(obj)
                # Work out what DB we're operating on
                db = router.db_for_write(self.through.__class__, instance=self.instance)
                # Send a signal to the other end if need be.
                if self.reverse or source_field_name == self.source_field_name:
                    # Don't send the signal when we are deleting the
                    # duplicate data row for symmetrical reverse entries.
                    signals.m2m_changed.send(sender=rel.through, action="pre_remove",
                        instance=self.instance, reverse=self.reverse,
                        model=self.model, pk_set=old_ids)
                        model=self.model, pk_set=old_ids, using=db)
                # Remove the specified objects from the join table
                db = router.db_for_write(self.through.__class__, instance=self.instance)
                self.through._default_manager.using(db).filter(**{
                    source_field_name: self._pk_val,
                    '%s__in' % target_field_name: old_ids
@@ -611,17 +613,17 @@ def create_many_related_manager(superclass, rel=False):
                    # duplicate data row for symmetrical reverse entries.
                    signals.m2m_changed.send(sender=rel.through, action="post_remove",
                        instance=self.instance, reverse=self.reverse,
                        model=self.model, pk_set=old_ids)
                        model=self.model, pk_set=old_ids, using=db)

        def _clear_items(self, source_field_name):
            db = router.db_for_write(self.through.__class__, instance=self.instance)
            # source_col_name: the PK colname in join_table for the source object
            if self.reverse or source_field_name == self.source_field_name:
                # Don't send the signal when we are clearing the
                # duplicate data rows for symmetrical reverse entries.
                signals.m2m_changed.send(sender=rel.through, action="pre_clear",
                    instance=self.instance, reverse=self.reverse,
                    model=self.model, pk_set=None)
            db = router.db_for_write(self.through.__class__, instance=self.instance)
                    model=self.model, pk_set=None, using=db)
            self.through._default_manager.using(db).filter(**{
                source_field_name: self._pk_val
            }).delete()
@@ -630,7 +632,7 @@ def create_many_related_manager(superclass, rel=False):
                # duplicate data rows for symmetrical reverse entries.
                signals.m2m_changed.send(sender=rel.through, action="post_clear",
                    instance=self.instance, reverse=self.reverse,
                    model=self.model, pk_set=None)
                    model=self.model, pk_set=None, using=db)

    return ManyRelatedManager

+3 −2
Original line number Diff line number Diff line
@@ -1311,7 +1311,8 @@ def delete_objects(seen_objs, using):
            # Pre-notify all instances to be deleted.
            for pk_val, instance in items:
                if not cls._meta.auto_created:
                    signals.pre_delete.send(sender=cls, instance=instance)
                    signals.pre_delete.send(sender=cls, instance=instance,
                        using=using)

            pk_list = [pk for pk,instance in items]

@@ -1343,7 +1344,7 @@ def delete_objects(seen_objs, using):
                        setattr(instance, field.attname, None)

                if not cls._meta.auto_created:
                    signals.post_delete.send(sender=cls, instance=instance)
                    signals.post_delete.send(sender=cls, instance=instance, using=using)
                setattr(instance, cls._meta.pk.attname, None)

        if forced_managed:
+5 −5
Original line number Diff line number Diff line
@@ -5,12 +5,12 @@ class_prepared = Signal(providing_args=["class"])
pre_init = Signal(providing_args=["instance", "args", "kwargs"])
post_init = Signal(providing_args=["instance"])

pre_save = Signal(providing_args=["instance", "raw"])
post_save = Signal(providing_args=["instance", "raw", "created"])
pre_save = Signal(providing_args=["instance", "raw", "using"])
post_save = Signal(providing_args=["instance", "raw", "created", "using"])

pre_delete = Signal(providing_args=["instance"])
post_delete = Signal(providing_args=["instance"])
pre_delete = Signal(providing_args=["instance", "using"])
post_delete = Signal(providing_args=["instance", "using"])

post_syncdb = Signal(providing_args=["class", "app", "created_models", "verbosity", "interactive"])

m2m_changed = Signal(providing_args=["action", "instance", "reverse", "model", "pk_set"])
m2m_changed = Signal(providing_args=["action", "instance", "reverse", "model", "pk_set", "using"])
Loading