~launchpad-pqm/launchpad/devel

7675.887.17 by Paul Hummer
Added merge queue files
1
# Copyright 2009-2010 Canonical Ltd.  This software is licensed under the
2
# GNU Affero General Public License version 3 (see the file LICENSE).
3
7675.887.28 by Paul Hummer
Fixed some issues pre-review
4
"""Branch merge queue interfaces."""
7675.887.17 by Paul Hummer
Added merge queue files
5
6
__metaclass__ = type
7
8
__all__ = [
9
    'IBranchMergeQueue',
7675.887.23 by Paul Hummer
Added IBranchMergeQueueSource and accompanying tests
10
    'IBranchMergeQueueSource',
7675.906.5 by Ian Booth
Finish view and add unit tests
11
    'user_has_special_merge_queue_access',
7675.887.17 by Paul Hummer
Added merge queue files
12
    ]
13
7675.887.35 by Paul Hummer
Added first webservice test
14
from lazr.restful.declarations import (
15
    export_as_webservice_entry,
7675.887.42 by Paul Hummer
Exposed API for IBranchMergeQueue.branches
16
    export_write_operation,
7675.887.38 by Paul Hummer
Added tests for IBranchMergeQueue.registrant and IBranchMergeQueue.owner
17
    exported,
7675.887.42 by Paul Hummer
Exposed API for IBranchMergeQueue.branches
18
    mutator_for,
19
    operation_parameters,
7675.887.35 by Paul Hummer
Added first webservice test
20
    )
7675.887.25 by Paul Hummer
Added IBranch.branches attribute
21
from lazr.restful.fields import (
22
    CollectionField,
23
    Reference,
24
    )
7675.906.8 by Ian Booth
Code review fixes
25
from zope.component import getUtility
7675.887.17 by Paul Hummer
Added merge queue files
26
from zope.interface import Interface
27
from zope.schema import (
28
    Datetime,
29
    Int,
30
    Text,
31
    TextLine,
32
    )
33
14600.1.12 by Curtis Hovey
Move i18n to lp.
34
from lp import _
13130.1.6 by Curtis Hovey
Move ILaunchpadCelebrity to lp.app.
35
from lp.app.interfaces.launchpad import ILaunchpadCelebrities
7675.887.17 by Paul Hummer
Added merge queue files
36
from lp.services.fields import (
37
    PersonChoice,
7675.887.28 by Paul Hummer
Fixed some issues pre-review
38
    PublicPersonChoice,
7675.887.17 by Paul Hummer
Added merge queue files
39
    )
40
7675.887.28 by Paul Hummer
Fixed some issues pre-review
41
7675.887.17 by Paul Hummer
Added merge queue files
42
class IBranchMergeQueue(Interface):
7675.887.27 by Paul Hummer
Added IBranchMergeQueue.setMergeQueueConfig and tests
43
    """An interface for managing branch merges."""
7675.887.17 by Paul Hummer
Added merge queue files
44
7675.887.35 by Paul Hummer
Added first webservice test
45
    export_as_webservice_entry()
46
7675.887.17 by Paul Hummer
Added merge queue files
47
    id = Int(title=_('ID'), readonly=True, required=True)
48
7675.887.38 by Paul Hummer
Added tests for IBranchMergeQueue.registrant and IBranchMergeQueue.owner
49
    registrant = exported(
50
        PublicPersonChoice(
51
            title=_("The user that registered the branch."),
52
            required=True, readonly=True,
53
            vocabulary='ValidPersonOrTeam'))
7675.887.17 by Paul Hummer
Added merge queue files
54
7675.887.38 by Paul Hummer
Added tests for IBranchMergeQueue.registrant and IBranchMergeQueue.owner
55
    owner = exported(
56
        PersonChoice(
57
            title=_('Owner'),
58
            required=True, readonly=True,
59
            vocabulary='UserTeamsParticipationPlusSelf',
60
            description=_("The owner of the merge queue.")))
