Author: fw Date: 2005-10-20 09:03:03 +0000 (Thu, 20 Oct 2005) New Revision: 2485 Modified: bin/tracker_service.py Log: r628@deneb: fw | 2005-10-14 10:35:43 +0200 bin/tracker_service.py (TrackerService.page_redirect): New method. Invokes page_object_or_redirect. (TrackerService.page_object): Reimplement in terms of page_object_or_redirect. (TrackerService.page_object_or_redirect): Display an object page, or redirect to the correct page (which can be external). Modified: bin/tracker_service.py ==================================================================--- bin/tracker_service.py 2005-10-20 09:02:46 UTC (rev 2484) +++ bin/tracker_service.py 2005-10-20 09:03:03 UTC (rev 2485) @@ -50,6 +50,7 @@ self.db = security_db.DB(db_name) self.register('''', self.page_home) self.register(''*'', self.page_object) + self.register(''redirect/*'', self.page_redirect) self.register(''source-package/*'', self.page_source_package) self.register(''binary-package/*'', self.page_binary_package) self.register(''status/release/stable'', self.page_status_release_stable) @@ -119,14 +120,22 @@ def page_object(self, path, params, url): obj = path[0] + return self.page_object_or_redirect(url, obj, False) + def page_redirect(self, path, params, url): + obj = path[0] + return self.page_object_or_redirect(url, obj, True) + + def page_object_or_redirect(self, url, obj, redirect): + c = self.db.cursor() + if not obj: # Redirect to start page. return RedirectResult(url.scriptRelativeFull("")) if ''A'' <= obj[0] <= ''Z'': # Bug names start with a capital letter. - return self.page_bug(url, obj) + return self.page_bug(url, obj, redirect) bugnumber = 0 try: @@ -134,9 +143,13 @@ except ValueError: pass if bugnumber: - return self.page_debian_bug(url, bugnumber) + buglist = list(self.db.getBugsFromDebianBug(c, bugnumber)) + if buglist: + return self.page_debian_bug(url, bugnumber, buglist) + if redirect: + return RedirectResult(self.url_debian_bug(url, str(bugnumber)), + permanent=False) - c = self.db.cursor() if self.db.isSourcePackage(c, obj): return RedirectResult(self.url_source_package(url, obj, full=True)) if self.db.isBinaryPackage(c, obj): @@ -144,13 +157,17 @@ return self.page_not_found(url, obj) - def page_bug(self, url, name): + def page_bug(self, url, name, redirect): cursor = self.db.cursor() try: bug = bugs.BugFromDB(cursor, name) except ValueError: + if redirect: + if name[0:4] in (''CAN-'', ''CVE-''): + return RedirectResult(self.url_cve(url, name), + permanent=False) return self.page_not_found(url, name) - if bug.name <> name: + if bug.name <> name or redirect: # Show the normalized bug name in the browser address bar. return RedirectResult(url.scriptRelativeFull(bug.name)) @@ -301,29 +318,23 @@ return self.create_page(url, bug.name, page) - def page_debian_bug(self, url, bugnumber): - buglist = list(self.db.getBugsFromDebianBug(self.db.cursor(), - bugnumber)) - if buglist: - if len(buglist) == 1: - # Single issue, redirect. - return RedirectResult(url.scriptRelativeFull(buglist[0][0])) + def page_debian_bug(self, url, bugnumber, buglist): + if len(buglist) == 1: + # Single issue, redirect. + return RedirectResult(url.scriptRelativeFull(buglist[0][0])) - def gen(): - for (name, urgency, description) in buglist: - if urgency == "unknown": - urgency = "" - yield self.make_xref(url, name), urgency, description + def gen(): + for (name, urgency, description) in buglist: + if urgency == "unknown": + urgency = "" + yield self.make_xref(url, name), urgency, description - return self.create_page( - url, "Information related to Debian bug #%d" % bugnumber, - [P("The following issues reference to Debian bug ", - self.make_debian_bug(url, bugnumber), ":"), - make_table(gen(), - caption=("Name", "Urgency", "Description"))]) - - else: - return self.page_not_found(url, str(bugnumber)) + return self.create_page( + url, "Information related to Debian bug #%d" % bugnumber, + [P("The following issues reference to Debian bug ", + self.make_debian_bug(url, bugnumber), ":"), + make_table(gen(), + caption=("Name", "Urgency", "Description"))]) def page_not_found(self, url, query): return self.create_page(url, ''Not found'',