← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~cjwatson/launchpad:codespell-codehosting-coop-oci-registry into launchpad:master

 

Colin Watson has proposed merging ~cjwatson/launchpad:codespell-codehosting-coop-oci-registry into launchpad:master.

Commit message:
Fix spelling errors in lp.{codehosting,coop,oci,registry}

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~cjwatson/launchpad/+git/launchpad/+merge/437879

"serieses" is technically a misspelling (or at best an obsolete plural form), but I ignored this because series are important objects in Launchpad and we need some way to distinguish their plural in some cases.
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~cjwatson/launchpad:codespell-codehosting-coop-oci-registry into launchpad:master.
diff --git a/.codespell-ignore b/.codespell-ignore
index 770e5aa..07612a6 100644
--- a/.codespell-ignore
+++ b/.codespell-ignore
@@ -1,3 +1,4 @@
 buildd
 changee
 iterm
+serieses
diff --git a/lib/lp/codehosting/puller/scheduler.py b/lib/lp/codehosting/puller/scheduler.py
index 38bb4f1..eb47fc4 100644
--- a/lib/lp/codehosting/puller/scheduler.py
+++ b/lib/lp/codehosting/puller/scheduler.py
@@ -283,7 +283,7 @@ class PullerMonitorProtocol(
         self.runNotification(mirrorFailed)
 
     def do_progressMade(self):
-        """Any progress resets the timout counter."""
+        """Any progress resets the timeout counter."""
         self.resetTimeout()
 
     def do_log(self, message):
diff --git a/lib/lp/codehosting/puller/tests/test_worker.py b/lib/lp/codehosting/puller/tests/test_worker.py
index 4cc2dd0..f7a0860 100644
--- a/lib/lp/codehosting/puller/tests/test_worker.py
+++ b/lib/lp/codehosting/puller/tests/test_worker.py
@@ -219,7 +219,7 @@ class TestPullerWorker(TestCaseWithTransport, PullerWorkerMixin):
         to_mirror = self.makePullerWorker(
             source_branch.base, self.get_url("dest/stacked")
         )
-        # The branch can be mirrored without errors and the destionation
+        # The branch can be mirrored without errors and the destination
         # location is upgraded to match the source format.
         to_mirror.mirrorWithoutChecks()
         mirrored_branch = breezy.branch.Branch.open(to_mirror.dest)
diff --git a/lib/lp/codehosting/scripts/tests/test_modifiedbranches.py b/lib/lp/codehosting/scripts/tests/test_modifiedbranches.py
index d8cfac2..30f10eb 100644
--- a/lib/lp/codehosting/scripts/tests/test_modifiedbranches.py
+++ b/lib/lp/codehosting/scripts/tests/test_modifiedbranches.py
@@ -35,7 +35,7 @@ class TestModifiedBranchesLocations(TestCaseWithFactory):
 
 
 class TestModifiedBranchesLastModifiedEpoch(TestCase):
-    """Test the calculation of the last modifed date."""
+    """Test the calculation of the last modified date."""
 
     def test_no_args(self):
         # The script needs one of --since or --last-hours to be specified.
@@ -102,7 +102,7 @@ class TestModifiedBranchesStripPrefix(TestCase):
         self.assertEqual("/srv/", script.options.strip_prefix)
 
     def test_override(self):
-        # The default can be overrided with the --strip-prefix option.
+        # The default can be overridden with the --strip-prefix option.
         # Still need to pass in one of --since or --last-hours.
         script = ModifiedBranchesScript(
             "modified-branches",
@@ -143,7 +143,7 @@ class TestModifiedBranchesAppendSuffix(TestCase):
         self.assertEqual("/**", script.options.append_suffix)
 
     def test_override(self):
-        # The default can be overrided with the --append-suffix option.
+        # The default can be overridden with the --append-suffix option.
         # Still need to pass in one of --since or --last-hours.
         script = ModifiedBranchesScript(
             "modified-branches",
diff --git a/lib/lp/codehosting/sshserver/tests/test_session.py b/lib/lp/codehosting/sshserver/tests/test_session.py
index 3aa6366..3e8831e 100644
--- a/lib/lp/codehosting/sshserver/tests/test_session.py
+++ b/lib/lp/codehosting/sshserver/tests/test_session.py
@@ -97,7 +97,7 @@ class MockProcessTransport:
 class TestExecOnlySession(AvatarTestCase):
     """Tests for ExecOnlySession.
 
-    Conch delegates responsiblity for executing commands to an object that
+    Conch delegates responsibility for executing commands to an object that
     implements ISession. The smart server only needs to handle `execCommand`
     and a couple of other book-keeping methods. The methods that relate to
     running a shell or creating a pseudo-terminal raise NotImplementedErrors.
diff --git a/lib/lp/codehosting/tests/test_lpserve.py b/lib/lp/codehosting/tests/test_lpserve.py
index fa1570f..4112a2f 100644
--- a/lib/lp/codehosting/tests/test_lpserve.py
+++ b/lib/lp/codehosting/tests/test_lpserve.py
@@ -97,8 +97,8 @@ class TestLaunchpadServe(TestCaseWithSubprocess):
         process, transport = self.start_server_inet()
         # This will trigger an error, because the XML-RPC server is not
         # running, and any filesystem access tries to get at the XML-RPC
-        # server. If this *doesn'* raise, then the test is no longer valid and
-        # we need a new way of triggering errors in the smart server.
+        # server. If this *doesn't* raise, then the test is no longer valid
+        # and we need a new way of triggering errors in the smart server.
         self.assertRaises(
             errors.UnknownErrorFromSmartServer,
             transport.list_dir,
diff --git a/lib/lp/codehosting/vfs/branchfs.py b/lib/lp/codehosting/vfs/branchfs.py
index a36597a..74461c9 100644
--- a/lib/lp/codehosting/vfs/branchfs.py
+++ b/lib/lp/codehosting/vfs/branchfs.py
@@ -271,7 +271,7 @@ class TransportDispatch:
     served read-write or read-only. It also knows how to serve .bzr control
     directories for products (to enable default stacking).
 
-    This is used for the rich codehosting VFS that we serve publically.
+    This is used for the rich codehosting VFS that we serve publicly.
     """
 
     def __init__(self, rw_transport):
@@ -608,7 +608,7 @@ class LaunchpadServer(_BaseLaunchpadServer):
             # though one might think that it would make sense to raise
             # NoSuchFile. Sadly, raising that makes the client do "clever"
             # things like say "Parent directory of
-            # bzr+ssh://bazaar.launchpad.test/~noone/firefox/branch does not
+            # bzr+ssh://bazaar.launchpad.test/~nobody/firefox/branch does not
             # exist. You may supply --create-prefix to create all leading
             # parent directories", which is just misleading.
             fault = trap_fault(
diff --git a/lib/lp/coop/answersbugs/subscribers.py b/lib/lp/coop/answersbugs/subscribers.py
index 0c35a3f..4462a65 100644
--- a/lib/lp/coop/answersbugs/subscribers.py
+++ b/lib/lp/coop/answersbugs/subscribers.py
@@ -52,7 +52,7 @@ class QuestionLinkedBugStatusChangeNotification(QuestionNotification):
     """Notification sent when a linked bug status is changed."""
 
     def initialize(self):
-        """Create a notifcation for a linked bug status change."""
+        """Create a notification for a linked bug status change."""
         assert IObjectModifiedEvent.providedBy(
             self.event
         ), "Should only be subscribed for IObjectModifiedEvent."
diff --git a/lib/lp/coop/answersbugs/tests/test_doc.py b/lib/lp/coop/answersbugs/tests/test_doc.py
index 5ff20a2..2547ef0 100644
--- a/lib/lp/coop/answersbugs/tests/test_doc.py
+++ b/lib/lp/coop/answersbugs/tests/test_doc.py
@@ -53,7 +53,7 @@ def _createUbuntuBugTaskLinkedToQuestion():
     ubuntu_question.linkBug(bug)
     [ubuntu_bugtask] = bug.bugtasks
     login(ANONYMOUS)
-    # Remove the notifcations for the newly created question.
+    # Remove the notifications for the newly created question.
     pop_notifications()
     return ubuntu_bugtask.id
 
diff --git a/lib/lp/coop/answersbugs/visibility.py b/lib/lp/coop/answersbugs/visibility.py
index 795da3b..be29ef6 100644
--- a/lib/lp/coop/answersbugs/visibility.py
+++ b/lib/lp/coop/answersbugs/visibility.py
@@ -18,7 +18,7 @@ class TestMessageVisibilityMixin:
     html_comment_text = html_escape(comment_text)
 
     def makeHiddenMessage(self):
-        """To be overwridden by subclasses.
+        """To be overridden by subclasses.
 
         This method must create and return a message bearing object
         (e.g. bug or question) with a hidden message/comment.
@@ -26,7 +26,7 @@ class TestMessageVisibilityMixin:
         raise NotImplementedError
 
     def getView(self, context, user=None, no_login=False):
-        """To be overwridden by subclasses.
+        """To be overridden by subclasses.
 
         This method returns a view object rendered on the context
         obtained from makeHiddenMessage.
@@ -67,7 +67,7 @@ class TestHideMessageControlMixin:
     control_text = "mark-spam-1"
 
     def getContext(self, comment_owner=None):
-        """To be overwridden by subclasses.
+        """To be overridden by subclasses.
 
         This method must create and return a message bearing object
         (e.g. bug or question) with a hidden message/comment.
@@ -75,7 +75,7 @@ class TestHideMessageControlMixin:
         raise NotImplementedError
 
     def getView(self, context, user=None, no_login=False):
-        """To be overwridden by subclasses.
+        """To be overridden by subclasses.
 
         This method returns a view object rendered on the context
         obtained from makeHiddenMessage.
diff --git a/lib/lp/oci/tests/test_ociregistrycredentials.py b/lib/lp/oci/tests/test_ociregistrycredentials.py
index 89adca4..c844f1a 100644
--- a/lib/lp/oci/tests/test_ociregistrycredentials.py
+++ b/lib/lp/oci/tests/test_ociregistrycredentials.py
@@ -261,7 +261,7 @@ class TestOCIRegistryCredentialsSet(OCIConfigHelperMixin, TestCaseWithFactory):
             )
 
     def test_new_owner_override(self):
-        # In certain sitations, we might want to be able to create
+        # In certain situations, we might want to be able to create
         # credentials for other people
         registrant = self.factory.makePerson()
         other_person = self.factory.makePerson()
diff --git a/lib/lp/registry/browser/announcement.py b/lib/lp/registry/browser/announcement.py
index 6260fdf..7ef6105 100644
--- a/lib/lp/registry/browser/announcement.py
+++ b/lib/lp/registry/browser/announcement.py
@@ -201,7 +201,7 @@ class AnnouncementRetargetForm(Interface):
 
 
 class AnnouncementRetargetView(AnnouncementFormMixin, LaunchpadFormView):
-    """A view to move an annoucement to another project."""
+    """A view to move an announcement to another project."""
 
     schema = AnnouncementRetargetForm
     field_names = ["target"]
@@ -241,7 +241,7 @@ class AnnouncementRetargetView(AnnouncementFormMixin, LaunchpadFormView):
 
 
 class AnnouncementPublishView(AnnouncementFormMixin, LaunchpadFormView):
-    """A view to publish an annoucement."""
+    """A view to publish an announcement."""
 
     schema = AddAnnouncementForm
     field_names = ["publication_date"]
@@ -271,7 +271,7 @@ class AnnouncementRetractView(AnnouncementFormMixin, LaunchpadFormView):
 
 
 class AnnouncementDeleteView(AnnouncementFormMixin, LaunchpadFormView):
-    """A view to delete an annoucement."""
+    """A view to delete an announcement."""
 
     schema = IAnnouncement
     next_url = None
diff --git a/lib/lp/registry/browser/distribution.py b/lib/lp/registry/browser/distribution.py
index 7f56792..d9ee9ab 100644
--- a/lib/lp/registry/browser/distribution.py
+++ b/lib/lp/registry/browser/distribution.py
@@ -737,7 +737,7 @@ class DistributionPackageSearchView(PackageSearchViewBase):
         for package_cache in self.exact_matches:
             package = package_cache.distributionsourcepackage
 
-            # In the absense of Python3.0's set comprehension, we
+            # In the absence of Python3.0's set comprehension, we
             # create a list, convert the list to a set and back again:
             distroseries_list = [
                 pubrec.distroseries.name
@@ -967,7 +967,7 @@ class DistributionPPASearchView(LaunchpadView):
             # This happens if someone hand-hacks the URL so that it has
             # more than one name_filter field.  We could do something
             # like form.getOne() so that the request would be rejected,
-            # but we can acutally do better and join the terms supplied
+            # but we can actually do better and join the terms supplied
             # instead.
             self.name_filter = " ".join(self.name_filter)
         self.show_inactive = self.request.get("show_inactive")
@@ -1198,7 +1198,7 @@ class DistributionEditView(
     def validate(self, data):
         """Constrain bug expiration to Launchpad Bugs tracker."""
         # enable_bug_expiration is disabled by JavaScript when official_malone
-        # is set False. The contraint is enforced here in case the JavaScript
+        # is set False. The constraint is enforced here in case the JavaScript
         # fails to load or activate.
         official_malone = data.get("official_malone", False)
         if not official_malone:
diff --git a/lib/lp/registry/browser/distroseries.py b/lib/lp/registry/browser/distroseries.py
index b9e1af2..d9ca04f 100644
--- a/lib/lp/registry/browser/distroseries.py
+++ b/lib/lp/registry/browser/distroseries.py
@@ -957,7 +957,7 @@ class DistroSeriesDifferenceBaseView(
     )
     next_url = None
 
-    # Differences type to display. Can be overrided by sublasses.
+    # Differences type to display. Can be overridden by subclasses.
     differences_type = DistroSeriesDifferenceType.DIFFERENT_VERSIONS
     show_parent = True
     show_parent_version = True
diff --git a/lib/lp/registry/browser/milestone.py b/lib/lp/registry/browser/milestone.py
index 8462a5c..65c88a6 100644
--- a/lib/lp/registry/browser/milestone.py
+++ b/lib/lp/registry/browser/milestone.py
@@ -321,7 +321,7 @@ class MilestoneViewMixin:
 
     @cachedproperty
     def user_counts(self):
-        """The counts of the items assigned to the currrent user."""
+        """The counts of the items assigned to the current user."""
         all_assignments = []
         if self.user:
             for status_count in get_status_counts(
diff --git a/lib/lp/registry/browser/objectreassignment.py b/lib/lp/registry/browser/objectreassignment.py
index e9d079d..09a2da8 100644
--- a/lib/lp/registry/browser/objectreassignment.py
+++ b/lib/lp/registry/browser/objectreassignment.py
@@ -111,7 +111,7 @@ class ObjectReassignmentView(LaunchpadFormView):
 
     @action("Change", name="change")
     def changeOwner(self, action, data):
-        """Change the owner of self.context to the one choosen by the user."""
+        """Change the owner of self.context to the one chosen by the user."""
         newOwner = data["owner"]
         oldOwner = getattr(self.context, self.ownerOrMaintainerAttr)
         setattr(self.context, self.ownerOrMaintainerAttr, newOwner)
diff --git a/lib/lp/registry/browser/peoplemerge.py b/lib/lp/registry/browser/peoplemerge.py
index 1a2d1f3..3dffe4e 100644
--- a/lib/lp/registry/browser/peoplemerge.py
+++ b/lib/lp/registry/browser/peoplemerge.py
@@ -1,7 +1,7 @@
 # Copyright 2009-2015 Canonical Ltd.  This software is licensed under the
 # GNU Affero General Public License version 3 (see the file LICENSE).
 
-"""People Merge related wiew classes."""
+"""People Merge related view classes."""
 
 __all__ = [
     "AdminPeopleMergeView",
@@ -138,7 +138,7 @@ class AdminMergeBaseView(ValidatingMergeView):
 
     def render(self):
         # Subclasses may define other actions that they will render manually
-        # only in certain circunstances, so don't include them in the list of
+        # only in certain circumstances, so don't include them in the list of
         # actions to be rendered.
         self.actions = [self.merge_action]
         return super().render()
diff --git a/lib/lp/registry/browser/person.py b/lib/lp/registry/browser/person.py
index ed88065..fc12a73 100644
--- a/lib/lp/registry/browser/person.py
+++ b/lib/lp/registry/browser/person.py
@@ -2345,7 +2345,7 @@ class PersonCodeOfConductEditView(LaunchpadView):
 
         if sig_ids is not None:
             sCoC_util = getUtility(ISignedCodeOfConductSet)
-            # Verify that we have multiple entries to deactive.
+            # Verify that we have multiple entries to deactivate.
             if not isinstance(sig_ids, list):
                 sig_ids = [sig_ids]
             for sig_id in sig_ids:
@@ -2589,7 +2589,7 @@ class PersonGPGView(LaunchpadView):
 
     def claim_gpg(self):
         # XXX cprov 2005-04-01: As "Claim GPG key" takes a lot of time, we
-        # should process it throught the NotificationEngine.
+        # should process it through the NotificationEngine.
         gpghandler = getUtility(IGPGHandler)
         fingerprint = self.request.form.get("fingerprint")
         self.fingerprint = gpghandler.sanitizeFingerprint(fingerprint)
@@ -2625,7 +2625,7 @@ class PersonGPGView(LaunchpadView):
             )
             return
 
-        # verify if we have multiple entries to deactive
+        # verify if we have multiple entries to deactivate
         if not isinstance(key_fingerprints, list):
             key_fingerprints = [key_fingerprints]
 
diff --git a/lib/lp/registry/browser/tests/distributionmirror-views.rst b/lib/lp/registry/browser/tests/distributionmirror-views.rst
index b9640ab..86ec5c5 100644
--- a/lib/lp/registry/browser/tests/distributionmirror-views.rst
+++ b/lib/lp/registry/browser/tests/distributionmirror-views.rst
@@ -128,7 +128,7 @@ A mirror must have an ftp, HTTPS or http URL.
 
 The URL cannot contain a fragment.
 
-    >>> bad_form["field.http_base_url"] = "http://secret.me/#fragement";
+    >>> bad_form["field.http_base_url"] = "http://secret.me/#fragment";
     >>> view = create_initialized_view(ubuntu, "+newmirror", form=bad_form)
     >>> for error in view.errors:
     ...     print(error.args[2])
@@ -147,7 +147,7 @@ The URL cannot contain a query string.
 The HTTPS URL may not have an HTTP scheme.
 
     >>> bad_form["field.http_base_url"] = ""
-    >>> bad_form["field.https_base_url"] = "http://secret.me/#fragement";
+    >>> bad_form["field.https_base_url"] = "http://secret.me/#fragment";
     >>> view = create_initialized_view(ubuntu, "+newmirror", form=bad_form)
     >>> for error in view.errors:
     ...     print(error.args[2])
@@ -158,7 +158,7 @@ The HTTPS URL may not have an HTTP scheme.
 The HTTPS URL cannot contain a fragment.
 
     >>> bad_form["field.http_base_url"] = ""
-    >>> bad_form["field.https_base_url"] = "https://secret.me/#fragement";
+    >>> bad_form["field.https_base_url"] = "https://secret.me/#fragment";
     >>> view = create_initialized_view(ubuntu, "+newmirror", form=bad_form)
     >>> for error in view.errors:
     ...     print(error.args[2])
diff --git a/lib/lp/registry/browser/tests/milestone-views.rst b/lib/lp/registry/browser/tests/milestone-views.rst
index 246b94e..ab65479 100644
--- a/lib/lp/registry/browser/tests/milestone-views.rst
+++ b/lib/lp/registry/browser/tests/milestone-views.rst
@@ -774,7 +774,7 @@ project owner or series driver.
     False
 
 Milestones with private bugs can be deleted. There is one caveate, the person
-deleting the milestone must have permssion to access the bug for it to be
+deleting the milestone must have permission to access the bug for it to be
 untargeted. It is possible for the owner or release manager to not have access
 to a private bug that was targeted to a milestone by a driver.
 
diff --git a/lib/lp/registry/browser/tests/pillar-views.rst b/lib/lp/registry/browser/tests/pillar-views.rst
index c5ae62a..069f51c 100644
--- a/lib/lp/registry/browser/tests/pillar-views.rst
+++ b/lib/lp/registry/browser/tests/pillar-views.rst
@@ -217,7 +217,7 @@ products are fully configured as translatable.
     >>> print(view.translations_usage.name)
     UNKNOWN
 
-If a product is translatable, translations is enabled in the involvment menu.
+If a product is translatable, translations is enabled in the involvement menu.
 
     >>> series = factory.makeProductSeries(product=product)
     >>> pot = factory.makePOTemplateAndPOFiles(
diff --git a/lib/lp/registry/browser/tests/poll-views_0.rst b/lib/lp/registry/browser/tests/poll-views_0.rst
index 85f8912..238ea58 100644
--- a/lib/lp/registry/browser/tests/poll-views_0.rst
+++ b/lib/lp/registry/browser/tests/poll-views_0.rst
@@ -72,7 +72,7 @@ Displaying results of condorcet polls
 
 Although condorcet polls are disabled now, everything is implemented and we're
 using a pairwise matrix to display the results. It's very trick to create this
-matrix on page templates, so the view provides a method wich return this
+matrix on page templates, so the view provides a method which return this
 matrix as a python list, with the necessary headers (the option's names).
 
     >>> poll_results = getMultiAdapter((poll, TestRequest()), name="+index")
diff --git a/lib/lp/registry/browser/tests/test_announcements.py b/lib/lp/registry/browser/tests/test_announcements.py
index cfd8234..260eec2 100644
--- a/lib/lp/registry/browser/tests/test_announcements.py
+++ b/lib/lp/registry/browser/tests/test_announcements.py
@@ -73,7 +73,7 @@ class TestAnnouncementPage(BrowserTestCase):
         :param context: HasAnnouncements subclass, that routes to an
                         announcements page.
         :param view_name: View name of the announcements.
-        :param user: Loggin with this user when showing the announcements page.
+        :param user: Login with this user when showing the announcements page.
         """
         # cleanup announcements from test data to make sure we are not
         # hiding new announcements because of pagination.
diff --git a/lib/lp/registry/browser/tests/test_distroseries.py b/lib/lp/registry/browser/tests/test_distroseries.py
index f3e256f..0e8c409 100644
--- a/lib/lp/registry/browser/tests/test_distroseries.py
+++ b/lib/lp/registry/browser/tests/test_distroseries.py
@@ -2263,7 +2263,7 @@ class TestDistroSeriesLocalDifferences(
             person, sp_name
         )
 
-        # The inital state is that 1.0-1 is not in the derived series.
+        # The initial state is that 1.0-1 is not in the derived series.
         pubs = derived_series.main_archive.getPublishedSources(
             name="my-src-name",
             version=versions["parent"],
diff --git a/lib/lp/registry/browser/tests/test_distroseriesdifference_views.py b/lib/lp/registry/browser/tests/test_distroseriesdifference_views.py
index a41900b..0ee9a1a 100644
--- a/lib/lp/registry/browser/tests/test_distroseriesdifference_views.py
+++ b/lib/lp/registry/browser/tests/test_distroseriesdifference_views.py
@@ -800,7 +800,7 @@ class DistroSeriesDifferenceTemplateTestCase(TestCaseWithFactory):
             )
 
     def test_package_diffs_hidden_to_unprivileged_user_if_not_available(self):
-        # No diff information is shown if pacakge diffs are not available and
+        # No diff information is shown if package diffs are not available and
         # the user does not have permission to request their creation.
         ds_diff = self.factory.makeDistroSeriesDifference(
             versions={
diff --git a/lib/lp/registry/browser/tests/test_milestone.py b/lib/lp/registry/browser/tests/test_milestone.py
index 6578fd8..4959bd4 100644
--- a/lib/lp/registry/browser/tests/test_milestone.py
+++ b/lib/lp/registry/browser/tests/test_milestone.py
@@ -191,7 +191,7 @@ class TestAddMilestoneViews(TestCaseWithFactory):
             "field.actions.register": "Register Milestone",
         }
         view = create_initialized_view(self.series, "+addmilestone", form=form)
-        # It's important to make sure no errors occured,
+        # It's important to make sure no errors occurred,
         # but also confirm that the milestone was created.
         self.assertEqual([], view.errors)
         self.assertEqual("1.1", self.product.milestones[0].name)
diff --git a/lib/lp/registry/browser/tests/test_peoplemerge.py b/lib/lp/registry/browser/tests/test_peoplemerge.py
index 6c5dde4..70c77ce 100644
--- a/lib/lp/registry/browser/tests/test_peoplemerge.py
+++ b/lib/lp/registry/browser/tests/test_peoplemerge.py
@@ -405,7 +405,7 @@ class TestRequestPeopleMergeMultipleEmailsView(TestCaseWithFactory):
         self.assertTrue(message.endswith("Select again."))
 
     def test_removed_email(self):
-        # When the duplicate user deletes an email addres while the merge
+        # When the duplicate user deletes an email address while the merge
         # form is being complete, the view must abort and ask the user
         # to restart the merge request.
         form = {
diff --git a/lib/lp/registry/browser/tests/test_person.py b/lib/lp/registry/browser/tests/test_person.py
index c4274d4..0b08152 100644
--- a/lib/lp/registry/browser/tests/test_person.py
+++ b/lib/lp/registry/browser/tests/test_person.py
@@ -459,7 +459,7 @@ class TestPersonIndexView(BrowserTestCase):
         )
 
     def test_description_widget(self):
-        # The view provides a widget to render ond edit the person description.
+        # The view provides a widget to render and edit the person description.
         person = self.factory.makePerson()
         view = create_initialized_view(person, "+index")
         self.assertIsInstance(view.description_widget, TextAreaEditorWidget)
@@ -1034,7 +1034,7 @@ class TestPersonEditView(TestPersonRenameFormMixin, TestCaseWithFactory):
         self.assertIn([added_email], to_addrs)
 
     def test_validate_token(self):
-        """Hitting +validateemail should actuall validate the email."""
+        """Hitting +validateemail should actually validate the email."""
         stub.test_emails = []
         added_email = self.factory.getUniqueEmailAddress()
         self.createAddEmailView(added_email)
diff --git a/lib/lp/registry/doc/commercialsubscription.rst b/lib/lp/registry/doc/commercialsubscription.rst
index c134074..6183965 100644
--- a/lib/lp/registry/doc/commercialsubscription.rst
+++ b/lib/lp/registry/doc/commercialsubscription.rst
@@ -31,7 +31,7 @@ Commercial subscriptions have zope.Public permissions for reading.
     >>> print(bzr.commercial_subscription.product.name)
     bzr
 
-For modification, launchpad.Commerical is required.  Anonymous users,
+For modification, launchpad.Commercial is required.  Anonymous users,
 regular users, and the project owner all are denied.
 
     >>> check_permission("launchpad.Commercial", bzr.commercial_subscription)
@@ -198,7 +198,7 @@ Product Licence Reviews
 
 The forReview() method allows searching for products whose licence needs to
 be reviewed. You can search by text in the Product table's full text index
-as well as the license_info field. The results are ordered by date ceated
+as well as the license_info field. The results are ordered by date created
 then display name.
 
     >>> from lp.services.database.sqlbase import flush_database_updates
diff --git a/lib/lp/registry/doc/distroseries.rst b/lib/lp/registry/doc/distroseries.rst
index f55dc0f..532db53 100644
--- a/lib/lp/registry/doc/distroseries.rst
+++ b/lib/lp/registry/doc/distroseries.rst
@@ -818,7 +818,7 @@ Distributions have drivers, who are people that have permission to approve
 bugs and features for specific releases. The rules are that:
 
  1. a "driver" can be set on either Distribution or DistroSeries
- 2. drivers are only actually relevant on a DistroSeries, because thats the
+ 2. drivers are only actually relevant on a DistroSeries, because that's the
     granularity at which we track spec/bug targeting
  3. the important attribute is ".drivers" on a distroseries, it is
     calculated based on the combination of owners and drivers in the
@@ -898,8 +898,8 @@ driver. Here, we expect the driver to be the owner of the distribution
     mark
 
 
-Lastest Uploads
----------------
+Latest Uploads
+--------------
 
 IDistroSeries provides the 'getLatestUpload' method which returns a
 list of the last 5 (five) IDistributionSourcePackageRelease (IDSPR)
diff --git a/lib/lp/registry/doc/person.rst b/lib/lp/registry/doc/person.rst
index f90db65..40e8932 100644
--- a/lib/lp/registry/doc/person.rst
+++ b/lib/lp/registry/doc/person.rst
@@ -1465,7 +1465,7 @@ Now Celso is a bug contributor in Launchpad.
     >>> cprov.isBugContributor(user=foobar)
     True
 
-Celso is a bug contributer in the context of the `firefox` product.
+Celso is a bug contributor in the context of the `firefox` product.
 
     >>> from lp.registry.interfaces.projectgroup import IProjectGroupSet
     >>> cprov.isBugContributorInTarget(user=foobar, target=firefox)
@@ -1577,7 +1577,7 @@ be raised.
 Probationary users
 ------------------
 
-Users without karma have not demostrated their intentions and may not
+Users without karma have not demonstrated their intentions and may not
 have the same privileges as users who have made contributions. Users who
 have made recent contributions are not on probation.
 
diff --git a/lib/lp/registry/doc/poll-preconditions.rst b/lib/lp/registry/doc/poll-preconditions.rst
index a69b865..86ec46c 100644
--- a/lib/lp/registry/doc/poll-preconditions.rst
+++ b/lib/lp/registry/doc/poll-preconditions.rst
@@ -2,8 +2,8 @@ Poll preconditions
 ==================
 
 There's some preconditions that we need to meet to vote in polls and remove
-options from them, Not meeting these preconditions is a programming error and
-should be threated as so.
+options from them.  Not meeting these preconditions is a programming error and
+should be treated as such.
 
     >>> from zope.component import getUtility
     >>> from datetime import timedelta
diff --git a/lib/lp/registry/doc/productseries.rst b/lib/lp/registry/doc/productseries.rst
index af3054d..5f931ff 100644
--- a/lib/lp/registry/doc/productseries.rst
+++ b/lib/lp/registry/doc/productseries.rst
@@ -375,7 +375,7 @@ rules are that:
 
  1. a "driver" can be set on either ProjectGroup, Product or ProductSeries
 
- 2. drivers are only actually relevant on a ProductSeries, because thats
+ 2. drivers are only actually relevant on a ProductSeries, because that's
     the granularity at which we track spec/bug targeting
 
  3. the important attribute is ".drivers" on a productseries, it is
diff --git a/lib/lp/registry/feed/announcement.py b/lib/lp/registry/feed/announcement.py
index d0cf327..0e37dae 100644
--- a/lib/lp/registry/feed/announcement.py
+++ b/lib/lp/registry/feed/announcement.py
@@ -63,7 +63,7 @@ class AnnouncementsFeedBase(FeedBase):
         title = self._entryTitle(announcement)
         # The link_alternate for the entry is the human-readable alternate URL
         # for the entry.  For example:
-        # http://launchpad.net/ubuntu/+announcment/12
+        # http://launchpad.net/ubuntu/+announcement/12
         entry_link_alternate = "%s%s" % (
             canonical_url(announcement.target, rootsite=self.rootsite),
             "/+announcement/%d" % announcement.id,
@@ -79,7 +79,7 @@ class AnnouncementsFeedBase(FeedBase):
         )
         # The entry for an announcement has distinct dates for created,
         # updated, and published.  For some data, the created and published
-        # dates will be the same.  The announcements also only have a singe
+        # dates will be the same.  The announcements also only have a single
         # author.
 
         entry_id = "tag:launchpad.net,%s:/+announcement/%d" % (
diff --git a/lib/lp/registry/interfaces/distribution.py b/lib/lp/registry/interfaces/distribution.py
index 2d3fcef..7fdc5ff 100644
--- a/lib/lp/registry/interfaces/distribution.py
+++ b/lib/lp/registry/interfaces/distribution.py
@@ -1289,7 +1289,7 @@ class IDistributionSet(Interface):
     def get(distributionid):
         """Return the IDistribution with the given distributionid."""
 
-    def getByName(distroname):
+    def getByName(name):
         """Return the IDistribution with the given name or None."""
 
     def new(
diff --git a/lib/lp/registry/interfaces/distributionmirror.py b/lib/lp/registry/interfaces/distributionmirror.py
index 73456e2..4f04081 100644
--- a/lib/lp/registry/interfaces/distributionmirror.py
+++ b/lib/lp/registry/interfaces/distributionmirror.py
@@ -683,7 +683,7 @@ class IDistributionMirror(Interface):
         all of this mirror's content objects (MirrorDistroArchSeries,
         MirrorDistroSeriesSource or MirrorCDImageDistroSeriess).
 
-        For RELEASE mirrors, the overall freshness is either UPTODATE, if the
+        For RELEASE mirrors, the overall freshness is either UP, if the
         mirror contains all ISO images that it should or UNKNOWN if it doesn't
         contain one or more ISO images.
         """
diff --git a/lib/lp/registry/interfaces/distroseries.py b/lib/lp/registry/interfaces/distroseries.py
index 22fddd0..b6342c5 100644
--- a/lib/lp/registry/interfaces/distroseries.py
+++ b/lib/lp/registry/interfaces/distroseries.py
@@ -375,7 +375,7 @@ class IDistroSeriesPublic(
             Interface,
             title=_(
                 "DistroArchSeries designed to build "
-                "architecture-independent packages whithin this "
+                "architecture-independent packages within this "
                 "distroseries context."
             ),
             default=None,
@@ -464,7 +464,7 @@ class IDistroSeriesPublic(
 
     last_delta_language_pack_exported = Object(
         title=_(
-            "Lastest exported language pack with updated translation files."
+            "Latest exported language pack with updated translation files."
         ),
         required=False,
         readonly=True,
diff --git a/lib/lp/registry/interfaces/karma.py b/lib/lp/registry/interfaces/karma.py
index f800b2c..37d232e 100644
--- a/lib/lp/registry/interfaces/karma.py
+++ b/lib/lp/registry/interfaces/karma.py
@@ -211,7 +211,7 @@ class IKarmaTotalCache(Interface):
 
 
 class IKarmaCategory(Interface):
-    """A catgory of karma events."""
+    """A category of karma events."""
 
     id = Int(title=_("Database ID"), required=True, readonly=True)
     name = Attribute("The name of the category.")
diff --git a/lib/lp/registry/interfaces/person.py b/lib/lp/registry/interfaces/person.py
index d962b73..2aa3866 100644
--- a/lib/lp/registry/interfaces/person.py
+++ b/lib/lp/registry/interfaces/person.py
@@ -1637,7 +1637,7 @@ class IPersonViewRestricted(
         """Return the paths to all teams related to this person."""
 
     def isBugContributor(user):
-        """Is the person a contributer to bugs in Launchpad?
+        """Is the person a contributor to bugs in Launchpad?
 
         Return True if the user has any bugs assigned to them, either
         directly or by team participation.
diff --git a/lib/lp/registry/interfaces/poll.py b/lib/lp/registry/interfaces/poll.py
index f67e375..fee8d8b 100644
--- a/lib/lp/registry/interfaces/poll.py
+++ b/lib/lp/registry/interfaces/poll.py
@@ -322,7 +322,7 @@ class IPoll(Interface):
         This method can be used only if this poll is still open and if this is
         a Simple-style poll.
 
-        :option: The choosen option.
+        :option: The chosen option.
 
         :when: Optional argument used only by our tests, to test if the poll
                is/was/will be open at a specific date.
@@ -589,11 +589,11 @@ class IVote(Interface):
     )
 
     option = Int(
-        title=_("The PollOption choosen."), required=True, readonly=False
+        title=_("The PollOption chosen."), required=True, readonly=False
     )
 
     preference = Int(
-        title=_("The preference of the choosen PollOption"),
+        title=_("The preference of the chosen PollOption"),
         required=True,
         readonly=False,
     )
@@ -618,7 +618,7 @@ class IVoteSet(Interface):
         """Return the list of votes with the given token.
 
         For polls whose type is SIMPLE, this list will contain a single vote,
-        because in SIMPLE poll only one option can be choosen.
+        because in SIMPLE poll only one option can be chosen.
         """
 
     def getVotesByOption(option):
diff --git a/lib/lp/registry/interfaces/productseries.py b/lib/lp/registry/interfaces/productseries.py
index f985de4..9938a76 100644
--- a/lib/lp/registry/interfaces/productseries.py
+++ b/lib/lp/registry/interfaces/productseries.py
@@ -350,7 +350,7 @@ class IProductSeriesView(
 
     def getPackagingInDistribution(distribution):
         """Return all the Packaging entries for this product series for the
-        given distribution. Note that this only returns EXPLICT packaging
+        given distribution. Note that this only returns EXPLICIT packaging
         entries, it does not look at distro series ancestry in the same way
         that IProductSeries.getPackage() does.
         """
diff --git a/lib/lp/registry/interfaces/projectgroup.py b/lib/lp/registry/interfaces/projectgroup.py
index 43bdf63..0c760d6 100644
--- a/lib/lp/registry/interfaces/projectgroup.py
+++ b/lib/lp/registry/interfaces/projectgroup.py
@@ -411,10 +411,10 @@ class IProjectGroupPublic(
         """Get all products that can be edited by user."""
 
     def has_translatable():
-        """Return a boolean showing the existance of translatables products."""
+        """Return a boolean showing the existence of translatables products."""
 
     def has_branches():
-        """Return a boolean showing the existance of products with branches."""
+        """Return a boolean showing the existence of products with branches."""
 
     def hasProducts():
         """Returns True if a project has products associated with it, False
diff --git a/lib/lp/registry/interfaces/sourcepackage.py b/lib/lp/registry/interfaces/sourcepackage.py
index d8f776e..da9a5e0 100644
--- a/lib/lp/registry/interfaces/sourcepackage.py
+++ b/lib/lp/registry/interfaces/sourcepackage.py
@@ -594,7 +594,7 @@ class SourcePackageUrgency(DBEnumeratedType):
 
         This source package release does not contain any significant or
         important updates, it might be a cleanup or documentation update
-        fixing typos and speling errors, or simply a minor upstream
+        fixing typos and spelling errors, or simply a minor upstream
         update.
         """,
     )
diff --git a/lib/lp/registry/interfaces/sourcepackagename.py b/lib/lp/registry/interfaces/sourcepackagename.py
index 3c4b0b7..30c8b55 100644
--- a/lib/lp/registry/interfaces/sourcepackagename.py
+++ b/lib/lp/registry/interfaces/sourcepackagename.py
@@ -16,7 +16,7 @@ from lp.app.validators.name import name_validator
 
 
 class ISourcePackageName(Interface):
-    """Interface provied by a SourcePackageName.
+    """Interface provided by a SourcePackageName.
 
     This is a tiny table that allows multiple SourcePackage entities to share
     a single name.
@@ -55,7 +55,7 @@ class ISourcePackageNameSet(Interface):
         """return an iselectresults representing all package names"""
 
     def queryByName(name):
-        """Get a sourcepackagename by its name atttribute.
+        """Get a sourcepackagename by its name attribute.
 
         Returns the matching ISourcePackageName or None.
         """
diff --git a/lib/lp/registry/javascript/distroseries/tests/test_initseries.html b/lib/lp/registry/javascript/distroseries/tests/test_initseries.html
index 3a09e4f..11a391b 100644
--- a/lib/lp/registry/javascript/distroseries/tests/test_initseries.html
+++ b/lib/lp/registry/javascript/distroseries/tests/test_initseries.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <html>
   <head>
-  <title>Launchpad DistroSeries Initialiazation</title>
+  <title>Launchpad DistroSeries Initialization</title>
 
   <!-- YUI and test setup -->
   <!-- YUI and test setup -->
diff --git a/lib/lp/registry/model/codeofconduct.py b/lib/lp/registry/model/codeofconduct.py
index 0e91fdb..0ed0369 100644
--- a/lib/lp/registry/model/codeofconduct.py
+++ b/lib/lp/registry/model/codeofconduct.py
@@ -425,7 +425,7 @@ class SignedCodeOfConductSet:
         # XXX: cprov 2005-02-27:
         # FTI presents problems when query by incomplete names
         # and I'm not sure if the best solution here is to use
-        # trivial ILIKE query. Oppinion required on Review.
+        # trivial ILIKE query. Opinion required on Review.
 
         clauses = [SignedCodeOfConduct.owner == Person.id]
 
diff --git a/lib/lp/registry/model/distributionsourcepackage.py b/lib/lp/registry/model/distributionsourcepackage.py
index 5daba67..0b6a1ce 100644
--- a/lib/lp/registry/model/distributionsourcepackage.py
+++ b/lib/lp/registry/model/distributionsourcepackage.py
@@ -615,7 +615,7 @@ class DistributionSourcePackageInDatabase(StormBase):
     # avoid database hits without causing consistency issues.
     _cache = ThreadLocalLRUCache(1000, 700)
     # Synchronize the mapping cache with transactions. The mapping is not
-    # especially useful after a tranaction completes because Storm invalidates
+    # especially useful after a transaction completes because Storm invalidates
     # its caches, and leaving the mapping cache in place causes difficult to
     # understand test interactions.
     transaction.manager.registerSynch(_cache)
diff --git a/lib/lp/registry/model/distroseries.py b/lib/lp/registry/model/distroseries.py
index 0c7cbd8..aa04399 100644
--- a/lib/lp/registry/model/distroseries.py
+++ b/lib/lp/registry/model/distroseries.py
@@ -616,7 +616,7 @@ class DistroSeries(
         translatable messages, and the source package release's component.
         """
         # We join to SourcePackageName, ProductSeries, and Product to cache
-        # the objects that are implcitly needed to work with a
+        # the objects that are implicitly needed to work with a
         # Packaging object.
         joins, conditions = self._current_sourcepackage_joins_and_conditions
         # XXX: EdwinGrubbs 2010-07-29 bug=374777
@@ -664,7 +664,7 @@ class DistroSeries(
         """See getPrioritized*."""
         # Bugs and PO messages are heuristically scored. These queries
         # can easily timeout so filters and weights are used to create
-        # an acceptable prioritization of packages that is fast to excecute.
+        # an acceptable prioritization of packages that is fast to execute.
         return 0.5
 
     @property
@@ -675,7 +675,7 @@ class DistroSeries(
         """
         # Bugs and PO messages are heuristically scored. These queries
         # can easily timeout so filters and weights are used to create
-        # an acceptable prioritization of packages that is fast to excecute.
+        # an acceptable prioritization of packages that is fast to execute.
         po_message_weight = self._current_sourcepackage_po_weight
         message_score = """
             LEFT JOIN (
diff --git a/lib/lp/registry/model/person.py b/lib/lp/registry/model/person.py
index 6f9d7ee..ab52ad0 100644
--- a/lib/lp/registry/model/person.py
+++ b/lib/lp/registry/model/person.py
@@ -1028,7 +1028,7 @@ class Person(
                 *search_params, prejoins=prejoins
             )
         if len(kwargs) > 0:
-            # if keyword arguments are supplied, use the deault
+            # if keyword arguments are supplied, use the default
             # implementation in HasBugsBase.
             return HasBugsBase.searchTasks(
                 self, search_params, prejoins=prejoins, **kwargs
@@ -1380,7 +1380,7 @@ class Person(
     def is_probationary(self):
         """See `IPerson`.
 
-        Users without karma have not demostrated their intentions may not
+        Users without karma have not demonstrated their intentions may not
         have the same privileges as users who have made contributions.
         """
         return not self.is_team and self.karma == 0
@@ -1463,7 +1463,7 @@ class Person(
 
         if not team.is_team:
             # It is possible that this team is really a user since teams
-            # are users are often interchangable.
+            # are users are often interchangeable.
             return False
 
         if self._inTeam_cache is None:
@@ -3474,7 +3474,7 @@ class Person(
 
     @staticmethod
     def _is_ubuntu_coc_signer_condition():
-        """Generate a Storm Expr for determing the coc signing status."""
+        """Generate a Storm Expr for determining the coc signing status."""
         sigset = getUtility(ISignedCodeOfConductSet)
         lastdate = sigset.getLastAcceptedDate()
         return And(
@@ -4097,7 +4097,7 @@ class PersonSet:
         )
         if not dry_run:
             # ISSHKeySet does not restrict the same SSH key being added
-            # multiple times, so make sure we delte them all:
+            # multiple times, so make sure we delete them all:
             for key in keys:
                 key.destroySelf(send_notification=False)
 
diff --git a/lib/lp/registry/model/product.py b/lib/lp/registry/model/product.py
index 12f1035..f7c3b99 100644
--- a/lib/lp/registry/model/product.py
+++ b/lib/lp/registry/model/product.py
@@ -381,7 +381,7 @@ class Product(
     def date_next_suggest_packaging(self):
         """See `IProduct`
 
-        Returns None; exists only to maintain API compatability.
+        Returns None; exists only to maintain API compatibility.
         """
         return None
 
@@ -402,7 +402,7 @@ class Product(
     def date_next_suggest_packaging(self, value):
         """See `IProduct`
 
-        Ignores supplied value; exists only to maintain API compatability.
+        Ignores supplied value; exists only to maintain API compatibility.
         """
         pass
 
diff --git a/lib/lp/registry/model/sourcepackage.py b/lib/lp/registry/model/sourcepackage.py
index 8a0280b..119dc09 100644
--- a/lib/lp/registry/model/sourcepackage.py
+++ b/lib/lp/registry/model/sourcepackage.py
@@ -127,7 +127,7 @@ class SourcePackageQuestionTargetMixin(QuestionTargetMixin):
 
     def getAnswerContactsForLanguage(self, language):
         """See `IQuestionTarget`."""
-        # Sourcepackages are supported by their distribtions too.
+        # Sourcepackages are supported by their distributions too.
         persons = set(self.distribution.getAnswerContactsForLanguage(language))
         persons.update(
             set(
diff --git a/lib/lp/registry/personmerge.py b/lib/lp/registry/personmerge.py
index 9de794b..3318c6b 100644
--- a/lib/lp/registry/personmerge.py
+++ b/lib/lp/registry/personmerge.py
@@ -950,7 +950,7 @@ def _purgeUnmergableTeamArtifacts(from_team, to_team, reviewer):
     # Team email addresses are not transferable.
     from_team.setContactAddress(None)
     # Memberships in the team are not transferable because there
-    # is a high probablity there will be a CyclicTeamMembershipError.
+    # is a high probability there will be a CyclicTeamMembershipError.
     comment = (
         "Deactivating all members as this team is being merged into %s."
         % to_team.name
@@ -958,7 +958,7 @@ def _purgeUnmergableTeamArtifacts(from_team, to_team, reviewer):
     membershipset = getUtility(ITeamMembershipSet)
     membershipset.deactivateActiveMemberships(from_team, comment, reviewer)
     # Memberships in other teams are not transferable because there
-    # is a high probablity there will be a CyclicTeamMembershipError.
+    # is a high probability there will be a CyclicTeamMembershipError.
     all_super_teams = set(from_team.teams_participated_in)
     indirect_super_teams = set(from_team.teams_indirectly_participated_in)
     super_teams = all_super_teams - indirect_super_teams
diff --git a/lib/lp/registry/scripts/productreleasefinder/finder.py b/lib/lp/registry/scripts/productreleasefinder/finder.py
index 3512c48..e810a48 100644
--- a/lib/lp/registry/scripts/productreleasefinder/finder.py
+++ b/lib/lp/registry/scripts/productreleasefinder/finder.py
@@ -193,7 +193,7 @@ class ProductReleaseFinder:
     ):
         """Create a ProductRelease (if needed), and attach tarball"""
         product = getUtility(IProductSet).getByName(product_name)
-        # This can match a milestone on a differnt series than the
+        # This can match a milestone on a different series than the
         # one passed, since milestones (and their releases) are unique
         # to a product.
         milestone = product.getMilestone(release_name)
diff --git a/lib/lp/registry/scripts/productreleasefinder/hose.py b/lib/lp/registry/scripts/productreleasefinder/hose.py
index 05a4722..e538af2 100644
--- a/lib/lp/registry/scripts/productreleasefinder/hose.py
+++ b/lib/lp/registry/scripts/productreleasefinder/hose.py
@@ -20,7 +20,7 @@ class Hose:
     """Hose.
 
     This class should be instantiated with a dictionary of url and glob pairs,
-    it will use a walker to recursively decend each URL and map each URL
+    it will use a walker to recursively descend each URL and map each URL
     to a file.
 
     It can be used as an iterator to yield (key, url) for each URL where
diff --git a/lib/lp/registry/scripts/teamparticipation.py b/lib/lp/registry/scripts/teamparticipation.py
index 0e23a1d..22f37c0 100644
--- a/lib/lp/registry/scripts/teamparticipation.py
+++ b/lib/lp/registry/scripts/teamparticipation.py
@@ -52,7 +52,7 @@ def report_progress(log, interval, results, what):
     :param log: A logger.
     :param interval: How many results to report progress about.
     :param results: An iterable of things.
-    :param what: A string descriping what the results are.
+    :param what: A string describing what the results are.
     """
     for num, result in zip(count(1), results):
         if num % interval == 0:
diff --git a/lib/lp/registry/security.py b/lib/lp/registry/security.py
index 97e7643..a5be7ca 100644
--- a/lib/lp/registry/security.py
+++ b/lib/lp/registry/security.py
@@ -575,7 +575,7 @@ class AdminByCommercialTeamOrAdminsOrPerson(AdminByCommercialTeamOrAdmins):
     usedfor = IPerson
 
     def checkAuthenticated(self, user):
-        """Users can manage their commericial data and admins can help."""
+        """Users can manage their commercial data and admins can help."""
         return self.obj.id == user.id or super().checkAuthenticated(user)
 
 
diff --git a/lib/lp/registry/services/tests/test_sharingservice.py b/lib/lp/registry/services/tests/test_sharingservice.py
index 4025c1b..c7707ea 100644
--- a/lib/lp/registry/services/tests/test_sharingservice.py
+++ b/lib/lp/registry/services/tests/test_sharingservice.py
@@ -710,7 +710,7 @@ class TestSharingService(
 
         # Make existing grants to ensure sharePillarInformation handles those
         # cases correctly.
-        # First, a grant that is in the add set - it wil be retained.
+        # First, a grant that is in the add set - it will be retained.
         es_policy = getUtility(IAccessPolicySource).find(
             ((pillar, InformationType.PRIVATESECURITY),)
         )[0]
diff --git a/lib/lp/registry/stories/announcements/xx-announcements.rst b/lib/lp/registry/stories/announcements/xx-announcements.rst
index 4b83640..6c36e4e 100644
--- a/lib/lp/registry/stories/announcements/xx-announcements.rst
+++ b/lib/lp/registry/stories/announcements/xx-announcements.rst
@@ -618,7 +618,7 @@ it.
     >>> "Kubuntu announcement" in announcements(priv_browser.contents)
     True
 
-However, someone who is not an adminstrator on the target project will
+However, someone who is not an administrator on the target project will
 not be able to move it.
 
     >>> kamion_browser = setupBrowser(
diff --git a/lib/lp/registry/stories/distroseries/xx-distroseries-index.rst b/lib/lp/registry/stories/distroseries/xx-distroseries-index.rst
index 8c143ff..4eb7a71 100644
--- a/lib/lp/registry/stories/distroseries/xx-distroseries-index.rst
+++ b/lib/lp/registry/stories/distroseries/xx-distroseries-index.rst
@@ -58,7 +58,7 @@ on the series' details.
     Binary packages: 4
 
 On series that have no source or binary packages, the portlet will
-change its text slightly to annouce this:
+change its text slightly to announce this:
 
     >>> anon_browser.open("http://launchpad.test/debian/sarge";)
     >>> print(
diff --git a/lib/lp/registry/stories/distroseries/xx-show-distroseries-packaging.rst b/lib/lp/registry/stories/distroseries/xx-show-distroseries-packaging.rst
index 684afd5..961a6a3 100644
--- a/lib/lp/registry/stories/distroseries/xx-show-distroseries-packaging.rst
+++ b/lib/lp/registry/stories/distroseries/xx-show-distroseries-packaging.rst
@@ -1,7 +1,7 @@
 Distro series packaging
 =======================
 
-The distro series packaging page is accssible to any user from the distro
+The distro series packaging page is accessible to any user from the distro
 series +index page.
 
     >>> anon_browser.open("http://launchpad.test/ubuntu/hoary";)
diff --git a/lib/lp/registry/stories/milestone/object-milestones.rst b/lib/lp/registry/stories/milestone/object-milestones.rst
index 976a555..c349053 100644
--- a/lib/lp/registry/stories/milestone/object-milestones.rst
+++ b/lib/lp/registry/stories/milestone/object-milestones.rst
@@ -200,7 +200,7 @@ distribution:
 Bugs targeted to multiple series
 ................................
 
-Setup this embarrasing story.
+Setup this embarrassing story.
 
     >>> browser = setupBrowser(auth="Basic test@xxxxxxxxxxxxx:test")
     >>> browser.open("http://bugs.launchpad.test/firefox/";)
diff --git a/lib/lp/registry/stories/milestone/xx-milestone-add-and-edit.rst b/lib/lp/registry/stories/milestone/xx-milestone-add-and-edit.rst
index 00a9c3f..fe19091 100644
--- a/lib/lp/registry/stories/milestone/xx-milestone-add-and-edit.rst
+++ b/lib/lp/registry/stories/milestone/xx-milestone-add-and-edit.rst
@@ -70,7 +70,7 @@ create a new milestone.
 Milestone bug subscriptions
 ---------------------------
 
-To receive email notifications about bugs pretaining to a milestone, we
+To receive email notifications about bugs pertaining to a milestone, we
 can create structural bug subscriptions.
 
     >>> user_browser.open("http://launchpad.test/firefox/+milestone/1.0";)
diff --git a/lib/lp/registry/stories/person/xx-person-home.rst b/lib/lp/registry/stories/person/xx-person-home.rst
index 1fefe5e..003386e 100644
--- a/lib/lp/registry/stories/person/xx-person-home.rst
+++ b/lib/lp/registry/stories/person/xx-person-home.rst
@@ -182,7 +182,7 @@ yourself; others won't see it:
     >>> print(extract_text(find_tag_by_id(browser.contents, "ubuntu-coc")))
     Signed Ubuntu Code of Conduct: No
 
-You can grab certain bits of information programatically:
+You can grab certain bits of information programmatically:
 
     >>> print(extract_text(find_tag_by_id(browser.contents, "karma-total")))
     130
diff --git a/lib/lp/registry/stories/product/xx-product-index.rst b/lib/lp/registry/stories/product/xx-product-index.rst
index d24c8c9..06afe68 100644
--- a/lib/lp/registry/stories/product/xx-product-index.rst
+++ b/lib/lp/registry/stories/product/xx-product-index.rst
@@ -168,7 +168,7 @@ A non-owner does not see that a commercial subscription is due.
     ... )
     None
 
-If the project qualifies for free hosting, tghe portlet is not displayed.
+If the project qualifies for free hosting, the portlet is not displayed.
 
     >>> firefox.licenses = [License.GNU_GPL_V2]
     >>> flush_database_updates()
diff --git a/lib/lp/registry/stories/productseries/xx-productseries-add-and-edit.rst b/lib/lp/registry/stories/productseries/xx-productseries-add-and-edit.rst
index 52dd3a5..85201ed 100644
--- a/lib/lp/registry/stories/productseries/xx-productseries-add-and-edit.rst
+++ b/lib/lp/registry/stories/productseries/xx-productseries-add-and-edit.rst
@@ -68,7 +68,7 @@ can reach the +edit page.
     ['Active Development']
 
 Then we edit the information about the series. First we try to use a
-name already in use and an invalud release URL pattern:
+name already in use and an invalid release URL pattern:
 
     >>> browser.getControl("Name").value = "1.0"
     >>> browser.getControl(
diff --git a/lib/lp/registry/tests/test_distribution.py b/lib/lp/registry/tests/test_distribution.py
index 2fa9c4f..26bdb59 100644
--- a/lib/lp/registry/tests/test_distribution.py
+++ b/lib/lp/registry/tests/test_distribution.py
@@ -1600,7 +1600,7 @@ class DistroSnapshotTestCase(TestCaseWithFactory):
         self.distribution = self.factory.makeDistribution(name="boobuntu")
 
     def test_snapshot(self):
-        """Snapshots of distributions should not include marked attribues.
+        """Snapshots of distributions should not include marked attributes.
 
         Wrap an export with 'doNotSnapshot' to force the snapshot to not
         include that attribute.
diff --git a/lib/lp/registry/tests/test_distributionmirror_prober.py b/lib/lp/registry/tests/test_distributionmirror_prober.py
index 8aba075..11cbc98 100644
--- a/lib/lp/registry/tests/test_distributionmirror_prober.py
+++ b/lib/lp/registry/tests/test_distributionmirror_prober.py
@@ -1011,8 +1011,8 @@ class TestMirrorCDImageProberCallbacks(TestCaseWithFactory):
 
     def test_unexpected_failures_are_logged_but_not_raised(self):
         # Errors which are not expected as logged using the
-        # prober's logger to make sure people see it while still alowing other
-        # mirrors to be probed.
+        # prober's logger to make sure people see it while still allowing
+        # other mirrors to be probed.
         logger = self.getLogger()
         callbacks = self.makeMirrorProberCallbacks()
         failure = callbacks.ensureOrDeleteMirrorCDImageSeries(
diff --git a/lib/lp/registry/tests/test_distroseriesdifference.py b/lib/lp/registry/tests/test_distroseriesdifference.py
index 4737683..9b4f2c7 100644
--- a/lib/lp/registry/tests/test_distroseriesdifference.py
+++ b/lib/lp/registry/tests/test_distroseriesdifference.py
@@ -1366,7 +1366,7 @@ class DistroSeriesDifferenceSourceTestCase(TestCaseWithFactory):
         return dsd
 
     def test_getForDistroSeries_filters_by_spr_creator(self):
-        # Specifiying changed_by limits the DSDs returned to those where the
+        # Specifying changed_by limits the DSDs returned to those where the
         # associated SPR was created by the given user or team.
         megatron = self.factory.makePersonByName("Megatron")
         alderney = self.factory.makePersonByName("Alderney")
diff --git a/lib/lp/registry/tests/test_initderiveddistroseries.py b/lib/lp/registry/tests/test_initderiveddistroseries.py
index 7bbb9af..1da0e8f 100644
--- a/lib/lp/registry/tests/test_initderiveddistroseries.py
+++ b/lib/lp/registry/tests/test_initderiveddistroseries.py
@@ -142,11 +142,11 @@ class TestDeriveDistroSeriesMultipleParents(InitializationHelperTestCase):
         # to InitializeDistroSeries to check for any pending builds.
         parent, parent_das = self.setupParent()
         # Create packageset p1 with a build.
-        p1, packageset1, unsed = self.createPackageInPackageset(
+        p1, packageset1, _ = self.createPackageInPackageset(
             parent, "p1", "packageset1", True
         )
         # Create packageset p2 without a build.
-        p2, packageset2, unsed = self.createPackageInPackageset(
+        p2, packageset2, _ = self.createPackageInPackageset(
             parent, "p2", "packageset2", False
         )
         child = self.factory.makeDistroSeries(
diff --git a/lib/lp/registry/tests/test_mailinglist.py b/lib/lp/registry/tests/test_mailinglist.py
index 06f6626..2e56c15 100644
--- a/lib/lp/registry/tests/test_mailinglist.py
+++ b/lib/lp/registry/tests/test_mailinglist.py
@@ -562,8 +562,8 @@ class MailingListSetTestCase(TestCaseWithFactory):
         self.assertContentEqual(team_names, result.keys())
 
     def test_getSenderAddresses_dict_values(self):
-        # getSenderAddresses() returns a dict of team namess with a list of
-        # all membera display names and email addresses.
+        # getSenderAddresses() returns a dict of team names with a list of
+        # all members' display names and email addresses.
         # {team_name: [(member_displayname, member_email) ...]}
         team1, member1 = self.factory.makeTeamWithMailingListSubscribers(
             "team1", auto_subscribe=False
diff --git a/lib/lp/registry/tests/test_mailinglistapi.py b/lib/lp/registry/tests/test_mailinglistapi.py
index d07a36d..bf062cf 100644
--- a/lib/lp/registry/tests/test_mailinglistapi.py
+++ b/lib/lp/registry/tests/test_mailinglistapi.py
@@ -122,7 +122,7 @@ class MailingListAPITestCase(TestCaseWithFactory):
 
     def test_isRegisteredInLaunchpad_archive_address_is_false(self):
         # The Mailman archive address can never be owned by an Lp user
-        # because such a user would have acces to all lists.
+        # because such a user would have access to all lists.
         email = config.mailman.archive_address
         self.factory.makePerson(email=email)
         self.assertFalse(self.api.isRegisteredInLaunchpad(email))
@@ -374,7 +374,7 @@ class MailingListAPIWorkflowTestCase(TestCaseWithFactory):
         self.assertEqual(MailingListStatus.UPDATING, team_list.status)
 
     def test_reportStatus_modifying_success(self):
-        # Successfule modifications lead to ACTIVE lists.
+        # Successful modifications lead to ACTIVE lists.
         team = self.factory.makeTeam(name="team")
         team_list = self.factory.makeMailingList(team, team.teamowner)
         with person_logged_in(team.teamowner):
@@ -384,7 +384,7 @@ class MailingListAPIWorkflowTestCase(TestCaseWithFactory):
         self.assertEqual(MailingListStatus.ACTIVE, team_list.status)
 
     def test_reportStatus_modifying_failure(self):
-        # Successfule modifications lead to ACTIVE lists.
+        # Successful modifications lead to ACTIVE lists.
         team = self.factory.makeTeam(name="team")
         team_list = self.factory.makeMailingList(team, team.teamowner)
         with person_logged_in(team.teamowner):
diff --git a/lib/lp/registry/tests/test_milestone.py b/lib/lp/registry/tests/test_milestone.py
index 0a7d8e5..f9ef144 100644
--- a/lib/lp/registry/tests/test_milestone.py
+++ b/lib/lp/registry/tests/test_milestone.py
@@ -209,7 +209,7 @@ class MilestoneSecurityAdaperTestCase(TestCaseWithFactory):
         for name in attribute_names:
             # class Milestone does not implement all attributes defined by
             # class IMilestone. AttributeErrors caused by attempts to
-            # access these attribues are not relevant here: We simply
+            # access these attributes are not relevant here: We simply
             # want to be sure that no Unauthorized error is raised.
             try:
                 getattr(obj, name)
@@ -603,7 +603,7 @@ class MilestonesContainsPartialSpecifications(TestCaseWithFactory):
         )
 
     def test_milestones_on_project_group(self):
-        # A Project Group milestone contains all specifications targetted to
+        # A Project Group milestone contains all specifications targeted to
         # contained Projects for milestones of a certain name.
         projectgroup = self.factory.makeProject()
         product = self.factory.makeProduct(projectgroup=projectgroup)
@@ -787,7 +787,7 @@ class ProjectMilestoneSecurityAdaperTestCase(TestCaseWithFactory):
         for name in attribute_names:
             # class Milestone does not implement all attributes defined by
             # class IMilestone. AttributeErrors caused by attempts to
-            # access these attribues are not relevant here: We simply
+            # access these attributes are not relevant here: We simply
             # want to be sure that no Unauthorized error is raised.
             try:
                 getattr(obj, name)
diff --git a/lib/lp/registry/tests/test_packaging.py b/lib/lp/registry/tests/test_packaging.py
index f4b4db6..aa29cf7 100644
--- a/lib/lp/registry/tests/test_packaging.py
+++ b/lib/lp/registry/tests/test_packaging.py
@@ -233,7 +233,7 @@ class TestPackagingEntryExists(PackagingUtilMixin, TestCaseWithFactory):
         )
 
     def test_packagingEntryExists_specific(self):
-        """Packaging entries are also specifc to both kinds of series."""
+        """Packaging entries are also specific to both kinds of series."""
         self.setUpPackaging()
         self.assertTrue(
             self.packaging_util.packagingEntryExists(
diff --git a/lib/lp/registry/tests/test_personmerge.py b/lib/lp/registry/tests/test_personmerge.py
index 530b30b..ee50de9 100644
--- a/lib/lp/registry/tests/test_personmerge.py
+++ b/lib/lp/registry/tests/test_personmerge.py
@@ -136,7 +136,7 @@ class TestMergePeople(TestCaseWithFactory, KarmaTestMixin):
 
     def test_karmacache_transferred_to_user_has_no_karma(self):
         # Verify that the merged user has no KarmaCache entries,
-        # and the karma total was transfered.
+        # and the karma total was transferred.
         self.cache_manager = getUtility(IKarmaCacheManager)
         product = self.factory.makeProduct()
         duplicate = self.factory.makePerson()
diff --git a/lib/lp/registry/tests/test_personnotification.py b/lib/lp/registry/tests/test_personnotification.py
index 3c01ef7..3195949 100644
--- a/lib/lp/registry/tests/test_personnotification.py
+++ b/lib/lp/registry/tests/test_personnotification.py
@@ -117,8 +117,8 @@ class TestPersonNotificationManager(TestCaseWithFactory):
             datetime.now(pytz.timezone("UTC")) - age
         )
         self.manager.purgeNotifications()
-        notifcations = self.notification_set.getNotificationsToSend()
-        self.assertEqual(0, notifcations.count())
+        notifications = self.notification_set.getNotificationsToSend()
+        self.assertEqual(0, notifications.count())
 
     def test_purgeNotifications_extra(self):
         user = self.factory.makePerson()
@@ -127,5 +127,5 @@ class TestPersonNotificationManager(TestCaseWithFactory):
         )
         user.setPreferredEmail(None)
         self.manager.purgeNotifications(extra_notifications=[notification])
-        notifcations = self.notification_set.getNotificationsToSend()
-        self.assertEqual(0, notifcations.count())
+        notifications = self.notification_set.getNotificationsToSend()
+        self.assertEqual(0, notifications.count())
diff --git a/lib/lp/registry/tests/test_personset.py b/lib/lp/registry/tests/test_personset.py
index 9eb351d..d1e058c 100644
--- a/lib/lp/registry/tests/test_personset.py
+++ b/lib/lp/registry/tests/test_personset.py
@@ -293,7 +293,7 @@ class TestPersonSet(TestCaseWithFactory):
         self.assertEqual([], result)
 
     def test_findPerson__case_insensitive_email_address_search(self):
-        # A search for email addresses is case insensitve.
+        # A search for email addresses is case insensitive.
         person_one = self.factory.makePerson(
             name="baz", email="ONE@xxxxxxxxxxx"
         )
@@ -318,7 +318,7 @@ class TestPersonSet(TestCaseWithFactory):
         self.assertEqual([], result)
 
     def test_findTeam__case_insensitive_email_address_search(self):
-        # A search for email addresses is case insensitve.
+        # A search for email addresses is case insensitive.
         team_one = self.factory.makeTeam(name="baz", email="ONE@xxxxxxxxxxx")
         team_two = self.factory.makeTeam(name="blah", email="TWO@xxxxxxxxxxx")
         result = list(self.person_set.findTeam("one@xxxxxxxxxxx"))
diff --git a/lib/lp/registry/tests/test_pillar_vocabularies.py b/lib/lp/registry/tests/test_pillar_vocabularies.py
index 4d6d9db..5d75374 100644
--- a/lib/lp/registry/tests/test_pillar_vocabularies.py
+++ b/lib/lp/registry/tests/test_pillar_vocabularies.py
@@ -52,7 +52,7 @@ class TestPillarVocabularyBase(TestCaseWithFactory):
         self.assertEqual(self.project_group, term.value)
 
     def test_getTermByToken(self):
-        # Tokens are case insentive because the product name is lowercase.
+        # Tokens are case insensitive because the product name is lowercase.
         term = self.vocabulary.getTermByToken("ORCHID-SNARK")
         self.assertEqual(self.product, term.value)
 
diff --git a/lib/lp/registry/tests/test_pillarname_triggers.py b/lib/lp/registry/tests/test_pillarname_triggers.py
index 33b544e..5427db6 100644
--- a/lib/lp/registry/tests/test_pillarname_triggers.py
+++ b/lib/lp/registry/tests/test_pillarname_triggers.py
@@ -62,7 +62,7 @@ class PillarNameTriggersTestCase(unittest.TestCase):
         )
         self.assertTrue(is_in_sync("whatever"))
 
-        # Updating the Distribution.name will propogate changes to PillarName
+        # Updating the Distribution.name will propagate changes to PillarName
         cur.execute(
             """
             UPDATE Distribution SET name='whatever2' where name='whatever'
@@ -127,7 +127,7 @@ class PillarNameTriggersTestCase(unittest.TestCase):
         )
         self.assertTrue(is_in_sync("whatever"))
 
-        # Updating the Product.name will propogate changes to PillarName
+        # Updating the Product.name will propagate changes to PillarName
         cur.execute(
             """
             UPDATE Product SET name='whatever2' where name='whatever'
@@ -194,7 +194,7 @@ class PillarNameTriggersTestCase(unittest.TestCase):
         )
         self.assertTrue(is_in_sync("whatever"))
 
-        # Updating the ProjectGroup.name will propogate changes to PillarName
+        # Updating the ProjectGroup.name will propagate changes to PillarName
         cur.execute(
             """
             UPDATE Project SET name='whatever2' where name='whatever'
diff --git a/lib/lp/registry/tests/test_prf_finder.py b/lib/lp/registry/tests/test_prf_finder.py
index cf15279..7e0b408 100644
--- a/lib/lp/registry/tests/test_prf_finder.py
+++ b/lib/lp/registry/tests/test_prf_finder.py
@@ -359,7 +359,7 @@ class HandleReleaseTestCase(TestCase):
 
     @responses.activate
     def test_handleReleaseTwice_multiple_series(self):
-        # Series can have overlaping release file globs, but versions
+        # Series can have overlapping release file globs, but versions
         # are unique to a project. A file is uploaded to a release only
         # once, regardless of which series wants the upload.
         ztm = self.layer.txn
diff --git a/lib/lp/registry/tests/test_product.py b/lib/lp/registry/tests/test_product.py
index 59d0de8..6f28d7b 100644
--- a/lib/lp/registry/tests/test_product.py
+++ b/lib/lp/registry/tests/test_product.py
@@ -656,7 +656,7 @@ class TestProduct(TestCaseWithFactory):
             )
 
     def test_checkInformationType_series_only_bugs(self):
-        # A product with bugtasks that are only targetted to a series can
+        # A product with bugtasks that are only targeted to a series can
         # not change information type.
         series = self.factory.makeProductSeries()
         bug = self.factory.makeBug(target=series.product)
diff --git a/lib/lp/registry/tests/test_product_vocabularies.py b/lib/lp/registry/tests/test_product_vocabularies.py
index 8613a7f..14da995 100644
--- a/lib/lp/registry/tests/test_product_vocabularies.py
+++ b/lib/lp/registry/tests/test_product_vocabularies.py
@@ -38,7 +38,7 @@ class TestProductVocabulary(TestCaseWithFactory):
         self.assertEqual(self.product, term.value)
 
     def test_getTermByToken(self):
-        # Tokens are case insentive because the product name is lowercase.
+        # Tokens are case insensitive because the product name is lowercase.
         term = self.vocabulary.getTermByToken("BedBUGs")
         self.assertEqual(self.product, term.value)
 
diff --git a/lib/lp/registry/tests/test_productseries.py b/lib/lp/registry/tests/test_productseries.py
index 8f6b0fb..e222af3 100644
--- a/lib/lp/registry/tests/test_productseries.py
+++ b/lib/lp/registry/tests/test_productseries.py
@@ -822,7 +822,7 @@ class ProductSeriesSecurityAdaperTestCase(TestCaseWithFactory):
         for name in attribute_names:
             # Not all attributes declared in configure.zcml to be
             # settable actually exist or are settable. Attempts to set
-            # them raise an AttributeError. Similary, the naive attempt
+            # them raise an AttributeError. Similarly, the naive attempt
             # to set an attribute to None may raise a NoneError
             #
             # Both errors can be ignored here: This method intends only
@@ -971,7 +971,7 @@ class ProductSeriesSecurityAdaperTestCase(TestCaseWithFactory):
 
     def test_access_for_user_with_policy_grant(self):
         # Users with a policy grant for the parent product can access
-        # properties requring the permission launchpad.LimitedView,
+        # properties requiring the permission launchpad.LimitedView,
         # launchpad.View or launchpad.AnyALlowedPerson of a series.
         user = self.factory.makePerson()
         with person_logged_in(self.proprietary_product_owner):
@@ -1008,7 +1008,7 @@ class ProductSeriesSecurityAdaperTestCase(TestCaseWithFactory):
                 self.assertAccessUnauthorized(names, self.proprietary_series)
 
             # They can change attributes requiring the permission
-            # launchpad.AnyAllowedPerson of a series for a provate project...
+            # launchpad.AnyAllowedPerson of a series for a private project...
             self.assertChangeAuthorized(
                 self.expected_set_permissions["launchpad.AnyAllowedPerson"],
                 self.proprietary_series,
@@ -1023,7 +1023,7 @@ class ProductSeriesSecurityAdaperTestCase(TestCaseWithFactory):
 
     def test_access_for_user_with_artifact_grant(self):
         # Users with an artifact grant related to the parent product
-        # can access properties requring the permission launchpad.LimitedView
+        # can access properties requiring the permission launchpad.LimitedView
         # of a series.
         user = self.factory.makePerson()
         with person_logged_in(self.proprietary_product_owner):
diff --git a/lib/lp/registry/tests/test_subscribers.py b/lib/lp/registry/tests/test_subscribers.py
index ec37adf..b57ef0c 100644
--- a/lib/lp/registry/tests/test_subscribers.py
+++ b/lib/lp/registry/tests/test_subscribers.py
@@ -215,7 +215,7 @@ class LicenseNotificationTestCase(TestCaseWithFactory):
         # If there is no request, there is no reason to show a message in
         # the browser.
         product, user = self.make_product_user([License.GNU_GPL_V2])
-        # Using the proxied product leads to an exeception when
+        # Using the proxied product leads to an exception when
         # notification.display() below is called because the permission
         # checks product require an interaction.
         notification = LicenseNotification(removeSecurityProxy(product))
diff --git a/lib/lp/registry/tests/test_team_webservice.py b/lib/lp/registry/tests/test_team_webservice.py
index 2bd435d..c46560b 100644
--- a/lib/lp/registry/tests/test_team_webservice.py
+++ b/lib/lp/registry/tests/test_team_webservice.py
@@ -68,7 +68,7 @@ class TeamObsoleteAPITestCase(TestCaseWithFactory):
 
     def test_newTeam_obsolete_subscription_policy(self):
         # The subscription_policy kwarg can be passed instead of
-        # membership_policy to suppport 1.0 API
+        # membership_policy to support 1.0 API
         owner = self.factory.makePerson()
         launchpad = launchpadlib_for("test", owner)
         team = launchpad.people.newTeam(
diff --git a/lib/lp/registry/tests/test_teammembership.py b/lib/lp/registry/tests/test_teammembership.py
index 85c605d..5d0796f 100644
--- a/lib/lp/registry/tests/test_teammembership.py
+++ b/lib/lp/registry/tests/test_teammembership.py
@@ -804,7 +804,7 @@ class TestTeamMembership(TestCaseWithFactory):
         )
 
     def test_membership_status_changes_are_immediately_flushed_to_db(self):
-        """Any changes to a membership status must be imediately flushed.
+        """Any changes to a membership status must be immediately flushed.
 
         Sometimes we may change multiple team memberships in the same
         transaction (e.g. when expiring memberships). If there are multiple
diff --git a/lib/lp/registry/tests/test_user_vocabularies.py b/lib/lp/registry/tests/test_user_vocabularies.py
index 2075653..471f3a5 100644
--- a/lib/lp/registry/tests/test_user_vocabularies.py
+++ b/lib/lp/registry/tests/test_user_vocabularies.py
@@ -226,7 +226,7 @@ class TestAllUserTeamsParticipationVocabulary(TestCaseWithFactory):
         self.assertEqual([team], self._vocabTermValues())
 
     def test_teams_of_anonymous(self):
-        # AllUserTeamsPariticipationVocabulary is empty for anoymous users.
+        # AllUserTeamsPariticipationVocabulary is empty for anonymous users.
         login(ANONYMOUS)
         self.assertEqual([], self._vocabTermValues())
 
diff --git a/lib/lp/registry/vocabularies.py b/lib/lp/registry/vocabularies.py
index 59a48a8..c5ac8dc 100644
--- a/lib/lp/registry/vocabularies.py
+++ b/lib/lp/registry/vocabularies.py
@@ -1530,7 +1530,7 @@ class CommercialProjectsVocabulary(NamedSQLObjectVocabulary):
 
     @property
     def displayname(self):
-        """The vocabulary's display nane."""
+        """The vocabulary's display name."""
         return "Select a commercial project"
 
     @cachedproperty
@@ -1648,7 +1648,7 @@ class DistroSeriesVocabulary(NamedSQLObjectVocabulary):
     def getTermByToken(self, token):
         """See `IVocabularyTokenized`."""
         try:
-            distroname, distroseriesname = token.split("/", 1)
+            distro_name, distro_series_name = token.split("/", 1)
         except ValueError:
             raise LookupError(token)
 
@@ -1657,8 +1657,8 @@ class DistroSeriesVocabulary(NamedSQLObjectVocabulary):
             .find(
                 DistroSeries,
                 DistroSeries.distribution == Distribution.id,
-                Distribution.name == distroname,
-                DistroSeries.name == distroseriesname,
+                Distribution.name == distro_name,
+                DistroSeries.name == distro_series_name,
             )
             .one()
         )