diff --git a/eodb/events/management/commands/activity.py b/eodb/events/management/commands/activity.py index 45af984..acf83fd 100644 --- a/eodb/events/management/commands/activity.py +++ b/eodb/events/management/commands/activity.py @@ -20,16 +20,12 @@ class Command(GraphCommand): def handle(self, *args, **options): title = 'Git activity' - datetime_var = 'author_datetime' - if options.get('committime'): - datetime_var = 'commit_datetime' - total_events = {} plots = [] for i, (legend, serie) in enumerate(self.get_series(options)): events = {} for commit in serie: - commit_date = getattr(commit, datetime_var).date() + commit_date = self.get_event_datetime(commit, options).date() if options.get('groupby') == 'weeks': graph_date = commit_date - datetime.timedelta(days=commit_date.weekday()) elif options.get('groupby') == 'months': diff --git a/eodb/events/management/commands/common.py b/eodb/events/management/commands/common.py index a5474d3..287bf2d 100644 --- a/eodb/events/management/commands/common.py +++ b/eodb/events/management/commands/common.py @@ -5,6 +5,7 @@ import matplotlib.pyplot as plt from django.core.management.base import BaseCommand, CommandError from django.db.models import Q from django.utils.dateparse import parse_date +from django.utils.timezone import make_aware, make_naive from eodb.events.models import Commit, Email, Redmine, Formdata @@ -19,6 +20,8 @@ class GraphCommand(BaseCommand): parser.add_argument('--events', default='git', help='use event of this type (git (default), emails, redmine)') parser.add_argument('--notitle', action='store_true') + parser.add_argument('--entrouvert', action='store_true', + help='limit to @entrouvert persons') parser.add_argument('--filename', metavar='FILENAME') def get_series(self, options): @@ -39,14 +42,22 @@ class GraphCommand(BaseCommand): else: yield (None, self.get_events(options)) + def get_event_datetime(self, event, options): + datetime_var = 'author_datetime' + if options.get('committime'): + datetime_var = 'commit_datetime' + return make_aware(make_naive(getattr(event, datetime_var))) + def get_events(self, options): - if options['events'] in ('formdata',): - domain_filter = Q(author_datetime__isnull=False) - else: + if options.get('entrouvert'): domain_filter = Q(author_email__endswith='@entrouvert.com') | \ Q(author_email__endswith='@entrouvert.org') - filters = {} + elif options['events'] in ('formdata',): + domain_filter = Q(author_datetime__isnull=False) + else: + domain_filter = Q() + filters = {} if options.get('username'): filters['author_email__startswith'] = options['username'] + '@' diff --git a/eodb/events/management/commands/punchcard.py b/eodb/events/management/commands/punchcard.py index 3f29d0b..b1d4af2 100644 --- a/eodb/events/management/commands/punchcard.py +++ b/eodb/events/management/commands/punchcard.py @@ -12,10 +12,6 @@ class Command(GraphCommand): for j in range(24): infos[(i, j)] = 0 - datetime_var = 'author_datetime' - if options.get('committime'): - datetime_var = 'commit_datetime' - def hour_shift(x): x = x - 4 if x < 0: @@ -23,7 +19,9 @@ class Command(GraphCommand): return x for commit in self.get_events(options): - coords = (getattr(commit, datetime_var).weekday(), hour_shift(getattr(commit, datetime_var).hour)) + coords = ( + self.get_event_datetime(commit, options).weekday(), + hour_shift(self.get_event_datetime(commit, options)).hour)) infos[coords] = infos[coords] + 1 draw_punchcard(infos, diff --git a/eodb/events/management/commands/times.py b/eodb/events/management/commands/times.py index 081ff2e..c9127d1 100644 --- a/eodb/events/management/commands/times.py +++ b/eodb/events/management/commands/times.py @@ -17,16 +17,12 @@ class Command(GraphCommand): parser.add_argument('--density', action='store_true') def handle(self, *args, **options): - datetime_var = 'author_datetime' - if options.get('committime'): - datetime_var = 'commit_datetime' - event_dates = [] event_times = [] plots = [] for i, (legend, serie) in enumerate(self.get_series(options)): for commit in serie: - graph_date = getattr(commit, datetime_var) + graph_date = self.get_event_datetime(commit, options) graph_date -= datetime.timedelta(hours=4) event_dates.append(matplotlib.dates.date2num(graph_date.date())) event_times.append(graph_date.hour + graph_date.minute / 60. + graph_date.second / 3600) diff --git a/eodb/events/management/commands/violins.py b/eodb/events/management/commands/violins.py index dd80e53..4357d7f 100644 --- a/eodb/events/management/commands/violins.py +++ b/eodb/events/management/commands/violins.py @@ -14,10 +14,6 @@ np.random.seed(19680801) class Command(GraphCommand): def handle(self, *args, **options): - datetime_var = 'author_datetime' - if options.get('committime'): - datetime_var = 'commit_datetime' - data = [] zones = [] for i, (legend, serie) in enumerate(self.get_series(options)): @@ -25,7 +21,7 @@ class Command(GraphCommand): events = [] data.append(events) for event in serie: - event_date = getattr(event, datetime_var) + event_date = self.get_event_datetime(event, options) hour = event_date.hour if hour < 5: hour += 24