← Back to team overview

launchpad-reviewers team mailing list archive

[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']