You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by gc...@apache.org on 2023/03/06 18:47:06 UTC

[allura] 02/04: [#8502] fixed line too long warnings

This is an automated email from the ASF dual-hosted git repository.

gcruz pushed a commit to branch gc/8502
in repository https://gitbox.apache.org/repos/asf/allura.git

commit 828c04d7bbc09f55f6d7eee83b407db4cd76690c
Author: Guillermo Cruz <gu...@slashdotmedia.com>
AuthorDate: Sun Mar 5 21:02:51 2023 -0600

    [#8502] fixed line too long warnings
---
 Allura/allura/app.py                               |  4 +-
 Allura/allura/command/create_trove_categories.py   | 68 +++++++++++-----------
 Allura/allura/command/set_neighborhood_features.py |  2 +-
 Allura/allura/command/taskd.py                     |  4 +-
 Allura/allura/command/taskd_cleanup.py             |  2 +-
 Allura/allura/config/app_cfg.py                    |  3 +-
 Allura/allura/controllers/auth.py                  |  2 +-
 Allura/allura/controllers/repository.py            |  2 +-
 Allura/allura/controllers/rest.py                  |  2 +-
 Allura/allura/controllers/trovecategories.py       |  2 +-
 Allura/allura/ext/admin/widgets.py                 | 10 ++--
 Allura/allura/ext/user_profile/user_main.py        |  2 +-
 Allura/allura/lib/app_globals.py                   |  5 +-
 Allura/allura/lib/custom_middleware.py             |  2 +-
 Allura/allura/lib/helpers.py                       |  2 +-
 Allura/allura/lib/macro.py                         |  3 +-
 Allura/allura/lib/phone/nexmo.py                   |  4 +-
 Allura/allura/lib/plugin.py                        |  2 +-
 Allura/allura/lib/security.py                      |  2 +-
 Allura/allura/lib/utils.py                         |  2 +-
 Allura/allura/lib/widgets/form_fields.py           |  2 +-
 Allura/allura/lib/widgets/forms.py                 |  8 +--
 Allura/allura/model/__init__.py                    |  2 +-
 Allura/allura/model/neighborhood.py                |  2 +-
 Allura/allura/model/project.py                     |  9 +--
 Allura/allura/model/repository.py                  |  2 +-
 Allura/allura/model/stats.py                       |  3 +-
 Allura/allura/model/types.py                       |  2 +-
 Allura/allura/scripts/disable_users.py             |  2 +-
 Allura/allura/tests/functional/test_discuss.py     |  2 +-
 .../allura/tests/functional/test_neighborhood.py   |  2 +-
 Allura/allura/tests/functional/test_newforge.py    |  2 +-
 Allura/allura/tests/functional/test_site_admin.py  |  4 +-
 .../allura/tests/functional/test_user_profile.py   |  8 +--
 Allura/allura/tests/model/test_project.py          |  4 +-
 Allura/allura/tests/model/test_repo.py             |  3 +-
 Allura/allura/tests/test_commands.py               |  2 +-
 Allura/allura/tests/test_decorators.py             |  2 +-
 Allura/allura/tests/test_globals.py                |  6 +-
 Allura/allura/tests/test_helpers.py                |  2 +-
 Allura/allura/tests/test_mail_util.py              |  2 +-
 Allura/allura/tests/test_middlewares.py            |  3 +-
 Allura/allura/tests/test_plugin.py                 |  2 +-
 Allura/allura/tests/test_tasks.py                  |  6 +-
 Allura/allura/tests/test_utils.py                  |  6 +-
 Allura/allura/tests/unit/test_session.py           |  2 +-
 Allura/allura/tests/unit/test_solr.py              |  2 +-
 .../forgediscussion/controllers/forum.py           |  5 +-
 .../forgediscussion/controllers/root.py            |  2 +-
 ForgeGit/forgegit/model/git_repo.py                |  4 +-
 .../forgegit/tests/functional/test_controllers.py  | 10 ++--
 ForgeGit/forgegit/tests/model/test_repository.py   |  2 +-
 .../forgeimporters/tests/github/test_extractor.py  |  2 +-
 .../forgeimporters/tests/github/test_tracker.py    |  8 +--
 .../trac/tests/functional/test_trac.py             |  2 +-
 .../forgetracker/tests/functional/test_root.py     |  5 +-
 .../forgetracker/widgets/admin_custom_fields.py    |  2 +-
 ForgeWiki/forgewiki/tests/functional/test_root.py  |  4 +-
 ForgeWiki/forgewiki/wiki_main.py                   |  4 +-
 59 files changed, 136 insertions(+), 131 deletions(-)

diff --git a/Allura/allura/app.py b/Allura/allura/app.py
index 154c6bf32..8386f8539 100644
--- a/Allura/allura/app.py
+++ b/Allura/allura/app.py
@@ -100,8 +100,8 @@ class SitemapEntry:
 
     """
 
-    def __init__(self, label, url=None, children=None, className=None,
-                 ui_icon=None, small=None, tool_name=None, matching_urls=None, extra_html_attrs=None, mount_point=None):
+    def __init__(self, label, url=None, children=None, className=None, ui_icon=None, small=None, tool_name=None,
+                 matching_urls=None, extra_html_attrs=None, mount_point=None):
         """
         Create a new SitemapEntry.
 
diff --git a/Allura/allura/command/create_trove_categories.py b/Allura/allura/command/create_trove_categories.py
index bdb9815b9..cd57f0f01 100644
--- a/Allura/allura/command/create_trove_categories.py
+++ b/Allura/allura/command/create_trove_categories.py
@@ -234,7 +234,7 @@ class CreateTroveCategoriesCommand(base.Command):
                                "User Interface :: Toolkits/Libraries :: ClanLib", True))
         self.create_trove_cat(
             (516, 500, "db_group_objmap", "Project is a relational object mapper",
-             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a relational object mapper",  # nopep8
+             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a relational object mapper",  # noqa: E501
              True))
         self.create_trove_cat(
             (487, 458, "ui_ggi", "GGI", "User Interface :: Toolkits/Libraries :: GGI", True))
@@ -246,7 +246,7 @@ class CreateTroveCategoriesCommand(base.Command):
                                "User Interface :: Toolkits/Libraries :: wxWidgets", True))
         self.create_trove_cat(
             (511, 500, "db_group_mgmt", "Project is a database management tool",
-             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a database management tool",  # nopep8
+             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a database management tool",  # noqa: E501
              True))
         self.create_trove_cat(
             (479, 458, "ui_qt", "Qt", "User Interface :: Toolkits/Libraries :: Qt", True))
@@ -254,7 +254,7 @@ class CreateTroveCategoriesCommand(base.Command):
             (477, 458, "ui_gtk", "GTK+", "User Interface :: Toolkits/Libraries :: GTK+", True))
         self.create_trove_cat(
             (513, 500, "db_group_netdbms", "Project is a network-based DBMS (database system)",
-             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a network-based DBMS (database system)",  # nopep8
+             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a network-based DBMS (database system)",  # noqa: E501
              True))
         self.create_trove_cat(
             (228, 458, "newt", "Newt", "User Interface :: Toolkits/Libraries :: Newt", True))
@@ -262,7 +262,7 @@ class CreateTroveCategoriesCommand(base.Command):
                                "User Interface :: Toolkits/Libraries :: Curses/Ncurses", True))
         self.create_trove_cat(
             (515, 500, "db_group_conv", "Project is a database conversion tool",
-             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a database conversion tool",  # nopep8
+             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a database conversion tool",  # noqa: E501
              True))
         self.create_trove_cat(
             (478, 458, "ui_tk", "Tk", "User Interface :: Toolkits/Libraries :: Tk", True))
@@ -272,7 +272,7 @@ class CreateTroveCategoriesCommand(base.Command):
                                "Topic :: Communications :: Email :: Post-Office", True))
         self.create_trove_cat(
             (514, 500, "db_group_propfmt", "Project is a tool for a proprietary database file format",
-             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a tool for a proprietary database file format",  # nopep8
+             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a tool for a proprietary database file format",  # noqa: E501
              True))
         self.create_trove_cat(
             (482, 458, "ui_aalib", "AAlib", "User Interface :: Toolkits/Libraries :: AAlib", True))
@@ -280,7 +280,7 @@ class CreateTroveCategoriesCommand(base.Command):
             (484, 458, "ui_fltk", "FLTK", "User Interface :: Toolkits/Libraries :: FLTK", True))
         self.create_trove_cat(
             (512, 500, "db_group_filedbms", "Project is a file-based DBMS (database system)",
-             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a file-based DBMS (database system)",  # nopep8
+             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a file-based DBMS (database system)",  # noqa: E501
              True))
         self.create_trove_cat(
             (486, 458, "ui_plib", "Plib", "User Interface :: Toolkits/Libraries :: Plib", True))
@@ -288,7 +288,7 @@ class CreateTroveCategoriesCommand(base.Command):
             (488, 458, "ui_glide", "Glide", "User Interface :: Toolkits/Libraries :: Glide", True))
         self.create_trove_cat(
             (510, 500, "db_group_api", "Project is a database abstraction layer (API)",
-             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a database abstraction layer (API)",  # nopep8
+             "Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a database abstraction layer (API)",  # noqa: E501
              True))
         self.create_trove_cat(
             (490, 458, "ui_glut", "GLUT", "User Interface :: Toolkits/Libraries :: GLUT", True))
@@ -829,14 +829,14 @@ class CreateTroveCategoriesCommand(base.Command):
             (441, 315, "ecos", "eCos", "Operating System :: Handheld/Embedded Operating Systems :: eCos", True))
         self.create_trove_cat(
             (
-            443, 315, "vxworks", "VxWorks", "Operating System :: Handheld/Embedded Operating Systems :: VxWorks", True))  # nopep8
+            443, 315, "vxworks", "VxWorks", "Operating System :: Handheld/Embedded Operating Systems :: VxWorks", True))  # noqa: E501
         self.create_trove_cat((444, 315, "symbianos", "SymbianOS",
                                "Operating System :: Handheld/Embedded Operating Systems :: SymbianOS", True))
         self.create_trove_cat(
             (442, 315, "qnx", "QNX", "Operating System :: Handheld/Embedded Operating Systems :: QNX", True))
         self.create_trove_cat(
             (
-            440, 315, "uclinux", "uClinux", "Operating System :: Handheld/Embedded Operating Systems :: uClinux", True))  # nopep8
+            440, 315, "uclinux", "uClinux", "Operating System :: Handheld/Embedded Operating Systems :: uClinux", True))  # noqa: E501
         self.create_trove_cat(
             (418, 199, "modern_oses", "Modern (Vendor-Supported) Desktop Operating Systems",
              "Operating System :: Modern (Vendor-Supported) Desktop Operating Systems", True))
@@ -872,13 +872,13 @@ class CreateTroveCategoriesCommand(base.Command):
             (634, 236, "console-platforms", "Console-based Platforms",
              "Operating System :: Other Operating Systems :: Console-based Platforms", True))
         self.create_trove_cat((637, 634, "sega-dreamcast", "Sega Dreamcast",
-                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Sega Dreamcast",  # nopep8
+                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Sega Dreamcast",  # noqa: E501
                                True))
         self.create_trove_cat((635, 634, "xbox", "Microsoft Xbox",
-                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Microsoft Xbox",  # nopep8
+                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Microsoft Xbox",  # noqa: E501
                                True))
         self.create_trove_cat((636, 634, "sony-ps2", "Sony Playstation 2",
-                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Sony Playstation 2",  # nopep8
+                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Sony Playstation 2",  # noqa: E501
                                True))
         self.create_trove_cat(
             (422, 236, "mswin_98", "Win98", "Operating System :: Other Operating Systems :: Win98", True))
