Skip to content

Commit 9b672fc

Browse files
committed
The registration system creates separate records for hackathon and session registration, but in order to provide OAuth2 registration information to for instance Meetecho we want just one consolidated record. Changed the handling of notifications from the registration system to aggregate reg_type and ticket_type information in one record.
- Legacy-Id: 18011
1 parent bf230a7 commit 9b672fc

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

ietf/api/tests.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def test_api_new_meeting_registration(self):
210210
'last_name': 'Bar',
211211
'meeting': meeting.number,
212212
'reg_type': 'hackathon',
213-
'ticket_type': 'regular',
213+
'ticket_type': '',
214214
}
215215
url = urlreverse('ietf.api.views.api_new_meeting_registration')
216216
r = self.client.post(url, reg)
@@ -248,6 +248,18 @@ def test_api_new_meeting_registration(self):
248248
#
249249
# There should be no new outgoing mail
250250
self.assertEqual(len(outbox), 1)
251+
#
252+
# Test combination of reg types
253+
reg['reg_type'] = 'remote'
254+
reg['ticket_type'] = 'full_week_pass'
255+
r = self.client.post(url, reg)
256+
self.assertContains(r, "Accepted, Updated registration", status_code=202)
257+
obj = MeetingRegistration.objects.get(email=reg['email'], meeting__number=reg['meeting'])
258+
self.assertIn('hackathon', set(obj.reg_type.split()))
259+
self.assertIn('remote', set(obj.reg_type.split()))
260+
self.assertIn('full_week_pass', set(obj.ticket_type.split()))
261+
self.assertEqual(len(outbox), 1)
262+
#
251263
# Test incomplete POST
252264
drop_fields = ['affiliation', 'first_name', 'reg_type']
253265
for field in drop_fields:

ietf/api/views.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
from ietf.meeting.models import Meeting
3535
from ietf.stats.models import MeetingRegistration
3636
from ietf.utils.decorators import require_api_key
37+
from ietf.utils.log import log
3738

3839

3940
def top_level(request):
@@ -122,7 +123,8 @@ def api_new_meeting_registration(request):
122123
'''REST API to notify the datatracker about a new meeting registration'''
123124
def err(code, text):
124125
return HttpResponse(text, status=code, content_type='text/plain')
125-
required_fields = [ 'meeting', 'first_name', 'last_name', 'affiliation', 'country_code', 'email', 'reg_type', 'ticket_type', ]
126+
required_fields = [ 'meeting', 'first_name', 'last_name', 'affiliation', 'country_code',
127+
'email', 'reg_type', 'ticket_type', ]
126128
fields = required_fields + []
127129
if request.method == 'POST':
128130
# parameters:
@@ -140,6 +142,7 @@ def err(code, text):
140142
if value is None and item in required_fields:
141143
missing_fields.append(item)
142144
data[item] = value
145+
log("Meeting registration notification: %s" % json.dumps(data))
143146
if missing_fields:
144147
return err(400, "Missing parameters: %s" % ', '.join(missing_fields))
145148
number = data['meeting']
@@ -159,8 +162,14 @@ def err(code, text):
159162
object, created = MeetingRegistration.objects.get_or_create(meeting_id=meeting.pk, email=email)
160163
try:
161164
# Set attributes not already in the object
162-
for key in set(data.keys())-set(['apikey', 'meeting', 'email']):
163-
setattr(object, key, data.get(key))
165+
for key in set(data.keys())-set(['attended', 'apikey', 'meeting', 'email',]):
166+
new = data.get(key)
167+
cur = getattr(object, key, None)
168+
if key in ['reg_type', 'ticket_type', ] and cur and not new in cur:
169+
# Special handling for multiple reg types
170+
setattr(object, key, cur+' '+new)
171+
else:
172+
setattr(object, key, new)
164173
person = Person.objects.filter(email__address=email)
165174
if person.exists():
166175
object.person = person.first()

0 commit comments

Comments
 (0)