start support for email activity

This commit is contained in:
Frédéric Péters 2017-10-15 14:43:03 +02:00
parent 52f0db9f95
commit 90842b8300
7 changed files with 81 additions and 7 deletions

View File

@ -23,7 +23,7 @@ class Command(GraphCommand):
datetime_var = 'commit_datetime'
events = {}
for commit in self.get_commits(options):
for commit in self.get_events(options):
commit_date = getattr(commit, datetime_var).date()
if options.get('groupby') == 'weeks':
graph_date = commit_date - datetime.timedelta(days=commit_date.weekday())

View File

@ -3,7 +3,7 @@ import matplotlib.pyplot as plt
from django.core.management.base import BaseCommand
from django.utils.dateparse import parse_date
from eodb.events.models import Commit
from eodb.events.models import Commit, Email
class GraphCommand(BaseCommand):
def add_arguments(self, parser):
@ -13,9 +13,11 @@ 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('--filename', metavar='FILENAME')
def get_commits(self, options):
def get_events(self, options):
filters = {'author_email__endswith': '@entrouvert.com'}
if options.get('username'):
@ -32,10 +34,16 @@ class GraphCommand(BaseCommand):
if options.get('datemax'):
filters[datetime_var + '__lt'] = parse_date(options['datemax'])
return Commit.objects.filter(**filters)
if options.get('mailinglist'):
return Email.objects.filter(**filters)
else:
return Commit.objects.filter(**filters)
def get_title(self, options):
title = 'Git activity'
if options.get('mailinglist'):
title = 'Email activity'
else:
title = 'Git activity'
if options.get('username'):
title += ' for %s' % options['username']
if options.get('module'):

View File

@ -0,0 +1,34 @@
import datetime
import mailbox
import rfc822
import time
from django.core.management.base import BaseCommand
from django.utils.dateparse import parse_datetime
from eodb.events.models import Email
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('maildir', nargs='+')
def handle(self, *args, **options):
for maildir in options.get('maildir'):
box = mailbox.Maildir(maildir, create=False)
for message_id in box.iterkeys():
message = box[message_id]
try:
list_id = message['list-id'].strip('<>').replace('.listes.entrouvert.com', '')
except KeyError:
print 'failed to get list id', message['date'], message['subject']
continue
author_email = rfc822.parseaddr(message['From'])[1]
author_date = datetime.datetime.fromtimestamp(time.mktime(rfc822.parsedate(message['date'])))
msg, created = Email.objects.get_or_create(msgid=message_id,
defaults={
'list_id': list_id,
'author_email': author_email,
'author_datetime': author_date})

View File

@ -16,7 +16,7 @@ class Command(GraphCommand):
if options.get('committime'):
datetime_var = 'commit_datetime'
for commit in self.get_commits(options):
for commit in self.get_events(options):
coords = (getattr(commit, datetime_var).weekday(), getattr(commit, datetime_var).hour)
infos[coords] = infos[coords] + 1

View File

@ -13,7 +13,7 @@ class Command(GraphCommand):
event_dates = []
event_times = []
for commit in self.get_commits(options):
for commit in self.get_events(options):
graph_date = getattr(commit, datetime_var)
event_dates.append(matplotlib.dates.date2num(graph_date.date()))
event_times.append(graph_date.hour + graph_date.minute / 60. + graph_date.second / 3600)

View File

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-10-15 12:26
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('events', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Email',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('msgid', models.CharField(max_length=100, unique=True)),
('list_id', models.CharField(max_length=100)),
('author_email', models.CharField(max_length=100)),
('author_datetime', models.DateTimeField()),
],
),
]

View File

@ -8,3 +8,10 @@ class Commit(models.Model):
author_email = models.CharField(max_length=100)
author_datetime = models.DateTimeField()
commit_datetime = models.DateTimeField()
class Email(models.Model):
msgid = models.CharField(max_length=100, unique=True)
list_id = models.CharField(max_length=100)
author_email = models.CharField(max_length=100)
author_datetime = models.DateTimeField()