@@ -924,11 +924,11 @@ class CreateTroveCategoriesCommand(base.Command):
              "Operating System :: Grouping and Descriptive Categories :: Project is OS Distribution-Specific", True))
         self.create_trove_cat(
             (449, 432, "eightbit_oses", "Classic 8-bit Operating Systems (Apple, Atari, Commodore, etc.)",
-             "Operating System :: Grouping and Descriptive Categories :: Classic 8-bit Operating Systems (Apple, Atari, Commodore, etc.)",  # nopep8
+             "Operating System :: Grouping and Descriptive Categories :: Classic 8-bit Operating Systems (Apple, Atari, Commodore, etc.)",  # noqa: E501
              True))
         self.create_trove_cat(
             (436, 432, "os_portable", "OS Portable (Source code to work with many OS platforms)",
-             "Operating System :: Grouping and Descriptive Categories :: OS Portable (Source code to work with many OS platforms)",  # nopep8
+             "Operating System :: Grouping and Descriptive Categories :: OS Portable (Source code to work with many OS platforms)",  # noqa: E501
              True))
         self.create_trove_cat(
             (438, 432, "os_projectdistro", "Project is an Operating System Distribution",
@@ -936,7 +936,7 @@ class CreateTroveCategoriesCommand(base.Command):
              True))
         self.create_trove_cat(
             (235, 432, "independent", "OS Independent (Written in an interpreted language)",
-             "Operating System :: Grouping and Descriptive Categories :: OS Independent (Written in an interpreted language)",  # nopep8
+             "Operating System :: Grouping and Descriptive Categories :: OS Independent (Written in an interpreted language)",  # noqa: E501
              True))
         self.create_trove_cat(
             (200, 432, "posix", "All POSIX (Linux/BSD/UNIX-like OSes)",
@@ -946,7 +946,7 @@ class CreateTroveCategoriesCommand(base.Command):
              "Operating System :: Grouping and Descriptive Categories :: 32-bit MS Windows (NT/2000/XP)", True))
         self.create_trove_cat(
             (202, 432, "bsd", "All BSD Platforms (FreeBSD/NetBSD/OpenBSD/Apple Mac OS X)",
-             "Operating System :: Grouping and Descriptive Categories :: All BSD Platforms (FreeBSD/NetBSD/OpenBSD/Apple Mac OS X)",  # nopep8
+             "Operating System :: Grouping and Descriptive Categories :: All BSD Platforms (FreeBSD/NetBSD/OpenBSD/Apple Mac OS X)",  # noqa: E501
              True))
         self.create_trove_cat(
             (435, 432, "mswin_all32bit", "All 32-bit MS Windows (95/98/NT/2000/XP)",
@@ -1108,7 +1108,7 @@ class CreateTroveCategoriesCommand(base.Command):
         self.create_trove_cat((57, 55, "kde", "K Desktop Environment (KDE)",
                                "Topic :: Desktop Environment :: K Desktop Environment (KDE)", True))
         self.create_trove_cat(
-            (61, 57, "themes", "Themes", "Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes", True))  # nopep8
+            (61, 57, "themes", "Themes", "Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes", True))  # noqa: E501
         self.create_trove_cat(
             (58, 55, "gnome", "Gnome", "Topic :: Desktop Environment :: Gnome", True))
         self.create_trove_cat((62, 55, "screensavers", "Screen Savers",
@@ -1427,7 +1427,7 @@ class CreateTroveCategoriesCommand(base.Command):
         self.create_trove_cat(
             (596, 125, "codec", "Codec", "Topic :: Multimedia :: Video :: Codec", True))
         self.create_trove_cat(
-            (127, 125, "video-conversion", "Video Conversion", "Topic :: Multimedia :: Video :: Video Conversion", True))
+            (127, 125, "video-conversion", "Video Conversion", "Topic :: Multimedia :: Video :: Video Conversion", True)) # noqa: E501
         self.create_trove_cat(
             (128, 125, "display", "Display", "Topic :: Multimedia :: Video :: Display", True))
         self.create_trove_cat(
@@ -1474,7 +1474,7 @@ class CreateTroveCategoriesCommand(base.Command):
              "Operating System :: Modern (Vendor-Supported) Desktop Operating Systems :: Windows 7", True))
         self.create_trove_cat(
             (
-            728, 315, "android", "Android", "Operating System :: Handheld/Embedded Operating Systems :: Android", True))  # nopep8
+            728, 315, "android", "Android", "Operating System :: Handheld/Embedded Operating Systems :: Android", True))  # noqa: E501
         self.create_trove_cat((780, 315, "ios", "Apple iPhone",
                                "Operating System :: Handheld/Embedded Operating Systems :: Apple iPhone", True))
         self.create_trove_cat((863, 534, "architects", "Architects",
@@ -1565,7 +1565,7 @@ class CreateTroveCategoriesCommand(base.Command):
         self.create_trove_cat((673, 576, "bsm", "Business Service Management",
                                "Topic :: Office/Business :: Enterprise :: Business Service Management"))
         self.create_trove_cat((674, 673, "servicesupport", "Service Support",
-                               "Topic :: Office/Business :: Enterprise :: Business Service Management :: Service Support"))  # nopep8
+                               "Topic :: Office/Business :: Enterprise :: Business Service Management :: Service Support"))  # noqa: E501
         self.create_trove_cat(
             (675, 673, "serviceassurance", "Service Assurance",
              "Topic :: Office/Business :: Enterprise :: Business Service Management :: Service Assurance"))
@@ -1594,14 +1594,14 @@ class CreateTroveCategoriesCommand(base.Command):
              "License :: OSI-Approved Open Source :: Simple Public License 2.0"))
         self.create_trove_cat(
             (687, 673, "cmdb", "Configuration Management Database (CMDB)",
-             "Topic :: Office/Business :: Enterprise :: Business Service Management :: Configuration Management Database (CMDB)"))  # nopep8
+             "Topic :: Office/Business :: Enterprise :: Business Service Management :: Configuration Management Database (CMDB)"))  # noqa: E501
         self.create_trove_cat(
             (688, 18, "mobileapps", "Mobile", "Topic :: Mobile"))
         self.create_trove_cat((689, 315, "winmobile", "Windows Mobile",
                                "Operating System :: Handheld/Embedded Operating Systems :: Windows Mobile"))
         self.create_trove_cat(
             (690, 315, "brew", "BREW (Binary Runtime Environment for Wireless)",
-             "Operating System :: Handheld/Embedded Operating Systems :: BREW (Binary Runtime Environment for Wireless)"))  # nopep8
+             "Operating System :: Handheld/Embedded Operating Systems :: BREW (Binary Runtime Environment for Wireless)"))  # noqa: E501
         self.create_trove_cat(
             (691, 315, "j2me", "J2ME (Java Platform, Micro Edition)",
              "Operating System :: Handheld/Embedded Operating Systems :: J2ME (Java Platform, Micro Edition)"))
@@ -1659,16 +1659,16 @@ class CreateTroveCategoriesCommand(base.Command):
             (717, 160, "proglangmeta", "Project is a programming language",
              "Programming Language :: Project is a programming language"))
         self.create_trove_cat((718, 634, "msxb360", "Microsoft Xbox 360",
-                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Microsoft Xbox 360"))  # nopep8
+                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Microsoft Xbox 360"))  # noqa: E501
         self.create_trove_cat((719, 634, "nintendogc", "Nintendo GameCube",
-                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Nintendo GameCube"))  # nopep8
+                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Nintendo GameCube"))  # noqa: E501
         self.create_trove_cat((720, 634, "nintendowii", "Nintendo Wii",
-                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Nintendo Wii"))  # nopep8
+                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Nintendo Wii"))  # noqa: E501
         self.create_trove_cat((721, 634, "sonyps3", "Sony PlayStation 3",
-                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Sony PlayStation 3"))  # nopep8
+                               "Operating System :: Other Operating Systems :: Console-based Platforms :: Sony PlayStation 3"))  # noqa: E501
         self.create_trove_cat(
             (722, 634, "sonypsp", "Sony PlayStation Portable (PSP)",
-             "Operating System :: Other Operating Systems :: Console-based Platforms :: Sony PlayStation Portable (PSP)"))  # nopep8
+             "Operating System :: Other Operating Systems :: Console-based Platforms :: Sony PlayStation Portable (PSP)"))  # noqa: E501
         self.create_trove_cat(
             (723, 160, "scilab", "Scilab", "Programming Language :: Scilab"))
         self.create_trove_cat(
@@ -1686,10 +1686,10 @@ class CreateTroveCategoriesCommand(base.Command):
             (730, 274, "basque", "Basque (Euskara)", "Translations :: Basque (Euskara)"))
         self.create_trove_cat(
             (731, 14, "classpath", "GNU General Public License with Classpath exception (Classpath::License)",
-             "License :: OSI-Approved Open Source :: GNU General Public License with Classpath exception (Classpath::License)"))  # nopep8
+             "License :: OSI-Approved Open Source :: GNU General Public License with Classpath exception (Classpath::License)"))  # noqa: E501
         self.create_trove_cat(
             (732, 727, "caddcam", "Computer-aided technologies (CADD/CAM/CAE)",
-             "Topic :: Scientific/Engineering :: Mechanical and Civil Engineering :: Computer-aided technologies (CADD/CAM/CAE)"))  # nopep8
+             "Topic :: Scientific/Engineering :: Mechanical and Civil Engineering :: Computer-aided technologies (CADD/CAM/CAE)"))  # noqa: E501
         self.create_trove_cat((733, 576, "humanresources", "Human Resources",
                                "Topic :: Office/Business :: Enterprise :: Human Resources"))
         self.create_trove_cat(
@@ -1984,7 +1984,7 @@ class CreateTroveCategoriesCommand(base.Command):
         self.update_trove_cat(
             16, dict(
                 fullname="GNU Library or Lesser General Public License version 2.0 (LGPLv2)",
-                fullpath="License :: OSI-Approved Open Source :: GNU Library or Lesser General Public License version 2.0 (LGPLv2)"))  # nopep8
+                fullpath="License :: OSI-Approved Open Source :: GNU Library or Lesser General Public License version 2.0 (LGPLv2)"))  # noqa: E501
         self.update_trove_cat(
             15, dict(fullname="GNU General Public License version 2.0 (GPLv2)",
                      fullpath="License :: OSI-Approved Open Source :: GNU General Public License version 2.0 (GPLv2)"))
