launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #01752
[Merge] lp:~thumper/launchpad/blueprint-enums into lp:launchpad/devel
Tim Penhey has proposed merging lp:~thumper/launchpad/blueprint-enums into lp:launchpad/devel.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
Move specification enums into lp.blueprints.enums.
--
https://code.launchpad.net/~thumper/launchpad/blueprint-enums/+merge/39726
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~thumper/launchpad/blueprint-enums into lp:launchpad/devel.
=== modified file 'lib/lp/blueprints/browser/specification.py'
--- lib/lp/blueprints/browser/specification.py 2010-08-24 10:45:57 +0000
+++ lib/lp/blueprints/browser/specification.py 2010-11-01 04:06:10 +0000
@@ -84,6 +84,7 @@
NavigationMenu,
)
from lp.blueprints.browser.specificationtarget import HasSpecificationsView
+from lp.blueprints.enums import SpecificationDefinitionStatus
from lp.blueprints.interfaces.specification import (
INewSpecification,
INewSpecificationProjectTarget,
@@ -92,7 +93,6 @@
INewSpecificationTarget,
ISpecification,
ISpecificationSet,
- SpecificationDefinitionStatus,
)
from lp.blueprints.interfaces.specificationbranch import ISpecificationBranch
from lp.blueprints.interfaces.sprintspecification import ISprintSpecification
=== modified file 'lib/lp/blueprints/browser/specificationgoal.py'
--- lib/lp/blueprints/browser/specificationgoal.py 2010-08-24 10:45:57 +0000
+++ lib/lp/blueprints/browser/specificationgoal.py 2010-11-01 04:06:10 +0000
@@ -18,7 +18,7 @@
)
from canonical.launchpad.webapp.interfaces import ILaunchBag
from lp.blueprints.browser.specificationtarget import HasSpecificationsView
-from lp.blueprints.interfaces.specification import SpecificationFilter
+from lp.blueprints.enums import SpecificationFilter
from lp.services.propertycache import cachedproperty
=== modified file 'lib/lp/blueprints/browser/specificationtarget.py'
--- lib/lp/blueprints/browser/specificationtarget.py 2010-09-17 14:04:29 +0000
+++ lib/lp/blueprints/browser/specificationtarget.py 2010-11-01 04:06:10 +0000
@@ -42,7 +42,7 @@
)
from lp.app.enums import service_uses_launchpad
from lp.app.interfaces.launchpad import IServiceUsage
-from lp.blueprints.interfaces.specification import (
+from lp.blueprints.enums import (
SpecificationFilter,
SpecificationSort,
)
=== modified file 'lib/lp/blueprints/browser/sprint.py'
--- lib/lp/blueprints/browser/sprint.py 2010-08-24 10:45:57 +0000
+++ lib/lp/blueprints/browser/sprint.py 2010-11-01 04:06:10 +0000
@@ -55,7 +55,7 @@
HasSpecificationsMenuMixin,
HasSpecificationsView,
)
-from lp.blueprints.interfaces.specification import (
+from lp.blueprints.enums import (
SpecificationDefinitionStatus,
SpecificationFilter,
SpecificationPriority,
=== modified file 'lib/lp/blueprints/doc/specification.txt'
--- lib/lp/blueprints/doc/specification.txt 2010-10-18 22:24:59 +0000
+++ lib/lp/blueprints/doc/specification.txt 2010-11-01 04:06:10 +0000
@@ -10,9 +10,10 @@
IMilestoneSet can be accessed as a utility.
>>> from zope.component import getUtility
- >>> from lp.blueprints.interfaces.specification import (
- ... ISpecificationSet, SpecificationDefinitionStatus,
+ >>> from lp.blueprints.enums import (
+ ... SpecificationDefinitionStatus,
... SpecificationImplementationStatus, SpecificationPriority)
+ >>> from lp.blueprints.interfaces.specification import ISpecificationSet
>>> specset = getUtility(ISpecificationSet)
To create a new Specification, use ISpecificationSet.new:
=== modified file 'lib/lp/blueprints/doc/sprint.txt'
--- lib/lp/blueprints/doc/sprint.txt 2010-10-18 22:24:59 +0000
+++ lib/lp/blueprints/doc/sprint.txt 2010-11-01 04:06:10 +0000
@@ -77,8 +77,7 @@
the specs related to the Ubuntu "futurista" sprint to "proposed", and
then check the coming sprints and all sprints.
- >>> from lp.blueprints.interfaces.sprintspecification import (
- ... SprintSpecificationStatus)
+ >>> from lp.blueprints.enums import SprintSpecificationStatus
We're directly using the database classes here, bypassing the security
proxies because this is just set-up for the next step, it's not the
@@ -114,7 +113,7 @@
>>> ubz = sprintset["ubz"]
- >>> from lp.blueprints.interfaces.specification import SpecificationFilter
+ >>> from lp.blueprints.enums import SpecificationFilter
First, there should be no informational specs for ubz:
=== added file 'lib/lp/blueprints/enums.py'
--- lib/lp/blueprints/enums.py 1970-01-01 00:00:00 +0000
+++ lib/lp/blueprints/enums.py 2010-11-01 04:06:10 +0000
@@ -0,0 +1,495 @@
+# Copyright 2010 Canonical Ltd. This software is licensed under the
+# GNU Affero General Public License version 3 (see the file LICENSE).
+
+"""Enumerations used in the lp/blueprints modules."""
+
+__metaclass__ = type
+__all__ = [
+ 'SpecificationDefinitionStatus',
+ 'SpecificationFilter',
+ 'SpecificationGoalStatus',
+ 'SpecificationImplementationStatus',
+ 'SpecificationLifecycleStatus',
+ 'SpecificationPriority',
+ 'SpecificationSort',
+ 'SprintSpecificationStatus',
+ ]
+
+
+from lazr.enum import (
+ DBEnumeratedType,
+ DBItem,
+ EnumeratedType,
+ Item,
+ )
+
+
+class SpecificationImplementationStatus(DBEnumeratedType):
+ """The Specification Delivery Status
+
+ This tracks the implementation or delivery of the feature being
+ specified. The status values indicate the progress that is being made
+ in the actual coding or configuration that is needed to realise the
+ feature.
+
+ Note that some of the states associated with this schema correlate
+ to a "not started" definition. See Specification.started_clause for
+ further information, and make sure that it is updated (together with
+ the relevant database checks) if additional states are added that
+ are also "not started".
+ """
+ # The `UNKNOWN` state is considered "not started"
+ UNKNOWN = DBItem(0, """
+ Unknown
+
+ We have no information on the implementation of this feature.
+ """)
+
+ # The `NOTSTARTED` state is considered "not started"
+ NOTSTARTED = DBItem(5, """
+ Not started
+
+ No work has yet been done on the implementation of this feature.
+ """)
+
+ # The `DEFERRED` state is considered "not started"
+ DEFERRED = DBItem(10, """
+ Deferred
+
+ There is no chance that this feature will actually be delivered in
+ the targeted release. The specification has effectively been
+ deferred to a later date of implementation.
+ """)
+
+ NEEDSINFRASTRUCTURE = DBItem(40, """
+ Needs Infrastructure
+
+ Work cannot proceed, because the feature depends on
+ infrastructure (servers, databases, connectivity, system
+ administration work) that has not been supplied.
+ """)
+
+ BLOCKED = DBItem(50, """
+ Blocked
+
+ Work cannot proceed on this specification because it depends on
+ a separate feature that has not yet been implemented.
+ (The specification for that feature should be listed as a blocker of
+ this one.)
+ """)
+
+ STARTED = DBItem(60, """
+ Started
+
+ Work has begun, but has not yet been published
+ except as informal branches or patches. No indication is given as to
+ whether or not this work will be completed for the targeted release.
+ """)
+
+ SLOW = DBItem(65, """
+ Slow progress
+
+ Work has been slow on this item, and it has a high risk of not being
+ delivered on time. Help is wanted with the implementation.
+ """)
+
+ GOOD = DBItem(70, """
+ Good progress
+
+ The feature is considered on track for delivery in the targeted
+ release.
+ """)
+
+ BETA = DBItem(75, """
+ Beta Available
+
+ A beta version, implementing substantially all of the feature,
+ has been published for widespread testing in personal package
+ archives or a personal release. The code is not yet in the
+ main archive or mainline branch. Testing and feedback are solicited.
+ """)
+
+ NEEDSREVIEW = DBItem(80, """
+ Needs Code Review
+
+ The developer is satisfied that the feature has been well
+ implemented. It is now ready for review and final sign-off,
+ after which it will be marked implemented or deployed.
+ """)
+
+ AWAITINGDEPLOYMENT = DBItem(85, """
+ Deployment
+
+ The implementation has been done, and can be deployed in the
+ production environment, but this has not yet been done by the system
+ administrators. (This status is typically used for Web services where
+ code is not released but instead is pushed into production.
+ """)
+
+ IMPLEMENTED = DBItem(90, """
+ Implemented
+
+ This functionality has been delivered for the targeted release, the
+ code has been uploaded to the main archives or committed to the
+ targeted product series, and no further work is necessary.
+ """)
+
+ INFORMATIONAL = DBItem(95, """
+ Informational
+
+ This specification is informational, and does not require
+ any implementation.
+ """)
+
+
+class SpecificationLifecycleStatus(DBEnumeratedType):
+ """The current "lifecycle" status of a specification.
+
+ Specs go from NOTSTARTED, to STARTED, to COMPLETE.
+ """
+
+ NOTSTARTED = DBItem(10, """
+ Not started
+
+ No work has yet been done on this feature.
+ """)
+
+ STARTED = DBItem(20, """
+ Started
+
+ This feature is under active development.
+ """)
+
+ COMPLETE = DBItem(30, """
+ Complete
+
+ This feature has been marked "complete" because no further work is
+ expected. Either the feature is done, or it has been abandoned.
+ """)
+
+
+class SpecificationPriority(DBEnumeratedType):
+ """The Priority with a Specification must be implemented.
+
+ This enum is used to prioritize work.
+ """
+
+ NOTFORUS = DBItem(0, """
+ Not
+
+ This feature has been proposed but the project leaders have decided
+ that it is not appropriate for inclusion in the mainline codebase.
+ See the status whiteboard or the
+ specification itself for the rationale for this decision. Of course,
+ you are welcome to implement it in any event and publish that work
+ for consideration by the community and end users, but it is unlikely
+ to be accepted by the mainline developers.
+ """)
+
+ UNDEFINED = DBItem(5, """
+ Undefined
+
+ This feature has recently been proposed and has not yet been
+ evaluated and prioritized by the project leaders.
+ """)
+
+ LOW = DBItem(10, """
+ Low
+
+ We would like to have it in the
+ code, but it's not on any critical path and is likely to get bumped
+ in favour of higher-priority work. The idea behind the specification
+ is sound and the project leaders would incorporate this
+ functionality if the work was done. In general, "low" priority
+ specifications will not get core resources assigned to them.
+ """)
+
+ MEDIUM = DBItem(50, """
+ Medium
+
+ The project developers will definitely get to this feature,
+ but perhaps not in the next major release or two.
+ """)
+
+ HIGH = DBItem(70, """
+ High
+
+ Strongly desired by the project leaders.
+ The feature will definitely get review time, and contributions would
+ be most effective if directed at a feature with this priority.
+ """)
+
+ ESSENTIAL = DBItem(90, """
+ Essential
+
+ The specification is essential for the next release, and should be
+ the focus of current development. Use this state only for the most
+ important of all features.
+ """)
+
+
+class SpecificationFilter(DBEnumeratedType):
+ """The kinds of specifications that a listing should include.
+
+ This is used by browser classes that are generating a list of
+ specifications for a person, or product, or project, to indicate what
+ kinds of specs they want returned. The different filters can be OR'ed so
+ that multiple pieces of information can be used for the filter.
+ """
+ ALL = DBItem(0, """
+ All
+
+ This indicates that the list should simply include ALL
+ specifications for the underlying object (person, product etc).
+ """)
+
+ COMPLETE = DBItem(5, """
+ Complete
+
+ This indicates that the list should include only the complete
+ specifications for this object.
+ """)
+
+ INCOMPLETE = DBItem(10, """
+ Incomplete
+
+ This indicates that the list should include the incomplete items
+ only. The rules for determining if a specification is incomplete are
+ complex, depending on whether or not the spec is informational.
+ """)
+
+ INFORMATIONAL = DBItem(20, """
+ Informational
+
+ This indicates that the list should include only the informational
+ specifications.
+ """)
+
+ PROPOSED = DBItem(30, """
+ Proposed
+
+ This indicates that the list should include specifications that have
+ been proposed as goals for the underlying objects, but not yet
+ accepted or declined.
+ """)
+
+ DECLINED = DBItem(40, """
+ Declined
+
+ This indicates that the list should include specifications that were
+ declined as goals for the underlying productseries or distroseries.
+ """)
+
+ ACCEPTED = DBItem(50, """
+ Accepted
+
+ This indicates that the list should include specifications that were
+ accepted as goals for the underlying productseries or distroseries.
+ """)
+
+ VALID = DBItem(55, """
+ Valid
+
+ This indicates that the list should include specifications that are
+ not obsolete or superseded.
+ """)
+
+ CREATOR = DBItem(60, """
+ Creator
+
+ This indicates that the list should include specifications that the
+ person registered in Launchpad.
+ """)
+
+ ASSIGNEE = DBItem(70, """
+ Assignee
+
+ This indicates that the list should include specifications that the
+ person has been assigned to implement.
+ """)
+
+ APPROVER = DBItem(80, """
+ Approver
+
+ This indicates that the list should include specifications that the
+ person is supposed to review and approve.
+ """)
+
+ DRAFTER = DBItem(90, """
+ Drafter
+
+ This indicates that the list should include specifications that the
+ person is supposed to draft. The drafter is usually only needed
+ during spec sprints when there's a bottleneck on guys who are
+ assignees for many specs.
+ """)
+
+ SUBSCRIBER = DBItem(100, """
+ Subscriber
+
+ This indicates that the list should include all the specifications
+ to which the person has subscribed.
+ """)
+
+ FEEDBACK = DBItem(110, """
+ Feedback
+
+ This indicates that the list should include all the specifications
+ which the person has been asked to provide specific feedback on.
+ """)
+
+
+class SpecificationSort(EnumeratedType):
+ """The scheme to sort the results of a specifications query.
+
+ This is usually used in interfaces which ask for a filtered list of
+ specifications, so that you can tell which specifications you would
+ expect to see first.
+ """
+ DATE = Item("""
+ Date
+
+ This indicates a preferred sort order of date of creation, newest
+ first.
+ """)
+
+ PRIORITY = Item("""
+ Priority
+
+ This indicates a preferred sort order of priority (highest first)
+ followed by status. This is the default sort order when retrieving
+ specifications from the system.
+ """)
+
+
+class SpecificationDefinitionStatus(DBEnumeratedType):
+ """The current status of a Specification.
+
+ This enum tells us whether or not a specification is approved, or still
+ being drafted, or implemented, or obsolete in some way. The ordinality
+ of the values is important, it's the order (lowest to highest) in which
+ we probably want them displayed by default.
+ """
+
+ APPROVED = DBItem(10, """
+ Approved
+
+ The project team believe that the specification is ready to be
+ implemented, without substantial issues being encountered.
+ """)
+
+ PENDINGAPPROVAL = DBItem(15, """
+ Pending Approval
+
+ Reviewed and considered ready for final approval.
+ The reviewer believes the specification is clearly written,
+ and adequately addresses all important issues that will
+ be raised during implementation.
+ """)
+
+ PENDINGREVIEW = DBItem(20, """
+ Review
+
+ Has been put in a reviewer's queue. The reviewer will
+ assess it for clarity and comprehensiveness, and decide
+ whether further work is needed before the spec can be considered for
+ actual approval.
+ """)
+
+ DRAFT = DBItem(30, """
+ Drafting
+
+ The specification is actively being drafted, with a drafter in place
+ and frequent revision occurring.
+ Do not park specs in the "drafting" state indefinitely.
+ """)
+
+ DISCUSSION = DBItem(35, """
+ Discussion
+
+ Still needs active discussion, at a sprint for example.
+ """)
+
+ NEW = DBItem(40, """
+ New
+
+ No thought has yet been given to implementation strategy,
+ dependencies, or presentation/UI issues.
+ """)
+
+ SUPERSEDED = DBItem(60, """
+ Superseded
+
+ Still interesting, but superseded by a newer spec or set of specs that
+ clarify or describe a newer way to implement the desired feature.
+ Please use the newer specs and not this one.
+ """)
+
+ OBSOLETE = DBItem(70, """
+ Obsolete
+
+ The specification has been obsoleted, probably because it was decided
+ against. People should not put any effort into implementing it.
+ """)
+
+
+class SpecificationGoalStatus(DBEnumeratedType):
+ """The target status for this specification.
+
+ This enum allows us to show whether or not the specification has been
+ approved or declined as a target for the given productseries or
+ distroseries.
+ """
+
+ ACCEPTED = DBItem(10, """
+ Accepted
+
+ The drivers have confirmed that this specification is targeted to
+ the stated distribution release or product series.
+ """)
+
+ DECLINED = DBItem(20, """
+ Declined
+
+ The drivers have decided not to accept this specification as a goal
+ for the stated distribution release or product series.
+ """)
+
+ PROPOSED = DBItem(30, """
+ Proposed
+
+ This spec has been submitted as a potential goal for the stated
+ product series or distribution release, but the drivers have not yet
+ accepted or declined that goal.
+ """)
+
+
+class SprintSpecificationStatus(DBEnumeratedType):
+ """The current approval status of the spec on this sprint's agenda.
+
+ This enum allows us to know whether or not the meeting admin team has
+ agreed to discuss an item.
+ """
+
+ ACCEPTED = DBItem(10, """
+ Accepted
+
+ The meeting organisers have confirmed this topic for the meeting
+ agenda.
+ """)
+
+ DECLINED = DBItem(20, """
+ Declined
+
+ This spec has been declined from the meeting agenda
+ because of a lack of available resources, or uncertainty over
+ the specific requirements or outcome desired.
+ """)
+
+ PROPOSED = DBItem(30, """
+ Proposed
+
+ This spec has been submitted for consideration by the meeting
+ organisers. It has not yet been accepted or declined for the
+ agenda.
+ """)
=== modified file 'lib/lp/blueprints/interfaces/specification.py'
--- lib/lp/blueprints/interfaces/specification.py 2010-10-03 15:30:06 +0000
+++ lib/lp/blueprints/interfaces/specification.py 2010-11-01 04:06:10 +0000
@@ -16,22 +16,9 @@
'ISpecification',
'ISpecificationSet',
'ISpecificationDelta',
- 'SpecificationDefinitionStatus',
- 'SpecificationFilter',
- 'SpecificationGoalStatus',
- 'SpecificationImplementationStatus',
- 'SpecificationLifecycleStatus',
- 'SpecificationPriority',
- 'SpecificationSort',
]
-from lazr.enum import (
- DBEnumeratedType,
- DBItem,
- EnumeratedType,
- Item,
- )
from lazr.restful.declarations import export_as_webservice_entry
from zope.component import getUtility
from zope.interface import (
@@ -50,6 +37,12 @@
from canonical.launchpad import _
from canonical.launchpad.interfaces.validation import valid_webref
from canonical.launchpad.validators import LaunchpadValidationError
+from lp.blueprints.enums import (
+ SpecificationDefinitionStatus,
+ SpecificationGoalStatus,
+ SpecificationImplementationStatus,
+ SpecificationPriority,
+ )
from lp.blueprints.interfaces.specificationtarget import IHasSpecifications
from lp.blueprints.interfaces.sprint import ISprint
from lp.code.interfaces.branchlink import IHasLinkedBranches
@@ -64,446 +57,6 @@
)
-class SpecificationImplementationStatus(DBEnumeratedType):
- """The Specification Delivery Status
-
- This tracks the implementation or delivery of the feature being
- specified. The status values indicate the progress that is being made
- in the actual coding or configuration that is needed to realise the
- feature.
-
- Note that some of the states associated with this schema correlate
- to a "not started" definition. See Specification.started_clause for
- further information, and make sure that it is updated (together with
- the relevant database checks) if additional states are added that
- are also "not started".
- """
- # The `UNKNOWN` state is considered "not started"
- UNKNOWN = DBItem(0, """
- Unknown
-
- We have no information on the implementation of this feature.
- """)
-
- # The `NOTSTARTED` state is considered "not started"
- NOTSTARTED = DBItem(5, """
- Not started
-
- No work has yet been done on the implementation of this feature.
- """)
-
- # The `DEFERRED` state is considered "not started"
- DEFERRED = DBItem(10, """
- Deferred
-
- There is no chance that this feature will actually be delivered in
- the targeted release. The specification has effectively been
- deferred to a later date of implementation.
- """)
-
- NEEDSINFRASTRUCTURE = DBItem(40, """
- Needs Infrastructure
-
- Work cannot proceed, because the feature depends on
- infrastructure (servers, databases, connectivity, system
- administration work) that has not been supplied.
- """)
-
- BLOCKED = DBItem(50, """
- Blocked
-
- Work cannot proceed on this specification because it depends on
- a separate feature that has not yet been implemented.
- (The specification for that feature should be listed as a blocker of
- this one.)
- """)
-
- STARTED = DBItem(60, """
- Started
-
- Work has begun, but has not yet been published
- except as informal branches or patches. No indication is given as to
- whether or not this work will be completed for the targeted release.
- """)
-
- SLOW = DBItem(65, """
- Slow progress
-
- Work has been slow on this item, and it has a high risk of not being
- delivered on time. Help is wanted with the implementation.
- """)
-
- GOOD = DBItem(70, """
- Good progress
-
- The feature is considered on track for delivery in the targeted
- release.
- """)
-
- BETA = DBItem(75, """
- Beta Available
-
- A beta version, implementing substantially all of the feature,
- has been published for widespread testing in personal package
- archives or a personal release. The code is not yet in the
- main archive or mainline branch. Testing and feedback are solicited.
- """)
-
- NEEDSREVIEW = DBItem(80, """
- Needs Code Review
-
- The developer is satisfied that the feature has been well
- implemented. It is now ready for review and final sign-off,
- after which it will be marked implemented or deployed.
- """)
-
- AWAITINGDEPLOYMENT = DBItem(85, """
- Deployment
-
- The implementation has been done, and can be deployed in the
- production environment, but this has not yet been done by the system
- administrators. (This status is typically used for Web services where
- code is not released but instead is pushed into production.
- """)
-
- IMPLEMENTED = DBItem(90, """
- Implemented
-
- This functionality has been delivered for the targeted release, the
- code has been uploaded to the main archives or committed to the
- targeted product series, and no further work is necessary.
- """)
-
- INFORMATIONAL = DBItem(95, """
- Informational
-
- This specification is informational, and does not require
- any implementation.
- """)
-
-
-class SpecificationLifecycleStatus(DBEnumeratedType):
- """The current "lifecycle" status of a specification.
-
- Specs go from NOTSTARTED, to STARTED, to COMPLETE.
- """
-
- NOTSTARTED = DBItem(10, """
- Not started
-
- No work has yet been done on this feature.
- """)
-
- STARTED = DBItem(20, """
- Started
-
- This feature is under active development.
- """)
-
- COMPLETE = DBItem(30, """
- Complete
-
- This feature has been marked "complete" because no further work is
- expected. Either the feature is done, or it has been abandoned.
- """)
-
-
-class SpecificationPriority(DBEnumeratedType):
- """The Priority with a Specification must be implemented.
-
- This enum is used to prioritize work.
- """
-
- NOTFORUS = DBItem(0, """
- Not
-
- This feature has been proposed but the project leaders have decided
- that it is not appropriate for inclusion in the mainline codebase.
- See the status whiteboard or the
- specification itself for the rationale for this decision. Of course,
- you are welcome to implement it in any event and publish that work
- for consideration by the community and end users, but it is unlikely
- to be accepted by the mainline developers.
- """)
-
- UNDEFINED = DBItem(5, """
- Undefined
-
- This feature has recently been proposed and has not yet been
- evaluated and prioritized by the project leaders.
- """)
-
- LOW = DBItem(10, """
- Low
-
- We would like to have it in the
- code, but it's not on any critical path and is likely to get bumped
- in favour of higher-priority work. The idea behind the specification
- is sound and the project leaders would incorporate this
- functionality if the work was done. In general, "low" priority
- specifications will not get core resources assigned to them.
- """)
-
- MEDIUM = DBItem(50, """
- Medium
-
- The project developers will definitely get to this feature,
- but perhaps not in the next major release or two.
- """)
-
- HIGH = DBItem(70, """
- High
-
- Strongly desired by the project leaders.
- The feature will definitely get review time, and contributions would
- be most effective if directed at a feature with this priority.
- """)
-
- ESSENTIAL = DBItem(90, """
- Essential
-
- The specification is essential for the next release, and should be
- the focus of current development. Use this state only for the most
- important of all features.
- """)
-
-
-class SpecificationFilter(DBEnumeratedType):
- """The kinds of specifications that a listing should include.
-
- This is used by browser classes that are generating a list of
- specifications for a person, or product, or project, to indicate what
- kinds of specs they want returned. The different filters can be OR'ed so
- that multiple pieces of information can be used for the filter.
- """
- ALL = DBItem(0, """
- All
-
- This indicates that the list should simply include ALL
- specifications for the underlying object (person, product etc).
- """)
-
- COMPLETE = DBItem(5, """
- Complete
-
- This indicates that the list should include only the complete
- specifications for this object.
- """)
-
- INCOMPLETE = DBItem(10, """
- Incomplete
-
- This indicates that the list should include the incomplete items
- only. The rules for determining if a specification is incomplete are
- complex, depending on whether or not the spec is informational.
- """)
-
- INFORMATIONAL = DBItem(20, """
- Informational
-
- This indicates that the list should include only the informational
- specifications.
- """)
-
- PROPOSED = DBItem(30, """
- Proposed
-
- This indicates that the list should include specifications that have
- been proposed as goals for the underlying objects, but not yet
- accepted or declined.
- """)
-
- DECLINED = DBItem(40, """
- Declined
-
- This indicates that the list should include specifications that were
- declined as goals for the underlying productseries or distroseries.
- """)
-
- ACCEPTED = DBItem(50, """
- Accepted
-
- This indicates that the list should include specifications that were
- accepted as goals for the underlying productseries or distroseries.
- """)
-
- VALID = DBItem(55, """
- Valid
-
- This indicates that the list should include specifications that are
- not obsolete or superseded.
- """)
-
- CREATOR = DBItem(60, """
- Creator
-
- This indicates that the list should include specifications that the
- person registered in Launchpad.
- """)
-
- ASSIGNEE = DBItem(70, """
- Assignee
-
- This indicates that the list should include specifications that the
- person has been assigned to implement.
- """)
-
- APPROVER = DBItem(80, """
- Approver
-
- This indicates that the list should include specifications that the
- person is supposed to review and approve.
- """)
-
- DRAFTER = DBItem(90, """
- Drafter
-
- This indicates that the list should include specifications that the
- person is supposed to draft. The drafter is usually only needed
- during spec sprints when there's a bottleneck on guys who are
- assignees for many specs.
- """)
-
- SUBSCRIBER = DBItem(100, """
- Subscriber
-
- This indicates that the list should include all the specifications
- to which the person has subscribed.
- """)
-
- FEEDBACK = DBItem(110, """
- Feedback
-
- This indicates that the list should include all the specifications
- which the person has been asked to provide specific feedback on.
- """)
-
-
-class SpecificationSort(EnumeratedType):
- """The scheme to sort the results of a specifications query.
-
- This is usually used in interfaces which ask for a filtered list of
- specifications, so that you can tell which specifications you would
- expect to see first.
- """
- DATE = Item("""
- Date
-
- This indicates a preferred sort order of date of creation, newest
- first.
- """)
-
- PRIORITY = Item("""
- Priority
-
- This indicates a preferred sort order of priority (highest first)
- followed by status. This is the default sort order when retrieving
- specifications from the system.
- """)
-
-
-class SpecificationDefinitionStatus(DBEnumeratedType):
- """The current status of a Specification.
-
- This enum tells us whether or not a specification is approved, or still
- being drafted, or implemented, or obsolete in some way. The ordinality
- of the values is important, it's the order (lowest to highest) in which
- we probably want them displayed by default.
- """
-
- APPROVED = DBItem(10, """
- Approved
-
- The project team believe that the specification is ready to be
- implemented, without substantial issues being encountered.
- """)
-
- PENDINGAPPROVAL = DBItem(15, """
- Pending Approval
-
- Reviewed and considered ready for final approval.
- The reviewer believes the specification is clearly written,
- and adequately addresses all important issues that will
- be raised during implementation.
- """)
-
- PENDINGREVIEW = DBItem(20, """
- Review
-
- Has been put in a reviewer's queue. The reviewer will
- assess it for clarity and comprehensiveness, and decide
- whether further work is needed before the spec can be considered for
- actual approval.
- """)
-
- DRAFT = DBItem(30, """
- Drafting
-
- The specification is actively being drafted, with a drafter in place
- and frequent revision occurring.
- Do not park specs in the "drafting" state indefinitely.
- """)
-
- DISCUSSION = DBItem(35, """
- Discussion
-
- Still needs active discussion, at a sprint for example.
- """)
-
- NEW = DBItem(40, """
- New
-
- No thought has yet been given to implementation strategy,
- dependencies, or presentation/UI issues.
- """)
-
- SUPERSEDED = DBItem(60, """
- Superseded
-
- Still interesting, but superseded by a newer spec or set of specs that
- clarify or describe a newer way to implement the desired feature.
- Please use the newer specs and not this one.
- """)
-
- OBSOLETE = DBItem(70, """
- Obsolete
-
- The specification has been obsoleted, probably because it was decided
- against. People should not put any effort into implementing it.
- """)
-
-
-class SpecificationGoalStatus(DBEnumeratedType):
- """The target status for this specification.
-
- This enum allows us to show whether or not the specification has been
- approved or declined as a target for the given productseries or
- distroseries.
- """
-
- ACCEPTED = DBItem(10, """
- Accepted
-
- The drivers have confirmed that this specification is targeted to
- the stated distribution release or product series.
- """)
-
- DECLINED = DBItem(20, """
- Declined
-
- The drivers have decided not to accept this specification as a goal
- for the stated distribution release or product series.
- """)
-
- PROPOSED = DBItem(30, """
- Proposed
-
- This spec has been submitted as a potential goal for the stated
- product series or distribution release, but the drivers have not yet
- accepted or declined that goal.
- """)
-
-
class SpecNameField(ContentNameField):
errormessage = _("%s is already in use by another blueprint.")
=== modified file 'lib/lp/blueprints/interfaces/sprintspecification.py'
--- lib/lp/blueprints/interfaces/sprintspecification.py 2010-08-20 20:31:18 +0000
+++ lib/lp/blueprints/interfaces/sprintspecification.py 2010-11-01 04:06:10 +0000
@@ -9,25 +9,13 @@
__all__ = [
'ISprintSpecification',
- 'SprintSpecificationStatus'
]
-from lazr.enum import (
- DBEnumeratedType,
- DBItem,
- )
-from zope.interface import (
- Attribute,
- Interface,
- )
-from zope.schema import (
- Choice,
- Datetime,
- Int,
- Text,
- )
+from zope.interface import Attribute, Interface
+from zope.schema import Choice, Datetime, Int, Text
from canonical.launchpad import _
+from lp.blueprints.enums import SprintSpecificationStatus
from lp.services.fields import PublicPersonChoice
@@ -50,7 +38,7 @@
title=_('Specification'), required=True, readonly=True)
status = Choice(
title=_('Agenda Status'), required=True,
- vocabulary='SprintSpecificationStatus')
+ vocabulary=SprintSpecificationStatus)
whiteboard = Text(
title=_('Whiteboard'), required=False,
description=_(
@@ -85,34 +73,3 @@
def declineBy(decider):
"""Flag the sprint as being declined by the decider."""
-
-
-class SprintSpecificationStatus(DBEnumeratedType):
- """The current approval status of the spec on this sprint's agenda.
-
- This enum allows us to know whether or not the meeting admin team has
- agreed to discuss an item.
- """
-
- ACCEPTED = DBItem(10, """
- Accepted
-
- The meeting organisers have confirmed this topic for the meeting
- agenda.
- """)
-
- DECLINED = DBItem(20, """
- Declined
-
- This spec has been declined from the meeting agenda
- because of a lack of available resources, or uncertainty over
- the specific requirements or outcome desired.
- """)
-
- PROPOSED = DBItem(30, """
- Proposed
-
- This spec has been submitted for consideration by the meeting
- organisers. It has not yet been accepted or declined for the
- agenda.
- """)
=== modified file 'lib/lp/blueprints/model/specification.py'
--- lib/lp/blueprints/model/specification.py 2010-10-03 15:30:06 +0000
+++ lib/lp/blueprints/model/specification.py 2010-11-01 04:06:10 +0000
@@ -56,9 +56,7 @@
shortlist,
)
from lp.blueprints.adapters import SpecificationDelta
-from lp.blueprints.interfaces.specification import (
- ISpecification,
- ISpecificationSet,
+from lp.blueprints.enums import (
SpecificationDefinitionStatus,
SpecificationFilter,
SpecificationGoalStatus,
@@ -67,6 +65,10 @@
SpecificationPriority,
SpecificationSort,
)
+from lp.blueprints.interfaces.specification import (
+ ISpecification,
+ ISpecificationSet,
+ )
from lp.blueprints.model.specificationbranch import SpecificationBranch
from lp.blueprints.model.specificationbug import SpecificationBug
from lp.blueprints.model.specificationdependency import (
=== modified file 'lib/lp/blueprints/model/sprint.py'
--- lib/lp/blueprints/model/sprint.py 2010-08-20 20:31:18 +0000
+++ lib/lp/blueprints/model/sprint.py 2010-11-01 04:06:10 +0000
@@ -32,18 +32,16 @@
IHasMugshot,
ILaunchpadCelebrities,
)
-from lp.blueprints.interfaces.specification import (
+from lp.blueprints.enums import (
SpecificationFilter,
SpecificationImplementationStatus,
SpecificationSort,
+ SprintSpecificationStatus,
)
from lp.blueprints.interfaces.sprint import (
ISprint,
ISprintSet,
)
-from lp.blueprints.interfaces.sprintspecification import (
- SprintSpecificationStatus,
- )
from lp.blueprints.model.sprintattendance import SprintAttendance
from lp.blueprints.model.sprintspecification import SprintSpecification
from lp.registry.interfaces.person import validate_public_person
=== modified file 'lib/lp/blueprints/model/sprintspecification.py'
--- lib/lp/blueprints/model/sprintspecification.py 2010-08-20 20:31:18 +0000
+++ lib/lp/blueprints/model/sprintspecification.py 2010-11-01 04:06:10 +0000
@@ -20,10 +20,8 @@
from canonical.database.datetimecol import UtcDateTimeCol
from canonical.database.enumcol import EnumCol
from canonical.database.sqlbase import SQLBase
-from lp.blueprints.interfaces.sprintspecification import (
- ISprintSpecification,
- SprintSpecificationStatus,
- )
+from lp.blueprints.enums import SprintSpecificationStatus
+from lp.blueprints.interfaces.sprintspecification import ISprintSpecification
from lp.registry.interfaces.person import validate_public_person
=== modified file 'lib/lp/blueprints/subscribers.py'
--- lib/lp/blueprints/subscribers.py 2010-08-20 20:31:18 +0000
+++ lib/lp/blueprints/subscribers.py 2010-11-01 04:06:10 +0000
@@ -5,7 +5,7 @@
from canonical.database.sqlbase import block_implicit_flushes
-from lp.blueprints.interfaces.specification import SpecificationGoalStatus
+from lp.blueprints.enums import SpecificationGoalStatus
from lp.registry.interfaces.person import IPerson
=== modified file 'lib/lp/blueprints/vocabularies/specificationdependency.py'
--- lib/lp/blueprints/vocabularies/specificationdependency.py 2010-10-24 21:00:11 +0000
+++ lib/lp/blueprints/vocabularies/specificationdependency.py 2010-11-01 04:06:10 +0000
@@ -28,7 +28,7 @@
SQLObjectVocabularyBase,
)
-from lp.blueprints.interfaces.specification import SpecificationFilter
+from lp.blueprints.enums import SpecificationFilter
from lp.blueprints.model.specification import Specification
from lp.registry.interfaces.pillar import IPillarNameSet
=== modified file 'lib/lp/code/model/tests/test_branch.py'
--- lib/lp/code/model/tests/test_branch.py 2010-10-26 15:47:24 +0000
+++ lib/lp/code/model/tests/test_branch.py 2010-11-01 04:06:10 +0000
@@ -33,10 +33,8 @@
DatabaseFunctionalLayer,
LaunchpadZopelessLayer,
)
-from lp.blueprints.interfaces.specification import (
- ISpecificationSet,
- SpecificationDefinitionStatus,
- )
+from lp.blueprints.enums import SpecificationDefinitionStatus
+from lp.blueprints.interfaces.specification import ISpecificationSet
from lp.blueprints.model.specificationbranch import SpecificationBranch
from lp.bugs.interfaces.bug import (
CreateBugParams,
=== modified file 'lib/lp/registry/browser/person.py'
--- lib/lp/registry/browser/person.py 2010-10-24 13:02:07 +0000
+++ lib/lp/registry/browser/person.py 2010-11-01 04:06:10 +0000
@@ -231,7 +231,7 @@
UnexpectedFormData,
)
from lp.blueprints.browser.specificationtarget import HasSpecificationsView
-from lp.blueprints.interfaces.specification import SpecificationFilter
+from lp.blueprints.enums import SpecificationFilter
from lp.bugs.browser.bugtask import BugTaskSearchListingView
from lp.bugs.interfaces.bugtask import (
BugTaskSearchParams,
=== modified file 'lib/lp/registry/browser/productseries.py'
--- lib/lp/registry/browser/productseries.py 2010-09-27 14:19:29 +0000
+++ lib/lp/registry/browser/productseries.py 2010-11-01 04:06:10 +0000
@@ -92,10 +92,8 @@
from lp.blueprints.browser.specificationtarget import (
HasSpecificationsMenuMixin,
)
-from lp.blueprints.interfaces.specification import (
- ISpecificationSet,
- SpecificationImplementationStatus,
- )
+from lp.blueprints.enums import SpecificationImplementationStatus
+from lp.blueprints.interfaces.specification import ISpecificationSet
from lp.bugs.browser.bugtask import BugTargetTraversalMixin
from lp.bugs.interfaces.bugtask import (
BugTaskStatus,
=== modified file 'lib/lp/registry/browser/tests/milestone-views.txt'
--- lib/lp/registry/browser/tests/milestone-views.txt 2010-10-18 22:24:59 +0000
+++ lib/lp/registry/browser/tests/milestone-views.txt 2010-11-01 04:06:10 +0000
@@ -171,8 +171,7 @@
The view provides a list of StatusCounts that summarise the targeted
specifications and bugtasks.
- >>> from lp.blueprints.interfaces.specification import (
- ... SpecificationImplementationStatus)
+ >>> from lp.blueprints.enums import SpecificationImplementationStatus
>>> bugtask.transitionToAssignee(person)
>>> engineer = factory.makePerson(name='engineer')
=== modified file 'lib/lp/registry/browser/tests/person-views.txt'
--- lib/lp/registry/browser/tests/person-views.txt 2010-10-17 15:44:08 +0000
+++ lib/lp/registry/browser/tests/person-views.txt 2010-11-01 04:06:10 +0000
@@ -330,7 +330,7 @@
Assigned specifications that do not display when they are not in an in
progress state.
- >>> from lp.blueprints.interfaces.specification import SpecificationImplementationStatus
+ >>> from lp.blueprints.enums import SpecificationImplementationStatus
>>> login(user.preferredemail.email)
>>> product = factory.makeProduct(name="tool", owner=user)
@@ -351,7 +351,7 @@
specifications is a link to show all the specifications that the user is
working on.
- >>> from lp.blueprints.interfaces.specification import SpecificationDefinitionStatus
+ >>> from lp.blueprints.enums import SpecificationDefinitionStatus
>>> spec.definition_status = SpecificationDefinitionStatus.APPROVED
>>> newstate = spec.updateLifecycleStatus(user)
=== modified file 'lib/lp/registry/doc/distribution.txt'
--- lib/lp/registry/doc/distribution.txt 2010-10-17 15:44:08 +0000
+++ lib/lp/registry/doc/distribution.txt 2010-11-01 04:06:10 +0000
@@ -506,7 +506,7 @@
>>> kubuntu = distroset.getByName("kubuntu")
- >>> from lp.blueprints.interfaces.specification import SpecificationFilter
+ >>> from lp.blueprints.enums import SpecificationFilter
First, there should be one informational spec for kubuntu, but it is
complete so it will not show up unless we explicitly ask for complete specs:
@@ -570,7 +570,7 @@
We can get only valid specs (those that are not obsolete or superseded):
- >>> from lp.blueprints.interfaces.specification import SpecificationDefinitionStatus
+ >>> from lp.blueprints.enums import SpecificationDefinitionStatus
>>> login('mark@xxxxxxxxxxx')
>>> for spec in kubuntu.specifications():
... # Do this here, otherwise, the change will be flush before
=== modified file 'lib/lp/registry/doc/mentoringoffer.txt'
--- lib/lp/registry/doc/mentoringoffer.txt 2010-10-19 18:44:31 +0000
+++ lib/lp/registry/doc/mentoringoffer.txt 2010-11-01 04:06:10 +0000
@@ -204,7 +204,7 @@
When a spec or a bug is completed, it drops off the mentoring lists.
- >>> from lp.blueprints.interfaces.specification import SpecificationImplementationStatus
+ >>> from lp.blueprints.enums import SpecificationImplementationStatus
>>> from lp.bugs.interfaces.bugtask import BugTaskStatus
>>> bug2.is_complete
False
=== modified file 'lib/lp/registry/doc/person.txt'
--- lib/lp/registry/doc/person.txt 2010-10-19 18:44:31 +0000
+++ lib/lp/registry/doc/person.txt 2010-11-01 04:06:10 +0000
@@ -1194,7 +1194,7 @@
First, Carlos does not have any completed specifications assigned to
him:
- >>> from lp.blueprints.interfaces.specification import SpecificationFilter
+ >>> from lp.blueprints.enums import SpecificationFilter
>>> carlos.specifications(filter=[
... SpecificationFilter.ASSIGNEE,
... SpecificationFilter.COMPLETE]).count()
=== modified file 'lib/lp/registry/doc/product.txt'
--- lib/lp/registry/doc/product.txt 2010-10-19 18:44:31 +0000
+++ lib/lp/registry/doc/product.txt 2010-11-01 04:06:10 +0000
@@ -410,7 +410,7 @@
informational.
>>> firefox = productset.getByName('firefox')
- >>> from lp.blueprints.interfaces.specification import SpecificationFilter
+ >>> from lp.blueprints.enums import SpecificationFilter
First, there should be only one informational spec for firefox:
=== modified file 'lib/lp/registry/doc/productseries.txt'
--- lib/lp/registry/doc/productseries.txt 2010-10-19 18:44:31 +0000
+++ lib/lp/registry/doc/productseries.txt 2010-11-01 04:06:10 +0000
@@ -191,7 +191,7 @@
is informational.
>>> onezero = firefox.getSeries("1.0")
- >>> from lp.blueprints.interfaces.specification import SpecificationFilter
+ >>> from lp.blueprints.enums import SpecificationFilter
We will create two specs for onezero and use them to demonstrate the
filtering.
@@ -211,7 +211,7 @@
Now, we will make one of them accepted, the other declined, and both of
them informational.
- >>> from lp.blueprints.interfaces.specification import (
+ >>> from lp.blueprints.enums import (
... SpecificationDefinitionStatus,
... SpecificationImplementationStatus,
... )
=== modified file 'lib/lp/registry/doc/projectgroup.txt'
--- lib/lp/registry/doc/projectgroup.txt 2010-10-19 18:44:31 +0000
+++ lib/lp/registry/doc/projectgroup.txt 2010-11-01 04:06:10 +0000
@@ -134,7 +134,7 @@
We should be able to generate filtered lists of specs on a project.
>>> mozilla = getUtility(IProjectGroupSet).getByName('mozilla')
- >>> from lp.blueprints.interfaces.specification import SpecificationFilter
+ >>> from lp.blueprints.enums import SpecificationFilter
First, there should be only one informational spec for mozilla:
=== modified file 'lib/lp/registry/model/distribution.py'
--- lib/lp/registry/model/distribution.py 2010-10-24 12:46:23 +0000
+++ lib/lp/registry/model/distribution.py 2010-11-01 04:06:10 +0000
@@ -84,7 +84,7 @@
IServiceUsage,
)
from lp.archivepublisher.debversion import Version
-from lp.blueprints.interfaces.specification import (
+from lp.blueprints.enums import (
SpecificationDefinitionStatus,
SpecificationFilter,
SpecificationImplementationStatus,
=== modified file 'lib/lp/registry/model/distroseries.py'
--- lib/lp/registry/model/distroseries.py 2010-10-18 04:19:10 +0000
+++ lib/lp/registry/model/distroseries.py 2010-11-01 04:06:10 +0000
@@ -68,7 +68,7 @@
ServiceUsage,
service_uses_launchpad)
from lp.app.interfaces.launchpad import IServiceUsage
-from lp.blueprints.interfaces.specification import (
+from lp.blueprints.enums import (
SpecificationFilter,
SpecificationGoalStatus,
SpecificationImplementationStatus,
=== modified file 'lib/lp/registry/model/person.py'
--- lib/lp/registry/model/person.py 2010-10-29 22:52:42 +0000
+++ lib/lp/registry/model/person.py 2010-11-01 04:06:10 +0000
@@ -163,7 +163,7 @@
from canonical.launchpad.webapp.dbpolicy import MasterDatabasePolicy
from canonical.launchpad.webapp.interfaces import ILaunchBag
from canonical.lazr.utils import get_current_browser_request
-from lp.blueprints.interfaces.specification import (
+from lp.blueprints.enums import (
SpecificationDefinitionStatus,
SpecificationFilter,
SpecificationImplementationStatus,
=== modified file 'lib/lp/registry/model/product.py'
--- lib/lp/registry/model/product.py 2010-10-24 13:02:07 +0000
+++ lib/lp/registry/model/product.py 2010-11-01 04:06:10 +0000
@@ -90,7 +90,7 @@
ILaunchpadUsage,
IServiceUsage,
)
-from lp.blueprints.interfaces.specification import (
+from lp.blueprints.enums import (
SpecificationDefinitionStatus,
SpecificationFilter,
SpecificationImplementationStatus,
=== modified file 'lib/lp/registry/model/productseries.py'
--- lib/lp/registry/model/productseries.py 2010-10-18 20:40:05 +0000
+++ lib/lp/registry/model/productseries.py 2010-11-01 04:06:10 +0000
@@ -47,7 +47,7 @@
ServiceUsage,
service_uses_launchpad)
from lp.app.interfaces.launchpad import IServiceUsage
-from lp.blueprints.interfaces.specification import (
+from lp.blueprints.enums import (
SpecificationDefinitionStatus,
SpecificationFilter,
SpecificationGoalStatus,
=== modified file 'lib/lp/registry/model/projectgroup.py'
--- lib/lp/registry/model/projectgroup.py 2010-10-18 13:04:50 +0000
+++ lib/lp/registry/model/projectgroup.py 2010-11-01 04:06:10 +0000
@@ -55,12 +55,10 @@
from lp.answers.model.question import QuestionTargetSearch
from lp.app.enums import ServiceUsage
from lp.app.errors import NotFoundError
-from lp.blueprints.interfaces.specification import (
+from lp.blueprints.enums import (
SpecificationFilter,
SpecificationImplementationStatus,
SpecificationSort,
- )
-from lp.blueprints.interfaces.sprintspecification import (
SprintSpecificationStatus,
)
from lp.blueprints.model.specification import (
=== modified file 'lib/lp/registry/stories/person/xx-person-working-on.txt'
--- lib/lp/registry/stories/person/xx-person-working-on.txt 2009-10-09 21:07:32 +0000
+++ lib/lp/registry/stories/person/xx-person-working-on.txt 2010-11-01 04:06:10 +0000
@@ -19,8 +19,7 @@
>>> login('foo.bar@xxxxxxxxxxxxx')
>>> from canonical.launchpad.webapp import canonical_url
>>> from lp.bugs.interfaces.bugtask import BugTaskStatus
- >>> from lp.blueprints.interfaces.specification import (
- ... SpecificationImplementationStatus)
+ >>> from lp.blueprints.enums import SpecificationImplementationStatus
>>> spec = factory.makeSpecification()
>>> spec.assignee = spec.owner
>>> spec.implementation_status = SpecificationImplementationStatus.STARTED
=== modified file 'lib/lp/registry/tests/test_project_milestone.py'
--- lib/lp/registry/tests/test_project_milestone.py 2010-10-04 19:50:45 +0000
+++ lib/lp/registry/tests/test_project_milestone.py 2010-11-01 04:06:10 +0000
@@ -23,11 +23,11 @@
)
from lazr.restfulclient.errors import ClientError
-from lp.blueprints.interfaces.specification import (
- ISpecificationSet,
+from lp.blueprints.enums import (
SpecificationDefinitionStatus,
SpecificationPriority,
)
+from lp.blueprints.interfaces.specification import ISpecificationSet
from lp.bugs.interfaces.bug import CreateBugParams
from lp.bugs.interfaces.bugtask import (
BugTaskSearchParams,
=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py 2010-10-27 22:33:01 +0000
+++ lib/lp/testing/factory.py 2010-11-01 04:06:10 +0000
@@ -98,10 +98,8 @@
from lp.app.enums import ServiceUsage
from lp.archiveuploader.dscfile import DSCFile
from lp.archiveuploader.uploadpolicy import BuildDaemonUploadPolicy
-from lp.blueprints.interfaces.specification import (
- ISpecificationSet,
- SpecificationDefinitionStatus,
- )
+from lp.blueprints.enums import SpecificationDefinitionStatus
+from lp.blueprints.interfaces.specification import ISpecificationSet
from lp.blueprints.interfaces.sprint import ISprintSet
from lp.bugs.interfaces.bug import (
CreateBugParams,
=== modified file 'scripts/import-zope-specs.py'
--- scripts/import-zope-specs.py 2010-10-03 15:30:06 +0000
+++ scripts/import-zope-specs.py 2010-11-01 04:06:10 +0000
@@ -16,13 +16,18 @@
from zope.component import getUtility
from BeautifulSoup import BeautifulSoup
+from canonical.launchpad.scripts import execute_zcml_for_scripts
from canonical.lp import initZopeless
-from canonical.lp.dbschema import (
- SpecificationStatus, SpecificationGoalStatus, SpecificationDelivery,
- SpecificationPriority)
-from canonical.launchpad.scripts import execute_zcml_for_scripts
-from canonical.launchpad.interfaces import (
- IPersonSet, IProductSet, ISpecificationSet)
+from lp.blueprints.enums import (
+ SpecificationStatus,
+ SpecificationGoalStatus,
+ SpecificationDelivery,
+ SpecificationPriority,
+ )
+from lp.blueprints.interfaces.specification import ISpecificationSet
+from lp.registry.interfaces.person import IPersonSet
+from lp.registry.interfaces.product import IProductSet
+
WIKI_BASE = 'http://wiki.zope.org/zope3/'
PROPOSAL_LISTS = ['Zope3Proposals', 'OldProposals', 'DraftProposals']