From 151b14ab3f95d2245f03ffc6435c985590195f02 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 1 Jun 2017 20:55:40 +0000 Subject: [PATCH] Converted the meeting attendance fetcher to a management command. - Legacy-Id: 13490 --- .../commands/fetch_meeting_attendance.py | 77 +++++++++---------- 1 file changed, 37 insertions(+), 40 deletions(-) diff --git a/ietf/stats/management/commands/fetch_meeting_attendance.py b/ietf/stats/management/commands/fetch_meeting_attendance.py index 5f75df3af..52b286c51 100755 --- a/ietf/stats/management/commands/fetch_meeting_attendance.py +++ b/ietf/stats/management/commands/fetch_meeting_attendance.py @@ -1,47 +1,44 @@ -#!/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", type=int, help="fetch data for latest N meetings") -args = parser.parse_args() - +# Copyright 2016 IETF Trust import syslog -from ietf.meeting.models import Meeting +from django.core.management.base import BaseCommand, CommandError +import debug # pyflakes:ignore + +from ietf.meeting.models import Meeting from ietf.stats.utils import get_meeting_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")[:args.latest] -else: - print("Please use one of --meeting, --all or --latest") - sys.exit(1) +logtag = __name__.split('.')[-1] +logname = "user.log" +syslog.openlog(logtag, syslog.LOG_PID, syslog.LOG_USER) -for meeting in meetings: - added, processed, total = get_meeting_registration_data(meeting) - msg = "Fetched data for meeting {}: {} processed, {} added, {} in table".format(meeting.number, processed, added, total) - if sys.stdout.isatty(): - print(msg) # make debugging a bit easier - else: - syslog.syslog(msg) +class Command(BaseCommand): + help = "Fetch meeting attendee figures from ietf.org/registration/attendees." + + def add_arguments(self, parser): + 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", type=int, help="fetch data for latest N meetings") + + def handle(self, *args, **options): + self.verbosity = options['verbosity'] + + meetings = Meeting.objects.none() + if options['meeting']: + meetings = Meeting.objects.filter(number=options['meeting'], type="ietf") + elif options['all']: + meetings = Meeting.objects.filter(type="ietf").order_by("date") + elif options['latest']: + meetings = Meeting.objects.filter(type="ietf").order_by("-date")[:options['latest']] + else: + raise CommandError("Please use one of --meeting, --all or --latest") + + for meeting in meetings: + added, processed, total = get_meeting_registration_data(meeting) + msg = "Fetched data for meeting %3s: %4d processed, %4d added, %4d in table" % (meeting.number, processed, added, total) + if self.stdout.isatty(): + self.stdout.write(msg+'\n') # make debugging a bit easier + else: + syslog.syslog(msg) +