@@ -145,13 +145,13 @@ def build_document_stats_url(stats_type_override=Ellipsis, get_overrides={}):
145145
146146 if any (stats_type == t [0 ] for t in possible_document_stats_types ):
147147 # filter documents
148- docalias_qs = DocAlias . objects . filter (document__type = "draft" )
148+ docalias_filters = Q (document__type = "draft" )
149149
150150 rfc_state = State .objects .get (type = "draft" , slug = "rfc" )
151151 if document_type == "rfc" :
152- docalias_qs = docalias_qs . filter (document__states = rfc_state )
152+ docalias_filters &= Q (document__states = rfc_state )
153153 elif document_type == "draft" :
154- docalias_qs = docalias_qs . exclude (document__states = rfc_state )
154+ docalias_filters &= ~ Q (document__states = rfc_state )
155155
156156 if from_time :
157157 # this is actually faster than joining in the database,
@@ -162,7 +162,9 @@ def build_document_stats_url(stats_type_override=Ellipsis, get_overrides={}):
162162 docevent__type__in = ["published_rfc" , "new_revision" ],
163163 ).values_list ("pk" ))
164164
165- docalias_qs = docalias_qs .filter (document__in = docs_within_time_constraint )
165+ docalias_filters &= Q (document__in = docs_within_time_constraint )
166+
167+ docalias_qs = DocAlias .objects .filter (docalias_filters )
166168
167169 if document_type == "rfc" :
168170 doc_label = "RFC"
@@ -171,7 +173,7 @@ def build_document_stats_url(stats_type_override=Ellipsis, get_overrides={}):
171173 else :
172174 doc_label = "document"
173175
174- total_docs = docalias_qs .count ()
176+ total_docs = docalias_qs .values_list ( "document" ). distinct (). count ()
175177
176178 def generate_canonical_names (docalias_qs ):
177179 for doc_id , ts in itertools .groupby (docalias_qs .order_by ("document" ), lambda t : t [0 ]):
@@ -180,9 +182,9 @@ def generate_canonical_names(docalias_qs):
180182 if chosen is None :
181183 chosen = t
182184 else :
183- if t [0 ].startswith ("rfc" ):
185+ if t [1 ].startswith ("rfc" ):
184186 chosen = t
185- elif t [0 ].startswith ("draft" ) and not chosen [0 ].startswith ("rfc" ):
187+ elif t [1 ].startswith ("draft" ) and not chosen [1 ].startswith ("rfc" ):
186188 chosen = t
187189
188190 yield chosen
@@ -192,8 +194,8 @@ def generate_canonical_names(docalias_qs):
192194
193195 bins = defaultdict (list )
194196
195- for name , author_count in generate_canonical_names (docalias_qs .values_list ("name" ).annotate (Count ("document__documentauthor" ))):
196- bins [author_count ].append (name )
197+ for name , canonical_name , author_count in generate_canonical_names (docalias_qs .values_list ("document" , "name" ).annotate (Count ("document__documentauthor" ))):
198+ bins [author_count ].append (canonical_name )
197199
198200 series_data = []
199201 for author_count , names in sorted (bins .iteritems (), key = lambda t : t [0 ]):
@@ -211,8 +213,8 @@ def generate_canonical_names(docalias_qs):
211213
212214 bins = defaultdict (list )
213215
214- for name , pages in generate_canonical_names (docalias_qs .values_list ("name" , "document__pages" )):
215- bins [pages ].append (name )
216+ for name , canonical_name , pages in generate_canonical_names (docalias_qs .values_list ("document" , "name" , "document__pages" )):
217+ bins [pages ].append (canonical_name )
216218
217219 series_data = []
218220 for pages , names in sorted (bins .iteritems (), key = lambda t : t [0 ]):
@@ -233,8 +235,8 @@ def generate_canonical_names(docalias_qs):
233235
234236 bins = defaultdict (list )
235237
236- for name , words in generate_canonical_names (docalias_qs .values_list ("name" , "document__words" )):
237- bins [put_into_bin (words , bin_size )].append (name )
238+ for name , canonical_name , words in generate_canonical_names (docalias_qs .values_list ("document" , "name" , "document__words" )):
239+ bins [put_into_bin (words , bin_size )].append (canonical_name )
238240
239241 series_data = []
240242 for (value , words ), names in sorted (bins .iteritems (), key = lambda t : t [0 ][0 ]):
@@ -261,7 +263,7 @@ def generate_canonical_names(docalias_qs):
261263 submission_types [doc_name ] = file_types
262264
263265 doc_names_with_missing_types = {}
264- for canonical_name , rev , doc_name in generate_canonical_names (docalias_qs .values_list ("name " , "document__rev " , "document__name " )):
266+ for doc_name , canonical_name , rev in generate_canonical_names (docalias_qs .values_list ("document " , "name " , "document__rev " )):
265267 types = submission_types .get (doc_name )
266268 if types :
267269 for dot_ext in types .split ("," ):
@@ -308,8 +310,8 @@ def generate_canonical_names(docalias_qs):
308310
309311 bins = defaultdict (list )
310312
311- for name , formal_language_name in generate_canonical_names (docalias_qs .values_list ("name" , "document__formal_languages__name" )):
312- bins [formal_language_name ].append (name )
313+ for name , canonical_name , formal_language_name in generate_canonical_names (docalias_qs .values_list ("document" , "name" , "document__formal_languages__name" )):
314+ bins [formal_language_name ].append (canonical_name )
313315
314316 series_data = []
315317 for formal_language , names in sorted (bins .iteritems (), key = lambda t : t [0 ]):
0 commit comments