← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~cjwatson/launchpad:codespell-4 into launchpad:master

 

Colin Watson has proposed merging ~cjwatson/launchpad:codespell-4 into launchpad:master.

Commit message:
Fix spelling errors in lp.bugs

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

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

Found by codespell.
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~cjwatson/launchpad:codespell-4 into launchpad:master.
diff --git a/lib/lp/bugs/browser/bugalsoaffects.py b/lib/lp/bugs/browser/bugalsoaffects.py
index 5525100..4805360 100644
--- a/lib/lp/bugs/browser/bugalsoaffects.py
+++ b/lib/lp/bugs/browser/bugalsoaffects.py
@@ -129,7 +129,7 @@ class ChooseProductStep(LinkPackgingMixin, AlsoAffectsStep):
         currentseries we add a notification message telling the user the
         package could be linked to an upstream to avoid this extra step.
 
-        On the other hand, if the upstream can be infered and there's no task
+        On the other hand, if the upstream can be inferred and there's no task
         for it yet, we teleport the user straight to the next step.
         """
         bugtask = self.context
@@ -830,7 +830,7 @@ class BugAlsoAffectsProductWithProductCreationView(
         return names
 
     def _loadProductsUsingBugTracker(self):
-        """Find products using the bugtracker wich runs on the given URL.
+        """Find products using the bugtracker which runs on the given URL.
 
         These products are stored in self.existing_products.
 
diff --git a/lib/lp/bugs/browser/bugtarget.py b/lib/lp/bugs/browser/bugtarget.py
index 5633d0a..e59af36 100644
--- a/lib/lp/bugs/browser/bugtarget.py
+++ b/lib/lp/bugs/browser/bugtarget.py
@@ -236,7 +236,7 @@ class FileBugViewBase(LaunchpadFormView):
 
         # The JSON cache must be populated before the super call, since
         # the form is rendered during LaunchpadFormView's initialize()
-        # when an action is invokved.
+        # when an action is invoked.
         cache = IJSONRequestCache(self.request)
         cache.objects["bug_private_by_default"] = (
             self.context.pillar.getDefaultBugInformationType()
@@ -306,7 +306,7 @@ class FileBugViewBase(LaunchpadFormView):
         else:
             bug_supervisor = None
 
-        # Work out whether the redirect should be overidden.
+        # Work out whether the redirect should be overridden.
         do_not_redirect = (
             self.request.form.get("no-redirect") is not None
             or [
@@ -858,9 +858,9 @@ class FileBugViewBase(LaunchpadFormView):
 
     def getAcknowledgementMessage(self, context):
         """An acknowlegement message displayed to the user."""
-        # If a given context doesnot have a custom message, we go up in the
-        # "object hierachy" until we find one. If no cusotmized messages
-        # exist for any conext, a default message is returned.
+        # If a given context does not have a custom message, we go up in the
+        # "object hierarchy" until we find one. If no customized messages
+        # exist for any context, a default message is returned.
         #
         # bug_reported_acknowledgement is defined as a "real" property
         # for IDistribution, IDistributionSourcePackage, IProduct and
diff --git a/lib/lp/bugs/browser/tests/bug-views.rst b/lib/lp/bugs/browser/tests/bug-views.rst
index fdfd468..65c73f6 100644
--- a/lib/lp/bugs/browser/tests/bug-views.rst
+++ b/lib/lp/bugs/browser/tests/bug-views.rst
@@ -203,7 +203,7 @@ property activity_and_comments.
     ...     ubuntu_bugview.activity_and_comments if event.get('comment')]
 
 Because we omit the first comment, and because the third comment is
-indentical to the second, we really only display one comment:
+identical to the second, we really only display one comment:
 
     >>> print(len(comments))
     1
@@ -917,7 +917,7 @@ searched for.
     Firefox install instructions should be complete
     a firefox bug
 
-If we refine the search critera, we'll get different results.
+If we refine the search criteria, we'll get different results.
 
     >>> request = LaunchpadTestRequest(
     ...     method="GET",
diff --git a/lib/lp/bugs/browser/tests/bugtarget-filebug-views.rst b/lib/lp/bugs/browser/tests/bugtarget-filebug-views.rst
index b77c3c0..af2303c 100644
--- a/lib/lp/bugs/browser/tests/bugtarget-filebug-views.rst
+++ b/lib/lp/bugs/browser/tests/bugtarget-filebug-views.rst
@@ -15,7 +15,7 @@ similar bug reports, etc.
     ...     title='Test Title', comment='Test description.')
 
 We define a helper method here so that we can instantiate
-FileBugViewBase and use it without any errors occuring, since we're
+FileBugViewBase and use it without any errors occurring, since we're
 bypassing most of the view machinery. We also define a mock widget class
 for the same purpose.
 
diff --git a/lib/lp/bugs/browser/tests/bugtask-adding-views.rst b/lib/lp/bugs/browser/tests/bugtask-adding-views.rst
index bcadad6..fdf1b65 100644
--- a/lib/lp/bugs/browser/tests/bugtask-adding-views.rst
+++ b/lib/lp/bugs/browser/tests/bugtask-adding-views.rst
@@ -226,7 +226,7 @@ be created:
     Mozilla Firefox
 
 This worked without any problems since Evolution does use Malone as its
-offical bug tracker.
+official bug tracker.
 
     >>> evolution_task = bug_four.bugtasks[0]
     >>> evolution_task.target.bug_tracking_usage
@@ -258,7 +258,7 @@ tried to create a bugtask without a bug watch.
     >>> add_task_view.next_url is None
     True
 
-The user must explictly choose to create a bugtask without a bug
+The user must explicitly choose to create a bugtask without a bug
 watch.
 
     >>> form['field.link_upstream_how'] = u'UNLINKED_UPSTREAM'
diff --git a/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py b/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py
index 986e7a0..930dd7e 100644
--- a/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py
+++ b/lib/lp/bugs/browser/tests/test_bugsubscriptionfilter.py
@@ -384,7 +384,7 @@ class TestBugSubscriptionFilterView(
     def test_render_with_no_description_and_no_conditions(self):
         # If no description and no conditions are set, the rendered
         # description is very simple, and there's a short message describing
-        # the absense of conditions.
+        # the absence of conditions.
         self.assertRender(
             "This filter allows all mail through.",
             "There are no filter conditions!",
diff --git a/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py b/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py
index 7929b46..bb1691f 100644
--- a/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py
+++ b/lib/lp/bugs/browser/tests/test_bugtarget_filebug.py
@@ -640,7 +640,7 @@ class FileBugViewBaseExtraDataTestCase(FileBugViewMixin, TestCaseWithFactory):
         )
 
     def test_description_and_comments(self):
-        # The first extra text part is added to the desciption, all other
+        # The first extra text part is added to the description, all other
         # extra parts become additional bug messages.
         token = self.process_extra_data(
             """\
diff --git a/lib/lp/bugs/browser/tests/test_bugtask.py b/lib/lp/bugs/browser/tests/test_bugtask.py
index 5cf2405..b816cdf 100644
--- a/lib/lp/bugs/browser/tests/test_bugtask.py
+++ b/lib/lp/bugs/browser/tests/test_bugtask.py
@@ -270,7 +270,7 @@ class TestBugTaskView(TestCaseWithFactory):
                 bug.default_bugtask, name="+editstatus", form=form_data
             )
             # The bugtask's target won't have changed, since an error