@@ -1996,16 +1996,16 @@ class CreateTroveCategoriesCommand(base.Command):
              "License :: Creative Commons Attribution License"))
         self.create_trove_cat(
             (869, 868, "ccaslv2", "Creative Commons Attribution ShareAlike License V2.0",
-             "License :: Creative Commons Attribution License :: Creative Commons Attribution ShareAlike License V2.0"))  # nopep8
+             "License :: Creative Commons Attribution License :: Creative Commons Attribution ShareAlike License V2.0"))  # noqa: E501
         self.create_trove_cat(
             (870, 868, "ccaslv3", "Creative Commons Attribution ShareAlike License V3.0",
-             "License :: Creative Commons Attribution License :: Creative Commons Attribution ShareAlike License V3.0"))  # nopep8
+             "License :: Creative Commons Attribution License :: Creative Commons Attribution ShareAlike License V3.0"))  # noqa: E501
         self.create_trove_cat(
             (871, 868, "ccanclv2", "Creative Commons Attribution Non-Commercial License V2.0",
-             "License :: Creative Commons Attribution License :: Creative Commons Attribution Non-Commercial License V2.0"))  # nopep8
+             "License :: Creative Commons Attribution License :: Creative Commons Attribution Non-Commercial License V2.0"))  # noqa: E501
         self.create_trove_cat(
             (680, 14, "lgplv3", "GNU Library or Lesser General Public License version 3.0 (LGPLv3)",
-             "License :: OSI-Approved Open Source :: GNU Library or Lesser General Public License version 3.0 (LGPLv3)"))  # nopep8
+             "License :: OSI-Approved Open Source :: GNU Library or Lesser General Public License version 3.0 (LGPLv3)"))  # noqa: E501
         self.create_trove_cat(
             (679, 14, "gplv3", "GNU General Public License version 3.0 (GPLv3)",
              "License :: OSI-Approved Open Source :: GNU General Public License version 3.0 (GPLv3)"))
diff --git a/Allura/allura/command/set_neighborhood_features.py b/Allura/allura/command/set_neighborhood_features.py
index 75bfba032..9bfdddd96 100644
--- a/Allura/allura/command/set_neighborhood_features.py
+++ b/Allura/allura/command/set_neighborhood_features.py
@@ -40,7 +40,7 @@ class SetNeighborhoodFeaturesCommand(base.Command):
         "\t    max_projects - maximum projects allowed in neighborhood - specify None for no limit\r\n" \
         "\t    css - type of css customization - use \"none\", \"picker\", or \"custom\".\r\n" \
         "\t    google_analytics - allow the user to use google analytics - True or False\r\n" \
-        "\t    private_projects - allow private projects in the neighborhood - True or False"
+        "\t    private_projects - allow private projects in the neighborhood - True or False" # noqa: E501
     parser = base.Command.standard_parser(verbose=True)
 
     def command(self):
diff --git a/Allura/allura/command/taskd.py b/Allura/allura/command/taskd.py
index dc2b173c6..5e3526e66 100644
--- a/Allura/allura/command/taskd.py
+++ b/Allura/allura/command/taskd.py
@@ -61,7 +61,7 @@ class TaskdCommand(base.Command):
     parser.add_option('--only', dest='only', type='string', default=None,
                       help='only handle tasks of the given name(s) (can be comma-separated list)')
     parser.add_option('--nocapture', dest='nocapture', action="store_true", default=False,
-                      help='Do not capture stdout and redirect it to logging.  Useful for development with pdb.set_trace()')
+                      help='Do not capture stdout and redirect it to logging.  Useful for development with pdb.set_trace()') # noqa: E501
 
     def command(self):
         setproctitle('taskd')
@@ -196,7 +196,7 @@ class TaskCommand(base.Command):
     commit: run a solr 'commit' as a background task
 
     All subcommands except 'commit' can use the --filter-... options.
-    '''
+    ''' # noqa: E501
 
     def command(self):
         self.basic_setup()
diff --git a/Allura/allura/command/taskd_cleanup.py b/Allura/allura/command/taskd_cleanup.py
index 0f4ec913e..aeb4f8d12 100644
--- a/Allura/allura/command/taskd_cleanup.py
+++ b/Allura/allura/command/taskd_cleanup.py
@@ -28,7 +28,7 @@ from . import base
 
 
 class TaskdCleanupCommand(base.Command):
-    summary = 'Tasks cleanup command.  Determines which taskd processes are handling tasks, and what has been dropped or got hung.'
+    summary = 'Tasks cleanup command.  Determines which taskd processes are handling tasks, and what has been dropped or got hung.' # noqa: E501
     parser = base.Command.standard_parser(verbose=True)
     parser.add_option('-k', '--kill-stuck-taskd',
                       dest='kill', action='store_true',
diff --git a/Allura/allura/config/app_cfg.py b/Allura/allura/config/app_cfg.py
index ee4a74d65..fd7a40a3c 100644
--- a/Allura/allura/config/app_cfg.py
+++ b/Allura/allura/config/app_cfg.py
@@ -86,7 +86,8 @@ class ForgeConfig(MinimalApplicationConfiguratorNoRegistry):
             # prevent dispatcher from striping extensions like '.io' from URLs
             'disable_request_extensions': True,
 
-            # if left to True (default) would use crank.util.default_path_translator to convert all URL punctuation to "_"
+            # if left to True (default) would use crank.util.default_path_translator
+            # to convert all URL punctuation to "_"
             # which is convenient for /foo-bar to execute a "def foo_bar" method, but is a pretty drastic change for us
             # and makes many URLs be valid that we might not want like /foo*bar /foo@bar /foo:bar
             'dispatch_path_translator': None,
diff --git a/Allura/allura/controllers/auth.py b/Allura/allura/controllers/auth.py
index cfd85933e..65e8cb1ef 100644
--- a/Allura/allura/controllers/auth.py
+++ b/Allura/allura/controllers/auth.py
@@ -835,7 +835,7 @@ class PreferencesController(BaseController):
             totp_service.set_secret_key(c.user, key)
             c.user.set_pref('multifactor', True)
             c.user.set_tool_data('allura', multifactor_date=datetime.utcnow())
-            c.user.set_tool_data('allura', pwd_reset_preserve_session=session.id)  # other sessions will have to re-auth; preserve this one
+            c.user.set_tool_data('allura', pwd_reset_preserve_session=session.id)  # noqa: E501 other sessions will have to re-auth; preserve this one
             del session['totp_new_key']
             session.save()
             tg.flash('Two factor authentication has now been set up.')
diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py
index ea9ac74f9..431ff2e60 100644
--- a/Allura/allura/controllers/repository.py
+++ b/Allura/allura/controllers/repository.py
@@ -519,7 +519,7 @@ class MergeRequestController:
 
         if changes:
             self.req.add_meta_post(changes=changes)
-            allura.tasks.notification_tasks.send_usermentions_notification.post(self.req.index_id(), kw['description'], old_text)
+            allura.tasks.notification_tasks.send_usermentions_notification.post(self.req.index_id(), kw['description'], old_text) # noqa: E501
             g.director.create_activity(c.user, 'updated', self.req,
                                        related_nodes=[c.project], tags=['merge-request'])
         self.refresh()
diff --git a/Allura/allura/controllers/rest.py b/Allura/allura/controllers/rest.py
index 4972a575f..f87decd7c 100644
--- a/Allura/allura/controllers/rest.py
+++ b/Allura/allura/controllers/rest.py
@@ -152,7 +152,7 @@ class Oauth1Validator(oauthlib.oauth1.RequestValidator):
 
     def validate_verifier(self, client_key: str, token: str, verifier: str, request: oauthlib.common.Request) -> bool:
         req_tok = M.OAuthRequestToken.query.get(api_key=token)
-        return oauthlib.common.safe_string_equals(req_tok.validation_pin, verifier)  # NoneType error? you need dummy_oauths()
+        return oauthlib.common.safe_string_equals(req_tok.validation_pin, verifier) # noqa: E501 NoneType error? you need dummy_oauths()
 
     def save_verifier(self, token: str, verifier: dict, request: oauthlib.common.Request) -> None:
         req_tok = M.OAuthRequestToken.query.get(api_key=token)
diff --git a/Allura/allura/controllers/trovecategories.py b/Allura/allura/controllers/trovecategories.py
index 1c0c14a89..fd86e9a09 100644
--- a/Allura/allura/controllers/trovecategories.py
+++ b/Allura/allura/controllers/trovecategories.py
@@ -139,7 +139,7 @@ class TroveCategoryController(BaseController):
 
         if oldcat:
             raise TroveAdminException(
-                (f'A category with shortname "{shortname}" already exists ({oldcat.fullpath}).  Try a different, unique shortname', "error"),
+                (f'A category with shortname "{shortname}" already exists ({oldcat.fullpath}).  Try a different, unique shortname', "error"), # noqa: E501
                 f'?categoryname={name}&shortname={shortname}',
                 upper
             )
diff --git a/Allura/allura/ext/admin/widgets.py b/Allura/allura/ext/admin/widgets.py
index f20cfc9ac..e60169a17 100644
--- a/Allura/allura/ext/admin/widgets.py
+++ b/Allura/allura/ext/admin/widgets.py
@@ -142,7 +142,7 @@ class ScreenshotAdmin(ff.ForgeFormResponsive):
                           field_type="text",
                           label='Caption',
                           attrs={
-                              'title': "Reuse your project name in screenshot file names and create a caption to briefly describe each screenshot.",
+                              'title': "Reuse your project name in screenshot file names and create a caption to briefly describe each screenshot.", # noqa: E501
                               'class': 'm-tooltip',
                           }
                           )
@@ -156,7 +156,7 @@ class FeaturesField(ew.CompoundField):
 
     def resources(self):
         yield ew.JSLink('allura/js/jquery-ui-1.13.2.min.js', location='body_top_js')
-        yield ew.CSSLink('allura/css/smoothness/jquery-ui-1.13.2.min.css', compress=False)  # compress will also serve from a different location, breaking image refs
+        yield ew.CSSLink('allura/css/smoothness/jquery-ui-1.13.2.min.css', compress=False)  # noqa: E501 compress will also serve from a different location, breaking image refs
 
 
 class MetadataAdmin(ff.AdminForm):
@@ -173,7 +173,7 @@ class MetadataAdmin(ff.AdminForm):
                                  V.MaxBytesValidator(max=40),
                              ),
                              attrs={'maxlength': 40,
-                                    'title': "This is the publicly viewable name of the project, and will appear on project listings. It should be what you want to see as the project title in search listing.",
+                                    'title': "This is the publicly viewable name of the project, and will appear on project listings. It should be what you want to see as the project title in search listing.", # noqa: E501
                                     'class': 'tooltip',
                                     })
         summary = ew.InputField(field_type="text", label='Short Summary',
@@ -181,13 +181,13 @@ class MetadataAdmin(ff.AdminForm):
                                     V.UnicodeString(max=70),
                                     V.MaxBytesValidator(max=70)),
                                 attrs={'maxlength': 70,
-                                       'title': 'Briefly state what your project is and what it does without repeating the project name. This summary appears in Google search results beneath the project name.',
+                                       'title': 'Briefly state what your project is and what it does without repeating the project name. This summary appears in Google search results beneath the project name.', # noqa: E501
                                        'class': 'tooltip',
                                        })
         short_description = ew.TextArea(label='Full Description',
                                         validator=V.UnicodeString(max=1000),
                                         attrs={
-                                            'title': 'Describe the full functionality of your project using related keywords. The first sentence has the most impact on search. Provide unique content that calls out keywords and describes the merits of your project.',
+                                            'title': 'Describe the full functionality of your project using related keywords. The first sentence has the most impact on search. Provide unique content that calls out keywords and describes the merits of your project.', # noqa: E501
                                             'class': 'tooltip'
                                         })
         # Apparently, child field must be CompoundField with custom template
