Merge lp:~mhall119/summit/fixes-814375 into lp:~summit-hackers/summit/1.x

Proposed by Michael Hall
Status: Merged
Approved by: Nigel Babu
Approved revision: 140
Merged at revision: 140
Proposed branch: lp:~mhall119/summit/fixes-814375
Merge into: lp:~summit-hackers/summit/1.x
Diff against target: 136 lines (+53/-14)
5 files modified
summit/schedule/models/meetingmodel.py (+4/-3)
summit/schedule/render.py (+1/-1)
summit/schedule/tests.py (+45/-7)
summit/schedule/views.py (+2/-2)
summit/urls.py (+1/-1)
To merge this branch: bzr merge lp:~mhall119/summit/fixes-814375
Reviewer Review Type Date Requested Status
Nigel Babu (community) Approve
Review via email: mp+68764@code.launchpad.net

Commit message

Adds the meeting id to the meeting_page_url, and uses only that as the lookup parameter

Description of the change

Overview
========
Meeting names are neither required nor unique, but they were being used as identifiers in the meeting_page_url, throwing errors whenever there wasn't a unique match.

Details
=======
This code adds the meeting id as a part of the URL, and only uses that to perform lookups to find the appropriate meeting. The meeting name is still present in the URL, to make it reader friendly, but it is ignored by the system. If a meeting does not have a name, a single hyphen is used in it's place.

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

