Skip to content

Commit 32c32a5

Browse files
committed
Fix a couple of bugs in the document statistics
- Legacy-Id: 12863
1 parent 9d8874d commit 32c32a5

1 file changed

Lines changed: 18 additions & 16 deletions

File tree

ietf/stats/views.py

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)