-            # happend. The error will be listed in the view.
+            # happened. The error will be listed in the view.
             self.assertEqual(1, len(view.errors))
             self.assertEqual(product, bug.default_bugtask.target)
 
@@ -2591,7 +2591,7 @@ class TestBugTaskSearchListingView(BrowserTestCase):
         self.assertEqual(item.model, items[0])
 
     def test_no_next_prev_for_single_batch(self):
-        """The IJSONRequestCache should contain data about ajacent batches.
+        """The IJSONRequestCache should contain data about adjacent batches.
 
         mustache_model should contain items, the BugTaskListingItem.model
         for each BugTask.
diff --git a/lib/lp/bugs/browser/widgets/bugtask.py b/lib/lp/bugs/browser/widgets/bugtask.py
index e8deccf..124b709 100644
--- a/lib/lp/bugs/browser/widgets/bugtask.py
+++ b/lib/lp/bugs/browser/widgets/bugtask.py
@@ -149,7 +149,7 @@ class BugTaskAssigneeWidget(Widget):
             # to select an assignee.
             return self.assignee_chooser_widget.getInputValue()
         elif assignee_option == self.assign_to_me:
-            # The user has choosen to 'take' this bug.
+            # The user has chosen to 'take' this bug.
             return getUtility(ILaunchBag).user
         elif assignee_option == self.assigned_to:
             # This is effectively a no-op
diff --git a/lib/lp/bugs/doc/bugcomment.rst b/lib/lp/bugs/doc/bugcomment.rst
index 010c550..8c60711 100644
--- a/lib/lp/bugs/doc/bugcomment.rst
+++ b/lib/lp/bugs/doc/bugcomment.rst
@@ -43,7 +43,7 @@ comment.
 The first comment may have bug attachments. While it is not possible
 to add an attachment via the web interface to the first comment, bugs
 submitted via the email interface can have file attachments, which are
-stored as bug attchments of the first comment. Similary, the first
+stored as bug attachments of the first comment. Similarly, the first
 comment of bugs imported from other bug trackers may have attachments.
 We display these attachments in the comment section of the Web UI,
 hence the activity stream contains the first comment, if it has attachments.
diff --git a/lib/lp/bugs/doc/bugnotification-sending.rst b/lib/lp/bugs/doc/bugnotification-sending.rst
index f8d846f..721b359 100644
--- a/lib/lp/bugs/doc/bugnotification-sending.rst
+++ b/lib/lp/bugs/doc/bugnotification-sending.rst
@@ -927,7 +927,7 @@ notifications containing that comment.
     >>> len(notifications)
     1
 
-If we pass this notifcation to get_email_notifications we can see that
+If we pass this notification to get_email_notifications we can see that
 Verbose Person and Team Person will receive notifications which contain
 the bug description and the status in all of its targets. All other
 subscribers will receive standard notifications that don't include the
diff --git a/lib/lp/bugs/doc/bugtask-assignee-widget.rst b/lib/lp/bugs/doc/bugtask-assignee-widget.rst
index cb4a0d2..480d53c 100644
--- a/lib/lp/bugs/doc/bugtask-assignee-widget.rst
+++ b/lib/lp/bugs/doc/bugtask-assignee-widget.rst
@@ -210,8 +210,8 @@ value of the current assignee:
     >>> widget.getInputValue().name == 'name12'
     True
 
-Assigning the bug to noone
---------------------------
+Assigning the bug to no-one
+---------------------------
 
 Lastly, a bug can be put "up for grabs" again by selecting the
 "assign_to_nobody" option.
diff --git a/lib/lp/bugs/doc/bugwatch.rst b/lib/lp/bugs/doc/bugwatch.rst
index 0390062..48911f0 100644
--- a/lib/lp/bugs/doc/bugwatch.rst
+++ b/lib/lp/bugs/doc/bugwatch.rst
@@ -308,7 +308,7 @@ status mapping.
 
 If only the remote status is changed, not the bugtask's status, no
 event is fired off. The remote status is simply a string, it doesn't
-have to be convertable to a real Malone status.
+have to be convertible to a real Malone status.
 
     >>> debian_bugwatch.updateStatus(u'some status', BugTaskStatus.NEW)
 
@@ -453,7 +453,7 @@ creating a bug task with a conjoined primary.
     True
 
 We use ensureBugTracker() to populate in the parameters that we don't
