]> git.parisson.com Git - telemeta.git/commitdiff
update revision plot: server mode, args, etc..
authorGuillaume Pellerin <yomguy@parisson.com>
Tue, 26 Nov 2013 10:39:23 +0000 (11:39 +0100)
committerGuillaume Pellerin <yomguy@parisson.com>
Tue, 26 Nov 2013 10:39:23 +0000 (11:39 +0100)
telemeta/management/commands/telemeta-export-item-revisions-plot.py

index 36f015c322f2867cc7ce6de80552241eec917813..6a0a513cf80aa7ccc3313b52fa2ce9aca561ee25 100644 (file)
@@ -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()