Merge lp://staging/~julian-edwards/launchpad/breadcrumbs-bug-423242 into lp://staging/launchpad

Proposed by Julian Edwards
Status: Merged
Merged at revision: not available
Proposed branch: lp://staging/~julian-edwards/launchpad/breadcrumbs-bug-423242
Merge into: lp://staging/launchpad
Diff against target: None lines
To merge this branch: bzr merge lp://staging/~julian-edwards/launchpad/breadcrumbs-bug-423242
Reviewer Review Type Date Requested Status
Celso Providelo (community) code Approve
Review via email: mp+11069@code.staging.launchpad.net
To post a comment you must log in.
Revision history for this message
Julian Edwards (julian-edwards) wrote :

= Summary =
Add breadcrumbs to DistroArchSeries and onwards traversals

== Pre-implementation notes ==
Salgado advised on how to do this, it's trivial to add and test.

== Implementation details ==
I added breadcrumbs for DistroArchSeries[BinaryPackage][Release] pages in 2
stages:
 * Add an adapter to the browser class
 * Register it in the zcml

== Tests ==
New tests added, run:
bin/test -vvt TestDistroArchSeriesBreadcrumb

== Demo and Q/A ==
See
https://launchpad.dev/ubuntu/hoary/i386
https://launchpad.dev/ubuntu/hoary/i386/pmount
https://launchpad.dev/ubuntu/hoary/i386/pmount/0.1-1

= Launchpad lint =

Checking for conflicts. and issues in doctests and templates.
Running jslint, xmllint, pyflakes, and pylint.
Using normal rules.

Linting changed files:
  lib/lp/soyuz/browser/tests/test_breadcrumbs.py
  lib/lp/soyuz/configure.zcml
  lib/lp/soyuz/browser/distroarchseriesbinarypackagerelease.py
  lib/lp/soyuz/browser/distroarchseriesbinarypackage.py
  lib/lp/soyuz/browser/distroarchseries.py

Revision history for this message
Celso Providelo (cprov) wrote :

Very good change, Julian.