diff --git a/Allura/allura/ext/user_profile/user_main.py b/Allura/allura/ext/user_profile/user_main.py
index cf7840523..6b8ac8d5b 100644
--- a/Allura/allura/ext/user_profile/user_main.py
+++ b/Allura/allura/ext/user_profile/user_main.py
@@ -219,7 +219,7 @@ class UserProfileController(BaseController, FeedController):
             else:
                 c.user.set_pref('message_reply_real_address', False)
             c.user.send_user_message(
-                c.project.user_project_of, subject, message, cc, reply_to_real_address, c.user.preferences.email_address)
+                c.project.user_project_of, subject, message, cc, reply_to_real_address, c.user.preferences.email_address) # noqa: E501
             flash("Message sent.")
         else:
             flash("You can't send more than %i messages per %i seconds" % (
diff --git a/Allura/allura/lib/app_globals.py b/Allura/allura/lib/app_globals.py
index d9aa1b9ed..266a7ba3d 100644
--- a/Allura/allura/lib/app_globals.py
+++ b/Allura/allura/lib/app_globals.py
@@ -165,7 +165,8 @@ class ForgeMarkdown:
                     details += ' ' + artifact.url()
                 except Exception:
                     pass
-                log.info(f'Not saving markdown cache since it has a dynamic macro.  Took {render_time:.03}s on {details}')
+                log.info(
+                    f'Not saving markdown cache since it has a dynamic macro.  Took {render_time:.03}s on {details}')
             return html
 
         if threshold is not None and render_time > threshold:
@@ -173,7 +174,7 @@ class ForgeMarkdown:
             if md5 is None:
                 md5 = hashlib.md5(source_text.encode('utf-8')).hexdigest()
             cache.md5, cache.html, cache.render_time = md5, html, render_time
-            cache.fix7528 = bugfix_rev  # flag to indicate good caches created after [#7528] and other critical bugs were fixed.
+            cache.fix7528 = bugfix_rev # noqa: E501 # flag to indicate good caches created after [#7528] and other critical bugs were fixed.
 
             try:
                 sess = session(artifact)
diff --git a/Allura/allura/lib/custom_middleware.py b/Allura/allura/lib/custom_middleware.py
index 72fd7677f..50ab7c920 100644
--- a/Allura/allura/lib/custom_middleware.py
+++ b/Allura/allura/lib/custom_middleware.py
@@ -321,7 +321,7 @@ class AlluraTimerMiddleware(TimerMiddleware):
             Timer('jinja', jinja2.Template, 'render', 'stream', 'generate'),
             Timer('jinja.compile', jinja2.Environment, 'compile'),
             Timer('markdown', markdown.Markdown, 'convert'),
-            Timer('ming', ming.odm.odmsession.ODMCursor, 'next',  # FIXME: this may captures timings ok, but is misleading for counts
+            Timer('ming', ming.odm.odmsession.ODMCursor, 'next',  # noqa: E501 FIXME: this may captures timings ok, but is misleading for counts
                   debug_each_call=False),
             Timer('ming', ming.odm.odmsession.ODMSession,
                   'insert_now', 'update_now', 'delete_now',
diff --git a/Allura/allura/lib/helpers.py b/Allura/allura/lib/helpers.py
index 2bea1c07a..529cc1350 100644
--- a/Allura/allura/lib/helpers.py
+++ b/Allura/allura/lib/helpers.py
@@ -1273,7 +1273,7 @@ def slugify(name, allow_periods=False):
     """
     RE_NON_ALPHA_ETC = re.compile(r'[^.\w]+' if allow_periods else r'[^\w]+')
     slug = RE_NON_ALPHA_ETC.sub('-',  # replace non ". alphanum_" sequences into single -
-                                unicodedata.normalize('NFKD', name).encode('ascii', 'ignore').decode().replace("'", '')  # asciify & strip apostophes.   https://stackoverflow.com/a/53261200
+                                unicodedata.normalize('NFKD', name).encode('ascii', 'ignore').decode().replace("'", '')  # noqa: E501 asciify & strip apostophes.   https://stackoverflow.com/a/53261200
                                 ).strip('-')  # leading - or trailing - gets removed
     return slug, slug.lower()
 
diff --git a/Allura/allura/lib/macro.py b/Allura/allura/lib/macro.py
index a4e5b9bc5..e7a0047c2 100644
--- a/Allura/allura/lib/macro.py
+++ b/Allura/allura/lib/macro.py
@@ -69,7 +69,8 @@ class macro:
 
     def __init__(self, context: str = None, cacheable: bool = False):
         """
-        :param context: either "neighborhood-wiki" or "userproject-wiki" to limit the macro to be used in those contexts
+        :param context: either "neighborhood-wiki" or "userproject-wiki"
+        to limit the macro to be used in those contexts
         :param cacheable: indicates if its ok to cache the macro's output permanently
         """
         self._context = context
diff --git a/Allura/allura/lib/phone/nexmo.py b/Allura/allura/lib/phone/nexmo.py
index 1e20ef802..48f5a3ea5 100644
--- a/Allura/allura/lib/phone/nexmo.py
+++ b/Allura/allura/lib/phone/nexmo.py
@@ -53,7 +53,7 @@ class NexmoPhoneService(PhoneService):
         return dict(params, **common)
 
     def error(self, code=None, msg=None, number=''):
-        allowed_codes = ['3', '10', '15', '16', '17']  # https://docs.nexmo.com/index.php/verify/search#verify_return_code
+        allowed_codes = ['3', '10', '15', '16', '17']  # noqa: E501 https://docs.nexmo.com/index.php/verify/search#verify_return_code
         if code is None or str(code) not in allowed_codes:
             msg = 'Failed sending request to Nexmo'
         if str(code) == '3' and msg.endswith(' number'):
@@ -61,7 +61,7 @@ class NexmoPhoneService(PhoneService):
                 '{}{}{}'.format(
                     html.escape(msg),  # escape it just in case Nexmo sent some HTML we don't want through
                     '<br>Make sure you include the country code (see examples above)',
-                    '. For US numbers, you must include <code>1-</code> before the area code.' if len(number) == 10 else '',
+                    '. For US numbers, you must include <code>1-</code> before the area code.' if len(number) == 10 else '', # noqa: E501
                 ))
 
         return {'status': 'error', 'error': msg}
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index 7fb0357d9..225421bdb 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -563,7 +563,7 @@ class LocalAuthenticationProvider(AuthenticationProvider):
     def by_username(self, username):
         from allura import model as M
         un = re.escape(username)
-        escaped_underscore = re.escape('_')  # changes in py3.x versions # https://docs.python.org/3/library/re.html#re.escape
+        escaped_underscore = re.escape('_')  # noqa: E501 changes in py3.x versions # https://docs.python.org/3/library/re.html#re.escape
         un = un.replace(escaped_underscore, '[-_]')
         un = un.replace(r'\-', '[-_]')
         rex = re.compile('^' + un + '$')
diff --git a/Allura/allura/lib/security.py b/Allura/allura/lib/security.py
index cc874822d..74f50350c 100644
--- a/Allura/allura/lib/security.py
+++ b/Allura/allura/lib/security.py
@@ -135,7 +135,7 @@ class Credentials:
     def user_roles(self, user_id, project_id=None):
         '''
         :returns: a :class:`RoleCache` of :class:`ProjectRoles <allura.model.auth.ProjectRole>` for given user_id and optional project_id, ``*anonymous`` and ``*authenticated`` checked as appropriate
-        '''
+        ''' # noqa: E501
         roles = self.users.get((user_id, project_id))
         if roles is None:
             if project_id is None:
diff --git a/Allura/allura/lib/utils.py b/Allura/allura/lib/utils.py
index 396ad7ccf..710270f66 100644
--- a/Allura/allura/lib/utils.py
+++ b/Allura/allura/lib/utils.py
@@ -573,7 +573,7 @@ class ForgeHTMLSanitizerFilter(html5lib.filters.sanitizer.Filter):
         _extra_allowed_elements = {
             (ns_html, 'summary'),
         }
-        self.allowed_elements = (set(html5lib.filters.sanitizer.allowed_elements) | _extra_allowed_elements) - _form_elements
+        self.allowed_elements = (set(html5lib.filters.sanitizer.allowed_elements) | _extra_allowed_elements) - _form_elements # noqa: E501
 
         # srcset is used in our own project_list/project_summary widgets
         # which are used as macros so go through markdown
diff --git a/Allura/allura/lib/widgets/form_fields.py b/Allura/allura/lib/widgets/form_fields.py
index 0a510d551..f32e7a28c 100644
--- a/Allura/allura/lib/widgets/form_fields.py
+++ b/Allura/allura/lib/widgets/form_fields.py
@@ -465,7 +465,7 @@ class DateField(JQueryMixin, ew.TextField):
     def resources(self):
         yield from super().resources()
         yield ew.JSLink('allura/js/jquery-ui-1.13.2.min.js', location='body_top_js')
-        yield ew.CSSLink('allura/css/smoothness/jquery-ui-1.13.2.min.css', compress=False)  # compress will also serve from a different location, breaking image refs
+        yield ew.CSSLink('allura/css/smoothness/jquery-ui-1.13.2.min.css', compress=False)  # noqa: E501 compress will also serve from a different location, breaking image refs
 
 
 class FieldCluster(ew.CompoundField):
diff --git a/Allura/allura/lib/widgets/forms.py b/Allura/allura/lib/widgets/forms.py
index 94b99871a..0cdfb696c 100644
--- a/Allura/allura/lib/widgets/forms.py
+++ b/Allura/allura/lib/widgets/forms.py
@@ -780,7 +780,7 @@ class RegistrationForm(ForgeForm):
             ew.PasswordField(
                 name='pw',
                 label='New Password',
-                attrs=dict(minlength=asint(tg.config.get('auth.min_password_len', 6)), maxlength=asint(tg.config.get('auth.max_password_len', 30))),
+                attrs=dict(minlength=asint(tg.config.get('auth.min_password_len', 6)), maxlength=asint(tg.config.get('auth.max_password_len', 30))), # noqa: E501
                 validator=V.UnicodeString(
                     not_empty=True,
                     min=asint(tg.config.get('auth.min_password_len', 6)),
@@ -860,8 +860,8 @@ class NeighborhoodOverviewForm(ForgeForm):
                 empty_val = False
                 if inp['value'] is None or inp['value'] == '':
                     empty_val = True
-                display += '<tr><td class="left"><label>%(label)s</label></td>' \
-                           '<td><input type="checkbox" name="%(ctx_name)s-%(inp_name)s-def" %(def_checked)s>default</td>' \
+                display += '<tr><td class="left"><label>%(label)s</label></td><td>' \
+                           '<input type="checkbox" name="%(ctx_name)s-%(inp_name)s-def" %(def_checked)s>default</td>' \
                            '<td class="right"><div class="%(ctx_name)s-%(inp_name)s-inp"><table class="input_inner">' \
                            '<tr><td><input type="text" class="%(inp_type)s" name="%(ctx_name)s-%(inp_name)s" ' \
                            'value="%(inp_value)s"></td><td>%(inp_additional)s</td></tr></table></div></td></tr>\n' % {
@@ -977,7 +977,7 @@ class NeighborhoodAddProjectForm(ForgeForm):
             ew.InputField(name='project_unixname',
                           label='Short Name', field_type='text',
                           attrs={
-                              'title': 'Create a URL name that matches your project name as closely as possible to improve search indexing and maximize visibility.',
+                              'title': 'Create a URL name that matches your project name as closely as possible to improve search indexing and maximize visibility.', # noqa: E501
                               'class': 'tooltip'
                           },
                           validator=provider.shortname_validator),
diff --git a/Allura/allura/model/__init__.py b/Allura/allura/model/__init__.py
index f015776d5..c37667078 100644
--- a/Allura/allura/model/__init__.py
+++ b/Allura/allura/model/__init__.py
@@ -55,7 +55,7 @@ __all__ = [
     'AwardFile', 'Award', 'AwardGrant', 'VotableArtifact', 'Discussion', 'Thread', 'PostHistory', 'Post',
     'DiscussionAttachment', 'BaseAttachment', 'AuthGlobals', 'User', 'ProjectRole', 'EmailAddress',
     'AuditLog', 'AlluraUserProperty', 'File', 'Notification', 'Mailbox', 'Repository',
-    'RepositoryImplementation', 'CommitStatus', 'MergeRequest', 'GitLikeTree', 'Stats', 'OAuthToken', 'OAuthConsumerToken',
+    'RepositoryImplementation', 'CommitStatus', 'MergeRequest', 'GitLikeTree', 'Stats', 'OAuthToken', 'OAuthConsumerToken', # noqa: E501
     'OAuthRequestToken', 'OAuthAccessToken', 'MonQTask', 'Webhook', 'ACE', 'ACL', 'EVERYONE', 'ALL_PERMISSIONS',
     'DENY_ALL', 'MarkdownCache', 'main_doc_session', 'main_orm_session', 'project_doc_session', 'project_orm_session',
     'artifact_orm_session', 'repository_orm_session', 'task_orm_session', 'ArtifactSessionExtension', 'repository',
diff --git a/Allura/allura/model/neighborhood.py b/Allura/allura/model/neighborhood.py
index cad59de72..792fe25b5 100644
--- a/Allura/allura/model/neighborhood.py
+++ b/Allura/allura/model/neighborhood.py
@@ -269,7 +269,7 @@ class Neighborhood(MappedClass):
 
         if 'titlebarbackground' in css_form_dict and css_form_dict['titlebarbackground'] != '':
             css_text += "/*titlebarbackground*/.pad h2.title{background-color:%(bgcolor)s; background-image: none;}\n" % \
-                        {'bgcolor': css_form_dict['titlebarbackground']}
+                        {'bgcolor': css_form_dict['titlebarbackground']} # noqa: E501
 
         if 'titlebarcolor' in css_form_dict and css_form_dict['titlebarcolor'] != '':
             css_text += "/*titlebarcolor*/.pad h2.title, .pad h2.title small a {color:%s;}\n" % (
diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index e6ff5af2e..cf23afa80 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -72,7 +72,6 @@ if typing.TYPE_CHECKING:
     from ming.odm.mapper import Query
     from allura.model import AppConfig
 
-
 log = logging.getLogger(__name__)
 
 # max sitemap entries per tool type
@@ -82,7 +81,6 @@ DEFAULT_ICON_WIDTH = 48
 
 
 class ProjectFile(File):
-
     class __mongometa__:
         session = main_orm_session
         indexes = [('project_id', 'category')]
@@ -96,7 +94,6 @@ class ProjectFile(File):
 
 
 class ProjectCategory(MappedClass):
-
     class __mongometa__:
         session = main_orm_session
         name = 'project_category'
@@ -131,7 +128,6 @@ class TroveCategoryMapperExtension(MapperExtension):
 
 
 class TroveCategory(MappedClass):
-
     class __mongometa__:
         session = main_orm_session
         name = 'trove_category'
@@ -1352,7 +1348,7 @@ class Project(SearchIndexable, MappedClass, ActivityNode, ActivityObject):
             self.trove_environment
         )
         for cat in TroveCategory.query.find({'_id': {'$in': all_troves}}):
-            ET.SubElement(project, 'category', {'rdf:resource': 'http://sourceforge.net/api/trove/index/rdf#%s' % cat.trove_cat_id})
+            ET.SubElement(project, 'category', {'rdf:resource': 'http://sourceforge.net/api/trove/index/rdf#%s' % cat.trove_cat_id}) # noqa: E501
 
         # Awards
         for a in self.accolades:
@@ -1397,7 +1393,8 @@ class AppConfig(MappedClass, ActivityObject):
     Configuration information for an instantiated :class:`Application <allura.app.Application>`
     in a :class:`Project`
 
-    :var options: an object on which various options are stored.  options.mount_point is the url component for this app instance
+    :var options: an object on which various options are stored.
+    options.mount_point is the url component for this app instance
     :var acl: a dict that maps permissions (strings) to lists of roles that have the permission
     """
 
diff --git a/Allura/allura/model/repository.py b/Allura/allura/model/repository.py
index 90b47e5e4..f0689daba 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -590,7 +590,7 @@ class Repository(Artifact, ActivityObject):
         return self.app_config.url()
 
     def refresh_url(self):
-        refresh_base_url = tg.config.get('scm.repos.refresh_base_url') or tg.config.get('base_url', 'http://localhost:8080')
+        refresh_base_url = tg.config.get('scm.repos.refresh_base_url') or tg.config.get('base_url', 'http://localhost:8080') # noqa: E501
         return '/'.join([
             refresh_base_url.rstrip('/'),
             'auth/refresh_repo',
diff --git a/Allura/allura/model/stats.py b/Allura/allura/model/stats.py
index 92b74b9cd..5cd09989b 100644
--- a/Allura/allura/model/stats.py
+++ b/Allura/allura/model/stats.py
@@ -374,7 +374,8 @@ class Stats(MappedClass):
             if oldblob is None:
                 lines = len(listnew)
             elif newblob and newblob.has_html_view:
-                # py2 unified_diff can handle some unicode but not consistently, so best to do ensure_str (can drop it on py3)
+                # py2 unified_diff can handle some unicode but not consistently,
+                # so best to do ensure_str (can drop it on py3)
                 diff = difflib.unified_diff(
                     [six.ensure_str(h.really_unicode(line)) for line in listold],
                     [six.ensure_str(h.really_unicode(line)) for line in listnew],
diff --git a/Allura/allura/model/types.py b/Allura/allura/model/types.py
index 8a7c15cb5..0b61797ef 100644
--- a/Allura/allura/model/types.py
+++ b/Allura/allura/model/types.py
@@ -102,7 +102,7 @@ class ACL(S.Array):
 
         ace = M.ACE.deny(role_id, 'read')  # reason = None
         acl = [{role_id=ObjectId(...), permission='read', access='DENY', reason='Spammer'}]
-        """
+        """ # noqa: E501
         def clear_reason(ace):
             return Object(access=ace.access, role_id=ace.role_id, permission=ace.permission)
 
diff --git a/Allura/allura/scripts/disable_users.py b/Allura/allura/scripts/disable_users.py
index 6c6f8b3ce..865c85c0e 100644
--- a/Allura/allura/scripts/disable_users.py
+++ b/Allura/allura/scripts/disable_users.py
@@ -65,7 +65,7 @@ class DisableUsers(ScriptTask):
     def parser(cls):
         parser = argparse.ArgumentParser(description='Disable listed users')
         parser.add_argument('--message', '-m', dest='message', type=str, default='Account disabled',
-                            help='Message to add to the audit log for each user (set to empty string to skip message altogether)')
+                            help='Message to add to the audit log for each user (set to empty string to skip message altogether)') # noqa: E501
         parser.add_argument(
             '--usernames', dest='usernames', type=str, nargs='+', metavar='<username>', required=True,
             help='List of usernames, or "-" to read from stdin')
diff --git a/Allura/allura/tests/functional/test_discuss.py b/Allura/allura/tests/functional/test_discuss.py
index f87f4352d..13fb147f3 100644
--- a/Allura/allura/tests/functional/test_discuss.py
+++ b/Allura/allura/tests/functional/test_discuss.py
@@ -171,7 +171,7 @@ class TestDiscuss(TestDiscussBase):
         r = self._make_post('Test post')
         assert '<span><i class="fa fa-exclamation" aria-hidden="true"></i></span>' in r
         r = self.app.get('/wiki/Home/', extra_environ={'username': 'test-user-1'})
-        assert '<span><i class="fa fa-exclamation" aria-hidden="true"></i></span>' not in r, 'User without moderate perm must not see Spam link'
+        assert '<span><i class="fa fa-exclamation" aria-hidden="true"></i></span>' not in r, 'User without moderate perm must not see Spam link' # noqa: E501
 
     @patch('allura.controllers.discuss.g.spam_checker.submit_spam')
     def test_moderate(self, submit_spam):
diff --git a/Allura/allura/tests/functional/test_neighborhood.py b/Allura/allura/tests/functional/test_neighborhood.py
index d9fd3fc21..6c5216530 100644
--- a/Allura/allura/tests/functional/test_neighborhood.py
+++ b/Allura/allura/tests/functional/test_neighborhood.py
@@ -385,7 +385,7 @@ class TestNeighborhood(TestController):
         assert '/*projecttitlefont*/.project_title{font-family:arial,sans-serif;}' in neighborhood.css
         assert '/*projecttitlecolor*/.project_title{color:green;}' in neighborhood.css
         assert '/*barontop*/.pad h2.colored {background-color:#555555; background-image: none;}' in neighborhood.css
-        assert '/*titlebarbackground*/.pad h2.title{background-color:#333; background-image: none;}' in neighborhood.css
+        assert '/*titlebarbackground*/.pad h2.title{background-color:#333; background-image: none;}' in neighborhood.css # noqa: E501
         assert "/*titlebarcolor*/.pad h2.title, .pad h2.title small a {color:#444;}" in neighborhood.css
 
     def test_max_projects(self):
diff --git a/Allura/allura/tests/functional/test_newforge.py b/Allura/allura/tests/functional/test_newforge.py
index 9dfabe614..a77b565be 100644
--- a/Allura/allura/tests/functional/test_newforge.py
+++ b/Allura/allura/tests/functional/test_newforge.py
@@ -29,7 +29,7 @@ class TestNewForgeController(TestController):
     def test_markdown_to_html(self):
         n = M.Neighborhood.query.get(name='Projects')
         r = self.app.get(
-            '/nf/markdown_to_html?markdown=*aaa*bb[wiki:Home]&project=test&app=bugs&neighborhood=%s' % n._id, validate_chunk=True)
+            '/nf/markdown_to_html?markdown=*aaa*bb[wiki:Home]&project=test&app=bugs&neighborhood=%s' % n._id, validate_chunk=True) # noqa: E501
         assert '<p><em>aaa</em>bb<a class="alink" href="/p/test/wiki/Home/">[wiki:Home]</a></p>' in r, r
 
         # this happens to trigger an error
diff --git a/Allura/allura/tests/functional/test_site_admin.py b/Allura/allura/tests/functional/test_site_admin.py
index f54228795..57f6f1cb9 100644
--- a/Allura/allura/tests/functional/test_site_admin.py
+++ b/Allura/allura/tests/functional/test_site_admin.py
@@ -400,10 +400,10 @@ class TestUsersSearch(TestController):
         'id': 'allura/model/auth/User#540efdf2100d2b1483155d39',
         'last_access_login_date_dt': '2014-09-09T13:17:40.176Z',
         'last_access_login_ip_s': '10.0.2.2',
-        'last_access_login_ua_t': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36',
+        'last_access_login_ua_t': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36', # noqa: E501
         'last_access_session_date_dt': '2014-09-09T13:17:40.33Z',
         'last_access_session_ip_s': '10.0.2.2',
-        'last_access_session_ua_t': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36',
+        'last_access_session_ua_t': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36', # noqa: E501
         'last_password_updated_dt': '2014-09-09T13:17:38.857Z',
         'localization_s': 'None/None',
         'sex_s': 'Unknown',
diff --git a/Allura/allura/tests/functional/test_user_profile.py b/Allura/allura/tests/functional/test_user_profile.py
index e6de739d1..395fa4c8a 100644
--- a/Allura/allura/tests/functional/test_user_profile.py
+++ b/Allura/allura/tests/functional/test_user_profile.py
@@ -98,7 +98,7 @@ class TestUserProfile(TestDiscussBase):
         assert user.icon_url() in r.html.find('img').attrs['src']
         assert user.display_name == r.html.find('div', attrs={'class': 'name'}).getText()
         assert user.get_pref('localization')['city'] in r.html.find('span', attrs={'class': 'subitem-loc'}).getText()
-        assert user.get_pref('localization')['country'] in r.html.find('span', attrs={'class': 'subitem-loc'}).getText()
+        assert user.get_pref('localization')['country'] in r.html.find('span', attrs={'class': 'subitem-loc'}).getText() # noqa: E501
         assert user.get_pref('webpages')[0] in str(r.html.find('span', attrs={'class': 'subitem-web'}))
 
     def test_wrong_profile(self):
@@ -161,7 +161,7 @@ class TestUserProfile(TestDiscussBase):
 
         sendsimplemail.post.assert_called_once_with(
             cc=User.by_username('test-admin').get_pref('email_address'),
-            text='test message\n\n---\n\nThis message was sent to you via the Allura web mail form.  You may reply to this message directly, or send a message to Test Admin at http://localhost/u/test-admin/profile/send_message\n',
+            text='test message\n\n---\n\nThis message was sent to you via the Allura web mail form.  You may reply to this message directly, or send a message to Test Admin at http://localhost/u/test-admin/profile/send_message\n', # noqa: E501
             toaddr=User.by_username('test-user').get_pref('email_address'),
             fromaddr=User.by_username('test-admin').get_pref('email_address'),
             reply_to=User.by_username('test-admin').get_pref('email_address'),
@@ -174,7 +174,7 @@ class TestUserProfile(TestDiscussBase):
 
         sendsimplemail.post.assert_called_once_with(
             cc=None,
-            text='test message\n\n---\n\nThis message was sent to you via the Allura web mail form.  You may reply to this message directly, or send a message to Test Admin at http://localhost/u/test-admin/profile/send_message\n',
+            text='test message\n\n---\n\nThis message was sent to you via the Allura web mail form.  You may reply to this message directly, or send a message to Test Admin at http://localhost/u/test-admin/profile/send_message\n', # noqa: E501
             toaddr=User.by_username('test-user').get_pref('email_address'),
             fromaddr=User.by_username('test-admin').get_pref('email_address'),
             reply_to=User.by_username('test-admin').get_pref('email_address'),
@@ -209,7 +209,7 @@ class TestUserProfile(TestDiscussBase):
         sender_address = test_admin.preferences.email_address
         sendsimplemail.post.assert_called_once_with(
             cc=User.by_username('test-admin').get_pref('email_address'),
-            text='test message\n\n---\n\nThis message was sent to you via the Allura web mail form.  You may reply to this message directly, or send a message to Test Admin at http://localhost/u/test-admin/profile/send_message\n',
+            text='test message\n\n---\n\nThis message was sent to you via the Allura web mail form.  You may reply to this message directly, or send a message to Test Admin at http://localhost/u/test-admin/profile/send_message\n', # noqa: E501
             toaddr=User.by_username('test-user').get_pref('email_address'),
             fromaddr=User.by_username('test-admin').get_pref('email_address'),
             reply_to=sender_address,
diff --git a/Allura/allura/tests/model/test_project.py b/Allura/allura/tests/model/test_project.py
index 3d44419c8..4af6536a5 100644
--- a/Allura/allura/tests/model/test_project.py
+++ b/Allura/allura/tests/model/test_project.py
@@ -173,8 +173,8 @@ class TestProjectModel:
 
     def test_screenshot_unicode_serialization(self):
         p = M.Project.query.get(shortname='test')
-        screenshot_unicode = M.ProjectFile(project_id=p._id, category='screenshot', caption="ConSelección", filename='ConSelección.jpg')
-        screenshot_ascii = M.ProjectFile(project_id=p._id, category='screenshot', caption='test-screenshot', filename='test_file.jpg')
+        screenshot_unicode = M.ProjectFile(project_id=p._id, category='screenshot', caption="ConSelección", filename='ConSelección.jpg') # noqa: E501
+        screenshot_ascii = M.ProjectFile(project_id=p._id, category='screenshot', caption='test-screenshot', filename='test_file.jpg') # noqa: E501
         ThreadLocalODMSession.flush_all()
 
         serialized = p.__json__()
diff --git a/Allura/allura/tests/model/test_repo.py b/Allura/allura/tests/model/test_repo.py
index f45d0b1bf..820907dc2 100644
--- a/Allura/allura/tests/model/test_repo.py
+++ b/Allura/allura/tests/model/test_repo.py
@@ -691,7 +691,8 @@ class TestMergeRequest:
         self._set_mr_mock_attrs(self.mr)
 
     def _set_mr_mock_attrs(self, mr):
-        mr.app = mock.Mock(forkable=True, url='/mock-app-url/', activity_name='code merge', activity_url='/fake/url', activity_extras={}, node_id=None)
+        mr.app = mock.Mock(forkable=True, url='/mock-app-url/', activity_name='code merge', activity_url='/fake/url',
+                           activity_extras={}, node_id=None)
         mr.app.repo.commit.return_value = mock.Mock(_id='09876')
         mr.merge_allowed = mock.Mock(return_value=True)
         mr.discussion_thread = mock.Mock()
diff --git a/Allura/allura/tests/test_commands.py b/Allura/allura/tests/test_commands.py
index 7ad19a1f5..618bfdf41 100644
--- a/Allura/allura/tests/test_commands.py
+++ b/Allura/allura/tests/test_commands.py
@@ -548,7 +548,7 @@ class TestReindexCommand:
         def on_post(chunk, **kw):
             if len(chunk) > 1:
                 e = pymongo.errors.InvalidDocument(
-                    "BSON document too large (16906035 bytes) - the connected server supports BSON document sizes up to 16777216 bytes.")
+                    "BSON document too large (16906035 bytes) - the connected server supports BSON document sizes up to 16777216 bytes.") # noqa: E501
                 # ming injects a 2nd arg with the document, so we do too
                 e.args = e.args + ("doc:  {'task_name': 'allura.tasks.index_tasks.add_artifacts', ........",)
                 raise e
diff --git a/Allura/allura/tests/test_decorators.py b/Allura/allura/tests/test_decorators.py
index 80c3bd46e..ebe7b749c 100644
--- a/Allura/allura/tests/test_decorators.py
+++ b/Allura/allura/tests/test_decorators.py
@@ -140,4 +140,4 @@ class TestMemoize:
                 continue
             else:
                 raise AssertionError('Unexpected reference to `r` instance: {!r}\n'
-                                     '@memoize probably made a reference to it and has created a circular reference loop'.format(gc_ref))
+                                     '@memoize probably made a reference to it and has created a circular reference loop'.format(gc_ref)) # noqa: E501
diff --git a/Allura/allura/tests/test_globals.py b/Allura/allura/tests/test_globals.py
index 1d26e0485..826eb9c9e 100644
--- a/Allura/allura/tests/test_globals.py
+++ b/Allura/allura/tests/test_globals.py
@@ -480,11 +480,11 @@ class Test():
                 <div class="codehilite"><pre><span></span><code><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
                     <span class="nb">print</span> <span class="n">i</span>
                 </code></pre></div>
-                </div>''')
+                </div>''') # noqa: E501
         assert (
             ForgeMarkdown(email=True).convert('[Home]') ==
             # uses localhost:
-            '<div class="markdown_content"><p><a class="alink" href="http://localhost/p/test/wiki/Home/">[Home]</a></p></div>')
+            '<div class="markdown_content"><p><a class="alink" href="http://localhost/p/test/wiki/Home/">[Home]</a></p></div>') # noqa: E501
         assert g.markdown.convert(dedent('''\
             ~~~~
             def foo(): pass
@@ -597,7 +597,7 @@ class Test():
 
     Si une idée vous vient à l'esprit, merci de me tenir au courant.
 
-    cordialement, julien.'''))
+    cordialement, julien.''')) # noqa: E501
         assert True   # finished!
 
     def test_macro_include(self):
diff --git a/Allura/allura/tests/test_helpers.py b/Allura/allura/tests/test_helpers.py
index 8b93283b1..a82bbc6b2 100644
--- a/Allura/allura/tests/test_helpers.py
+++ b/Allura/allura/tests/test_helpers.py
@@ -633,7 +633,7 @@ def test_slugify():
 
 
 class TestRateLimit(TestCase):
-    rate_limits = '{"60": 1, "120": 3, "900": 5, "1800": 7, "3600": 10, "7200": 15, "86400": 20, "604800": 50, "2592000": 200}'
+    rate_limits = '{"60": 1, "120": 3, "900": 5, "1800": 7, "3600": 10, "7200": 15, "86400": 20, "604800": 50, "2592000": 200}' # noqa: E501
     key_comment = 'allura.rate_limits_per_user'
 
     def test(self):
diff --git a/Allura/allura/tests/test_mail_util.py b/Allura/allura/tests/test_mail_util.py
index b0454ac12..2b647e865 100644
--- a/Allura/allura/tests/test_mail_util.py
+++ b/Allura/allura/tests/test_mail_util.py
@@ -319,7 +319,7 @@ class TestIdentifySender:
 
 
 def test_parse_message_id():
-    assert _parse_message_id('<de...@libjpeg-turbo.p.domain.net>, </p...@libjpeg-turbo.p.domain.net>') == [
+    assert _parse_message_id('<de...@libjpeg-turbo.p.domain.net>, </p...@libjpeg-turbo.p.domain.net>') == [ # noqa: E501
         'de31888f6be2d87dc377d9e713876bb514548625.patches@libjpeg-turbo.p.domain.net',
         'de31888f6be2d87dc377d9e713876bb514548625.patches@libjpeg-turbo.p.domain.net',
     ]
diff --git a/Allura/allura/tests/test_middlewares.py b/Allura/allura/tests/test_middlewares.py
index 5a2e5c1b2..ee89da379 100644
--- a/Allura/allura/tests/test_middlewares.py
+++ b/Allura/allura/tests/test_middlewares.py
@@ -75,7 +75,8 @@ class TestCORSMiddleware:
         exc.HTTPOk.return_value.assert_called_once_with(env, callback)
 
     def test_get_response_headers_simple(self):
-        # Allow-Origin: * is crucial for security, since that prevents browsers from exposing results fetched withCredentials: true (aka cookies)
+        # Allow-Origin: * is crucial for security, since that prevents browsers from exposing results fetched
+        # withCredentials: true (aka cookies)
         assert (self.cors.get_response_headers() ==
                      [('Access-Control-Allow-Origin', '*')])
         assert (self.cors.get_response_headers(preflight=False) ==
diff --git a/Allura/allura/tests/test_plugin.py b/Allura/allura/tests/test_plugin.py
index 5efd39cc1..11434c260 100644
--- a/Allura/allura/tests/test_plugin.py
+++ b/Allura/allura/tests/test_plugin.py
@@ -697,7 +697,7 @@ class TestLocalAuthenticationProvider:
         assert detail.ip == '1.2.3.4'
         assert detail.ua is None
 
-        detail = self.provider.login_details_from_auditlog(M.AuditLog(message='Foo\nIP Address: 1.2.3.4\nFoo', user=user))
+        detail = self.provider.login_details_from_auditlog(M.AuditLog(message='Foo\nIP Address: 1.2.3.4\nFoo', user=user)) # noqa: E501
         assert detail.ip == '1.2.3.4'
         assert detail.ua is None
 
diff --git a/Allura/allura/tests/test_tasks.py b/Allura/allura/tests/test_tasks.py
index 10baaceca..56bdfcf6c 100644
--- a/Allura/allura/tests/test_tasks.py
+++ b/Allura/allura/tests/test_tasks.py
@@ -72,9 +72,9 @@ class TestRepoTasks(unittest.TestCase):
     @mock.patch('allura.tasks.repo_tasks.session', autospec=True)
     @mock.patch.object(M, 'MergeRequest')
     def test_merge(self, MR, session):
-        mr = mock.Mock(_id='_id', activity_name='merge req', activity_url='/fake/url', activity_extras={}, node_id=None,
-                       app=mock.Mock(activity_name='code merge', activity_url='/fake/url', activity_extras={},
-                                     node_id=None))
+        mr = mock.Mock(_id='_id', activity_name='merge req', activity_url='/fake/url', activity_extras={},
+                       node_id=None, app=mock.Mock(activity_name='code merge', activity_url='/fake/url',
+                                                   activity_extras={}, node_id=None))
         MR.query.get.return_value = mr
         repo_tasks.merge(mr._id)
         mr.app.repo.merge.assert_called_once_with(mr)
diff --git a/Allura/allura/tests/test_utils.py b/Allura/allura/tests/test_utils.py
index 131e9bf95..2dc28c4d0 100644
--- a/Allura/allura/tests/test_utils.py
+++ b/Allura/allura/tests/test_utils.py
@@ -294,17 +294,17 @@ class TestHTMLSanitizer(unittest.TestCase):
         assert self.simple_tag_list(p) == ['div', 'iframe', 'iframe', 'div']
 
     def test_html_sanitizer_form_elements(self):
-        walker = self.walker_from_text('<p>test</p><form method="post" action="http://localhost/foo.php"><input type=file><input type=text><textarea>asdf</textarea></form>')
+        walker = self.walker_from_text('<p>test</p><form method="post" action="http://localhost/foo.php"><input type=file><input type=text><textarea>asdf</textarea></form>') # noqa: E501
         p = utils.ForgeHTMLSanitizerFilter(walker)
         assert self.simple_tag_list(p) == ['p', 'p']
 
     def test_html_sanitizer_checkbox(self):
-        walker = self.walker_from_text('<p><input type="checkbox" disabled/><input type="text" disabled/><input type="checkbox" disabled checked/></p>')
+        walker = self.walker_from_text('<p><input type="checkbox" disabled/><input type="text" disabled/><input type="checkbox" disabled checked/></p>') # noqa: E501
         p = utils.ForgeHTMLSanitizerFilter(walker)
         assert self.simple_tag_list(p) == ['p', 'input', 'input', 'p']
 
     def test_html_sanitizer_summary(self):
-        walker = self.walker_from_text('<details open="open"><summary>An Summary</summary><ul><li>Bullet Item</li></ul></details>')
+        walker = self.walker_from_text('<details open="open"><summary>An Summary</summary><ul><li>Bullet Item</li></ul></details>') # noqa: E501
         p = utils.ForgeHTMLSanitizerFilter(walker)
         assert self.simple_tag_list(p) == ['details', 'summary', 'summary', 'ul', 'li', 'li', 'ul', 'details']
 
diff --git a/Allura/allura/tests/unit/test_session.py b/Allura/allura/tests/unit/test_session.py
index e2042c039..5020597e8 100644
--- a/Allura/allura/tests/unit/test_session.py
+++ b/Allura/allura/tests/unit/test_session.py
@@ -225,7 +225,7 @@ class TestBatchIndexer(TestCase):
         def on_post(chunk):
             if len(chunk) > 1:
                 e = pymongo.errors.InvalidDocument(
-                    "BSON document too large (16906035 bytes) - the connected server supports BSON document sizes up to 16777216 bytes.")
+                    "BSON document too large (16906035 bytes) - the connected server supports BSON document sizes up to 16777216 bytes.") # noqa: E501
                 # ming injects a 2nd arg with the document, so we do too
                 e.args = e.args + ("doc:  {'task_name': 'allura.tasks.index_tasks.add_artifacts', ........",)
                 raise e
diff --git a/Allura/allura/tests/unit/test_solr.py b/Allura/allura/tests/unit/test_solr.py
index 588830804..be7bf241b 100644
--- a/Allura/allura/tests/unit/test_solr.py
+++ b/Allura/allura/tests/unit/test_solr.py
@@ -224,7 +224,7 @@ class TestSearch_app(unittest.TestCase):
                 'type_s': 'Post',
                 'title_match': Markup('blah blah'),
                 # highlighting in text
-                'text_match': Markup('less scary but still dangerous &amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt; blah <strong>bar</strong> foo foo'),
+                'text_match': Markup('less scary but still dangerous &amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt; blah <strong>bar</strong> foo foo'), # noqa: E501
                 '_artifact': None,
             }]
         )
diff --git a/ForgeDiscussion/forgediscussion/controllers/forum.py b/ForgeDiscussion/forgediscussion/controllers/forum.py
index 9d7e343a2..b78775bb0 100644
--- a/ForgeDiscussion/forgediscussion/controllers/forum.py
+++ b/ForgeDiscussion/forgediscussion/controllers/forum.py
@@ -129,8 +129,9 @@ class ForumController(DiscussionController):
         if subscribe:
             self.discussion.subscribe(type='direct')
 
-            # unsubscribe from all individual threads that are part of this forum, so you don't have overlapping subscriptions
-            forumthread_index_prefix = (DM.ForumThread.__module__ + '.' + DM.ForumThread.__name__).replace('.', '/') + '#'
+            # unsubscribe from all individual threads that are part of this forum,
+            # so you don't have overlapping subscriptions
+            forumthread_index_prefix = (DM.ForumThread.__module__ + '.' + DM.ForumThread.__name__).replace('.', '/') + '#' # noqa: E501
             thread_mboxes = M.Mailbox.query.find(dict(
                 user_id=c.user._id,
                 project_id=c.project._id,
diff --git a/ForgeDiscussion/forgediscussion/controllers/root.py b/ForgeDiscussion/forgediscussion/controllers/root.py
index d1a9ac9cb..a999148a5 100644
--- a/ForgeDiscussion/forgediscussion/controllers/root.py
+++ b/ForgeDiscussion/forgediscussion/controllers/root.py
@@ -68,7 +68,7 @@ class RootController(BaseController, DispatchIndex, FeedController):
         search_help = SearchHelp(comments=False, history=False,
                                  fields={'author_user_name_t': 'Username',
                                          'text': '"Post text"',
-                                         'timestamp_dt': 'Date posted.  Example: timestamp_dt:[2018-01-01T00:00:00Z TO *]',
+                                         'timestamp_dt': 'Date posted.  Example: timestamp_dt:[2018-01-01T00:00:00Z TO *]', # noqa: E501
                                          'name_s': 'Subject'})
 
     def _check_security(self):
diff --git a/ForgeGit/forgegit/model/git_repo.py b/ForgeGit/forgegit/model/git_repo.py
index 148d22c24..80fbb6c69 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -682,8 +682,8 @@ class GitImplementation(M.RepositoryImplementation):
             cmd_args[4] = '-r'
         if asbool(tg.config.get('scm.commit.git.detect_copies', True)):
             cmd_args += ['-M', '-C']
-
-        cmd_output = self._git.git.diff_tree(commit_id, *cmd_args).split('\x00')[:-1]  # don't escape filenames and use \x00 as fields delimiter
+        # don't escape filenames and use \x00 as fields delimiter
+        cmd_output = self._git.git.diff_tree(commit_id, *cmd_args).split('\x00')[:-1]
 
         ''' cmd_output will be like:
         [
diff --git a/ForgeGit/forgegit/tests/functional/test_controllers.py b/ForgeGit/forgegit/tests/functional/test_controllers.py
index 7c6e4a0ca..03e7f56cd 100644
--- a/ForgeGit/forgegit/tests/functional/test_controllers.py
+++ b/ForgeGit/forgegit/tests/functional/test_controllers.py
@@ -350,7 +350,7 @@ class TestRootController(_TestCase):
                     <span class="gi">+Which means Hello!</span>''') in
                 diffhtml)
 
-        resp = self.app.get(h.urlquote(ci + 'tree/привіт.txt') + '?diff=407950e8fba4dbc108ffbce0128ed1085c52cfd7&diformat=sidebyside')
+        resp = self.app.get(h.urlquote(ci + 'tree/привіт.txt') + '?diff=407950e8fba4dbc108ffbce0128ed1085c52cfd7&diformat=sidebyside') # noqa: E501
         diffhtml = str(resp.html.select_one('.diffbrowser'))
         assert (textwrap.dedent('''\
                     <thead>
@@ -1048,8 +1048,8 @@ class TestGitRename(TestController):
 
         # the diff portion of the output
         resp_no_ws = re.sub(r'\s+', '', str(resp))
-        assert ('<a href="/p/test/src-git/ci/fbb0644603bb6ecee3ebb62efe8c86efc9b84ee6/tree/f.txt" rel="nofollow">f.txt</a>'
-                'to<a href="/p/test/src-git/ci/b120505a61225e6c14bee3e5b5862db81628c35c/tree/f2.txt" rel="nofollow">f2.txt</a>'
+        assert ('<a href="/p/test/src-git/ci/fbb0644603bb6ecee3ebb62efe8c86efc9b84ee6/tree/f.txt" rel="nofollow">f.txt</a>' # noqa: E501
+                'to<a href="/p/test/src-git/ci/b120505a61225e6c14bee3e5b5862db81628c35c/tree/f2.txt" rel="nofollow">f2.txt</a>' # noqa: E501
                 .replace(' ', '') in resp_no_ws)
         assert '<span class="empty-diff">File was renamed.</span>' in resp
 
@@ -1058,7 +1058,7 @@ class TestGitRename(TestController):
         resp = self.app.get('/src-git/ci/7b1c9ef214eb0ef8c06bada0966dd941f442beec/')
 
         resp_no_ws = re.sub(r'\s+', '', str(resp))
-        assert ('<a href="/p/test/src-git/ci/7b1c9ef214eb0ef8c06bada0966dd941f442beec/tree/b_dir" rel="nofollow">b_dir</a>'
+        assert ('<a href="/p/test/src-git/ci/7b1c9ef214eb0ef8c06bada0966dd941f442beec/tree/b_dir" rel="nofollow">b_dir</a>' # noqa: E501
                 '</h6>'
                 '<div id="diff-3" class="inline-diff-body">'
                 '<span class="empty-diff">Symlink.</span>'
@@ -1068,7 +1068,7 @@ class TestGitRename(TestController):
         # change a_dir to a file; b_dir to a symlink
         resp = self.app.get('/src-git/ci/7b1c9ef214eb0ef8c06bada0966dd941f442beec/tree/')
 
-        resp.mustcontain('<a class="icon" href="b_dir" rel="nofollow" title="b_dir"><i class="fa fa-star"></i>&nbsp;b_dir</a>')
+        resp.mustcontain('<a class="icon" href="b_dir" rel="nofollow" title="b_dir"><i class="fa fa-star"></i>&nbsp;b_dir</a>') # noqa: E501
 
 
 class TestGitBranch(TestController):
diff --git a/ForgeGit/forgegit/tests/model/test_repository.py b/ForgeGit/forgegit/tests/model/test_repository.py
index 0dd8a9fc0..6b4be0a56 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -479,7 +479,7 @@ By Dave Brondsema''' in text_body
 * three</p>
 <p>http://example.com/</p></div>
 
-<p>By Dave Brondsema''' in html_body
+<p>By Dave Brondsema''' in html_body # noqa: E501
 
     def test_commit_artifact_references(self):
         self._setup_weird_chars_repo()
diff --git a/ForgeImporters/forgeimporters/tests/github/test_extractor.py b/ForgeImporters/forgeimporters/tests/github/test_extractor.py
index 4d3a022cf..5a4b855c5 100644
--- a/ForgeImporters/forgeimporters/tests/github/test_extractor.py
+++ b/ForgeImporters/forgeimporters/tests/github/test_extractor.py
@@ -91,7 +91,7 @@ class TestGitHubProjectExtractor(TestCase):
     def test_get_next_page_url(self):
         self.assertIsNone(self.extractor.get_next_page_url(None))
         self.assertIsNone(self.extractor.get_next_page_url(''))
-        link = '<https://api.github.com/repositories/8560576/issues?state=open&page=2>; rel="next", <https://api.github.com/repositories/8560576/issues?state=open&page=10>; rel="last"'
+        link = '<https://api.github.com/repositories/8560576/issues?state=open&page=2>; rel="next", <https://api.github.com/repositories/8560576/issues?state=open&page=10>; rel="last"' # noqa: E501
         self.assertEqual(self.extractor.get_next_page_url(link),
                          'https://api.github.com/repositories/8560576/issues?state=open&page=2')
 
diff --git a/ForgeImporters/forgeimporters/tests/github/test_tracker.py b/ForgeImporters/forgeimporters/tests/github/test_tracker.py
index 15c575c75..c2dec0d20 100644
--- a/ForgeImporters/forgeimporters/tests/github/test_tracker.py
+++ b/ForgeImporters/forgeimporters/tests/github/test_tracker.py
@@ -98,7 +98,7 @@ class TestTrackerImporter(TestCase):
             importer.process_fields(extractor, ticket, issue)
             self.assertEqual(ticket.summary, 'title')
             self.assertEqual(ticket.description,
-                             '*Originally created by:* [creator](https://github.com/creator)\n*Originally owned by:* [owner](https://github.com/owner)\n\nhello')
+                             '*Originally created by:* [creator](https://github.com/creator)\n*Originally owned by:* [owner](https://github.com/owner)\n\nhello') # noqa: E501
             self.assertEqual(ticket.status, 'New')
             self.assertEqual(ticket.created_date, 'created_at')
             self.assertEqual(ticket.mod_date, 'updated_at')
@@ -138,14 +138,14 @@ class TestTrackerImporter(TestCase):
         extractor.urlopen().read.return_value = b'data'
         body = 'hello\n' \
             '![cdbpzjc5ex4](https://f.cloud.github.com/assets/979771/1027411/a393ab5e-0e70-11e3-8a38-b93a3df904cf.jpg)\r\n' \
-            '![screensh0t](http://f.cl.ly/items/13453x43053r2G0d3x0v/Screen%20Shot%202012-04-28%20at%2010.48.17%20AM.png)'
+            '![screensh0t](http://f.cl.ly/items/13453x43053r2G0d3x0v/Screen%20Shot%202012-04-28%20at%2010.48.17%20AM.png)' # noqa: E501
         new_body, attachments = importer._get_attachments(extractor, body)
         self.assertEqual(new_body, 'hello\n')
         self.assertEqual(len(attachments), 2)
         self.assertEqual(
-            attachments[0].url, 'https://f.cloud.github.com/assets/979771/1027411/a393ab5e-0e70-11e3-8a38-b93a3df904cf.jpg')
+            attachments[0].url, 'https://f.cloud.github.com/assets/979771/1027411/a393ab5e-0e70-11e3-8a38-b93a3df904cf.jpg') # noqa: E501
         self.assertEqual(
-            attachments[1].url, 'http://f.cl.ly/items/13453x43053r2G0d3x0v/Screen%20Shot%202012-04-28%20at%2010.48.17%20AM.png')
+            attachments[1].url, 'http://f.cl.ly/items/13453x43053r2G0d3x0v/Screen%20Shot%202012-04-28%20at%2010.48.17%20AM.png') # noqa: E501
         self.assertEqual(attachments[0].file.read(), b'data')
         self.assertEqual(attachments[1].file.read(), b'data')
 
diff --git a/ForgeImporters/forgeimporters/trac/tests/functional/test_trac.py b/ForgeImporters/forgeimporters/trac/tests/functional/test_trac.py
index c12823fbf..0a2b95770 100644
--- a/ForgeImporters/forgeimporters/trac/tests/functional/test_trac.py
+++ b/ForgeImporters/forgeimporters/trac/tests/functional/test_trac.py
@@ -41,7 +41,7 @@ class TestTracImportController(TestController):
             r = form.submit()
 
         assert r.status_int == 302 and '/p/my-project' in r.location, \
-            'Did not redirect as expected (status {} location {}).  Got a flash message: {} and inline errors: {}'.format(
+            'Did not redirect as expected (status {} location {}).  Got a flash message: {} and inline errors: {}'.format( # noqa: E501
                 r.status_int,
                 r.location,
                 self.webflash(r),
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 82dc642de..96d5e78f4 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -2242,7 +2242,8 @@ class TestFunctionalController(TrackerTestController):
 
     def test_move_ticket_bad_data(self):
         self.new_ticket(summary='test')
-        r = self.app.post('/p/test/bugs/1/move', extra_environ={'HTTP_REFERER': '/p/test/bugs/1/'}).follow()  # empty POST
+        # empty POST
+        r = self.app.post('/p/test/bugs/1/move', extra_environ={'HTTP_REFERER': '/p/test/bugs/1/'}).follow()
         assert 'Select valid tracker' in r, r
         r = self.app.post('/p/test/bugs/1/move',
                           params={'tracker': 'invalid tracker id'},
@@ -2872,7 +2873,7 @@ class TestEmailMonitoring(TrackerTestController):
         email_tasks = M.MonQTask.query.find(
             dict(task_name='allura.tasks.mail_tasks.sendsimplemail')).all()
         assert 'Sent from localhost because mailinglist@example.com is subscribed to http://localhost/p/test/bugs/' in \
-               email_tasks[0].kwargs['text']
+               email_tasks[0].kwargs['text'] # noqa: E501
         assert 'a project admin can change settings at http://localhost/p/test/admin/bugs/options' in \
                email_tasks[0].kwargs['text']
 
diff --git a/ForgeTracker/forgetracker/widgets/admin_custom_fields.py b/ForgeTracker/forgetracker/widgets/admin_custom_fields.py
index e0e761924..3602253dd 100644
--- a/ForgeTracker/forgetracker/widgets/admin_custom_fields.py
+++ b/ForgeTracker/forgetracker/widgets/admin_custom_fields.py
@@ -83,7 +83,7 @@ class CustomFieldAdminDetail(ffw.StateField):
             select=ffw.FieldCluster(
                 fields=[
                     ffw.AdminField(field=ew.TextField(name='options',
-                                                      label='Options (separate with spaces; quote if containing spaces; prefix with * to set a default)',
+                                                      label='Options (separate with spaces; quote if containing spaces; prefix with * to set a default)', # noqa: E501
                                                       ))],
                 show_labels=False),
             milestone=ffw.FieldCluster(
diff --git a/ForgeWiki/forgewiki/tests/functional/test_root.py b/ForgeWiki/forgewiki/tests/functional/test_root.py
index 6459c853c..561ff9936 100644
--- a/ForgeWiki/forgewiki/tests/functional/test_root.py
+++ b/ForgeWiki/forgewiki/tests/functional/test_root.py
@@ -306,7 +306,7 @@ class TestRootController(TestController):
 
                                             Now hit your wiki a few times from a browser. Initially, it will be dead slow, as it is trying to build thumbnails for the images. And it will time out, a lot. Keep hitting reload, until it works.
 
-                                            **Note:** The logo shown in the sidebar is no longer stored as an object in the wiki (as it was in the Hosted App installation). Rather save it as a regular file, then edit LocalSettings.php, adding""")
+                                            **Note:** The logo shown in the sidebar is no longer stored as an object in the wiki (as it was in the Hosted App installation). Rather save it as a regular file, then edit LocalSettings.php, adding""") # noqa: E501
         self.app.post('/wiki/testdiff/update', params=d)
         d = dict(title='testdiff', text="""**Optionally**, you may also want to remove all the unused accounts that have accumulated (one was created for *every* logged in SF-user who has visited your MediaWiki hosted app):
 
@@ -343,7 +343,7 @@ class TestRootController(TestController):
 
                                             **Note:** The logo shown in the sidebar is no longer stored as an object in the wiki (as it was in the Hosted App installation). Rather save it as a regular file, then edit LocalSettings.php, adding
 
-                                            <script>alert(1)</script>""")
+                                            <script>alert(1)</script>""") # noqa: E501
         self.app.post('/wiki/testdiff/update', params=d)
         response = self.app.get('/wiki/testdiff/diff?v1=1&v2=2')
         assert ('# Now fix <del> permissons. </del> <ins> permissions. </ins> '
diff --git a/ForgeWiki/forgewiki/wiki_main.py b/ForgeWiki/forgewiki/wiki_main.py
index e7d44c749..8a81bba68 100644
--- a/ForgeWiki/forgewiki/wiki_main.py
+++ b/ForgeWiki/forgewiki/wiki_main.py
@@ -171,7 +171,7 @@ This is the default page, edit it as you see fit. To add a new page simply refer
 The wiki uses [Markdown](%s) syntax.
 
 [[members limit=20]]
-""" % (self.url + 'markdown_syntax/')
+""" % (self.url + 'markdown_syntax/') # noqa: E501
 
     @property
     def show_discussion(self):
@@ -996,7 +996,7 @@ class WikiAdminController(DefaultAdminController):
 
         if self.app.allow_email_posting != bool(allow_email_posting):
             M.AuditLog.log('{}: set option "{}" {} => {}'.format(
-                mount_point, "Allow posting replies via email", self.app.allow_email_posting, bool(allow_email_posting)))
+                mount_point, "Allow posting replies via email", self.app.allow_email_posting, bool(allow_email_posting))) # noqa: E501
             self.app.allow_email_posting = allow_email_posting
 
         flash('Wiki options updated')