From 8325ffa9de88be9b6be25bb10005360ac436df55 Mon Sep 17 00:00:00 2001 From: Ole Laursen Date: Fri, 28 Apr 2017 12:33:21 +0000 Subject: [PATCH] Add a script for keeping the meeting registration data in sync - Legacy-Id: 13253 --- ietf/bin/fetch-meeting-registration-data | 47 +++++++++++++++++++ .../0003_registration_registrationstats.py | 2 +- ietf/stats/utils.py | 10 +++- 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100755 ietf/bin/fetch-meeting-registration-data diff --git a/ietf/bin/fetch-meeting-registration-data b/ietf/bin/fetch-meeting-registration-data new file mode 100755 index 000000000..f2b9b59cd --- /dev/null +++ b/ietf/bin/fetch-meeting-registration-data @@ -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) diff --git a/ietf/stats/migrations/0003_registration_registrationstats.py b/ietf/stats/migrations/0003_registration_registrationstats.py index ae07d3f60..58956d115 100644 --- a/ietf/stats/migrations/0003_registration_registrationstats.py +++ b/ietf/stats/migrations/0003_registration_registrationstats.py @@ -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'), ] diff --git a/ietf/stats/utils.py b/ietf/stats/utils.py index 27f043ef9..886bcc02e 100644 --- a/ietf/stats/utils.py +++ b/ietf/stats/utils.py @@ -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): - \ No newline at end of file +