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(r.status_code, 302)
|
||||||
self.assertEqual(urlparse.urlparse(r["Location"]).path, urlreverse("doc_view", kwargs=dict(name=draft.name)))
|
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
|
# match with revision
|
||||||
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name=draft.name + "-" + prev_rev)))
|
r = self.client.get(urlreverse("doc_search_for_name", kwargs=dict(name=draft.name + "-" + prev_rev)))
|
||||||
self.assertEqual(r.status_code, 302)
|
self.assertEqual(r.status_code, 302)
|
||||||
|
|
|
@ -401,6 +401,11 @@ def search_for_name(request, name):
|
||||||
aliases = DocAlias.objects.filter(name__startswith=n)[:2]
|
aliases = DocAlias.objects.filter(name__startswith=n)[:2]
|
||||||
if len(aliases) == 1:
|
if len(aliases) == 1:
|
||||||
return aliases[0].name
|
return aliases[0].name
|
||||||
|
|
||||||
|
aliases = DocAlias.objects.filter(name__contains=n)[:2]
|
||||||
|
if len(aliases) == 1:
|
||||||
|
return aliases[0].name
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
n = name
|
n = name
|
||||||
|
@ -427,7 +432,22 @@ def search_for_name(request, name):
|
||||||
else:
|
else:
|
||||||
return HttpResponseRedirect(urlreverse("doc_view", kwargs={ "name": redirect_to }))
|
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):
|
def ad_dashboard_group(doc):
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue