← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~sinzui/launchpad/apocalypse-interface-imports-5 into lp:launchpad/devel

 

Curtis Hovey has proposed merging lp:~sinzui/launchpad/apocalypse-interface-imports-5 into lp:launchpad/devel.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)
Related bugs:
  #654567 lp.translations imports from c.l.interfaces
  https://bugs.launchpad.net/bugs/654567


This is my branch to import interfaces from true locations in lp/translations.

    lp:~sinzui/launchpad/hold-message
    Diff size: 785
    Launchpad bug: https://bugs.launchpad.net/bugs/654567
    Test command: The entire test suite.
    Pre-implementation: no one
    Target release: 10.10


Import interfaces from true locations in lp/translations
---------------------------------------------------------

lp/translations is importing interfaces from canonical.launchpad.interfaces
instead of the true location. This needs to be fixed so that the glob
imports in c.l.i can be removed.


Rules
-----

    * Use find and replace to fix import lines.
    * Move the chages to conform to alphabetsation rules.
    * ADDENDUM: Move imports into function/methods if needed.


QA
--

Watch the oops reports for import errors.


Lint
----

Linting changed files:
  lib/lp/translations/browser/tests/distroseries-views.txt
  lib/lp/translations/browser/tests/translationimportqueue-views.txt
  lib/lp/translations/doc/canonical_url_examples.txt
  lib/lp/translations/doc/distroseries-language.txt
  lib/lp/translations/doc/language-pack.txt
  lib/lp/translations/doc/poexport-language-pack.txt
  lib/lp/translations/doc/poexport-queue.txt
  lib/lp/translations/doc/pofile.txt
  lib/lp/translations/doc/poimport-pofile-not-exported-from-rosetta.txt
  lib/lp/translations/doc/poimport-pofile-old-po-imported.txt
  lib/lp/translations/doc/poimport-pofile-syntax-error.txt
  lib/lp/translations/doc/poimport-potemplate-syntax-error.txt
  lib/lp/translations/doc/poimport.txt
  lib/lp/translations/doc/potmsgset.txt
  lib/lp/translations/doc/request_country.txt
  lib/lp/translations/doc/rosetta-karma.txt
  lib/lp/translations/doc/rosetta-poimport-script.txt
  lib/lp/translations/doc/sourcepackagerelease-translations.txt
  lib/lp/translations/doc/translationgroup.txt
  lib/lp/translations/doc/translationimportqueue.txt
  lib/lp/translations/doc/translationmessage.txt
  lib/lp/translations/doc/translationsoverview.txt
  lib/lp/translations/doc/translationsperson.txt
  lib/lp/translations/doc/translationtemplatesbuildbehavior.txt
  lib/lp/translations/doc/vpoexport.txt
  lib/lp/translations/interfaces/potemplate.py
  lib/lp/translations/model/translationtemplatesbuildbehavior.py
  lib/lp/translations/model/translationtemplatesbuildjob.py
  lib/lp/translations/scripts/remove_translations.py
  lib/lp/translations/stories/productseries/xx-productseries-translations.txt
  lib/lp/translations/stories/standalone/xx-pofile-translate-message-filtering.txt
  lib/lp/translations/stories/standalone/xx-potemplate-edit.txt
  lib/lp/translations/stories/standalone/xx-serieslanguage-index.txt
  lib/lp/translations/stories/standalone/xx-sourcepackage-export.txt
  lib/lp/translations/stories/standalone/xx-translationmessage-translate.txt
  lib/lp/translations/stories/translationgroups/60-translation-suggestions.txt
  lib/lp/translations/tests/potmsgset-update-translation.txt
  lib/lp/translations/tests/test_translationtemplatesbuildbehavior.py
  lib/lp/translations/tests/test_translationtemplatesbuildjob.py


Test
----

The majority of the changes were to tests, but no test rules were changes.


Implementation
--------------

I moved the import of IPersonSet into the one calling method because of
cyclic import issues with Account and EmailAddress. We do not have agreement
regarding where Account and EmailAddress will move to.
    * lib/lp/translations/scripts/remove_translations.py
-- 
https://code.launchpad.net/~sinzui/launchpad/apocalypse-interface-imports-5/+merge/37476
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~sinzui/launchpad/apocalypse-interface-imports-5 into lp:launchpad/devel.
=== modified file 'lib/lp/translations/browser/tests/distroseries-views.txt'
--- lib/lp/translations/browser/tests/distroseries-views.txt	2010-08-02 23:34:01 +0000
+++ lib/lp/translations/browser/tests/distroseries-views.txt	2010-10-04 14:36:24 +0000
@@ -4,7 +4,7 @@
 Let's use ubuntu/hoary for these tests.
 
     >>> from canonical.launchpad.webapp.servers import LaunchpadTestRequest
-    >>> from canonical.launchpad.interfaces import IDistributionSet
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
     >>> from lp.registry.interfaces.series import SeriesStatus
     >>> ubuntu = getUtility(IDistributionSet).getByName('ubuntu')
     >>> hoary = ubuntu.getSeries('hoary')
@@ -23,11 +23,13 @@
 reveal its translations to the public or hide them from the public.
 
     >>> from zope.security.proxy import removeSecurityProxy
+    >>> from lp.app.errors import TranslationUnavailable
     >>> from lp.translations.browser.distroseries import (
     ...     DistroSeriesView)
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILaunchpadCelebrities, ITeamMembershipSet, TeamMembershipStatus)
-    >>> from lp.app.errors import TranslationUnavailable
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.registry.interfaces.teammembership import (
+    ...     ITeamMembershipSet, TeamMembershipStatus)
 
     >>> def check_translations_access(distroseries):
     ...     """Return any objections to current user accessing

=== modified file 'lib/lp/translations/browser/tests/translationimportqueue-views.txt'
--- lib/lp/translations/browser/tests/translationimportqueue-views.txt	2010-07-21 05:41:41 +0000
+++ lib/lp/translations/browser/tests/translationimportqueue-views.txt	2010-10-04 14:36:24 +0000
@@ -153,7 +153,7 @@
 
 The Ubuntu distribution gets special treatment for the language pack flag.
 
-    >>> from canonical.launchpad.interfaces import (
+    >>> from canonical.launchpad.interfaces.launchpad import (
     ...     ILaunchpadCelebrities)
     >>> ubuntu = getUtility(ILaunchpadCelebrities).ubuntu
     >>> ubuntuseries = factory.makeDistroRelease(ubuntu)

=== modified file 'lib/lp/translations/doc/canonical_url_examples.txt'
--- lib/lp/translations/doc/canonical_url_examples.txt	2010-07-19 15:35:31 +0000
+++ lib/lp/translations/doc/canonical_url_examples.txt	2010-10-04 14:36:24 +0000
@@ -11,7 +11,8 @@
 
 The Rosetta homepage.
 
-    >>> from canonical.launchpad.interfaces import IRosettaApplication
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     IRosettaApplication)
     >>> canonical_url(getUtility(IRosettaApplication))
     u'http://launchpad.dev/translations'
 
@@ -29,7 +30,7 @@
 
     >>> from lp.registry.interfaces.sourcepackagename import (
     ...     ISourcePackageNameSet)
-    >>> from canonical.launchpad.interfaces import IDistributionSet
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
     >>> sourcepackagenameset = getUtility(ISourcePackageNameSet)
     >>> sourcepackagename = sourcepackagenameset['evolution']
     >>> distroset = getUtility(IDistributionSet)
@@ -81,7 +82,7 @@
 Now we can get an upstream subset and do the same sorts of thing as we did
 with the distro subset.
 
-    >>> from canonical.launchpad.interfaces import IProductSet
+    >>> from lp.registry.interfaces.product import IProductSet
     >>> productset = getUtility(IProductSet)
     >>> evolution_product = productset['evolution']
     >>> evolution_trunk_series = evolution_product.getSeries('trunk')

=== modified file 'lib/lp/translations/doc/distroseries-language.txt'
--- lib/lp/translations/doc/distroseries-language.txt	2010-08-06 07:40:52 +0000
+++ lib/lp/translations/doc/distroseries-language.txt	2010-10-04 14:36:24 +0000
@@ -1,4 +1,5 @@
-= DistroSeriesLanguage =
+DistroSeriesLanguage
+====================
 
 This is a special class which encapsulates the information associated with a
 particular language and distroseries.
@@ -7,8 +8,9 @@
 will work with spanish in Hoary first.
 
     >>> from zope.component import getUtility
-    >>> from canonical.launchpad.interfaces import (
-    ...     IDistroSeriesSet, IDistributionSet, ILanguageSet)
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
+    >>> from lp.registry.interfaces.distroseries import IDistroSeriesSet
+    >>> from lp.services.worlddata.interfaces.language import ILanguageSet
     >>> from lp.translations.interfaces.distroserieslanguage import (
     ...     IDistroSeriesLanguage)
     >>> distroseriesset = getUtility(IDistroSeriesSet)
@@ -97,7 +99,8 @@
     >>> for potemplate in hoary.getTranslationTemplates():
     ...     if potemplate.name == 'disabled-template':
     ...         print potemplate.getPOFileByLang('es').title
-    Spanish (es) translation of disabled-template in Ubuntu Hoary package "evolution"
+    Spanish (es) translation of disabled-template in Ubuntu Hoary package
+    "evolution"
 
 We also have DummyDistroSeriesLanguages.
 
@@ -132,11 +135,12 @@
 been extended, and the DummyDistroSeriesLanguage has not been similarly
 extended.
 
-   >>> print IDistroSeriesLanguage.providedBy(hoary_amharic)
-   True
-
-
-= POTemplate Sorting =
+    >>> print IDistroSeriesLanguage.providedBy(hoary_amharic)
+    True
+
+
+POTemplate Sorting
+------------------
 
 In general, potemplates should be sorted by priority (descending) then name.
 The sample data all has priority 0. So it's all sorted by name (the above

=== modified file 'lib/lp/translations/doc/language-pack.txt'
--- lib/lp/translations/doc/language-pack.txt	2009-07-02 17:16:50 +0000
+++ lib/lp/translations/doc/language-pack.txt	2010-10-04 14:36:24 +0000
@@ -1,4 +1,5 @@
-= Language Pack storage =
+Language Pack storage
+=====================
 
 A LanguagePack represents an exported distribution series' language pack.
 
@@ -10,9 +11,7 @@
 
     >>> from cStringIO import StringIO
     >>> from zope.component import getUtility
-    >>> from zope.interface import providedBy
-    >>> from canonical.launchpad.interfaces import (
-    ...     IDistributionSet)
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
     >>> from lp.translations.interfaces.languagepack import (
     ...     ILanguagePack,
     ...     ILanguagePackSet,

=== modified file 'lib/lp/translations/doc/poexport-language-pack.txt'
--- lib/lp/translations/doc/poexport-language-pack.txt	2010-04-28 05:40:02 +0000
+++ lib/lp/translations/doc/poexport-language-pack.txt	2010-10-04 14:36:24 +0000
@@ -12,9 +12,10 @@
     >>> import transaction
     >>> from canonical.launchpad.ftests import login
     >>> from canonical.launchpad.helpers import string_to_tarfile
-    >>> from canonical.launchpad.interfaces import ILaunchpadCelebrities
-    >>> from lp.translations.scripts.language_pack import \
-    ...    export_language_pack
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.translations.scripts.language_pack import (
+    ...    export_language_pack)
     >>> from canonical.librarian.interfaces import ILibrarianClient
     >>> from canonical.database.sqlbase import flush_database_caches
     >>> rosetta_experts = getUtility(ILaunchpadCelebrities).rosetta_experts

=== modified file 'lib/lp/translations/doc/poexport-queue.txt'
--- lib/lp/translations/doc/poexport-queue.txt	2010-03-05 15:31:22 +0000
+++ lib/lp/translations/doc/poexport-queue.txt	2010-10-04 14:36:24 +0000
@@ -11,7 +11,7 @@
 
     >>> import transaction
     >>> from zope.component import getUtility
-    >>> from canonical.launchpad.interfaces import IPersonSet
+    >>> from lp.registry.interfaces.person import IPersonSet
     >>> from lp.testing.faketransaction import FakeTransaction
     >>> from lp.testing.mail_helpers import pop_notifications, print_emails
     >>> from lp.translations.scripts.po_export_queue import ExportResult

=== modified file 'lib/lp/translations/doc/pofile.txt'
--- lib/lp/translations/doc/pofile.txt	2010-09-01 10:03:11 +0000
+++ lib/lp/translations/doc/pofile.txt	2010-10-04 14:36:24 +0000
@@ -6,8 +6,10 @@
     >>> import pytz
     >>> from zope.component import getUtility
     >>> from canonical.launchpad.webapp.testing import verifyObject
-    >>> from canonical.launchpad.interfaces import (
-    ...     IDistributionSet, ILanguageSet, IPersonSet,
+    >>> from lp.services.worlddata.interfaces.language import ILanguageSet
+    >>> from lp.registry.interfaces.person import IPersonSet
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
+    >>> from lp.registry.interfaces.sourcepackagename import (
     ...     ISourcePackageNameSet)
     >>> from lp.translations.interfaces.pofile import IPOFile
     >>> from lp.translations.interfaces.potemplate import IPOTemplateSet
@@ -367,8 +369,9 @@
 
 Do some needed imports.
 
-    >>> from canonical.launchpad.interfaces import ILaunchpadCelebrities
-    >>> from canonical.launchpad.interfaces import IProductSet
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.registry.interfaces.product import IProductSet
     >>> from lp.translations.interfaces.translationgroup import (
     ...     ITranslationGroupSet, TranslationPermission)
     >>> from lp.translations.model.pofile import POFile

=== modified file 'lib/lp/translations/doc/poimport-pofile-not-exported-from-rosetta.txt'
--- lib/lp/translations/doc/poimport-pofile-not-exported-from-rosetta.txt	2009-11-17 09:50:33 +0000
+++ lib/lp/translations/doc/poimport-pofile-not-exported-from-rosetta.txt	2010-10-04 14:36:24 +0000
@@ -19,8 +19,9 @@
 
 Here are some imports we need to get this test running.
 
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILaunchpadCelebrities, IPersonSet)
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.registry.interfaces.person import IPersonSet
     >>> from lp.translations.interfaces.translationimportqueue import (
     ...     ITranslationImportQueue, RosettaImportStatus)
     >>> from lp.translations.model.potemplate import POTemplateSubset

=== modified file 'lib/lp/translations/doc/poimport-pofile-old-po-imported.txt'
--- lib/lp/translations/doc/poimport-pofile-old-po-imported.txt	2009-11-17 09:50:33 +0000
+++ lib/lp/translations/doc/poimport-pofile-old-po-imported.txt	2010-10-04 14:36:24 +0000
@@ -1,4 +1,5 @@
-= PO Import test with a .po file that has a PO-Revision-Date not updated =
+PO Import test with a .po file that has a PO-Revision-Date not updated
+======================================================================
 
 When we import a .po file with a 'PO-Revision-Date' that has an older
 value than the one stored in IPOFile.header, we should detect it and
@@ -16,8 +17,9 @@
 
 Here are some imports we need to get this test running.
 
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILaunchpadCelebrities, IPersonSet)
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.registry.interfaces.person import IPersonSet
     >>> from lp.translations.interfaces.translationimportqueue import (
     ...     ITranslationImportQueue)
     >>> from lp.translations.model.potemplate import POTemplateSubset

=== modified file 'lib/lp/translations/doc/poimport-pofile-syntax-error.txt'
--- lib/lp/translations/doc/poimport-pofile-syntax-error.txt	2009-11-17 09:50:33 +0000
+++ lib/lp/translations/doc/poimport-pofile-syntax-error.txt	2010-10-04 14:36:24 +0000
@@ -7,8 +7,9 @@
 
 Here are some imports we need to get this test running.
 
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILaunchpadCelebrities, IPersonSet)
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.registry.interfaces.person import IPersonSet
     >>> from lp.translations.interfaces.translationimportqueue import (
     ...     ITranslationImportQueue)
     >>> from lp.translations.model.potemplate import POTemplateSubset

=== modified file 'lib/lp/translations/doc/poimport-potemplate-syntax-error.txt'
--- lib/lp/translations/doc/poimport-potemplate-syntax-error.txt	2009-11-17 09:50:33 +0000
+++ lib/lp/translations/doc/poimport-potemplate-syntax-error.txt	2010-10-04 14:36:24 +0000
@@ -1,4 +1,5 @@
-= PO Import test with a .pot file that has a syntax error =
+PO Import test with a .pot file that has a syntax error
+=======================================================
 
 When we import a .pot file with a syntax error, we should notify
 the user about that error so they have a chance to fix it.
@@ -7,8 +8,9 @@
 
 Here are some imports we need to get this test running.
 
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILaunchpadCelebrities, IPersonSet)
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.registry.interfaces.person import IPersonSet
     >>> from lp.translations.interfaces.translationimportqueue import (
     ...     ITranslationImportQueue)
     >>> from lp.translations.model.potemplate import POTemplateSubset
@@ -101,7 +103,8 @@
     <BLANKLINE>
 
 
-== Encoding errors ==
+Encoding errors
+===============
 
     >>> potemplate = subset.new(
     ...     name='nonascii',

=== modified file 'lib/lp/translations/doc/poimport.txt'
--- lib/lp/translations/doc/poimport.txt	2010-07-13 15:02:20 +0000
+++ lib/lp/translations/doc/poimport.txt	2010-10-04 14:36:24 +0000
@@ -9,8 +9,11 @@
 Here are some imports we need to get this test running.
 
     >>> from canonical.launchpad.ftests import syncUpdate
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILanguageSet, ILaunchpadCelebrities, IPersonSet, IProductSet)
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.services.worlddata.interfaces.language import ILanguageSet
+    >>> from lp.registry.interfaces.person import IPersonSet
+     >>> from lp.registry.interfaces.product import IProductSet
     >>> from lp.translations.interfaces.translationimportqueue import (
     ...     ITranslationImportQueue, RosettaImportStatus)
     >>> from lp.registry.model.sourcepackagename import SourcePackageName

=== modified file 'lib/lp/translations/doc/potmsgset.txt'
--- lib/lp/translations/doc/potmsgset.txt	2010-09-07 15:26:49 +0000
+++ lib/lp/translations/doc/potmsgset.txt	2010-10-04 14:36:24 +0000
@@ -14,8 +14,10 @@
     >>> from lp.translations.model.translationmessage import (
     ...     TranslationMessage)
     >>> from lp.translations.interfaces.potmsgset import IPOTMsgSet
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILanguageSet, IPersonSet, IProductSet)
+    >>> from lp.services.worlddata.interfaces.language import ILanguageSet
+    >>> from lp.registry.interfaces.person import IPersonSet
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
+    >>> from lp.registry.interfaces.product import IProductSet
 
     >>> potemplate = factory.makePOTemplate()
     >>> potmsgset = factory.makePOTMsgSet(
@@ -657,8 +659,6 @@
 translation for exactly the same English string, but in a different
 translation template.
 
-    >>> from canonical.launchpad.interfaces import (
-    ...     IDistributionSet, IProductSet)
     >>> from lp.translations.interfaces.potemplate import IPOTemplateSet
 
 Suggestions between modules depend also on whether the other translation

=== modified file 'lib/lp/translations/doc/request_country.txt'
--- lib/lp/translations/doc/request_country.txt	2009-10-22 11:55:51 +0000
+++ lib/lp/translations/doc/request_country.txt	2010-10-04 14:36:24 +0000
@@ -21,7 +21,7 @@
 
 Here's us converting it to a country.
 
-    >>> from canonical.launchpad.interfaces import ICountry
+    >>> from lp.services.worlddata.interfaces.country import ICountry
     >>> country = ICountry(request)
     >>> country.name
     u'United Kingdom'

=== modified file 'lib/lp/translations/doc/rosetta-karma.txt'
--- lib/lp/translations/doc/rosetta-karma.txt	2010-07-16 16:51:52 +0000
+++ lib/lp/translations/doc/rosetta-karma.txt	2010-10-04 14:36:24 +0000
@@ -7,9 +7,10 @@
 like SQLObjects are not persistent between transactions.
 
     >>> import transaction
-    >>> from canonical.launchpad.interfaces import (
-    ...     IKarmaActionSet, IPersonSet,
+    >>> from canonical.launchpad.interfaces.launchpad import (
     ...     ILaunchpadCelebrities)
+    >>> from lp.registry.interfaces.karma import IKarmaActionSet
+    >>> from lp.registry.interfaces.person import IPersonSet
     >>> from lp.translations.interfaces.translationimportqueue import (
     ...     ITranslationImportQueue, RosettaImportStatus)
     >>> from lp.translations.model.potemplate import POTemplate

=== modified file 'lib/lp/translations/doc/rosetta-poimport-script.txt'
--- lib/lp/translations/doc/rosetta-poimport-script.txt	2010-04-01 04:29:46 +0000
+++ lib/lp/translations/doc/rosetta-poimport-script.txt	2010-10-04 14:36:24 +0000
@@ -1,8 +1,10 @@
-=  PO import script =
+PO import script
+================
 
     >>> from lp.translations.model.potemplate import POTemplate
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILaunchpadCelebrities, IPersonSet)
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.registry.interfaces.person import IPersonSet
     >>> from lp.translations.interfaces.translationimportqueue import (
     ...     ITranslationImportQueue,
     ...     RosettaImportStatus)

=== modified file 'lib/lp/translations/doc/sourcepackagerelease-translations.txt'
--- lib/lp/translations/doc/sourcepackagerelease-translations.txt	2010-07-23 11:18:54 +0000
+++ lib/lp/translations/doc/sourcepackagerelease-translations.txt	2010-10-04 14:36:24 +0000
@@ -44,7 +44,8 @@
 
 And the 'katie' celebrity as the user responsible for the transalation.
 
-   >>> from canonical.launchpad.interfaces import ILaunchpadCelebrities
+   >>> from canonical.launchpad.interfaces.launchpad import (
+   ...     ILaunchpadCelebrities)
    >>> katie = getUtility(ILaunchpadCelebrities).katie
 
 Before the final upload, we can see that the translation queue for the

=== modified file 'lib/lp/translations/doc/translationgroup.txt'
--- lib/lp/translations/doc/translationgroup.txt	2010-09-03 06:37:26 +0000
+++ lib/lp/translations/doc/translationgroup.txt	2010-10-04 14:36:24 +0000
@@ -12,16 +12,16 @@
     ...     ITranslationGroupSet)
     >>> translation_group_set = getUtility(ITranslationGroupSet)
 
-    >>> from canonical.launchpad.interfaces import IPersonSet
+    >>> from lp.registry.interfaces.person import IPersonSet
     >>> person_set = getUtility(IPersonSet)
 
-    >>> from canonical.launchpad.interfaces import IProductSet
+    >>> from lp.registry.interfaces.product import IProductSet
     >>> product_set = getUtility(IProductSet)
 
     >>> from lp.translations.interfaces.translator import ITranslatorSet
     >>> translator_set = getUtility(ITranslatorSet)
 
-    >>> from canonical.launchpad.interfaces import ILanguageSet
+    >>> from lp.services.worlddata.interfaces.language import ILanguageSet
     >>> language_set = getUtility(ILanguageSet)
 
     >>> from lp.translations.interfaces.potemplate import IPOTemplateSet

=== modified file 'lib/lp/translations/doc/translationimportqueue.txt'
--- lib/lp/translations/doc/translationimportqueue.txt	2010-08-31 23:03:45 +0000
+++ lib/lp/translations/doc/translationimportqueue.txt	2010-10-04 14:36:24 +0000
@@ -27,9 +27,13 @@
     >>> import transaction
     >>> from zope.component import getUtility
     >>> from canonical.database.sqlbase import flush_database_updates
-    >>> from canonical.launchpad.interfaces import (
-    ...     IDistributionSet, IDistroSeries, ILaunchpadCelebrities,
-    ...     IProductSet, ISourcePackageNameSet)
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.registry.interfaces.product import IProductSet
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
+    >>> from lp.registry.interfaces.distroseries import IDistroSeries
+    >>> from lp.registry.interfaces.sourcepackagename import (
+    ...     ISourcePackageNameSet)
     >>> from lp.translations.interfaces.translationimportqueue import (
     ...     ITranslationImportQueue, RosettaImportStatus)
     >>> from lp.registry.model.distroseries import DistroSeries
@@ -256,7 +260,6 @@
 kdebase, kde-i18n-es and kde-l10n-sr-latin. The first is from where the .pot
 file come and the others have .po files.
 
-    >>> from canonical.launchpad.interfaces import ISourcePackageNameSet
     >>> sourcepackagenameset = getUtility(ISourcePackageNameSet)
     >>> kdebase = sourcepackagenameset.new('kdebase')
     >>> kde_i18n_es = sourcepackagenameset.new('kde-i18n-es')

=== modified file 'lib/lp/translations/doc/translationmessage.txt'
--- lib/lp/translations/doc/translationmessage.txt	2009-07-02 17:16:50 +0000
+++ lib/lp/translations/doc/translationmessage.txt	2010-10-04 14:36:24 +0000
@@ -4,8 +4,8 @@
 
     >>> from zope.component import getUtility
     >>> from canonical.launchpad.webapp.testing import verifyObject
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILanguageSet, IPersonSet)
+    >>> from lp.services.worlddata.interfaces.language import ILanguageSet
+    >>> from lp.registry.interfaces.person import IPersonSet
     >>> from lp.translations.interfaces.translationmessage import (
     ...     ITranslationMessage)
     >>> from lp.translations.interfaces.translator import ITranslatorSet

=== modified file 'lib/lp/translations/doc/translationsoverview.txt'
--- lib/lp/translations/doc/translationsoverview.txt	2010-08-31 23:03:45 +0000
+++ lib/lp/translations/doc/translationsoverview.txt	2010-10-04 14:36:24 +0000
@@ -15,9 +15,10 @@
     >>> from zope.component import getUtility
     >>> from lp.registry.model.karma import KarmaCategory
     >>> from lp.registry.model.sourcepackagename import SourcePackageName
-    >>> from canonical.launchpad.interfaces import (
-    ...     IDistributionSet, IKarmaCacheManager, IPersonSet,
-    ...     IProductSet)
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
+    >>> from lp.registry.interfaces.karma import IKarmaCacheManager
+    >>> from lp.registry.interfaces.person import IPersonSet
+    >>> from lp.registry.interfaces.product import IProductSet
     >>> from lp.translations.interfaces.translationsoverview import (
     ...     ITranslationsOverview)
     >>> from canonical.testing import LaunchpadZopelessLayer

=== modified file 'lib/lp/translations/doc/translationsperson.txt'
--- lib/lp/translations/doc/translationsperson.txt	2010-09-02 11:33:28 +0000
+++ lib/lp/translations/doc/translationsperson.txt	2010-10-04 14:36:24 +0000
@@ -4,7 +4,7 @@
 object which provides translatable languages and translation history.
 
     >>> from zope.component import getUtility
-    >>> from canonical.launchpad.interfaces import IPersonSet
+    >>> from lp.registry.interfaces.person import IPersonSet
     >>> personset = getUtility(IPersonSet)
     >>> from lp.translations.interfaces.translationsperson import (
     ...     ITranslationsPerson)

=== modified file 'lib/lp/translations/doc/translationtemplatesbuildbehavior.txt'
--- lib/lp/translations/doc/translationtemplatesbuildbehavior.txt	2010-09-28 11:05:14 +0000
+++ lib/lp/translations/doc/translationtemplatesbuildbehavior.txt	2010-10-04 14:36:24 +0000
@@ -23,8 +23,10 @@
 
     >>> from canonical.librarian.interfaces import ILibrarianClient
     >>> from StringIO import StringIO
-    >>> from canonical.launchpad.interfaces import ILibraryFileAliasSet
-    >>> from canonical.launchpad.interfaces import ILaunchpadCelebrities
+    >>> from canonical.launchpad.interfaces.librarian import (
+    ...     ILibraryFileAliasSet)
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
 
 Choose an arbitrary file as the chroot tarball for the build slave.  It
 won't actually build, so it doesn't matter what's in there.

=== modified file 'lib/lp/translations/doc/vpoexport.txt'
--- lib/lp/translations/doc/vpoexport.txt	2010-07-14 06:36:24 +0000
+++ lib/lp/translations/doc/vpoexport.txt	2010-10-04 14:36:24 +0000
@@ -4,7 +4,7 @@
 exports in a more efficient way than fetching the entire objects.
 
     >>> from zope.component import getUtility
-    >>> from canonical.launchpad.interfaces import IDistributionSet
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
     >>> from lp.translations.interfaces.vpoexport import IVPOExportSet
 
     >>> vpoexportset = getUtility(IVPOExportSet)

=== modified file 'lib/lp/translations/interfaces/potemplate.py'
--- lib/lp/translations/interfaces/potemplate.py	2010-09-23 14:33:51 +0000
+++ lib/lp/translations/interfaces/potemplate.py	2010-10-04 14:36:24 +0000
@@ -821,7 +821,3 @@
 
     def select(*args):
         """Return a ResultSet for this collection with values set to args."""
-
-
-# Monkey patch for circular import avoidance done in
-# _schema_circular_imports.py

=== modified file 'lib/lp/translations/model/translationtemplatesbuildbehavior.py'
--- lib/lp/translations/model/translationtemplatesbuildbehavior.py	2010-08-20 20:31:18 +0000
+++ lib/lp/translations/model/translationtemplatesbuildbehavior.py	2010-10-04 14:36:24 +0000
@@ -15,7 +15,7 @@
 from zope.interface import implements
 from zope.security.proxy import removeSecurityProxy
 
-from canonical.launchpad.interfaces import ILaunchpadCelebrities
+from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities
 from lp.buildmaster.interfaces.buildfarmjobbehavior import (
     IBuildFarmJobBehavior,
     )

=== modified file 'lib/lp/translations/model/translationtemplatesbuildjob.py'
--- lib/lp/translations/model/translationtemplatesbuildjob.py	2010-08-27 15:03:18 +0000
+++ lib/lp/translations/model/translationtemplatesbuildjob.py	2010-10-04 14:36:24 +0000
@@ -18,7 +18,7 @@
 from zope.security.proxy import removeSecurityProxy
 
 from canonical.config import config
-from canonical.launchpad.interfaces import ILaunchpadCelebrities
+from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities
 from canonical.launchpad.interfaces.lpstorm import (
     IMasterStore,
     IStore,

=== modified file 'lib/lp/translations/scripts/remove_translations.py'
--- lib/lp/translations/scripts/remove_translations.py	2010-08-20 20:31:18 +0000
+++ lib/lp/translations/scripts/remove_translations.py	2010-10-04 14:36:24 +0000
@@ -22,7 +22,6 @@
     cursor,
     sqlvalues,
     )
-from canonical.launchpad.interfaces import IPersonSet
 from lp.services.scripts.base import (
     LaunchpadScript,
     LaunchpadScriptFailure,
@@ -84,6 +83,9 @@
 
 def get_person_id(name):
     """`get_id` helper.  Look up person by name."""
+    # XXX sinzui 2010-10-04 bug=654537: Account and EmailAddress cause cyclic
+    # imports because they are not in the lp tree.
+    from lp.registry.interfaces.person import IPersonSet
     person = getUtility(IPersonSet).getByName(name)
     if person is None:
         return None

=== modified file 'lib/lp/translations/stories/productseries/xx-productseries-translations.txt'
--- lib/lp/translations/stories/productseries/xx-productseries-translations.txt	2010-09-27 21:46:10 +0000
+++ lib/lp/translations/stories/productseries/xx-productseries-translations.txt	2010-10-04 14:36:24 +0000
@@ -195,9 +195,11 @@
 notice but not the link to the project's settings.
 
     >>> from zope.component import getUtility
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILaunchpadCelebrities, IPersonSet, ITeamMembershipSet,
-    ...     TeamMembershipStatus)
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.registry.interfaces.person import IPersonSet
+    >>> from lp.registry.interfaces.teammembership import (
+    ...     ITeamMembershipSet, TeamMembershipStatus)
 
     # Log in so as to be able to create objects
     >>> admin_email = 'foo.bar@xxxxxxxxxxxxx'

=== modified file 'lib/lp/translations/stories/standalone/xx-pofile-translate-message-filtering.txt'
--- lib/lp/translations/stories/standalone/xx-pofile-translate-message-filtering.txt	2009-11-09 17:08:21 +0000
+++ lib/lp/translations/stories/standalone/xx-pofile-translate-message-filtering.txt	2010-10-04 14:36:24 +0000
@@ -163,8 +163,9 @@
 
     >>> from zope.component import getUtility
     >>> from canonical.launchpad.ftests import login, logout
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILanguageSet, IPersonSet, IProductSet)
+    >>> from lp.services.worlddata.interfaces.language import ILanguageSet
+    >>> from lp.registry.interfaces.person import IPersonSet
+    >>> from lp.registry.interfaces.product import IProductSet
     >>> from lp.translations.interfaces.translator import ITranslatorSet
 
     # Evolution uses Restricted mode, so a translation without reviewer

=== modified file 'lib/lp/translations/stories/standalone/xx-potemplate-edit.txt'
--- lib/lp/translations/stories/standalone/xx-potemplate-edit.txt	2010-09-11 09:37:13 +0000
+++ lib/lp/translations/stories/standalone/xx-potemplate-edit.txt	2010-10-04 14:36:24 +0000
@@ -96,17 +96,19 @@
 We remember the 'last_update_date' in order to check if it was changed
 after updating the template.
 
-  >>> from zope.component import getUtility
-  >>> from lp.translations.model.potemplate import POTemplateSubset
-  >>> from lp.registry.interfaces.product import IProductSet
-  >>> login('foo.bar@xxxxxxxxxxxxx')
-  >>> evolution = getUtility(IProductSet).getByName('evolution')
-  >>> evolution_trunk = evolution.getSeries('trunk')
-  >>> hoary_subset = POTemplateSubset(productseries=evolution_trunk)
-  >>> evolution_template = hoary_subset.getPOTemplateByName(
-  ...     'evolution-2.2')
-  >>> previous_date_last_updated = evolution_template.date_last_updated
-  >>> logout()
+    >>> from zope.component import getUtility
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.translations.model.potemplate import POTemplateSubset
+    >>> from lp.registry.interfaces.product import IProductSet
+    >>> login('foo.bar@xxxxxxxxxxxxx')
+    >>> evolution = getUtility(IProductSet).getByName('evolution')
+    >>> evolution_trunk = evolution.getSeries('trunk')
+    >>> hoary_subset = POTemplateSubset(productseries=evolution_trunk)
+    >>> evolution_template = hoary_subset.getPOTemplateByName(
+    ...     'evolution-2.2')
+    >>> previous_date_last_updated = evolution_template.date_last_updated
+    >>> logout()
 
 The visible fields can be changed and saved.
 

=== modified file 'lib/lp/translations/stories/standalone/xx-serieslanguage-index.txt'
--- lib/lp/translations/stories/standalone/xx-serieslanguage-index.txt	2010-09-28 00:07:37 +0000
+++ lib/lp/translations/stories/standalone/xx-serieslanguage-index.txt	2010-10-04 14:36:24 +0000
@@ -52,7 +52,8 @@
 This is done to so see what the page will look like when they exist.
 
     >>> from zope.component import getUtility
-    >>> from canonical.launchpad.interfaces import ILaunchpadCelebrities
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
     >>> from lp.translations.interfaces.translationgroup import (
     ...     TranslationPermission)
     >>> login('foo.bar@xxxxxxxxxxxxx')

=== modified file 'lib/lp/translations/stories/standalone/xx-sourcepackage-export.txt'
--- lib/lp/translations/stories/standalone/xx-sourcepackage-export.txt	2009-12-24 01:41:54 +0000
+++ lib/lp/translations/stories/standalone/xx-sourcepackage-export.txt	2010-10-04 14:36:24 +0000
@@ -85,8 +85,10 @@
     >>> from zope.component import getUtility
 
     >>> from canonical.launchpad.ftests import login, logout
-    >>> from canonical.launchpad.interfaces import (
-    ...     IDistributionSet, ILaunchpadCelebrities, IPersonSet)
+    >>> from canonical.launchpad.interfaces.launchpad import (
+    ...     ILaunchpadCelebrities)
+    >>> from lp.registry.interfaces.person import IPersonSet
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
 
     >>> # Log in so we can use utilities and the LaunchpadObjectFactory.
     >>> login('foo.bar@xxxxxxxxxxxxx')

=== modified file 'lib/lp/translations/stories/standalone/xx-translationmessage-translate.txt'
--- lib/lp/translations/stories/standalone/xx-translationmessage-translate.txt	2010-04-29 12:38:47 +0000
+++ lib/lp/translations/stories/standalone/xx-translationmessage-translate.txt	2010-10-04 14:36:24 +0000
@@ -501,8 +501,10 @@
 
     >>> from zope.component import getUtility
     >>> from canonical.launchpad.ftests import login, logout
-    >>> from canonical.launchpad.interfaces import (
-    ...     IDistributionSet, IPersonSet, ISourcePackageNameSet)
+    >>> from lp.registry.interfaces.person import IPersonSet
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
+    >>> from lp.registry.interfaces.sourcepackagename import (
+    ...     ISourcePackageNameSet)
     >>> from lp.translations.interfaces.potemplate import IPOTemplateSet
     >>> login("carlos@xxxxxxxxxxxxx")
     >>> carlos = getUtility(IPersonSet).getByName('carlos')

=== modified file 'lib/lp/translations/stories/translationgroups/60-translation-suggestions.txt'
--- lib/lp/translations/stories/translationgroups/60-translation-suggestions.txt	2009-07-16 11:45:22 +0000
+++ lib/lp/translations/stories/translationgroups/60-translation-suggestions.txt	2010-10-04 14:36:24 +0000
@@ -13,8 +13,9 @@
 
     >>> from zope.component import getUtility
     >>> from canonical.launchpad.ftests import login, logout
-    >>> from canonical.launchpad.interfaces import (
-    ...     ILanguageSet, IPersonSet, IDistributionSet)
+    >>> from lp.services.worlddata.interfaces.language import ILanguageSet
+    >>> from lp.registry.interfaces.person import IPersonSet
+    >>> from lp.registry.interfaces.distribution import IDistributionSet
     >>> from lp.translations.interfaces.translator import ITranslatorSet
 
     >>> login('foo.bar@xxxxxxxxxxxxx')

=== modified file 'lib/lp/translations/tests/potmsgset-update-translation.txt'
--- lib/lp/translations/tests/potmsgset-update-translation.txt	2010-03-13 02:27:53 +0000
+++ lib/lp/translations/tests/potmsgset-update-translation.txt	2010-10-04 14:36:24 +0000
@@ -1,11 +1,11 @@
-  >>> import datetime
-  >>> import pytz
-  >>> from zope.component import getUtility
-  >>> from canonical.database.sqlbase import flush_database_updates
-  >>> from lp.translations.model.pomsgid import POMsgID
-  >>> from lp.translations.model.potemplate import POTemplate
-  >>> from canonical.launchpad.interfaces import IPersonSet
-  >>> UTC = pytz.timezone('UTC')
+    >>> import datetime
+    >>> import pytz
+    >>> from zope.component import getUtility
+    >>> from canonical.database.sqlbase import flush_database_updates
+    >>> from lp.translations.model.pomsgid import POMsgID
+    >>> from lp.translations.model.potemplate import POTemplate
+    >>> from lp.registry.interfaces.person import IPersonSet
+    >>> UTC = pytz.timezone('UTC')
 
 Get the PO msgid we will be working with.
 

=== modified file 'lib/lp/translations/tests/test_translationtemplatesbuildbehavior.py'
--- lib/lp/translations/tests/test_translationtemplatesbuildbehavior.py	2010-08-27 11:19:54 +0000
+++ lib/lp/translations/tests/test_translationtemplatesbuildbehavior.py	2010-10-04 14:36:24 +0000
@@ -13,9 +13,9 @@
 from zope.security.proxy import removeSecurityProxy
 
 from canonical.config import config
-from canonical.launchpad.interfaces import ILaunchpadCelebrities
+from canonical.testing import LaunchpadZopelessLayer
+from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities
 from canonical.launchpad.interfaces.librarian import ILibraryFileAliasSet
-from canonical.testing import LaunchpadZopelessLayer
 from lp.buildmaster.enums import BuildStatus
 from lp.buildmaster.interfaces.buildfarmjobbehavior import (
     IBuildFarmJobBehavior,

=== modified file 'lib/lp/translations/tests/test_translationtemplatesbuildjob.py'
--- lib/lp/translations/tests/test_translationtemplatesbuildjob.py	2010-08-25 11:07:19 +0000
+++ lib/lp/translations/tests/test_translationtemplatesbuildjob.py	2010-10-04 14:36:24 +0000
@@ -10,13 +10,13 @@
 from zope.event import notify
 from zope.security.proxy import removeSecurityProxy
 
-from canonical.launchpad.interfaces import ILaunchpadCelebrities
+from canonical.launchpad.interfaces.launchpad import ILaunchpadCelebrities
+from canonical.launchpad.webapp.testing import verifyObject
 from canonical.launchpad.webapp.interfaces import (
     DEFAULT_FLAVOR,
     IStoreSelector,
     MAIN_STORE,
     )
-from canonical.launchpad.webapp.testing import verifyObject
 from canonical.testing import (
     LaunchpadZopelessLayer,
     ZopelessDatabaseLayer,