-specifiy, such as the bug tracker's name.
+specify, such as the bug tracker's name.
 
     >>> bug_tracker = getUtility(IBugTrackerSet).ensureBugTracker(
     ...     bugtrackertype=BugTrackerType.ROUNDUP,
@@ -597,7 +597,7 @@ true.
     >>> run_once_failed_once_watch.can_be_rescheduled
     True
 
-If the most recent update on the watch succeded, can_be_rescheduled will
+If the most recent update on the watch succeeded, can_be_rescheduled will
 be False, regardless of the ratio of failures to successes.
 
     >>> transaction.commit()
diff --git a/lib/lp/bugs/doc/checkwatches-cli-switches.rst b/lib/lp/bugs/doc/checkwatches-cli-switches.rst
index 9202f7b..bc02cd4 100644
--- a/lib/lp/bugs/doc/checkwatches-cli-switches.rst
+++ b/lib/lp/bugs/doc/checkwatches-cli-switches.rst
@@ -2,7 +2,7 @@ Updating selected bug trackers
 ==============================
 
 The CheckwatchesMaster class can be instructed to update only a subset of
-bugtrackers. This is acheived by passing a list of bug tracker names to
+bugtrackers. This is achieved by passing a list of bug tracker names to
 the updateBugTrackers() method.
 
     >>> import transaction
@@ -55,7 +55,7 @@ line.
     ...         self.logger = FakeLogger()
 
     >>> def run_cronscript_with_args(args):
-    ...     # It may seem a bit weird to do ths rather than letting the
+    ...     # It may seem a bit weird to do this rather than letting the
     ...     # LaunchpadScript code handle it, but doing that means that
     ...     # LayerIsolationErrors get raised as it leaves threads lying
     ...     # around.
@@ -135,6 +135,6 @@ tracker option fully.
       --reset               Update all the watches on the bug tracker,
                             regardless of whether or not they need
                             checking.
-      --jobs=JOBS           The number of simulataneous jobs to run, 1
+      --jobs=JOBS           The number of simultaneous jobs to run, 1
                             by default.
     <BLANKLINE>
diff --git a/lib/lp/bugs/doc/externalbugtracker-bugzilla-api.rst b/lib/lp/bugs/doc/externalbugtracker-bugzilla-api.rst
index 3506145..688d05e 100644
--- a/lib/lp/bugs/doc/externalbugtracker-bugzilla-api.rst
+++ b/lib/lp/bugs/doc/externalbugtracker-bugzilla-api.rst
@@ -333,7 +333,7 @@ list of all the bug IDs in the passed set that have been changed since
 that datetime. Bug IDs are returned as strings so as to maintain
 compatibility with BugWatch.remotebug.
 
-This is acheived by calling the Bug.search() method on the
+This is achieved by calling the Bug.search() method on the
 remote server and passing it a 'changed_since' parameter.
 
     >>> bugzilla._bugs = {}
diff --git a/lib/lp/bugs/doc/externalbugtracker-comment-imports.rst b/lib/lp/bugs/doc/externalbugtracker-comment-imports.rst
index 6f4a849..3ccb363 100644
--- a/lib/lp/bugs/doc/externalbugtracker-comment-imports.rst
+++ b/lib/lp/bugs/doc/externalbugtracker-comment-imports.rst
@@ -260,7 +260,7 @@ linking it to the bug watch this method will, of course, return False.
 
 IBugWatch provides an addComment() method by which comments can be
 linked to a bug watch. This method accepts a Launchpad Message object
-representing the comment itself and a comment_id paramter, which can be
+representing the comment itself and a comment_id parameter, which can be
 used to pass the ID of the comment on the remote bug tracker from which
 the comment was imported. It returns the created IBugMessage.
 
diff --git a/lib/lp/bugs/doc/externalbugtracker-debbugs.rst b/lib/lp/bugs/doc/externalbugtracker-debbugs.rst
index aec439d..e418ae2 100644
--- a/lib/lp/bugs/doc/externalbugtracker-debbugs.rst
+++ b/lib/lp/bugs/doc/externalbugtracker-debbugs.rst
@@ -85,7 +85,7 @@ Bug 563 resides in the archive. It is also fetchable:
 Getting the time
 ================
 
-We don't have acccess to the Debian servers exact time, but we trust it
+We don't have access to the Debian server's exact time, but we trust it
 being correct.
 
     >>> external_debbugs.getCurrentDBTime()
@@ -396,7 +396,7 @@ bug. DebBugs comment IDs are RFC822 message IDs.
     ['<20040309081430.98BF411EE67@tux>']
 
 However, it will only return IDs for comments which can actually be
-imported. Comments which have no useable date will not be imported.
+imported. Comments which have no usable date will not be imported.
 
     >>> external_debbugs.debbugs_db._data_file = (
     ...     'debbugs-comment-with-no-date.txt')
@@ -684,7 +684,7 @@ Importing bugs twice
 ....................
 
 If a Debian bug already exists in Launchpad (i.e it has a bug watch), it
-won't be imported again. A warning is logged so that the person runnning
+won't be imported again. A warning is logged so that the person running
 the script gets notified about it.
 
     >>> from lp.bugs.scripts.importdebianbugs import import_debian_bugs
diff --git a/lib/lp/bugs/enums.py b/lib/lp/bugs/enums.py
index 9813ba2..109ec8f 100644
--- a/lib/lp/bugs/enums.py
+++ b/lib/lp/bugs/enums.py
@@ -26,7 +26,7 @@ class BugNotificationLevel(DBEnumeratedType):
         Lifecycle
 
         Only send a low volume of notifications about new bugs registered,
-        bugs removed or bug targetting.
+        bugs removed or bug targeting.
         """,
     )
 
diff --git a/lib/lp/bugs/externalbugtracker/bugzilla.py b/lib/lp/bugs/externalbugtracker/bugzilla.py
index cdce702..85feefa 100644
--- a/lib/lp/bugs/externalbugtracker/bugzilla.py
+++ b/lib/lp/bugs/externalbugtracker/bugzilla.py
@@ -150,7 +150,7 @@ class Bugzilla(ExternalBugTracker):
 
         See `IExternalBugTracker`.
         """
-        # checkwatches isn't set up to handle errors here, so we supress
+        # checkwatches isn't set up to handle errors here, so we suppress
         # known connection issues. They'll be handled and logged later on when
         # further requests are attempted.
         try:
@@ -953,7 +953,7 @@ class BugzillaAPI(Bugzilla):
         if "@" not in email:
             return email, None
         # If the display name is empty, set it to None so that it's
-        # useable by IPersonSet.ensurePerson().
+        # usable by IPersonSet.ensurePerson().
         elif display_name == "":
             return None, email
         # Both displayname and email are valid, return both.
diff --git a/lib/lp/bugs/externalbugtracker/trac.py b/lib/lp/bugs/externalbugtracker/trac.py
index 0b05233..983296b 100644
--- a/lib/lp/bugs/externalbugtracker/trac.py
+++ b/lib/lp/bugs/externalbugtracker/trac.py
@@ -255,7 +255,7 @@ class Trac(ExternalBugTracker):
             bug_id = int(bug_id)
         except ValueError:
             raise InvalidBugId(
-                "bug_id must be convertable an integer: %s" % str(bug_id)
+                "bug_id must be convertible to an integer: %s" % str(bug_id)
             )
 
         try:
@@ -473,7 +473,7 @@ class TracLPPlugin(Trac):
         if not valid_email(email):
             return email, None
         # If the display name is empty, set it to None so that it's
-        # useable by IPersonSet.ensurePerson().
+        # usable by IPersonSet.ensurePerson().
         elif display_name == "":
             return None, email
         # Both displayname and email are valid, return both.
diff --git a/lib/lp/bugs/interfaces/bug.py b/lib/lp/bugs/interfaces/bug.py
index 526db0f..4ca8e67 100644
--- a/lib/lp/bugs/interfaces/bug.py
+++ b/lib/lp/bugs/interfaces/bug.py
@@ -679,7 +679,7 @@ class IBugView(Interface):
 
         A Question can be created from a bug if:
         1. There is only one bugtask with a status of New, Incomplete,
-           Confirmed, or Wont Fix. Any other bugtasks must be Invalid.
+           Confirmed, or Won't Fix. Any other bugtasks must be Invalid.
         2. The bugtask's target uses Launchpad to track bugs.
         3. The bug was not made into a question previously.
         """
@@ -1420,7 +1420,7 @@ class IBugAddForm(IBug):
         required=True,
         description=_(
             "Ubuntu, Debian, Gentoo, etc. You can file bugs only on "
-            "distrubutions using Launchpad as their primary bug "
+            "distributions using Launchpad as their primary bug "
             "tracker."
         ),
         vocabulary="DistributionUsingMalone",
@@ -1535,7 +1535,7 @@ class IBugSet(Interface):
             applicable based on the bug report target) will be subscribed to
             all *public bugs only*
 
-          * if either product or distribution is specified, an appropiate
+          * if either product or distribution is specified, an appropriate
             bug task will be created
         """
 
diff --git a/lib/lp/bugs/interfaces/bugmessage.py b/lib/lp/bugs/interfaces/bugmessage.py
index 127e174..7768b07 100644
--- a/lib/lp/bugs/interfaces/bugmessage.py
+++ b/lib/lp/bugs/interfaces/bugmessage.py
@@ -154,4 +154,4 @@ class IBugComment(IMessage, IComment):
     show_spam_controls = Attribute(
         "Whether or not to show a footer for the comment."
     )
-    patches = Attribute("Patches attched to this comment.")
+    patches = Attribute("Patches attached to this comment.")
diff --git a/lib/lp/bugs/interfaces/bugtaskfilter.py b/lib/lp/bugs/interfaces/bugtaskfilter.py
index ec15564..37ab747 100644
--- a/lib/lp/bugs/interfaces/bugtaskfilter.py
+++ b/lib/lp/bugs/interfaces/bugtaskfilter.py
@@ -1,7 +1,7 @@
 # Copyright 2011-2020 Canonical Ltd.  This software is licensed under the
 # GNU Affero General Public License version 3 (see the file LICENSE).
 
-"""Fiter bugtasks based on context."""
+"""Filter bugtasks based on context."""
 
 __all__ = [
     "filter_bugtasks_by_context",
@@ -26,7 +26,7 @@ def simple_weight_calculator(bugtask):
 def filter_bugtasks_by_context(context, bugtasks):
     """Return the bugtasks filtered so there is only one bug task per bug.
 
-    The context is used to return the most relevent bugtask for that context.
+    The context is used to return the most relevant bugtask for that context.
 
     An initial constraint is to not require any database queries from this
     method.
diff --git a/lib/lp/bugs/interfaces/personsubscriptioninfo.py b/lib/lp/bugs/interfaces/personsubscriptioninfo.py
index 91cd32e..7fd8dd8 100644
--- a/lib/lp/bugs/interfaces/personsubscriptioninfo.py
+++ b/lib/lp/bugs/interfaces/personsubscriptioninfo.py
@@ -86,7 +86,7 @@ class IAbstractSubscriptionInfoCollection(Interface):
 
     as_team_member = Attribute(
         "List of information objects about the subscriptions "
-        "through a team, exluding teams of which the person is an admin"
+        "through a team, excluding teams of which the person is an admin"
     )
 
     as_team_admin = Attribute(
diff --git a/lib/lp/bugs/javascript/buglisting.js b/lib/lp/bugs/javascript/buglisting.js
index daf0d71..cde3479 100644
--- a/lib/lp/bugs/javascript/buglisting.js
+++ b/lib/lp/bugs/javascript/buglisting.js
@@ -16,7 +16,7 @@ YUI.add('lp.bugs.buglisting', function (Y) {
      * Constructor.
      *
      * This is the model of the current batch, including the ordering,
-     * position, and what fields are visibile.
+     * position, and what fields are visible.
      *
      * These values are stored in the History object, so that the browser
      * back/next buttons correctly adjust.  The system defaults for field
@@ -261,7 +261,7 @@ YUI.add('lp.bugs.buglisting', function (Y) {
         /**
          * General YUI initializer setting up the tableview.
          *
-         * @method intializer
+         * @method initializer
          * @param {Object} cfg
          *
          */
diff --git a/lib/lp/bugs/javascript/buglisting_utils.js b/lib/lp/bugs/javascript/buglisting_utils.js
index 078419a..1c37deb 100644
--- a/lib/lp/bugs/javascript/buglisting_utils.js
+++ b/lib/lp/bugs/javascript/buglisting_utils.js
@@ -119,7 +119,7 @@ YUI.add('lp.buglisting_utils', function(Y) {
         },
 
         /**
-         * Hook into the destroy lifecyle to ensure the form
+         * Hook into the destroy lifecycle to ensure the form
          * overlay is destroyed.
          *
          * @method destructor
@@ -316,7 +316,7 @@ YUI.add('lp.buglisting_utils', function(Y) {
     buglisting_utils.BugListingConfigUtil = BugListingConfigUtil;
 
     /**
-     * Update the visibilty of the sort buttons.
+     * Update the visibility of the sort buttons.
      *
      * We want to display only the sort buttons for fields which
      * are displayed. To avoid surprises for users, the current sort
diff --git a/lib/lp/bugs/javascript/bugtask_index.js b/lib/lp/bugs/javascript/bugtask_index.js
index ef0324b..1005d69 100644
--- a/lib/lp/bugs/javascript/bugtask_index.js
+++ b/lib/lp/bugs/javascript/bugtask_index.js
@@ -335,7 +335,7 @@ namespace._hideDeleteSpinner = function(delete_link, show_link) {
 };
 
 /**
- * Replace the currect bugtask table with a new one, ensuring all Javascript
+ * Replace the current bugtask table with a new one, ensuring all Javascript
  * widgets are correctly wired up.
  *
  * @method _render_bugtask_table
diff --git a/lib/lp/bugs/javascript/filebug_dupefinder.js b/lib/lp/bugs/javascript/filebug_dupefinder.js
index dbbcee6..cbc3cdb 100644
--- a/lib/lp/bugs/javascript/filebug_dupefinder.js
+++ b/lib/lp/bugs/javascript/filebug_dupefinder.js
@@ -130,7 +130,7 @@ function search_for_and_display_dupes() {
         } else {
             // Any other error code gets a generic message.
             error_message =
-                "An error occured whilst trying to find bugs matching " +
+                "An error occurred whilst trying to find bugs matching " +
                 "the summary you entered. Click \"Check again\" to retry " +
                 "your search. Alternatively, you can enter the " +
                 "details of your bug below.";
diff --git a/lib/lp/bugs/javascript/tests/test_buglisting_utils.js b/lib/lp/bugs/javascript/tests/test_buglisting_utils.js
index 0a270d2..6fbc0ff 100644
--- a/lib/lp/bugs/javascript/tests/test_buglisting_utils.js
+++ b/lib/lp/bugs/javascript/tests/test_buglisting_utils.js
@@ -341,7 +341,7 @@ var buglisting_display_utils_tests = new Y.Test.Case({
     },
 
     test_fields_visibility_form_reset_hides_overlay: function() {
-        // Reseting to defaults should hide the form overlay.
+        // Resetting to defaults should hide the form overlay.
         var field_visibility = {
             show_targetname: true,
             show_heat: false
@@ -360,7 +360,7 @@ var buglisting_display_utils_tests = new Y.Test.Case({
     },
 
     test_fields_visibility_form_reset_updates_form: function() {
-        // Reseting to defaults should reset the form inputs, too.
+        // Resetting to defaults should reset the form inputs, too.
         var field_visibility = Y.merge(
             this.defaults.field_visibility_defaults, {
             show_targetname: false,
diff --git a/lib/lp/bugs/javascript/tests/test_pre_search.js b/lib/lp/bugs/javascript/tests/test_pre_search.js
index 9036320..e1540a9 100644
--- a/lib/lp/bugs/javascript/tests/test_pre_search.js
+++ b/lib/lp/bugs/javascript/tests/test_pre_search.js
@@ -59,7 +59,7 @@ YUI.add('lp.bugs.bugtask_index.test_pre_search', function (Y) {
 
         /**
          * After the search event is fired, search_mode has to be (immediately)
-         * disbled so the user can enter a search.
+         * disabled so the user can enter a search.
          */
         test_disable_search_mode: function() {
             var picker = new FauxPicker();
diff --git a/lib/lp/bugs/mail/commands.py b/lib/lp/bugs/mail/commands.py
index ea214f9..948068a 100644
--- a/lib/lp/bugs/mail/commands.py
+++ b/lib/lp/bugs/mail/commands.py
@@ -408,7 +408,7 @@ class DuplicateEmailCommand(EmailCommand):
     def execute(self, context, current_event):
         """See IEmailCommand."""
         if isinstance(context, CreateBugParams):
-            # No one intentially reports a duplicate bug. Bug email commands
+            # No one intentionally reports a duplicate bug. Bug email commands
             # support CreateBugParams, so in this case, just return.
             return context, current_event
         self._ensureNumberOfArguments()
@@ -756,7 +756,7 @@ class DBSchemaEditEmailCommand(EditEmailCommand):
     Subclasses should set 'dbschema' to the correct schema.
 
     For example, if context.foo can be assigned to values in
-    FooDBSchema, the follwing command class could be created:
+    FooDBSchema, the following command class could be created:
 
         class FooEmailCommand(DBSchemaEditEmailCommand):
             dbschema = FooDBSchema
diff --git a/lib/lp/bugs/mail/tests/test_bug_task_assignment.py b/lib/lp/bugs/mail/tests/test_bug_task_assignment.py
index 4176e3f..ce0aeb3 100644
--- a/lib/lp/bugs/mail/tests/test_bug_task_assignment.py
+++ b/lib/lp/bugs/mail/tests/test_bug_task_assignment.py
@@ -104,7 +104,9 @@ class TestAssignmentNotification(TestCaseWithFactory):
         notifications, omitted, messages = construct_email_notifications(
             [latest_notification]
         )
-        self.assertEqual(len(notifications), 1, "email notication not created")
+        self.assertEqual(
+            len(notifications), 1, "email notification not created"
+        )
         receivers = [message["To"] for message in messages]
         self.assertFalse(
             self.person_assigned_email in receivers,
diff --git a/lib/lp/bugs/model/apportjob.py b/lib/lp/bugs/model/apportjob.py
index 90a00d4..caf0fbd 100644
--- a/lib/lp/bugs/model/apportjob.py
+++ b/lib/lp/bugs/model/apportjob.py
@@ -176,8 +176,7 @@ class ProcessApportBlobJob(ApportJobDerived):
         """See `IProcessApportBlobJobSource`."""
         # If there's already a job for the BLOB, don't create a new one.
         # We also include jobs which have been completed when checking
-        # for exisiting jobs, since a BLOB should only be processed
-        # once.
+        # for existing jobs, since a BLOB should only be processed once.
         job_for_blob = (
             IStore(ApportJob)
             .find(
diff --git a/lib/lp/bugs/model/bug.py b/lib/lp/bugs/model/bug.py
index 1e97fb7..6987cac 100644
--- a/lib/lp/bugs/model/bug.py
+++ b/lib/lp/bugs/model/bug.py
@@ -2020,7 +2020,7 @@ class Bug(SQLBase, InformationTypeMixin):
         """See `IBug`."""
         # Define the function used as a sort key.
         def by_bugtargetdisplayname(nomination):
-            """Return the friendly sort key verson of displayname."""
+            """Return the friendly sort key version of displayname."""
             return nomination.target.bugtargetdisplayname.lower()
 
         if nominations is None:
diff --git a/lib/lp/bugs/model/buglinktarget.py b/lib/lp/bugs/model/buglinktarget.py
index ee483a1..09c1e24 100644
--- a/lib/lp/bugs/model/buglinktarget.py
+++ b/lib/lp/bugs/model/buglinktarget.py
@@ -16,7 +16,7 @@ from lp.bugs.interfaces.buglink import IObjectLinkedEvent, IObjectUnlinkedEvent
 
 
 # XXX wgrant 2015-09-25: lazr.lifecycle.event.LifecyleEventBase is all
-# of mispelled, private, and the sole implementer of user-fetching
+# of misspelled, private, and the sole implementer of user-fetching
 # logic that we require.
 @implementer(IObjectLinkedEvent)
 class ObjectLinkedEvent(lazr.lifecycle.event.LifecyleEventBase):
diff --git a/lib/lp/bugs/model/bugtasksearch.py b/lib/lp/bugs/model/bugtasksearch.py
index 3bc73e5..39ffc48 100644
--- a/lib/lp/bugs/model/bugtasksearch.py
+++ b/lib/lp/bugs/model/bugtasksearch.py
@@ -510,7 +510,7 @@ def _build_query(params):
             and params.product is None
             and params.productseries is None
         ):
-            # This search is *not* contrained to project related bugs, so
+            # This search is *not* constrained to project related bugs, so
             # include distro, distroseries, DSP and SP subscriptions.
             ss_clauses.append(
                 In(
@@ -569,7 +569,7 @@ def _build_query(params):
                 )
             )
         if params.distribution is None and params.distroseries is None:
-            # This search is *not* contrained to distro related bugs so
+            # This search is *not* constrained to distro related bugs so
             # include products, productseries, and project group subscriptions.
             projectgroup_match = True
             if params.projectgroup is not None:
@@ -1399,7 +1399,7 @@ def _build_upstream_clause(params):
     """Return an clause for returning upstream data if the data exists.
 
     This method will handles BugTasks that do not have upstream BugTasks
-    as well as thoses that do.
+    as well as those that do.
     """
     params = _require_params(params)
     upstream_clauses = []
diff --git a/lib/lp/bugs/model/bugwatch.py b/lib/lp/bugs/model/bugwatch.py
index a40a468..2bbef55 100644
--- a/lib/lp/bugs/model/bugwatch.py
+++ b/lib/lp/bugs/model/bugwatch.py
@@ -310,7 +310,7 @@ class BugWatch(SQLBase):
         activity.bug_watch = self
         if result is None:
             # If no result is passed we assume that the activity
-            # succeded and set the result field accordingly.
+            # succeeded and set the result field accordingly.
             activity.result = BugWatchActivityStatus.SYNC_SUCCEEDED
         else:
             activity.result = result
diff --git a/lib/lp/bugs/model/tests/test_bug.py b/lib/lp/bugs/model/tests/test_bug.py
index 6fb9583..7b3ccdc 100644
--- a/lib/lp/bugs/model/tests/test_bug.py
+++ b/lib/lp/bugs/model/tests/test_bug.py
@@ -641,7 +641,7 @@ class TestBug(TestCaseWithFactory):
             self.assertIsInstance(recorder.events[0], ObjectCreatedEvent)
 
     def test_newMessage_send_notification_false(self):
-        # Notifications about new messages can be supressed.
+        # Notifications about new messages can be suppressed.
         bug = self.factory.makeBug()
         login_person(bug.owner)
         with EventRecorder() as recorder:
diff --git a/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py b/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py
index 3868727..5de5230 100644
--- a/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py
+++ b/lib/lp/bugs/model/tests/test_bugsubscriptionfilter.py
@@ -417,7 +417,7 @@ class TestBugSubscriptionFilterPermissions(TestCaseWithFactory):
             bug_subscription_filter.find_all_tags
 
     def test_write_to_subscribers(self):
-        """`BugSubscriptionFilter`s can only be modifed by subscribers."""
+        """`BugSubscriptionFilter`s can only be modified by subscribers."""
         bug_subscription_filter = BugSubscriptionFilter(
             structural_subscription=self.subscription
         )
diff --git a/lib/lp/bugs/model/tests/test_bugsummary.py b/lib/lp/bugs/model/tests/test_bugsummary.py
index fbad2c0..8ad15e4 100644
--- a/lib/lp/bugs/model/tests/test_bugsummary.py
+++ b/lib/lp/bugs/model/tests/test_bugsummary.py
@@ -339,8 +339,8 @@ class TestBugSummary(TestCaseWithFactory):
         productseries_a = self.factory.makeProductSeries(product=product)
         productseries_b = self.factory.makeProductSeries(product=product)
 
-        # You can't have a BugTask targetted to a productseries without
-        # already having a BugTask targetted to the product. Create
+        # You can't have a BugTask targeted to a productseries without
+        # already having a BugTask targeted to the product. Create
         # this task explicitly.
         product_task = self.factory.makeBugTask(target=product)
 
diff --git a/lib/lp/bugs/model/tests/test_bugtasksearch.py b/lib/lp/bugs/model/tests/test_bugtasksearch.py
index d7cfb06..db52d71 100644
--- a/lib/lp/bugs/model/tests/test_bugtasksearch.py
+++ b/lib/lp/bugs/model/tests/test_bugtasksearch.py
@@ -1413,7 +1413,7 @@ class DistroseriesTarget(
             sourcepackagename=sourcepackage.sourcepackagename,
         )
         self.factory.makeBugTask(target=other_sourcepackage)
-        # Create a bug in the same distrubution package.
+        # Create a bug in the same distribution package.
         dsp = self.searchtarget.distribution.getSourcePackage(
             sourcepackage.name
         )
diff --git a/lib/lp/bugs/scripts/bugnotification.py b/lib/lp/bugs/scripts/bugnotification.py
index 08b1e43..b7557b3 100644
--- a/lib/lp/bugs/scripts/bugnotification.py
+++ b/lib/lp/bugs/scripts/bugnotification.py
@@ -281,7 +281,7 @@ def notification_comment_batches(notifications):
     Generates `comment_group, notification` tuples.
 
     The notifications are searched in order for continuous spans containing
-    only one comment. Each continous span is given a unique number. Each
+    only one comment. Each continuous span is given a unique number. Each
     notification is yielded along with its span number.
     """
     comment_count = 0
diff --git a/lib/lp/bugs/scripts/checkwatches/core.py b/lib/lp/bugs/scripts/checkwatches/core.py
index cbd4da7..fc7eb4a 100644
--- a/lib/lp/bugs/scripts/checkwatches/core.py
+++ b/lib/lp/bugs/scripts/checkwatches/core.py
@@ -331,7 +331,7 @@ class CheckwatchesMaster(WorkingBase):
                 new_next_check=datetime.now(pytz.timezone("UTC"))
             )
 
-        # Loop over the bug watches in batches as specificed by
+        # Loop over the bug watches in batches as specified by
         # batch_size until there are none left to update.
         with self.transaction:
             self.logger.info(
@@ -730,7 +730,7 @@ class CheckwatchesMaster(WorkingBase):
         )
 
         added_task.bugwatch = bug_watch
-        # Need to flush databse updates, so that the bug watch knows it
+        # Need to flush database updates, so that the bug watch knows it
         # is linked from a bug task.
         flush_database_updates()
 
@@ -775,7 +775,7 @@ class TwistedThreadScheduler(BaseScheduler):
         :type num_threads: int
 
         :param install_signal_handlers: Whether the Twisted reactor
-          should install signal handlers or not. This is intented for
+          should install signal handlers or not. This is intended for
           testing - set to False to avoid layer violations - but may
           be useful in other situations.
         :type install_signal_handlers: bool
@@ -838,7 +838,7 @@ class CheckWatchesCronScript(LaunchpadCronScript):
             dest="jobs",
             default=1,
             help=(
-                "The number of simulataneous jobs to run, %default by "
+                "The number of simultaneous jobs to run, %default by "
                 "default."
             ),
         )
