~launchpad-pqm/launchpad/devel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# Copyright 2009 Canonical Ltd.  This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).

__metaclass__ = type

__all__ = [
    'DistroSeriesSourcePackageReleaseNavigation',
    'DistroSeriesSourcePackageReleaseView',
    ]

from lazr.restful.utils import smartquote

from lp.services.webapp import (
    ApplicationMenu,
    LaunchpadView,
    Navigation,
    stepthrough,
    )
from lp.soyuz.interfaces.distroseriessourcepackagerelease import (
    IDistroSeriesSourcePackageRelease,
    )


class DistroSeriesSourcePackageReleaseOverviewMenu(ApplicationMenu):

    usedfor = IDistroSeriesSourcePackageRelease
    facet = 'overview'
    links = []


class DistroSeriesSourcePackageReleaseNavigation(Navigation):
    usedfor = IDistroSeriesSourcePackageRelease

    @stepthrough('+files')
    def traverse_files(self, name):
        """Traverse into a virtual +files subdirectory.

        This subdirectory is special in that it redirects filenames that
        match one of the SourcePackageRelease's files to the relevant
        librarian URL. This allows it to be used with dget, as suggested
        in https://bugs.launchpad.net/soyuz/+bug/130158
        """
        # If you are like me you'll ask yourself how it can be that we're
        # putting this traversal on IDistroSeriesSourcePackageRelease and
        # using it with sourcepackagerelease-files.pt. The reason is
        # that the canonical_url for SourcePackageRelease is actually an
        # IDistroSeriesSourcePackageRelease page. Weird.
        for file in self.context.files:
            if file.libraryfile.filename == name:
                return file.libraryfile
        return None


class DistroSeriesSourcePackageReleaseView(LaunchpadView):

    def __init__(self, context, request):
        self.context = context
        self.request = request

    @property
    def label(self):
        return smartquote(self.context.title)

    page_title = label