review: Approve (code)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'lib/lp/soyuz/browser/distroarchseries.py'
--- lib/lp/soyuz/browser/distroarchseries.py 2009-08-21 19:45:35 +0000
+++ lib/lp/soyuz/browser/distroarchseries.py 2009-09-02 16:03:13 +0000
@@ -7,6 +7,7 @@
7 'DistroArchSeriesActionMenu',7 'DistroArchSeriesActionMenu',
8 'DistroArchSeriesAddView',8 'DistroArchSeriesAddView',
9 'DistroArchSeriesAdminView',9 'DistroArchSeriesAdminView',
10 'DistroArchSeriesBreadcrumb',
10 'DistroArchSeriesPackageSearchView',11 'DistroArchSeriesPackageSearchView',
11 'DistroArchSeriesNavigation',12 'DistroArchSeriesNavigation',
12 'DistroArchSeriesView',13 'DistroArchSeriesView',
@@ -20,6 +21,7 @@
20from lp.soyuz.interfaces.distroarchseries import IDistroArchSeries21from lp.soyuz.interfaces.distroarchseries import IDistroArchSeries
21from canonical.launchpad.webapp import (22from canonical.launchpad.webapp import (
22 GetitemNavigation, LaunchpadEditFormView)23 GetitemNavigation, LaunchpadEditFormView)
24from canonical.launchpad.webapp.breadcrumb import Breadcrumb
23from canonical.launchpad.webapp.launchpadform import (25from canonical.launchpad.webapp.launchpadform import (
24 action, LaunchpadFormView)26 action, LaunchpadFormView)
25from canonical.launchpad.webapp.menu import (27from canonical.launchpad.webapp.menu import (
@@ -33,6 +35,14 @@
33 usedfor = IDistroArchSeries35 usedfor = IDistroArchSeries
3436
3537
38class DistroArchSeriesBreadcrumb(Breadcrumb):
39 """Builds a breadcrumb for `DistroArchSeries`."""
40
41 @property
42 def text(self):
43 return self.context.architecturetag
44
45
36class IDistroArchSeriesActionMenu(Interface):46class IDistroArchSeriesActionMenu(Interface):
37 """Marker interface for the action menu."""47 """Marker interface for the action menu."""
3848
3949
=== modified file 'lib/lp/soyuz/browser/distroarchseriesbinarypackage.py'
--- lib/lp/soyuz/browser/distroarchseriesbinarypackage.py 2009-06-25 04:06:00 +0000
+++ lib/lp/soyuz/browser/distroarchseriesbinarypackage.py 2009-09-02 16:22:02 +0000
@@ -4,6 +4,7 @@
4__metaclass__ = type4__metaclass__ = type
55
6__all__ = [6__all__ = [
7 'DistroArchSeriesBinaryPackageBreadcrumb',
7 'DistroArchSeriesBinaryPackageNavigation',8 'DistroArchSeriesBinaryPackageNavigation',
8 'DistroArchSeriesBinaryPackageView',9 'DistroArchSeriesBinaryPackageView',
9 ]10 ]
@@ -11,6 +12,15 @@
11from lp.soyuz.interfaces.distroarchseriesbinarypackage import (12from lp.soyuz.interfaces.distroarchseriesbinarypackage import (
12 IDistroArchSeriesBinaryPackage)13 IDistroArchSeriesBinaryPackage)
13from canonical.launchpad.webapp import ApplicationMenu, GetitemNavigation14from canonical.launchpad.webapp import ApplicationMenu, GetitemNavigation
15from canonical.launchpad.webapp.breadcrumb import Breadcrumb
16
17
18class DistroArchSeriesBinaryPackageBreadcrumb(Breadcrumb):
19 """A breadcrumb for `DistroArchSeriesBinaryPackage`."""
20
21 @property
22 def text(self):
23 return self.context.name
1424
1525
16class DistroArchSeriesBinaryPackageOverviewMenu(ApplicationMenu):26class DistroArchSeriesBinaryPackageOverviewMenu(ApplicationMenu):
1727
=== modified file 'lib/lp/soyuz/browser/distroarchseriesbinarypackagerelease.py'
--- lib/lp/soyuz/browser/distroarchseriesbinarypackagerelease.py 2009-06-25 04:06:00 +0000
+++ lib/lp/soyuz/browser/distroarchseriesbinarypackagerelease.py 2009-09-02 16:30:48 +0000
@@ -4,6 +4,7 @@
4__metaclass__ = type4__metaclass__ = type
55
6__all__ = [6__all__ = [
7 'DistroArchSeriesBinaryPackageReleaseBreadcrumb',
7 'DistroArchSeriesBinaryPackageReleaseNavigation',8 'DistroArchSeriesBinaryPackageReleaseNavigation',
8 'DistroArchSeriesBinaryPackageReleaseView',9 'DistroArchSeriesBinaryPackageReleaseView',
9 ]10 ]
@@ -11,6 +12,15 @@
11from lp.soyuz.interfaces.distroarchseriesbinarypackagerelease import (12from lp.soyuz.interfaces.distroarchseriesbinarypackagerelease import (
12 IDistroArchSeriesBinaryPackageRelease)13 IDistroArchSeriesBinaryPackageRelease)
13from canonical.launchpad.webapp import ApplicationMenu, Navigation14from canonical.launchpad.webapp import ApplicationMenu, Navigation
15from canonical.launchpad.webapp.breadcrumb import Breadcrumb
16
17
18class DistroArchSeriesBinaryPackageReleaseBreadcrumb(Breadcrumb):
19 """A breadcrumb for `DistroArchSeriesBinaryPackageRelease`."""
20
21 @property
22 def text(self):
23 return self.context.version
1424
1525
16class DistroArchSeriesBinaryPackageReleaseOverviewMenu(ApplicationMenu):26class DistroArchSeriesBinaryPackageReleaseOverviewMenu(ApplicationMenu):
1727
=== added file 'lib/lp/soyuz/browser/tests/test_breadcrumbs.py'
--- lib/lp/soyuz/browser/tests/test_breadcrumbs.py 1970-01-01 00:00:00 +0000
+++ lib/lp/soyuz/browser/tests/test_breadcrumbs.py 2009-09-02 16:32:06 +0000
@@ -0,0 +1,59 @@
1# Copyright 2009 Canonical Ltd. This software is licensed under the
2# GNU Affero General Public License version 3 (see the file LICENSE).
3
4__metaclass__ = type
5
6import unittest
7
8from zope.component import getUtility
9
10from canonical.launchpad.webapp.publisher import canonical_url
11from canonical.launchpad.webapp.tests.breadcrumbs import (
12 BaseBreadcrumbTestCase)
13from lp.registry.interfaces.distribution import IDistributionSet
14
15
16class TestDistroArchSeriesBreadcrumb(BaseBreadcrumbTestCase):
17
18 def setUp(self):
19 super(TestDistroArchSeriesBreadcrumb, self).setUp()
20 self.ubuntu = getUtility(IDistributionSet).getByName('ubuntu')
21 self.hoary = self.ubuntu.getSeries('hoary')
22 self.hoary_i386 = self.hoary['i386']
23 self.traversed_objects = [
24 self.root, self.ubuntu, self.hoary, self.hoary_i386]
25
26 def test_distroarchseries(self):
27 das_url = canonical_url(self.hoary_i386)
28 urls = self._getBreadcrumbsURLs(das_url, self.traversed_objects)
29 texts = self._getBreadcrumbsTexts(das_url, self.traversed_objects)
30
31 self.assertEquals(urls[-1], das_url)
32 self.assertEquals(texts[-1], "i386")
33
34 def test_distroarchseriesbinarypackage(self):
35 pmount_hoary_i386 = self.hoary_i386.getBinaryPackage("pmount")
36 self.traversed_objects.append(pmount_hoary_i386)
37 pmount_url = canonical_url(pmount_hoary_i386)
38 urls = self._getBreadcrumbsURLs(pmount_url, self.traversed_objects)
39 texts = self._getBreadcrumbsTexts(pmount_url, self.traversed_objects)
40
41 self.assertEquals(urls[-1], pmount_url)
42 self.assertEquals(texts[-1], "pmount")
43
44 def test_distroarchseriesbinarypackagerelease(self):
45 pmount_hoary_i386 = self.hoary_i386.getBinaryPackage("pmount")
46 pmount_release = pmount_hoary_i386['0.1-1']
47 self.traversed_objects.extend([pmount_hoary_i386, pmount_release])
48 pmount_release_url = canonical_url(pmount_release)
49 urls = self._getBreadcrumbsURLs(
50 pmount_release_url, self.traversed_objects)
51 texts = self._getBreadcrumbsTexts(
52 pmount_release_url, self.traversed_objects)
53
54 self.assertEquals(urls[-1], pmount_release_url)
55 self.assertEquals(texts[-1], "0.1-1")
56
57
58def test_suite():
59 return unittest.TestLoader().loadTestsFromName(__name__)
060
=== modified file 'lib/lp/soyuz/configure.zcml'
--- lib/lp/soyuz/configure.zcml 2009-08-24 20:28:33 +0000
+++ lib/lp/soyuz/configure.zcml 2009-09-02 16:30:48 +0000
@@ -373,6 +373,12 @@
373 <allow373 <allow
374 interface="lp.soyuz.interfaces.processor.IProcessorFamilySet"/>374 interface="lp.soyuz.interfaces.processor.IProcessorFamilySet"/>
375 </securedutility>375 </securedutility>
376 <adapter
377 for="lp.soyuz.interfaces.distroarchseriesbinarypackagerelease.IDistroArchSeriesBinaryPackageRelease"
378 provides="canonical.launchpad.webapp.interfaces.IBreadcrumb"
379 factory="lp.soyuz.browser.distroarchseriesbinarypackagerelease.DistroArchSeriesBinaryPackageReleaseBreadcrumb"
380 permission="zope.Public" />
381
376382
377 <!-- Archive -->383 <!-- Archive -->
378384
@@ -572,6 +578,11 @@
572 <allow578 <allow
573 interface="lp.soyuz.interfaces.distroarchseriesbinarypackage.IDistroArchSeriesBinaryPackage"/>579 interface="lp.soyuz.interfaces.distroarchseriesbinarypackage.IDistroArchSeriesBinaryPackage"/>
574 </class>580 </class>
581 <adapter
582 for="lp.soyuz.interfaces.distroarchseriesbinarypackage.IDistroArchSeriesBinaryPackage"
583 provides="canonical.launchpad.webapp.interfaces.IBreadcrumb"
584 factory="lp.soyuz.browser.distroarchseriesbinarypackage.DistroArchSeriesBinaryPackageBreadcrumb"
585 permission="zope.Public" />
575586
576 <!-- PublishedPackage -->587 <!-- PublishedPackage -->
577588
@@ -678,6 +689,11 @@
678 permission="launchpad.Admin"689 permission="launchpad.Admin"
679 set_schema="lp.soyuz.interfaces.distroarchseries.IDistroArchSeries"/>690 set_schema="lp.soyuz.interfaces.distroarchseries.IDistroArchSeries"/>
680 </class>691 </class>
692 <adapter
693 for="lp.soyuz.interfaces.distroarchseries.IDistroArchSeries"
694 provides="canonical.launchpad.webapp.interfaces.IBreadcrumb"
695 factory="lp.soyuz.browser.distroarchseries.DistroArchSeriesBreadcrumb"
696 permission="zope.Public" />
681 </facet>697 </facet>
682698
683 <!-- DistroArchSeriesSet -->699 <!-- DistroArchSeriesSet -->