Skip to content

Instantly share code, notes, and snippets.

@CapnKernel
Created October 29, 2014 02:08
Show Gist options
  • Select an option

  • Save CapnKernel/a87736e6cef64451b079 to your computer and use it in GitHub Desktop.

Select an option

Save CapnKernel/a87736e6cef64451b079 to your computer and use it in GitHub Desktop.
peer saves v1 verbose
# -*- coding: utf-8 -*-
from django.db import models
class C(models.Model):
role = models.CharField(max_length=20)
an_int = models.IntegerField(default=0)
master = models.ForeignKey('C', null=True, blank=True)
def __unicode__(self):
return "<C: pk=%s role=%s an_int=%s>" % (self.pk, self.role, self.an_int)
def save(self, *args, **kwargs):
# print "C.save: pk=%s role=%s master=%s an_int=%s>" % (self.pk, self.role, self.master, self.an_int)
# print " C.save: pk=%s role=%s an_int=%s>: calling super" % (self.pk, self.role, self.an_int)
super(C, self).save(*args, **kwargs)
# print " C.save: pk=%s role=%s an_int=%s>: back from super" % (self.pk, self.role, self.an_int)
# Find slaves if we're a saved master
if self.pk and self.master is None:
# print "we're a master, look for slaves and mod and save them"
for slave in C.objects.filter(master=self):
# print "slave=", slave
# Does the slave differ from us?
if self.an_int != slave.an_int:
slave.an_int = self.an_int
slave.save()
assert slave.an_int == self.an_int
# else:
# print "slave not set"
# else:
# print "no slaves"
# else:
# print "no slaves"
from django.test import TestCase
from .models import C
class C_Test(TestCase):
def setUp(self):
# print "> in setUp"
sole = C(role="sole", an_int=10)
sole.save()
master = C(role="master", an_int=11)
master.save()
slave = C(role="slave", an_int=11)
slave.master = master
slave.save()
# print "> finished setUp"
"""
def test_set_up_correctly(self):
self.assertEquals(C.objects.get(role="sole").an_int, 10)
self.assertEquals(C.objects.get(role="master").an_int, 11)
self.assertEquals(C.objects.get(role="slave").an_int, 11)
"""
"""
def test_slave_change_ignores_master(self):
# Change an_int in the slave.
# Verify it doesn't change in the master
print "> in test_slave_change_ignores_master"
master = C.objects.get(role="master")
slave = C.objects.get(role="slave")
slave.an_int = 12
slave.save()
self.assertEquals(master.an_int, 11)
self.assertEquals(slave.an_int, 12)
# How about if we reload them from the DB?
master = C.objects.get(role="master")
slave = C.objects.get(role="slave")
self.assertEquals(master.an_int, 11)
self.assertEquals(slave.an_int, 12)
print "> finished test_slave_change_ignores_master"
"""
def test_master_change_sets_slave(self):
# Change an_int in the master.
# Verify it also changes in the slave
# print "> in test_master_change_sets_slave"
master = C.objects.get(role="master")
slave = C.objects.get(role="slave")
master.an_int = 12
master.save()
self.assertEquals(master.an_int, 12)
self.assertEquals(slave.an_int, 12)
# How about if we reload them from the DB?
master = C.objects.get(role="master")
slave = C.objects.get(role="slave")
self.assertEquals(master.an_int, 12)
self.assertEquals(slave.an_int, 12)
# print "> finished test_master_change_sets_slave"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment