@@ -86,7 +86,7 @@ def add_url_to_choices(choices, url_builder):
8686
8787def put_into_bin (value , bin_size ):
8888 if value is None :
89- return (value , value )
89+ return (0 , '' )
9090
9191 v = (value // bin_size ) * bin_size
9292 return (v , "{} - {}" .format (v , v + bin_size - 1 ))
@@ -114,7 +114,7 @@ def add_labeled_top_series_from_bins(chart_data, bins, limit):
114114
115115 xs = list (sorted (xs ))
116116
117- sorted_bins = sorted (iter ( aggregated_bins .items () ), key = lambda t : len (t [1 ]), reverse = True )
117+ sorted_bins = sorted (aggregated_bins .items (), key = lambda t : len (t [1 ]), reverse = True )
118118 top = [ label for label , names in list (sorted_bins )[:limit ]]
119119
120120 for label in top :
@@ -238,8 +238,8 @@ def build_document_stats_url(stats_type_override=Ellipsis, get_overrides={}):
238238
239239 total_docs = docalias_qs .values_list ("docs__name" ).distinct ().count ()
240240
241- def generate_canonical_names (docalias_qs ):
242- for doc_id , ts in itertools .groupby (docalias_qs .order_by ("docs__name" ), lambda t : t [0 ]):
241+ def generate_canonical_names (values ):
242+ for doc_id , ts in itertools .groupby (values .order_by ("docs__name" ), lambda a : a [0 ]):
243243 chosen = None
244244 for t in ts :
245245 if chosen is None :
@@ -249,7 +249,6 @@ def generate_canonical_names(docalias_qs):
249249 chosen = t
250250 elif t [1 ].startswith ("draft" ) and not chosen [1 ].startswith ("rfc" ):
251251 chosen = t
252-
253252 yield chosen
254253
255254 if stats_type == "authors" :
@@ -258,10 +257,10 @@ def generate_canonical_names(docalias_qs):
258257 bins = defaultdict (set )
259258
260259 for name , canonical_name , author_count in generate_canonical_names (docalias_qs .values_list ("docs__name" , "name" ).annotate (Count ("docs__documentauthor" ))):
261- bins [author_count ].add (canonical_name )
260+ bins [author_count or 0 ].add (canonical_name )
262261
263262 series_data = []
264- for author_count , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ]):
263+ for author_count , names in sorted (bins .items (), key = lambda t : t [0 ]):
265264 percentage = len (names ) * 100.0 / (total_docs or 1 )
266265 series_data .append ((author_count , percentage ))
267266 table_data .append ((author_count , percentage , len (names ), list (names )[:names_limit ]))
@@ -274,10 +273,10 @@ def generate_canonical_names(docalias_qs):
274273 bins = defaultdict (set )
275274
276275 for name , canonical_name , pages in generate_canonical_names (docalias_qs .values_list ("docs__name" , "name" , "docs__pages" )):
277- bins [pages ].add (canonical_name )
276+ bins [pages or 0 ].add (canonical_name )
278277
279278 series_data = []
280- for pages , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ]):
279+ for pages , names in sorted (bins .items (), key = lambda t : t [0 ]):
281280 percentage = len (names ) * 100.0 / (total_docs or 1 )
282281 if pages is not None :
283282 series_data .append ((pages , len (names )))
@@ -296,7 +295,7 @@ def generate_canonical_names(docalias_qs):
296295 bins [put_into_bin (words , bin_size )].add (canonical_name )
297296
298297 series_data = []
299- for (value , words ), names in sorted (iter ( bins .items () ), key = lambda t : t [0 ][0 ]):
298+ for (value , words ), names in sorted (bins .items (), key = lambda t : t [0 ][0 ]):
300299 percentage = len (names ) * 100.0 / (total_docs or 1 )
301300 if words is not None :
302301 series_data .append ((value , len (names )))
@@ -349,7 +348,7 @@ def generate_canonical_names(docalias_qs):
349348 bins [ext .upper ()].add (canonical_name )
350349
351350 series_data = []
352- for fmt , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ]):
351+ for fmt , names in sorted (bins .items (), key = lambda t : t [0 ]):
353352 percentage = len (names ) * 100.0 / (total_docs or 1 )
354353 series_data .append ((fmt , len (names )))
355354
@@ -366,7 +365,7 @@ def generate_canonical_names(docalias_qs):
366365 bins [formal_language_name ].add (canonical_name )
367366
368367 series_data = []
369- for formal_language , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ]):
368+ for formal_language , names in sorted (bins .items (), key = lambda t : t [0 ]):
370369 percentage = len (names ) * 100.0 / (total_docs or 1 )
371370 if formal_language is not None :
372371 series_data .append ((formal_language , len (names )))
@@ -412,12 +411,12 @@ def generate_canonical_names(docalias_qs):
412411 person_qs = Person .objects .filter (person_filters )
413412
414413 for name , document_count in person_qs .values_list ("name" ).annotate (Count ("documentauthor" )):
415- bins [document_count ].add (name )
414+ bins [document_count or 0 ].add (name )
416415
417416 total_persons = count_bins (bins )
418417
419418 series_data = []
420- for document_count , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ]):
419+ for document_count , names in sorted (bins .items (), key = lambda t : t [0 ]):
421420 percentage = len (names ) * 100.0 / (total_persons or 1 )
422421 series_data .append ((document_count , percentage ))
423422 plain_names = [ plain_name (n ) for n in names ]
@@ -450,7 +449,7 @@ def generate_canonical_names(docalias_qs):
450449 total_persons = count_bins (bins )
451450
452451 series_data = []
453- for affiliation , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ].lower ()):
452+ for affiliation , names in sorted (bins .items (), key = lambda t : t [0 ].lower ()):
454453 percentage = len (names ) * 100.0 / (total_persons or 1 )
455454 if affiliation :
456455 series_data .append ((affiliation , len (names )))
@@ -462,7 +461,7 @@ def generate_canonical_names(docalias_qs):
462461
463462 chart_data .append ({ "data" : series_data })
464463
465- for alias , name in sorted (iter ( aliases .items () ), key = lambda t : t [1 ]):
464+ for alias , name in sorted (aliases .items (), key = lambda t : t [1 ]):
466465 alias_data .append ((name , alias ))
467466
468467 elif stats_type == "author/country" :
@@ -499,7 +498,7 @@ def generate_canonical_names(docalias_qs):
499498 total_persons = count_bins (bins )
500499
501500 series_data = []
502- for country , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ].lower ()):
501+ for country , names in sorted (bins .items (), key = lambda t : t [0 ].lower ()):
503502 percentage = len (names ) * 100.0 / (total_persons or 1 )
504503 if country :
505504 series_data .append ((country , len (names )))
@@ -541,7 +540,7 @@ def generate_canonical_names(docalias_qs):
541540 total_persons = count_bins (bins )
542541
543542 series_data = []
544- for continent , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ].lower ()):
543+ for continent , names in sorted (bins .items (), key = lambda t : t [0 ].lower ()):
545544 percentage = len (names ) * 100.0 / (total_persons or 1 )
546545 if continent :
547546 series_data .append ((continent , len (names )))
@@ -563,12 +562,12 @@ def generate_canonical_names(docalias_qs):
563562 person_qs = Person .objects .filter (person_filters )
564563
565564 for name , citations in person_qs .values_list ("name" ).annotate (Count ("documentauthor__document__docalias__relateddocument" )):
566- bins [citations ].add (name )
565+ bins [citations or 0 ].add (name )
567566
568567 total_persons = count_bins (bins )
569568
570569 series_data = []
571- for citations , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ], reverse = True ):
570+ for citations , names in sorted (bins .items (), key = lambda t : t [0 ], reverse = True ):
572571 percentage = len (names ) * 100.0 / (total_persons or 1 )
573572 series_data .append ((citations , percentage ))
574573 plain_names = [ plain_name (n ) for n in names ]
@@ -589,12 +588,12 @@ def generate_canonical_names(docalias_qs):
589588 values = person_qs .values_list ("name" , "documentauthor__document" ).annotate (Count ("documentauthor__document__docalias__relateddocument" ))
590589 for name , ts in itertools .groupby (values .order_by ("name" ), key = lambda t : t [0 ]):
591590 h_index = compute_hirsch_index ([citations for _ , document , citations in ts ])
592- bins [h_index ].add (name )
591+ bins [h_index or 0 ].add (name )
593592
594593 total_persons = count_bins (bins )
595594
596595 series_data = []
597- for citations , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ], reverse = True ):
596+ for citations , names in sorted (bins .items (), key = lambda t : t [0 ], reverse = True ):
598597 percentage = len (names ) * 100.0 / (total_persons or 1 )
599598 series_data .append ((citations , percentage ))
600599 plain_names = [ plain_name (n ) for n in names ]
@@ -835,7 +834,7 @@ def reg_name(r):
835834 total_attendees = count_bins (bins )
836835
837836 series_data = []
838- for country , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ].lower ()):
837+ for country , names in sorted (bins .items (), key = lambda t : t [0 ].lower ()):
839838 percentage = len (names ) * 100.0 / (total_attendees or 1 )
840839 if country :
841840 series_data .append ((country , len (names )))
@@ -869,7 +868,7 @@ def reg_name(r):
869868 total_attendees = count_bins (bins )
870869
871870 series_data = []
872- for continent , names in sorted (iter ( bins .items () ), key = lambda t : t [0 ].lower ()):
871+ for continent , names in sorted (bins .items (), key = lambda t : t [0 ].lower ()):
873872 percentage = len (names ) * 100.0 / (total_attendees or 1 )
874873 if continent :
875874 series_data .append ((continent , len (names )))
0 commit comments