Add a script for keeping the meeting registration data in sync

- Legacy-Id: 13253
This commit is contained in:
Ole Laursen 2017-04-28 12:33:21 +00:00
parent f09302adb5
commit 8325ffa9de
3 changed files with 56 additions and 3 deletions

View file

@ -0,0 +1,47 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os, argparse
basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
sys.path = [ basedir ] + sys.path
os.environ["DJANGO_SETTINGS_MODULE"] = "ietf.settings"
virtualenv_activation = os.path.join(basedir, "env", "bin", "activate_this.py")
if os.path.exists(virtualenv_activation):
execfile(virtualenv_activation, dict(__file__=virtualenv_activation))
import django
django.setup()
parser = argparse.ArgumentParser()
parser.add_argument("--meeting", help="meeting to fetch data for")
parser.add_argument("--all", action="store_true", help="fetch data for all meetings")
parser.add_argument("--latest", action="store_true", help="fetch data for latest meeting")
args = parser.parse_args()
import syslog
from ietf.meeting.models import Meeting
from ietf.stats.utils import get_registration_data
meetings = Meeting.objects.none()
if args.meeting:
meetings = Meeting.objects.filter(number=args.meeting, type="ietf")
elif args.all:
meetings = Meeting.objects.filter(type="ietf").order_by("date")
elif args.latest:
meetings = Meeting.objects.filter(type="ietf").order_by("-date")[:1]
else:
print("Please use one of --meeting, --all or --latest")
sys.exit(1)
for meeting in meetings:
total = get_registration_data(meeting)
msg = "Fetched data for meeting {}: {} registrations added".format(meeting.number, total)
if sys.stdout.isatty():
print(msg) # make debugging a bit easier
else:
syslog.syslog(msg)

View file

@ -10,7 +10,7 @@ class Migration(migrations.Migration):
dependencies = [
('person', '0015_clean_primary'),
('meeting', '0048_auto_20170330_1438'),
('meeting', '0047_import_shared_audio_files'),
('stats', '0002_add_initial_aliases'),
]

View file

@ -216,7 +216,13 @@ def get_registration_data(meeting):
num_created = 0
response = requests.get(settings.REGISTRATION_ATTENDEES_BASE_URL + meeting.number)
if response.status_code == 200:
for registration in response.json():
decoded = []
try:
decoded = response.json()
except ValueError:
pass
for registration in decoded:
object, created = Registration.objects.get_or_create(
meeting_id=meeting.pk,
first_name=registration['FirstName'],
@ -229,4 +235,4 @@ def get_registration_data(meeting):