|
1 | | -#!/usr/bin/env python |
2 | | -# -*- coding: utf-8 -*- |
| 1 | +# Copyright 2016 IETF Trust |
3 | 2 |
|
4 | | -import sys, os, argparse |
5 | | - |
6 | | -basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../..")) |
7 | | -sys.path = [ basedir ] + sys.path |
8 | | -os.environ["DJANGO_SETTINGS_MODULE"] = "ietf.settings" |
9 | | - |
10 | | -virtualenv_activation = os.path.join(basedir, "env", "bin", "activate_this.py") |
11 | | -if os.path.exists(virtualenv_activation): |
12 | | - execfile(virtualenv_activation, dict(__file__=virtualenv_activation)) |
13 | | - |
14 | | -import django |
15 | | -django.setup() |
16 | | - |
17 | | -parser = argparse.ArgumentParser() |
18 | | -parser.add_argument("--meeting", help="meeting to fetch data for") |
19 | | -parser.add_argument("--all", action="store_true", help="fetch data for all meetings") |
20 | | -parser.add_argument("--latest", type=int, help="fetch data for latest N meetings") |
21 | | -args = parser.parse_args() |
| 3 | +import syslog |
22 | 4 |
|
| 5 | +from django.core.management.base import BaseCommand, CommandError |
23 | 6 |
|
24 | | -import syslog |
| 7 | +import debug # pyflakes:ignore |
25 | 8 |
|
26 | 9 | from ietf.meeting.models import Meeting |
27 | | - |
28 | 10 | from ietf.stats.utils import get_meeting_registration_data |
29 | 11 |
|
30 | | -meetings = Meeting.objects.none() |
31 | | -if args.meeting: |
32 | | - meetings = Meeting.objects.filter(number=args.meeting, type="ietf") |
33 | | -elif args.all: |
34 | | - meetings = Meeting.objects.filter(type="ietf").order_by("date") |
35 | | -elif args.latest: |
36 | | - meetings = Meeting.objects.filter(type="ietf").order_by("-date")[:args.latest] |
37 | | -else: |
38 | | - print("Please use one of --meeting, --all or --latest") |
39 | | - sys.exit(1) |
40 | | - |
41 | | -for meeting in meetings: |
42 | | - added, processed, total = get_meeting_registration_data(meeting) |
43 | | - msg = "Fetched data for meeting {}: {} processed, {} added, {} in table".format(meeting.number, processed, added, total) |
44 | | - if sys.stdout.isatty(): |
45 | | - print(msg) # make debugging a bit easier |
46 | | - else: |
47 | | - syslog.syslog(msg) |
| 12 | +logtag = __name__.split('.')[-1] |
| 13 | +logname = "user.log" |
| 14 | +syslog.openlog(logtag, syslog.LOG_PID, syslog.LOG_USER) |
| 15 | + |
| 16 | +class Command(BaseCommand): |
| 17 | + help = "Fetch meeting attendee figures from ietf.org/registration/attendees." |
| 18 | + |
| 19 | + def add_arguments(self, parser): |
| 20 | + parser.add_argument("--meeting", help="meeting to fetch data for") |
| 21 | + parser.add_argument("--all", action="store_true", help="fetch data for all meetings") |
| 22 | + parser.add_argument("--latest", type=int, help="fetch data for latest N meetings") |
| 23 | + |
| 24 | + def handle(self, *args, **options): |
| 25 | + self.verbosity = options['verbosity'] |
| 26 | + |
| 27 | + meetings = Meeting.objects.none() |
| 28 | + if options['meeting']: |
| 29 | + meetings = Meeting.objects.filter(number=options['meeting'], type="ietf") |
| 30 | + elif options['all']: |
| 31 | + meetings = Meeting.objects.filter(type="ietf").order_by("date") |
| 32 | + elif options['latest']: |
| 33 | + meetings = Meeting.objects.filter(type="ietf").order_by("-date")[:options['latest']] |
| 34 | + else: |
| 35 | + raise CommandError("Please use one of --meeting, --all or --latest") |
| 36 | + |
| 37 | + for meeting in meetings: |
| 38 | + added, processed, total = get_meeting_registration_data(meeting) |
| 39 | + msg = "Fetched data for meeting %3s: %4d processed, %4d added, %4d in table" % (meeting.number, processed, added, total) |
| 40 | + if self.stdout.isatty(): |
| 41 | + self.stdout.write(msg+'\n') # make debugging a bit easier |
| 42 | + else: |
| 43 | + syslog.syslog(msg) |
| 44 | + |
0 commit comments