From ff6ef29aa86baa926476fdb6b65ce0da54e89c19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Tue, 17 Oct 2017 22:53:34 +0200 Subject: [PATCH] add basic support for redmine events --- eodb/events/management/commands/common.py | 23 +++++++++-------- .../commands/feed_redmine_activity_csv.py | 22 ++++++++++++++++ eodb/events/migrations/0003_redmine.py | 25 +++++++++++++++++++ eodb/events/models.py | 7 ++++++ 4 files changed, 66 insertions(+), 11 deletions(-) create mode 100644 eodb/events/management/commands/feed_redmine_activity_csv.py create mode 100644 eodb/events/migrations/0003_redmine.py diff --git a/eodb/events/management/commands/common.py b/eodb/events/management/commands/common.py index f8e7a26..24fabf4 100644 --- a/eodb/events/management/commands/common.py +++ b/eodb/events/management/commands/common.py @@ -3,7 +3,7 @@ import matplotlib.pyplot as plt from django.core.management.base import BaseCommand, CommandError from django.utils.dateparse import parse_date -from eodb.events.models import Commit, Email +from eodb.events.models import Commit, Email, Redmine class GraphCommand(BaseCommand): def add_arguments(self, parser): @@ -13,8 +13,10 @@ class GraphCommand(BaseCommand): parser.add_argument('--datemax', metavar='DATEMAX') parser.add_argument('--committime', action='store_true', help='use commit datetime instead of author datetime') - parser.add_argument('--mailinglist', action='store_true', - help='use mailing list emails instead of commits') + parser.add_argument('--events', default='git', + help='use event of this type (git (default), emails, redmine)') + parser.add_argument('--redmine', action='store_true', + help='use redmine events instead of commits') parser.add_argument('--notitle', action='store_true') parser.add_argument('--filename', metavar='FILENAME') @@ -53,16 +55,15 @@ class GraphCommand(BaseCommand): if options.get('datemax'): filters[datetime_var + '__lt'] = parse_date(options['datemax']) - if options.get('mailinglist'): - return Email.objects.filter(**filters) - else: - return Commit.objects.filter(**filters) + return {'emails': Email, 'redmine': Redmine, 'git': Commit}[ + options['events']].objects.filter(**filters) def get_title(self, options): - if options.get('mailinglist'): - title = 'Email activity' - else: - title = 'Git activity' + title = { + 'emails': 'Email activity', + 'git': 'Git activity', + 'redmine': 'Redmine activity', + }[options['events']] if options.get('username'): title += ' for %s' % options['username'] if options.get('module'): diff --git a/eodb/events/management/commands/feed_redmine_activity_csv.py b/eodb/events/management/commands/feed_redmine_activity_csv.py new file mode 100644 index 0000000..dd2e093 --- /dev/null +++ b/eodb/events/management/commands/feed_redmine_activity_csv.py @@ -0,0 +1,22 @@ +import csv + +from django.core.management.base import BaseCommand +from django.utils.dateparse import parse_datetime + +from eodb.events.models import Redmine + + +class Command(BaseCommand): + + def add_arguments(self, parser): + parser.add_argument('filename', metavar='FILENAME') + + def handle(self, *args, **options): + for row in csv.reader(open(options['filename'])): + if not row[2]: + continue + redmine, created = Redmine.objects.get_or_create(journal_id=int(row[0]), + defaults={ + 'author_datetime': parse_datetime(row[1]), + 'module': row[2], + 'author_email': row[3]}) diff --git a/eodb/events/migrations/0003_redmine.py b/eodb/events/migrations/0003_redmine.py new file mode 100644 index 0000000..5611ee1 --- /dev/null +++ b/eodb/events/migrations/0003_redmine.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.6 on 2017-10-17 20:44 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0002_email'), + ] + + operations = [ + migrations.CreateModel( + name='Redmine', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('journal_id', models.IntegerField(unique=True)), + ('module', models.CharField(max_length=200)), + ('author_email', models.CharField(max_length=100)), + ('author_datetime', models.DateTimeField()), + ], + ), + ] diff --git a/eodb/events/models.py b/eodb/events/models.py index decc169..81aff83 100644 --- a/eodb/events/models.py +++ b/eodb/events/models.py @@ -15,3 +15,10 @@ class Email(models.Model): list_id = models.CharField(max_length=100) author_email = models.CharField(max_length=100) author_datetime = models.DateTimeField() + + +class Redmine(models.Model): + journal_id = models.IntegerField(unique=True) + module = models.CharField(max_length=200) + author_email = models.CharField(max_length=100) + author_datetime = models.DateTimeField()