start support for email activity
This commit is contained in:
parent
52f0db9f95
commit
90842b8300
|
@ -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())
|
||||
|
|
|
@ -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'):
|
||||
|
|
|
@ -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})
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -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()
|
||||
|
|
Reference in New Issue