7675.887.17 by Paul Hummer
Added merge queue files
61
7675.887.39 by Paul Hummer
Exposed IBranchMergeQueue.name and IBranchMergeQueue.description
62
    name = exported(
63
        TextLine(
64
            title=_('Name'), required=True,
65
            description=_(
66
                "Keep very short, unique, and descriptive, because it will "
67
                "be used in URLs.  "
68
                "Examples: main, devel, release-1.0, gnome-vfs.")))
7675.887.17 by Paul Hummer
Added merge queue files
69
7675.887.39 by Paul Hummer
Exposed IBranchMergeQueue.name and IBranchMergeQueue.description
70
    description = exported(
71
        Text(
72
            title=_('Description'), required=False,
73
            description=_(
74
                'A short description of the purpose of this merge queue.')))
7675.887.17 by Paul Hummer
Added merge queue files
75
7675.887.40 by Paul Hummer
Exported IBranchMergeQueue.configuration and IBranchMergeQueue.date_created
76
    configuration = exported(
77
        TextLine(
7675.887.42 by Paul Hummer
Exposed API for IBranchMergeQueue.branches
78
            title=_('Configuration'), required=False, readonly=True,
7675.887.40 by Paul Hummer
Exported IBranchMergeQueue.configuration and IBranchMergeQueue.date_created
79
            description=_(
80
                "A JSON string of configuration values.")))
7675.887.17 by Paul Hummer
Added merge queue files
81
7675.887.40 by Paul Hummer
Exported IBranchMergeQueue.configuration and IBranchMergeQueue.date_created
82
    date_created = exported(
83
        Datetime(
84
            title=_('Date Created'),
85
            required=True,
86
            readonly=True))
7675.887.23 by Paul Hummer
Added IBranchMergeQueueSource and accompanying tests
87
7675.887.41 by Paul Hummer
Exposed IBranchMergeQueue.branches through the web api
88
    branches = exported(
89
        CollectionField(
90
            title=_('Dependent Branches'),
7675.887.45 by Paul Hummer
Fixed some lint
91
            description=_(
92
                'A collection of branches that this queue manages.'),
7675.887.41 by Paul Hummer
Exposed IBranchMergeQueue.branches through the web api
93
            readonly=True,
94
            value_type=Reference(Interface)))
7675.887.25 by Paul Hummer
Added IBranch.branches attribute
95
7675.887.42 by Paul Hummer
Exposed API for IBranchMergeQueue.branches
96
    @mutator_for(configuration)
97
    @operation_parameters(
98
        config=TextLine(title=_("A JSON string of configuration values.")))
99
    @export_write_operation()
7675.887.27 by Paul Hummer
Added IBranchMergeQueue.setMergeQueueConfig and tests
100
    def setMergeQueueConfig(config):
101
        """Set the JSON string configuration of the merge queue.
102
103
        :param config: A JSON string of configuration values.
104
        """
105
7675.887.23 by Paul Hummer
Added IBranchMergeQueueSource and accompanying tests
106
107
class IBranchMergeQueueSource(Interface):
108
109
    def new(name, owner, registrant, description, configuration, branches):
110
        """Create a new IBranchMergeQueue object.
111
112
        :param name: The name of the branch merge queue.
113
        :param description: A description of queue.
114
        :param configuration: A JSON string of configuration values.
115
        :param owner: The owner of the queue.
116
        :param registrant: The registrant of the queue.
117
        :param branches: A list of branches to add to the queue.
118
        """
7675.906.5 by Ian Booth
Finish view and add unit tests
119
120
121
def user_has_special_merge_queue_access(user):
122
    """Admins and bazaar experts have special access.
123
124
    :param user: A 'Person' or None.
125
    """
126
    if user is None:
127
        return False
128
    celebs = getUtility(ILaunchpadCelebrities)
13401.2.2 by Steve Kowalik
Kill all references to the celebrity.
129
    return user.inTeam(celebs.admin)