Tests pass. Looks good. Approved!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'summit/schedule/models/meetingmodel.py'
--- summit/schedule/models/meetingmodel.py 2011-07-20 20:50:38 +0000
+++ summit/schedule/models/meetingmodel.py 2011-07-22 01:37:27 +0000
@@ -124,9 +124,10 @@
124124
125 def get_meeting_page_url(self):125 def get_meeting_page_url(self):
126 if self.name is None or self.name == '':126 if self.name is None or self.name == '':
127 return ''127 name = '-'
128 name = self.name.replace('.','-')128 else:
129 args = [self.summit.name, name]129 name = self.name.replace('.','-')
130 args = [self.summit.name, self.id, name]
130 return reverse('summit.schedule.views.meeting', args=args)131 return reverse('summit.schedule.views.meeting', args=args)
131 meeting_page_url = property(get_meeting_page_url)132 meeting_page_url = property(get_meeting_page_url)
132133
133134
=== modified file 'summit/schedule/render.py'
--- summit/schedule/render.py 2011-05-22 18:52:49 +0000
+++ summit/schedule/render.py 2011-07-22 01:37:27 +0000
@@ -714,7 +714,7 @@
714 if should_have_details_link:714 if should_have_details_link:
715 html += (('<a href="%s"><img src="%simg/pad.png" ' +715 html += (('<a href="%s"><img src="%simg/pad.png" ' +
716 'title="%s" alt="(%s)" height="16" width="16"/></a>\n')716 'title="%s" alt="(%s)" height="16" width="16"/></a>\n')
717 % ("/"+escape(self.summit.name)+"/meeting/"+escape(meeting.name), settings.MEDIA_URL717 % (meeting.meeting_page_url, settings.MEDIA_URL
718 , "meeting details", "meeting details"))718 , "meeting details", "meeting details"))
719719
720 if icon:720 if icon:
721721
=== modified file 'summit/schedule/tests.py'
--- summit/schedule/tests.py 2011-07-20 17:41:32 +0000
+++ summit/schedule/tests.py 2011-07-22 01:37:27 +0000
@@ -19,6 +19,7 @@
19import unittest19import unittest
20from django.core.management.base import CommandError20from django.core.management.base import CommandError
21from django import test as djangotest21from django import test as djangotest
22from django.core.urlresolvers import reverse
2223
23from summit.schedule.management.commands import reschedule24from summit.schedule.management.commands import reschedule
24from summit.schedule.models import *25from summit.schedule.models import *
@@ -83,11 +84,11 @@
83 meeting = factory.make_one(Meeting, summit=summit, name='')84 meeting = factory.make_one(Meeting, summit=summit, name='')
84 agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room)85 agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room)
85 86
86 self.assertEquals(meeting.meeting_page_url, '')87 self.assertEquals(meeting.meeting_page_url, '/uds-test/meeting/%s/-/' % meeting.id)
87 88
88 response = self.client.get('/uds-test.ical')89 response = self.client.get('/uds-test.ical')
89 self.assertEquals(response.status_code, 200)90 self.assertEquals(response.status_code, 200)
90 self.assertContains(response, 'URL:http://summit.ubuntu.com\n', 1)91 self.assertContains(response, 'URL:http://summit.ubuntu.com/uds-test/meeting/%s/-/\n' % meeting.id, 1)
9192
92 def test_ical_meeting_name_with_period(self):93 def test_ical_meeting_name_with_period(self):
93 """ Tests that ical doesn't break for nameless meetings"""94 """ Tests that ical doesn't break for nameless meetings"""
@@ -107,9 +108,46 @@
107 meeting = factory.make_one(Meeting, summit=summit, name='test.name')108 meeting = factory.make_one(Meeting, summit=summit, name='test.name')
108 agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room)109 agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room)
109 110
110 self.assertEquals(meeting.meeting_page_url, '/uds-test/meeting/test-name/')111 self.assertEquals(meeting.meeting_page_url, '/uds-test/meeting/%s/test-name/' % meeting.id)
111 112
112 response = self.client.get('/uds-test.ical')113 response = self.client.get('/uds-test.ical')
113 self.assertEquals(response.status_code, 200)114 self.assertEquals(response.status_code, 200)
114 self.assertContains(response, 'URL:http://summit.ubuntu.com/uds-test/meeting/test-name/', 1)115 self.assertContains(response, 'URL:http://summit.ubuntu.com/uds-test/meeting/%s/test-name/' % meeting.id, 1)
116
117class MeetingPageTestCase(djangotest.TestCase):
118
119 def test_meeting_page_url(self):
120 """ Tests the creation and reverse lookup of meeting page urls"""
121 now = datetime.datetime.utcnow()
122 one_hour = datetime.timedelta(0, 3600)
123 summit = factory.make_one(Summit, name='uds-test')
124 summit.save()
125 slot = factory.make_one(
126 Slot,
127 start_utc=now,
128 end_utc=now+one_hour,
129 type='open',
130 summit=summit)
131 slot.save()
132
133 room = factory.make_one(Room, summit=summit)
134 meeting = factory.make_one(Meeting, summit=summit, name='test-meeting')
135 agenda = factory.make_one(Agenda, slot=slot, meeting=meeting, room=room)
136
137 # check meeting page url generation
138 self.assertEquals(meeting.meeting_page_url, '/uds-test/meeting/%s/test-meeting/' % meeting.id)
139
140 # check meeting page url reverse lookup
141 rev_args = ['uds-test', 1, 'test-meeting']
142 reverse_url = reverse('summit.schedule.views.meeting', args=rev_args)
143 self.assertEquals(reverse_url, '/uds-test/meeting/%s/test-meeting/' % meeting.id)
144
145 # check meeting details page
146 response = self.client.get(reverse_url)
147 self.assertEquals(response.status_code, 200)
148
149 # check meeting in ical
150 response = self.client.get('/uds-test.ical')
151 self.assertEquals(response.status_code, 200)
152 self.assertContains(response, 'URL:http://summit.ubuntu.com/uds-test/meeting/%s/test-meeting/' % meeting.id, 1)
115153
116154
=== modified file 'summit/schedule/views.py'
--- summit/schedule/views.py 2011-07-18 00:44:27 +0000
+++ summit/schedule/views.py 2011-07-22 01:37:27 +0000
@@ -198,8 +198,8 @@
198 context_instance=RequestContext(request))198 context_instance=RequestContext(request))
199199
200@summit_required200@summit_required
201def meeting(request, summit, attendee, meeting_slug):201def meeting(request, summit, attendee, meeting_id, meeting_slug):
202 meeting = get_object_or_404(summit.meeting_set, name__iexact=meeting_slug)202 meeting = get_object_or_404(summit.meeting_set, id=meeting_id)
203 agendaitems=meeting.agenda_set.all()203 agendaitems=meeting.agenda_set.all()
204 participants=meeting.participant_set.all()204 participants=meeting.participant_set.all()
205 tracks=meeting.tracks.all()205 tracks=meeting.tracks.all()
206206
=== modified file 'summit/urls.py'
--- summit/urls.py 2011-07-17 23:43:09 +0000
+++ summit/urls.py 2011-07-22 01:37:27 +0000
@@ -63,7 +63,7 @@
63 (r'^(?P<summit_name>[\w-]+)/(?P<date>[\d-]+)/$', 'by_date'),63 (r'^(?P<summit_name>[\w-]+)/(?P<date>[\d-]+)/$', 'by_date'),
64 (r'^(?P<summit_name>[\w-]+)/(?P<room_name>[\w-]+)/$', 'by_room'),64 (r'^(?P<summit_name>[\w-]+)/(?P<room_name>[\w-]+)/$', 'by_room'),
65 (r'^(?P<summit_name>[\w-]+)/track/(?P<track_slug>[\w-]+)/$', 'by_track'),65 (r'^(?P<summit_name>[\w-]+)/track/(?P<track_slug>[\w-]+)/$', 'by_track'),
66 (r'^(?P<summit_name>[\w-]+)/meeting/(?P<meeting_slug>[\w-]+)/$', 'meeting'),66 (r'^(?P<summit_name>[\w-]+)/meeting/(?P<meeting_id>\d+)/(?P<meeting_slug>[\w-]+)/$', 'meeting'),
67 (r'^(?P<summit_name>[\w-]+)\.csv$', 'csv'),67 (r'^(?P<summit_name>[\w-]+)\.csv$', 'csv'),
68 (r'^(?P<summit_name>[\w-]+)\.ical$', 'ical'),68 (r'^(?P<summit_name>[\w-]+)\.ical$', 'ical'),
69 (r'^(?P<summit_name>[\w-]+)/participant/(?P<username>[\w-]+)\.ical$', 'user_ical'),69 (r'^(?P<summit_name>[\w-]+)/participant/(?P<username>[\w-]+)\.ical$', 'user_ical'),

Subscribers

People subscribed via source and target branches

to all changes: