@@ -134,6 +134,8 @@ def generate_canonical_names(docalias_qs):
134134 stats_title = ""
135135 bin_size = 1
136136
137+ total_docs = docalias_qs .count ()
138+
137139 if stats_type == "authors" :
138140 stats_title = "Number of authors for each {}" .format (doc_label )
139141
@@ -142,8 +144,6 @@ def generate_canonical_names(docalias_qs):
142144 for name , author_count in generate_canonical_names (docalias_qs .values_list ("name" ).annotate (Count ("document__authors" ))):
143145 bins [author_count ].append (name )
144146
145- total_docs = sum (len (names ) for author_count , names in bins .iteritems ())
146-
147147 series_data = []
148148 for author_count , names in sorted (bins .iteritems (), key = lambda t : t [0 ]):
149149 percentage = len (names ) * 100.0 / total_docs
@@ -163,8 +163,6 @@ def generate_canonical_names(docalias_qs):
163163 for name , pages in generate_canonical_names (docalias_qs .values_list ("name" , "document__pages" )):
164164 bins [pages ].append (name )
165165
166- total_docs = sum (len (names ) for pages , names in bins .iteritems ())
167-
168166 series_data = []
169167 for pages , names in sorted (bins .iteritems (), key = lambda t : t [0 ]):
170168 percentage = len (names ) * 100.0 / total_docs
@@ -187,8 +185,6 @@ def generate_canonical_names(docalias_qs):
187185 for name , words in generate_canonical_names (docalias_qs .values_list ("name" , "document__words" )):
188186 bins [put_into_bin (words , bin_size )].append (name )
189187
190- total_docs = sum (len (names ) for words , names in bins .iteritems ())
191-
192188 series_data = []
193189 for (value , words ), names in sorted (bins .iteritems (), key = lambda t : t [0 ][0 ]):
194190 percentage = len (names ) * 100.0 / total_docs
@@ -203,7 +199,7 @@ def generate_canonical_names(docalias_qs):
203199 })
204200
205201 elif stats_type == "format" :
206- stats_title = "Formats for each {}" .format (doc_label )
202+ stats_title = "Submission formats for each {}" .format (doc_label )
207203
208204 bins = defaultdict (list )
209205
@@ -244,8 +240,6 @@ def generate_canonical_names(docalias_qs):
244240 if canonical_name :
245241 bins [ext .upper ()].append (canonical_name )
246242
247- total_docs = sum (len (names ) for fmt , names in bins .iteritems ())
248-
249243 series_data = []
250244 for fmt , names in sorted (bins .iteritems (), key = lambda t : t [0 ]):
251245 percentage = len (names ) * 100.0 / total_docs
@@ -258,6 +252,27 @@ def generate_canonical_names(docalias_qs):
258252 "animation" : False ,
259253 })
260254
255+ elif stats_type == "formlang" :
256+ stats_title = "Formal languages used for each {}" .format (doc_label )
257+
258+ bins = defaultdict (list )
259+
260+ for name , formal_language_name in generate_canonical_names (docalias_qs .values_list ("name" , "document__formal_languages__name" )):
261+ bins [formal_language_name ].append (name )
262+
263+ series_data = []
264+ for formal_language , names in sorted (bins .iteritems (), key = lambda t : t [0 ]):
265+ percentage = len (names ) * 100.0 / total_docs
266+ if formal_language is not None :
267+ series_data .append ((formal_language , len (names )))
268+ table_data .append ((formal_language , percentage , names ))
269+
270+ chart_data .append ({
271+ "data" : series_data ,
272+ "animation" : False ,
273+ })
274+
275+
261276 return render (request , "stats/document_stats.html" , {
262277 "chart_data" : mark_safe (json .dumps (chart_data )),
263278 "table_data" : table_data ,
0 commit comments