From: Guillaume Pellerin Date: Tue, 26 Nov 2013 10:39:23 +0000 (+0100) Subject: update revision plot: server mode, args, etc.. X-Git-Tag: 1.5.0rc3~32^2 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=67c60a4028827b3b36c6c5b3cb45e14f8a0e1669;p=telemeta.git update revision plot: server mode, args, etc.. --- diff --git a/telemeta/management/commands/telemeta-export-item-revisions-plot.py b/telemeta/management/commands/telemeta-export-item-revisions-plot.py index 36f015c3..6a0a513c 100644 --- a/telemeta/management/commands/telemeta-export-item-revisions-plot.py +++ b/telemeta/management/commands/telemeta-export-item-revisions-plot.py @@ -4,6 +4,9 @@ from django.core.management.base import BaseCommand, CommandError from telemeta.models import * import datetime, time, calendar, itertools import numpy as np + +import matplotlib +matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.dates as mdates from matplotlib.backends.backend_pdf import PdfPages @@ -23,29 +26,42 @@ class Command(BaseCommand): http://matplotlib.org/examples/pylab_examples/date_demo2.html http://matplotlib.org/examples/api/date_demo.html """ - + args = 'year month day' binning = 7*DAY - limit_date = datetime.datetime(2011, 6, 30) + option_list = BaseCommand.option_list + ( + make_option('-y', '--year', + dest='year', + help='year of the first revision'), + make_option('-m', '--month', + dest='month', + help='month of the first revision'), + make_option('-d', '--day', + dest='day', + help='day of the first revision'), + ) def group(self, di): return int(calendar.timegm(di.timetuple()))/self.binning - def handle(self, *args, **options): + def handle(self, *args, **kwargs): + limit_date = datetime.datetime(int(kwargs.get('year')), int(kwargs.get('month')), int(kwargs.get('day'))) years = mdates.YearLocator() months = mdates.MonthLocator(range(1,13), bymonthday=1, interval=3) mondays = mdates.WeekdayLocator(mdates.MONDAY) monthsFmt = mdates.DateFormatter("%b '%y") yearsFmt = mdates.DateFormatter('%Y') - revisions = Revision.objects.filter(time__gte=self.limit_date) - - # dates + revisions = Revision.objects.filter(time__gte=limit_date) list_of_dates = [r.time for r in revisions] grouped_dates = [[datetime.datetime(*time.gmtime(d*self.binning)[:6]), len(list(g))] \ for d,g in itertools.groupby(list_of_dates, self.group)] grouped_dates = zip(*grouped_dates) + + revs = np.array(grouped_dates[1]) + revs_mean = np.mean(revs) + fig = plt.figure() - ax = fig.add_subplot(111) + ax = fig.add_subplot(111, ylabel='Revisions by week (mean='+str(np.round(revs_mean, 1))+')') ax.plot_date(grouped_dates[0], grouped_dates[1] , '-') ax.xaxis.set_major_locator(months) ax.xaxis.set_major_formatter(monthsFmt) @@ -54,12 +70,8 @@ class Command(BaseCommand): ax.grid(True) fig.autofmt_xdate() - plt.savefig('/tmp/crem-revisions.png') - plt.savefig('/tmp/crem-revisions.pdf') - - plt.show() + plt.savefig('/tmp/telemeta-revisions.png') + plt.savefig('/tmp/telemeta-revisions.pdf') - # means - revs = np.array(grouped_dates[1]) - print np.mean(revs) + #plt.show()