Merge lp:~mhall119/summit/create-attendee-for-bp-usernames into lp:summit

Proposed by Michael Hall
Status: Merged
Approved by: Chris Johnston
Approved revision: 551
Merged at revision: 549
Proposed branch: lp:~mhall119/summit/create-attendee-for-bp-usernames
Merge into: lp:summit
Diff against target: 177 lines (+82/-26)
3 files modified
summit/schedule/models/meetingmodel.py (+5/-24)
summit/schedule/models/summitmodel.py (+21/-1)
summit/schedule/tests/meeting_model.py (+56/-1)
To merge this branch: bzr merge lp:~mhall119/summit/create-attendee-for-bp-usernames
Reviewer Review Type Date Requested Status
Chris Johnston Approve
Adnane Belmadiaf Approve
Review via email: mp+163626@code.launchpad.net

Commit message

Creates Attendee records if no matching record exists when importing data from Launchpad

Description of the change

Creates Attendee records if no matching record exists when importing data from Launchpad

To post a comment you must log in.
551. By Michael Hall

Don't attempt to lookup or create an Attendee if no username is provided

Revision history for this message
Adnane Belmadiaf (daker) wrote :

+1, i suppose the tests are OK

review: Approve
Revision history for this message
Chris Johnston (cjohnston) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'summit/schedule/models/meetingmodel.py'
2--- summit/schedule/models/meetingmodel.py 2013-05-06 15:51:05 +0000
3+++ summit/schedule/models/meetingmodel.py 2013-05-14 01:45:32 +0000
4@@ -463,31 +463,17 @@
5 self.drafter = None
6 drafter = elem.get("drafter")
7 if drafter:
8- try:
9- self.drafter = self.summit.attendee_set.get(
10- user__username__exact=drafter)
11- except ObjectDoesNotExist:
12- pass
13+ self.drafter = self.summit.get_attendee_record(drafter)
14
15 self.assignee = None
16 assignee = elem.get("assignee")
17 if assignee:
18- try:
19- self.assignee = self.summit.attendee_set.get(
20- user__username__exact=assignee
21- )
22- except ObjectDoesNotExist:
23- pass
24+ self.assignee = self.summit.get_attendee_record(assignee)
25
26 self.approver = None
27 approver = elem.get("approver")
28 if approver:
29- try:
30- self.approver = self.summit.attendee_set.get(
31- user__username__exact=approver
32- )
33- except ObjectDoesNotExist:
34- pass
35+ self.approver = self.summit.get_attendee_record(approver)
36
37 # Lookup other participants, again ignoring any not attending.
38 from_lp = set()
39@@ -499,11 +485,8 @@
40
41 required = p_elem.get("required", "False") != "False"
42
43- try:
44- attendee = self.summit.attendee_set.get(
45- user__username__exact=username
46- )
47-
48+ attendee = self.summit.get_attendee_record(username)
49+ if attendee is not None:
50 try:
51 participant = self.participant_set.get(
52 attendee=attendee
53@@ -524,8 +507,6 @@
54 else:
55 participant.participation = 'ATTENDING'
56 participant.save()
57- except ObjectDoesNotExist:
58- pass
59
60 self.participant_set.filter(
61 from_launchpad=True
62
63=== modified file 'summit/schedule/models/summitmodel.py'
64--- summit/schedule/models/summitmodel.py 2013-05-06 19:14:43 +0000
65+++ summit/schedule/models/summitmodel.py 2013-05-14 01:45:32 +0000
66@@ -19,7 +19,7 @@
67 import time
68 import urllib2
69
70-from datetime import datetime, timedelta
71+from datetime import datetime, timedelta, time
72
73 try:
74 from xml.etree import ElementTree
75@@ -514,6 +514,26 @@
76 return self.lead_set.filter(lead=attendee).exists()
77 return False
78
79+ def get_attendee_record(self, username):
80+ if username is None or username == '':
81+ return None
82+
83+ try:
84+ user = User.objects.get(username__exact=username)
85+ eod = time(23, 59, 59)
86+ eos = self.date_end
87+ attendee, created = self.attendee_set.get_or_create(
88+ summit=self,
89+ user=user,
90+ defaults={
91+ 'start_utc': self.date_start,
92+ 'end_utc': datetime.combine(eos, eod)
93+ }
94+ )
95+ return attendee
96+ except:
97+ return None
98+
99
100 class SummitSprint(models.Model):
101
102
103=== modified file 'summit/schedule/tests/meeting_model.py'
104--- summit/schedule/tests/meeting_model.py 2013-05-06 16:17:11 +0000
105+++ summit/schedule/tests/meeting_model.py 2013-05-14 01:45:32 +0000
106@@ -546,8 +546,25 @@
107 )
108 return slot
109
110+ def make_summit_only(self):
111+ today = datetime.datetime.utcnow()
112+ one_week = datetime.timedelta(days=5)
113+ summit = factory.make_one(Summit, date_start=today, date_end=today+one_week)
114+ slot = self.make_one_future_slot(summit=summit)
115+ user = factory.make_one(
116+ User,
117+ username='testuser',
118+ first_name='Test',
119+ last_name='User',
120+ is_active=True,
121+ is_superuser=False,
122+ )
123+ return summit
124+
125 def make_summit_and_attendee(self):
126- summit = factory.make_one(Summit)
127+ today = datetime.datetime.utcnow()
128+ one_week = datetime.timedelta(days=5)
129+ summit = factory.make_one(Summit, date_start=today, date_end=today+one_week)
130 slot = self.make_one_future_slot(summit=summit)
131 user = factory.make_one(
132 User,
133@@ -566,6 +583,44 @@
134 )
135 return summit, attendee
136
137+ def test_update_from_launchpad_creates_attendee(self):
138+ summit = self.make_summit_only()
139+ self.assertEquals(summit.attendee_set.filter(user__username='testuser').count(), 0)
140+ meeting = factory.make_one(
141+ Meeting,
142+ pad_url=None,
143+ name='test-meeting',
144+ summit=summit,
145+ private=False
146+ )
147+ meeting_name = meeting.name
148+ elem = self.get_person_node(
149+ 'testuser',
150+ meeting_name,
151+ required=False,
152+ )
153+ meeting.update_from_launchpad(elem)
154+ self.assertEquals(summit.attendee_set.filter(user__username='testuser').count(), 1)
155+
156+ def test_update_from_launchpad_creates_drafter(self):
157+ summit = self.make_summit_only()
158+ self.assertEquals(summit.attendee_set.filter(user__username='testuser').count(), 0)
159+ meeting = factory.make_one(
160+ Meeting,
161+ pad_url=None,
162+ name='test-meeting',
163+ summit=summit,
164+ private=False
165+ )
166+ meeting_name = meeting.name
167+ elem = LaunchpadExportNode(
168+ name=meeting_name,
169+ drafter='testuser',
170+ )
171+ meeting.update_from_launchpad(elem)
172+ self.assertEquals(summit.attendee_set.filter(user__username='testuser').count(), 1)
173+ self.assertEquals(meeting.drafter.user.username, 'testuser')
174+
175 def test_update_from_launchpad_adds_participant(self):
176 summit, attendee = self.make_summit_and_attendee()
177 meeting = factory.make_one(

Subscribers

People subscribed via source and target branches