diff --git a/lib/lp/bugs/stories/bugattachments/xx-bugattachments.rst b/lib/lp/bugs/stories/bugattachments/xx-bugattachments.rst
index ae6db94..bde2555 100644
--- a/lib/lp/bugs/stories/bugattachments/xx-bugattachments.rst
+++ b/lib/lp/bugs/stories/bugattachments/xx-bugattachments.rst
@@ -152,7 +152,7 @@ listed as an ordinary attachment.
     bar.txt
     More data
 
-Similary, if we add an attachment that does not look like a patch and
+Similarly, if we add an attachment that does not look like a patch and
 if we set the "patch" flag for this attachment...
 
     >>> user_browser.open(
@@ -310,7 +310,7 @@ the attachment should indeed be labeled as a patch
     What is a patch?
 
 We are sure that this file is indeed a patch, so let's activate the
-currenty inactive "yes" radion button of the question "Is this a patch?"
+currently inactive "yes" radion button of the question "Is this a patch?"
 again and submit the form.
 
     >>> patch_control_yes = user_browser.getControl('yes')
diff --git a/lib/lp/bugs/stories/bugs/xx-bug-affects-me-too.rst b/lib/lp/bugs/stories/bugs/xx-bug-affects-me-too.rst
index 3af8446..520a661 100644
--- a/lib/lp/bugs/stories/bugs/xx-bug-affects-me-too.rst
+++ b/lib/lp/bugs/stories/bugs/xx-bug-affects-me-too.rst
@@ -123,5 +123,5 @@ class.
     >>> print(' '.join(dynamic_content.get('class')))
     dynamic hidden
 
-It is the responsibilty of Javascript running in the page to unhide
+It is the responsibility of Javascript running in the page to unhide
 the dynamic content and hide the static content.
diff --git a/lib/lp/bugs/stories/bugtask-management/xx-bugtask-edit-forms.rst b/lib/lp/bugs/stories/bugtask-management/xx-bugtask-edit-forms.rst
index 4968056..dedd2bc 100644
--- a/lib/lp/bugs/stories/bugtask-management/xx-bugtask-edit-forms.rst
+++ b/lib/lp/bugs/stories/bugtask-management/xx-bugtask-edit-forms.rst
@@ -1,7 +1,7 @@
 Bug task edit forms
 ===================
 
-Aside from the options to edit the status of a bugtask vie Ajax
+Aside from the options to edit the status of a bugtask via Ajax
 and via inline forms of the main bug page (which are by default
 hidden via CSS), the details of a bug task status can be edited
 on dedicated pages.
diff --git a/lib/lp/bugs/stories/bugtask-searches/xx-advanced-people-filters.rst b/lib/lp/bugs/stories/bugtask-searches/xx-advanced-people-filters.rst
index 4653df1..e8012d8 100644
--- a/lib/lp/bugs/stories/bugtask-searches/xx-advanced-people-filters.rst
+++ b/lib/lp/bugs/stories/bugtask-searches/xx-advanced-people-filters.rst
@@ -11,7 +11,7 @@ Widget basics
 
 When searching by username we need to both select the corresponding
 radio button and enter a valid user name. The username input
-automatically selects the coresponding radio button when we type some
+automatically selects the corresponding radio button when we type some
 text into it by calling the selectWidget Javascript function.
 
     >>> browser.open('http://launchpad.test/firefox/+bugs?advanced=1')
diff --git a/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-branches.rst b/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-branches.rst
index a7514ff..547e9ab 100644
--- a/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-branches.rst
+++ b/lib/lp/bugs/stories/bugtask-searches/xx-filter-by-linked-branches.rst
@@ -41,7 +41,7 @@ linkes branches are returned.
     4 Reflow problems with complex page layouts
      Mozilla Firefox Medium New
 
-Similary, we can search for branches that don't have linked branches, if
+Similarly, we can search for branches that don't have linked branches, if
 we uncheck 'Show bugs with linked branches'.
 
     >>> anon_browser.open(
diff --git a/lib/lp/bugs/stories/feeds/xx-bug-atom.rst b/lib/lp/bugs/stories/feeds/xx-bug-atom.rst
index 127b46c..d14dc43 100644
--- a/lib/lp/bugs/stories/feeds/xx-bug-atom.rst
+++ b/lib/lp/bugs/stories/feeds/xx-bug-atom.rst
@@ -426,7 +426,7 @@ Subscribe simple-team to a number of bugs.
     >>> one_mem_browser.getControl('Subscribe user').click()
 
 
-Now we can do a query on the lastest bugs for simple team and expect
+Now we can do a query on the latest bugs for simple team and expect
 some results.
 
     >>> browser.open(
diff --git a/lib/lp/bugs/stories/guided-filebug/xx-bug-reporting-tools.rst b/lib/lp/bugs/stories/guided-filebug/xx-bug-reporting-tools.rst
index e9629f2..9fc1379 100644
--- a/lib/lp/bugs/stories/guided-filebug/xx-bug-reporting-tools.rst
+++ b/lib/lp/bugs/stories/guided-filebug/xx-bug-reporting-tools.rst
@@ -6,7 +6,7 @@ user's computer can upload a message containing extra information about
 the bug to Launchpad.
 
 There is no API for uploading blobs, thus they need to do a HTTP POST to
-a web form to upload debug data. There are several verions of Apport out
+a web form to upload debug data. There are several versions of Apport out
 there depending on the field names on +storeblob, so it's important that
 those names (including the name of the button) doesn't change. The lines
 that are important not to change are marked with a "Don't change!"
diff --git a/lib/lp/bugs/stories/guided-filebug/xx-displaying-similar-bugs.rst b/lib/lp/bugs/stories/guided-filebug/xx-displaying-similar-bugs.rst
index b1524d2..8772e8d 100644
--- a/lib/lp/bugs/stories/guided-filebug/xx-displaying-similar-bugs.rst
+++ b/lib/lp/bugs/stories/guided-filebug/xx-displaying-similar-bugs.rst
@@ -82,7 +82,7 @@ Then, if we match bug 1, only basic details of bug 8 are displayed:
       Closed (0 comments) last updated 2006-05-19...
       When I press print in Firefox...
 
-To help the user verify if a bug is indeed simliar to the problem
+To help the user verify if a bug is indeed similar to the problem
 being reported, the user's original summary is displayed above
 the list of potentially similar bugs.
 
diff --git a/lib/lp/bugs/stories/standalone/xx-filebug-package-chooser-radio-buttons.rst b/lib/lp/bugs/stories/standalone/xx-filebug-package-chooser-radio-buttons.rst
index b47c361..a72e15f 100644
--- a/lib/lp/bugs/stories/standalone/xx-filebug-package-chooser-radio-buttons.rst
+++ b/lib/lp/bugs/stories/standalone/xx-filebug-package-chooser-radio-buttons.rst
@@ -1,6 +1,6 @@
 The +filebug pages for a distribution and distribution package present a
 simple package selection widget, where you can either select the package
-in which you think the bug occurrs, or say "I don't know".
+in which you think the bug occurs, or say "I don't know".
 
 The default on the distribution +filebug page is "I don't know". We
 will use the advanced filebug form to skip searching for dupes.
diff --git a/lib/lp/bugs/templates/bugwatch-comments.pt b/lib/lp/bugs/templates/bugwatch-comments.pt
index 882850c..018813e 100644
--- a/lib/lp/bugs/templates/bugwatch-comments.pt
+++ b/lib/lp/bugs/templates/bugwatch-comments.pt
@@ -22,7 +22,7 @@
 
       <div class="yui-g">
         <tal:comments repeat="comment view/comments">
-          <tal:coment tal:replace="structure comment/@@+box" />
+          <tal:comment tal:replace="structure comment/@@+box" />
         </tal:comments>
       </div>
     </div>
diff --git a/lib/lp/bugs/tests/bugs-emailinterface.rst b/lib/lp/bugs/tests/bugs-emailinterface.rst
index 5554e2b..d8f3639 100644
--- a/lib/lp/bugs/tests/bugs-emailinterface.rst
+++ b/lib/lp/bugs/tests/bugs-emailinterface.rst
@@ -786,7 +786,7 @@ unsubscribed. Examples:
     False
 
 If the user sending the email does not have permission to perform
-the unsubscribe request, an error message wil be sent.
+the unsubscribe request, an error message will be sent.
 
     >>> login(sampledata.NO_PRIVILEGE_EMAIL)
     >>> submit_commands(bug_four, 'unsubscribe mark')
@@ -2552,7 +2552,7 @@ content-disposition header does not provide a filename.
 If the content-disposition header of a message part begins with "inline",
 it is stored as a bug attachment, if the header additionally provides
 a filename. This ensures that a message part containing debug information
-and the content type text/plain is stored as a bug attchment.
+and the content type text/plain is stored as a bug attachment.
 
     >>> submit_mail = b"""From: Sample Person <test@xxxxxxxxxxxxx>
     ... To: new@xxxxxxxxxxxxxxxxxx
diff --git a/lib/lp/bugs/tests/externalbugtracker.py b/lib/lp/bugs/tests/externalbugtracker.py
index 1c51207..2b7f6c0 100644
--- a/lib/lp/bugs/tests/externalbugtracker.py
+++ b/lib/lp/bugs/tests/externalbugtracker.py
@@ -59,7 +59,7 @@ def new_bugtracker(bugtracker_type, base_url="http://bugs.some.where";):
     """Create a new bug tracker using the 'launchpad db user.
 
     Before calling this function, the current transaction should be
-    commited, since the current connection to the database will be
+    committed, since the current connection to the database will be
     closed. After returning from this function, a new connection using
     the checkwatches db user is created.
     """
diff --git a/lib/lp/bugs/tests/test_apportjob.py b/lib/lp/bugs/tests/test_apportjob.py
index a7fc3b8..96cd204 100644
--- a/lib/lp/bugs/tests/test_apportjob.py
+++ b/lib/lp/bugs/tests/test_apportjob.py
@@ -87,7 +87,7 @@ class ProcessApportBlobJobTestCase(TestCaseWithFactory):
         transaction.commit()  # We need the blob available from the Librarian.
 
     def _assertFileBugDataMatchesDict(self, filebug_data, data_dict):
-        """Asser that the data in a FileBugData object matches a dict."""
+        """Assert that the data in a FileBugData object matches a dict."""
         self.assertEqual(
             filebug_data.initial_summary,
             data_dict["initial_summary"],
@@ -221,7 +221,7 @@ class ProcessApportBlobJobTestCase(TestCaseWithFactory):
         self.assertEqual(
             job,
             job_from_uuid,
-            "Job returend by getByBlobUUID() did not match original job.",
+            "Job returned by getByBlobUUID() did not match original job.",
         )
         self.assertEqual(
             self.blob,
diff --git a/lib/lp/bugs/tests/test_bugbranch.py b/lib/lp/bugs/tests/test_bugbranch.py
index 68bf4f5..77a0934 100644
--- a/lib/lp/bugs/tests/test_bugbranch.py
+++ b/lib/lp/bugs/tests/test_bugbranch.py
@@ -209,7 +209,7 @@ class TestBugBranch(TestCaseWithFactory):
 
     def test_unlink_not_linked_branch(self):
         # When unlinkBranch is called with a branch that isn't already linked,
-        # nothing discernable happens.
+        # nothing discernible happens.
         bug = self.factory.makeBug()
         branch = self.factory.makeBranch()
         bug.unlinkBranch(branch, self.factory.makePerson())
diff --git a/lib/lp/bugs/tests/test_bugchanges.py b/lib/lp/bugs/tests/test_bugchanges.py
index 1fa96cb..3c55ed3 100644
--- a/lib/lp/bugs/tests/test_bugchanges.py
+++ b/lib/lp/bugs/tests/test_bugchanges.py
@@ -498,7 +498,7 @@ class TestBugChanges(TestCaseWithFactory):
 
     def test_bugwatch_not_modified(self):
         # Firing off a modified event without actually modifying
-        # anything intersting doesn't cause anything to be added to the
+        # anything interesting doesn't cause anything to be added to the
         # activity log.
         bug_watch = self.factory.makeBugWatch(bug=self.bug)
         self.saveOldChanges()
@@ -1424,7 +1424,7 @@ class TestBugChanges(TestCaseWithFactory):
         self._test_unassign_bugtask(self.bug_task, expected_recipients)
 
     def test_target_bugtask_to_milestone(self):
-        # When a bugtask is targetted to a milestone BugActivity and
+        # When a bugtask is targeted to a milestone BugActivity and
         # BugNotification records will be created.
         milestone = self.factory.makeMilestone(product=self.product)
         self.changeAttribute(self.bug_task, "milestone", milestone)
@@ -1451,7 +1451,7 @@ class TestBugChanges(TestCaseWithFactory):
         )
 
     def test_untarget_bugtask_from_milestone(self):
-        # When a bugtask is untargetted from a milestone both
+        # When a bugtask is untargeted from a milestone both
         # BugActivity and BugNotification records will be created.
         milestone = self.factory.makeMilestone(product=self.product)
         self.changeAttribute(self.bug_task, "milestone", milestone)
diff --git a/lib/lp/bugs/tests/test_bugsupervisor_bugnomination.py b/lib/lp/bugs/tests/test_bugsupervisor_bugnomination.py
index 5ad6fcd..d725da1 100644
--- a/lib/lp/bugs/tests/test_bugsupervisor_bugnomination.py
+++ b/lib/lp/bugs/tests/test_bugsupervisor_bugnomination.py
@@ -46,7 +46,7 @@ class AddNominationTestMixin:
 
     def test_bugsupervisor_addNominationFor_series(self):
         # A bug may be nominated for a series of a product with an
-        # exisiting task by the product's bug supervisor.
+        # existing task by the product's bug supervisor.
         login_person(self.bug_supervisor)
         self.bug.addNomination(self.bug_supervisor, self.series)
         self.assertTrue(len(self.bug.getNominations()), 1)
@@ -62,7 +62,7 @@ class AddNominationTestMixin:
 
     def test_owner_addNominationFor_series(self):
         # A bug may be nominated for a series of a product with an
-        # exisiting task by the product's owner.
+        # existing task by the product's owner.
         login_person(self.owner)
         self.bug.addNomination(self.owner, self.series)
         self.assertTrue(len(self.bug.getNominations()), 1)
diff --git a/lib/lp/bugs/tests/test_bugtarget.py b/lib/lp/bugs/tests/test_bugtarget.py
index 84e1d0e..b5b937c 100644
--- a/lib/lp/bugs/tests/test_bugtarget.py
+++ b/lib/lp/bugs/tests/test_bugtarget.py
@@ -1,7 +1,7 @@
 # Copyright 2009 Canonical Ltd.  This software is licensed under the
 # GNU Affero General Public License version 3 (see the file LICENSE).
 
-"""Test harness for running tests agains IBugTarget implementations.
+"""Test harness for running tests against IBugTarget implementations.
 
 This module runs the interface test against the Product, ProductSeries
 ProjectGroup, DistributionSourcePackage, and DistroSeries implementations
diff --git a/lib/lp/bugs/tests/test_bugtarget2.py b/lib/lp/bugs/tests/test_bugtarget2.py
index 5165e4e..e9d0131 100644
--- a/lib/lp/bugs/tests/test_bugtarget2.py
+++ b/lib/lp/bugs/tests/test_bugtarget2.py
@@ -144,7 +144,7 @@ class BugTargetBugFilingDuplicateSearchInherited:
 
     def test_enable_bugfiling_duplicate_search_changed_by_parent_change(self):
         # If enable_bugfiling_duplicate_search is changed for the parent
-        # object, it is changed for the bug traget too.
+        # object, it is changed for the bug target too.
         with person_logged_in(self.bug_supervisor):
             parent = self.bugtarget.bugtarget_parent
             parent.enable_bugfiling_duplicate_search = False
@@ -154,7 +154,7 @@ class BugTargetBugFilingDuplicateSearchInherited:
 class TestProductSeries(
     BugTargetBugFilingDuplicateSearchInherited, TestCaseWithFactory
 ):
-    """Tests for product serieses as bug targets."""
+    """Tests for product series as bug targets."""
 
     layer = DatabaseFunctionalLayer
 
@@ -183,7 +183,7 @@ class TestProductSeries(
 class TestSourcePackage(
     BugTargetBugFilingDuplicateSearchInherited, TestCaseWithFactory
 ):
-    """Tests for product serieses as bug targets."""
+    """Tests for source packages as bug targets."""
 
     layer = DatabaseFunctionalLayer
 
diff --git a/lib/lp/bugs/tests/test_bzremotecomponentfinder.py b/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
index f33b94e..46969d0 100644
--- a/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
+++ b/lib/lp/bugs/tests/test_bzremotecomponentfinder.py
@@ -1,7 +1,7 @@
 # Copyright 2010-2018 Canonical Ltd.  This software is licensed under the
 # GNU Affero General Public License version 3 (see the file LICENSE).
 
-"""Tests cronscript for retriving components from remote Bugzillas"""
+"""Tests cronscript for retrieving components from remote Bugzillas."""
 
 __all__ = []
 
diff --git a/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py b/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py
index 8b1c502..a9ee89a 100644
--- a/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py
+++ b/lib/lp/bugs/tests/test_structuralsubscriptiontarget.py
@@ -122,7 +122,7 @@ class RestrictedStructuralSubscriptionTestBase:
         )
 
     def test_remove_nonexistant_structural_subscription(self):
-        # removing a nonexistant subscription raises a
+        # removing a nonexistent subscription raises a
         # DeleteSubscriptionError
         login_person(self.ordinary_subscriber)
         self.assertRaises(
diff --git a/lib/lp/bugs/tests/test_vocabulary.py b/lib/lp/bugs/tests/test_vocabulary.py
index 94cd0a8..5d00ef3 100644
--- a/lib/lp/bugs/tests/test_vocabulary.py
+++ b/lib/lp/bugs/tests/test_vocabulary.py
@@ -52,7 +52,7 @@ class UsesBugsDistributionVocabularyTestCase(TestCaseWithFactory):
     def test_contains_context_distro(self):
         # The vocabulary contains the context distro even it it does not
         # use Launchpad to track bugs. The distro may have tracked bugs
-        # in the past so it is a legitimate choise for historic data.
+        # in the past so it is a legitimate choice for historic data.
         distro_less_bugs = self.factory.makeDistribution()
         vocabulary = UsesBugsDistributionVocabulary(distro_less_bugs)
         self.assertFalse(distro_less_bugs.official_malone)
diff --git a/lib/lp/bugs/vocabularies.py b/lib/lp/bugs/vocabularies.py
index e00159c..9ebe341 100644
--- a/lib/lp/bugs/vocabularies.py
+++ b/lib/lp/bugs/vocabularies.py
@@ -402,7 +402,7 @@ class BugTaskMilestoneVocabulary:
             bugtask.milestone is not None
             and bugtask.milestone not in milestones
         ):
-            # Even if we inactivate a milestone, a bugtask might still be
+            # Even if we deactivate a milestone, a bugtask might still be
             # linked to it. Include such milestones in the vocabulary to
             # ensure that the +editstatus page doesn't break.
             milestones.append(bugtask.milestone)