Skip to content

Commit 309275d

Browse files
committed
Enhanced the partial-match URL feature introduced in [10158], merged in [10253], so that it now handles other document types than drafts/rfcs if the partial string has the proper prefix, and also handles partial strings which don't match at the start of the document name.
- Legacy-Id: 10255 Note: SVN reference [10158] has been migrated to Git commit 4ac99a9 Note: SVN reference [10253] has been migrated to Git commit 083abf7
1 parent c2b4d31 commit 309275d

2 files changed

Lines changed: 57 additions & 1 deletion

File tree

ietf/doc/tests.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,42 @@ def test_search_for_name(self):
122122
self.assertEqual(r.status_code, 302)
123123
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=draft.name)))
124124

125+
# non-prefix match
126+
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(draft.name.split("-")[1:]))))
127+
self.assertEqual(r.status_code, 302)
128+
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=draft.name)))
129+
130+
# other doctypes than drafts
131+
doc = Document.objects.get(name='charter-ietf-mars')
132+
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name='charter-ietf-ma')))
133+
self.assertEqual(r.status_code, 302)
134+
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
135+
136+
doc = Document.objects.filter(name__startswith='conflict-review-').first()
137+
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(doc.name.split("-")[:-1]))))
138+
self.assertEqual(r.status_code, 302)
139+
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
140+
141+
doc = Document.objects.filter(name__startswith='status-change-').first()
142+
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(doc.name.split("-")[:-1]))))
143+
self.assertEqual(r.status_code, 302)
144+
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
145+
146+
doc = Document.objects.filter(name__startswith='agenda-').first()
147+
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(doc.name.split("-")[:-1]))))
148+
self.assertEqual(r.status_code, 302)
149+
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
150+
151+
doc = Document.objects.filter(name__startswith='minutes-').first()
152+
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(doc.name.split("-")[:-1]))))
153+
self.assertEqual(r.status_code, 302)
154+
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
155+
156+
doc = Document.objects.filter(name__startswith='slides-').first()
157+
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(doc.name.split("-")[:-1]))))
158+
self.assertEqual(r.status_code, 302)
159+
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
160+
125161
# match with revision
126162
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name=draft.name + "-" + prev_rev)))
127163
self.assertEqual(r.status_code, 302)

ietf/doc/views_search.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,11 @@ def find_unique(n):
401401
aliases = DocAlias.objects.filter(name__startswith=n)[:2]
402402
if len(aliases) == 1:
403403
return aliases[0].name
404+
405+
aliases = DocAlias.objects.filter(name__contains=n)[:2]
406+
if len(aliases) == 1:
407+
return aliases[0].name
408+
404409
return None
405410

406411
n = name
@@ -427,7 +432,22 @@ def find_unique(n):
427432
else:
428433
return HttpResponseRedirect(urlreverse("doc_view", kwargs={ "name": redirect_to }))
429434

430-
return HttpResponseRedirect(urlreverse("doc_search") + "?name=%s&rfcs=on&activedrafts=on" % n)
435+
# build appropriate flags based on string prefix
436+
doctypenames = DocTypeName.objects.filter(used=True)
437+
# This would have been more straightforward if document prefixes couldn't
438+
# contain a dash. Probably, document prefixes shouldn't contain a dash ...
439+
search_args = "?name=%s" % n
440+
if n.startswith("draft"):
441+
search_args += "&rfcs=on&activedrafts=on&olddrafts=on"
442+
else:
443+
for t in doctypenames:
444+
if n.startswith(t.prefix):
445+
search_args += "&include-%s=on" % t.slug
446+
break
447+
else:
448+
search_args += "&rfcs=on&activedrafts=on&olddrafts=on"
449+
450+
return HttpResponseRedirect(urlreverse("doc_search") + search_args)
431451

432452
def ad_dashboard_group(doc):
433453

0 commit comments

Comments
 (0)