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 commit4ac99a9dc4
Note: SVN reference [10253] has been migrated to Git commit083abf7516
This commit is contained in:
parent
c2b4d31663
commit
309275dd7f
|
@ -122,6 +122,42 @@ class SearchTests(TestCase):
|
|||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=draft.name)))
|
||||
|
||||
# non-prefix match
|
||||
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(draft.name.split("-")[1:]))))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=draft.name)))
|
||||
|
||||
# other doctypes than drafts
|
||||
doc = Document.objects.get(name='charter-ietf-mars')
|
||||
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name='charter-ietf-ma')))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
|
||||
|
||||
doc = Document.objects.filter(name__startswith='conflict-review-').first()
|
||||
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(doc.name.split("-")[:-1]))))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
|
||||
|
||||
doc = Document.objects.filter(name__startswith='status-change-').first()
|
||||
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(doc.name.split("-")[:-1]))))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
|
||||
|
||||
doc = Document.objects.filter(name__startswith='agenda-').first()
|
||||
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(doc.name.split("-")[:-1]))))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
|
||||
|
||||
doc = Document.objects.filter(name__startswith='minutes-').first()
|
||||
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(doc.name.split("-")[:-1]))))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
|
||||
|
||||
doc = Document.objects.filter(name__startswith='slides-').first()
|
||||
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name="-".join(doc.name.split("-")[:-1]))))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=doc.name)))
|
||||
|
||||
# match with revision
|
||||
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name=draft.name + "-" + prev_rev)))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
|
|
|
@ -401,6 +401,11 @@ def search_for_name(request, name):
|
|||
aliases = DocAlias.objects.filter(name__startswith=n)[:2]
|
||||
if len(aliases) == 1:
|
||||
return aliases[0].name
|
||||
|
||||
aliases = DocAlias.objects.filter(name__contains=n)[:2]
|
||||
if len(aliases) == 1:
|
||||
return aliases[0].name
|
||||
|
||||
return None
|
||||
|
||||
n = name
|
||||
|
@ -427,7 +432,22 @@ def search_for_name(request, name):
|
|||
else:
|
||||
return HttpResponseRedirect(urlreverse("doc_view", kwargs={ "name": redirect_to }))
|
||||
|
||||
return HttpResponseRedirect(urlreverse("doc_search") + "?name=%s&rfcs=on&activedrafts=on" % n)
|
||||
# build appropriate flags based on string prefix
|
||||
doctypenames = DocTypeName.objects.filter(used=True)
|
||||
# This would have been more straightforward if document prefixes couldn't
|
||||
# contain a dash. Probably, document prefixes shouldn't contain a dash ...
|
||||
search_args = "?name=%s" % n
|
||||
if n.startswith("draft"):
|
||||
search_args += "&rfcs=on&activedrafts=on&olddrafts=on"
|
||||
else:
|
||||
for t in doctypenames:
|
||||
if n.startswith(t.prefix):
|
||||
search_args += "&include-%s=on" % t.slug
|
||||
break
|
||||
else:
|
||||
search_args += "&rfcs=on&activedrafts=on&olddrafts=on"
|
||||
|
||||
return HttpResponseRedirect(urlreverse("doc_search") + search_args)
|
||||
|
||||
def ad_dashboard_group(doc):
|
||||
|
||||
|
|
Loading…
Reference in a new issue