Merge lp:~mhall119/summit/fix-cache into lp:summit

Proposed by Michael Hall
Status: Merged
Approved by: Nigel Babu
Approved revision: 183
Merged at revision: 183
Proposed branch: lp:~mhall119/summit/fix-cache
Merge into: lp:summit
Diff against target: 114 lines (+91/-0)
2 files modified
summit/schedule/models/__init__.py (+2/-0)
summit/schedule/tests.py (+89/-0)
To merge this branch: bzr merge lp:~mhall119/summit/fix-cache
Reviewer Review Type Date Requested Status
Nigel Babu (community) Approve
Review via email: mp+75881@code.launchpad.net

Commit message

Fixes problem with old cache on track view schedule

Description of the change

Overview
========
Fixes problem with old cache on track view schedule

Details
=======
There was already signal code to clear the cache on meeting or agenda change, but it wasn't clearing the separate cache being used by the track view of the schedule. This code will clear the track view cache, and also adds tests to make sure that both are being cleared.

To post a comment you must log in.
Revision history for this message
Nigel Babu (nigelbabu) wrote :

Nice job!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'summit/schedule/models/__init__.py'
--- summit/schedule/models/__init__.py 2011-09-14 19:39:48 +0000
+++ summit/schedule/models/__init__.py 2011-09-18 01:19:26 +0000
@@ -34,8 +34,10 @@
34 instance = kwargs['instance']34 instance = kwargs['instance']
35 if isinstance(instance, Meeting):35 if isinstance(instance, Meeting):
36 cache.set('meeting-html-%d' % instance.id, None)36 cache.set('meeting-html-%d' % instance.id, None)
37 cache.set('meeting-track-html-%d' % instance.id, None)
37 elif isinstance(instance, Agenda):38 elif isinstance(instance, Agenda):
38 cache.set('meeting-html-%d' % instance.meeting.id, None)39 cache.set('meeting-html-%d' % instance.meeting.id, None)
40 cache.set('meeting-track-html-%d' % instance.meeting.id, None)
3941
4042
41post_save.connect(meeting_update_callback, sender=Meeting)43post_save.connect(meeting_update_callback, sender=Meeting)
4244
=== modified file 'summit/schedule/tests.py'
--- summit/schedule/tests.py 2011-09-18 01:00:39 +0000
+++ summit/schedule/tests.py 2011-09-18 01:19:26 +0000
@@ -891,6 +891,95 @@
891 self.assertEqual(None, schedule.fakenow)891 self.assertEqual(None, schedule.fakenow)
892892
893893
894class ScheduleCacheTestCase(djangotest.TestCase):
895
896 def setUp(self):
897 now = datetime.datetime.utcnow()
898 one_hour = datetime.timedelta(0, 3600)
899 week = datetime.timedelta(days=5)
900 self.summit = factory.make_one(Summit, name='uds-test', timezone='UTC')
901 self.slot = factory.make_one(
902 Slot,
903 start_utc=now+one_hour,
904 end_utc=now+(2*one_hour),
905 type='open',
906 summit=self.summit)
907
908 self.track = factory.make_one(Track, slug='test.track', summit=self.summit)
909 self.room = factory.make_one(Room, name='test.room', title='Test Room', summit=self.summit)
910 self.room.tracks = [self.track]
911 self.meeting = factory.make_one(Meeting, summit=self.summit, title='Test Meeting', name='meeting', private=False, requires_dial_in=False)
912 self.meeting.tracks = [self.track]
913 self.agenda = factory.make_one(Agenda, slot=self.slot, meeting=self.meeting, room=self.room)
914
915 self.user = factory.make_one(User, username='testuser', first_name='Test', last_name='User')
916 self.attendee = factory.make_one(Attendee, summit=self.summit, user=self.user, start_utc=now, end_utc=now+week)
917
918 def tearDown(self):
919 # Cached requests cause render.py to return old data, so clear the cache
920 if hasattr(cache, 'clear'):
921 cache.clear()
922 # Older django didn't have .clear, but locmem cache did have ._cull
923 elif hasattr(cache, '_cull'):
924 cache._cull()
925
926 def request_schedule_by_date(self):
927 schedule_args = [self.summit.name, self.agenda.slot.start_utc.date()]
928 schedule_url = reverse('summit.schedule.views.by_date', args=schedule_args)
929 response = self.client.get(schedule_url)
930 return response
931
932 def request_schedule_by_track(self):
933 schedule_args = [self.summit.name, self.track.slug]
934 schedule_url = reverse('summit.schedule.views.by_track', args=schedule_args)
935 response = self.client.get(schedule_url)
936 return response
937
938 def test_cache_cleared_on_meeting_change(self):
939 self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id))
940 response = self.request_schedule_by_date()
941 self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, ''))
942
943 self.meeting.save()
944
945 self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id))
946 response = self.request_schedule_by_date()
947 self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, ''))
948
949 def test_cache_cleared_on_agenda_change(self):
950 self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id))
951 response = self.request_schedule_by_date()
952 self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, ''))
953
954 self.agenda.save()
955
956 self.assertEqual(None, cache.get('meeting-html-%s' % self.meeting.id))
957 response = self.request_schedule_by_date()
958 self.assertTrue('Test Meeting' in cache.get('meeting-html-%s' % self.meeting.id, ''))
959
960 def test_track_cache_cleared_on_meeting_change(self):
961 self.assertEqual(None, cache.get('meeting-track-html-%s' % self.meeting.id))
962 response = self.request_schedule_by_track()
963 self.assertTrue('Test Meeting' in cache.get('meeting-track-html-%s' % self.meeting.id, ''))
964
965 self.meeting.save()
966
967 self.assertEqual(None, cache.get('meeting-track-html-%s' % self.meeting.id))
968 response = self.request_schedule_by_track()
969 self.assertTrue('Test Meeting' in cache.get('meeting-track-html-%s' % self.meeting.id, ''))
970
971 def test_track_cache_cleared_on_agenda_change(self):
972 self.assertEqual(None, cache.get('meeting-track-html-%s' % self.meeting.id))
973 response = self.request_schedule_by_track()
974 self.assertTrue('Test Meeting' in cache.get('meeting-track-html-%s' % self.meeting.id, ''))
975
976 self.agenda.save()
977
978 self.assertEqual(None, cache.get('meeting-track-html-%s' % self.meeting.id))
979 response = self.request_schedule_by_track()
980 self.assertTrue('Test Meeting' in cache.get('meeting-track-html-%s' % self.meeting.id, ''))
981
982
894class LaunchpadExportNode(dict):983class LaunchpadExportNode(dict):
895984
896 def __init__(self, *args, **kwargs):985 def __init__(self, *args, **kwargs):

Subscribers

People subscribed via source and target branches