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

brondsem pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/allura.git

commit 8475df60918ea5cf560584000a692bf87906ad34
Author: Dave Brondsema <[email protected]>
AuthorDate: Wed Oct 30 12:59:17 2024 -0400

    clean up unused imports, mark helpers.py lines that we need to keep
---
 Allura/allura/command/base.py                             |  1 -
 Allura/allura/command/create_trove_categories.py          |  1 -
 Allura/allura/command/reclone_repo.py                     |  1 -
 Allura/allura/command/script.py                           |  1 -
 Allura/allura/command/show_models.py                      |  2 --
 Allura/allura/command/taskd.py                            |  1 -
 Allura/allura/config/app_cfg.py                           |  2 +-
 Allura/allura/config/middleware.py                        |  3 ---
 Allura/allura/controllers/auth.py                         |  1 -
 Allura/allura/controllers/basetest_project_root.py        |  2 --
 Allura/allura/controllers/discuss.py                      |  6 ++----
 Allura/allura/controllers/newforge.py                     |  2 +-
 Allura/allura/controllers/project.py                      |  2 --
 Allura/allura/controllers/repository.py                   |  4 +---
 Allura/allura/controllers/rest.py                         |  3 +--
 Allura/allura/controllers/root.py                         |  2 +-
 Allura/allura/controllers/site_admin.py                   |  2 +-
 Allura/allura/controllers/trovecategories.py              |  1 -
 Allura/allura/ext/admin/admin_main.py                     |  6 ++----
 Allura/allura/ext/admin/widgets.py                        |  2 --
 Allura/allura/ext/user_profile/user_main.py               |  3 +--
 Allura/allura/lib/app_globals.py                          |  3 ---
 Allura/allura/lib/custom_middleware.py                    |  2 +-
 Allura/allura/lib/decorators.py                           |  3 ---
 Allura/allura/lib/diff.py                                 |  2 +-
 Allura/allura/lib/helpers.py                              | 15 ++++++---------
 Allura/allura/lib/macro.py                                |  1 -
 Allura/allura/lib/markdown_extensions.py                  |  2 --
 Allura/allura/lib/multifactor.py                          |  1 -
 Allura/allura/lib/patches.py                              |  4 ----
 Allura/allura/lib/phone/nexmo.py                          |  1 -
 Allura/allura/lib/plugin.py                               |  4 +---
 Allura/allura/lib/project_create_helpers.py               |  2 --
 Allura/allura/lib/repository.py                           |  1 -
 Allura/allura/lib/search.py                               |  3 ---
 Allura/allura/lib/solr.py                                 |  1 -
 Allura/allura/lib/spam/stopforumspamfilter.py             |  1 -
 Allura/allura/lib/utils.py                                |  4 +---
 Allura/allura/lib/validators.py                           |  1 -
 Allura/allura/lib/widgets/auth_widgets.py                 |  2 --
 Allura/allura/lib/widgets/form_fields.py                  |  2 --
 Allura/allura/lib/widgets/forms.py                        |  1 -
 Allura/allura/lib/widgets/oauth_widgets.py                |  1 -
 Allura/allura/lib/widgets/project_list.py                 |  1 -
 Allura/allura/model/artifact.py                           |  1 -
 Allura/allura/model/auth.py                               |  4 ----
 Allura/allura/model/discuss.py                            |  2 --
 Allura/allura/model/index.py                              |  1 -
 Allura/allura/model/monq_model.py                         |  2 +-
 Allura/allura/model/neighborhood.py                       |  2 +-
 Allura/allura/model/notification.py                       |  2 --
 Allura/allura/model/repo_refresh.py                       |  4 ++--
 Allura/allura/model/repository.py                         |  2 +-
 Allura/allura/model/session.py                            |  2 --
 Allura/allura/model/webhook.py                            |  1 -
 Allura/allura/scripts/reindex_projects.py                 |  2 +-
 Allura/allura/tasks/event_tasks.py                        |  1 -
 Allura/allura/tasks/export_tasks.py                       |  1 -
 Allura/allura/tasks/index_tasks.py                        |  1 -
 Allura/allura/tasks/repo_tasks.py                         |  1 -
 Allura/allura/tests/functional/test_auth.py               |  4 ++--
 Allura/allura/tests/functional/test_discuss.py            |  2 --
 Allura/allura/tests/functional/test_rest.py               |  1 -
 Allura/allura/tests/functional/test_root.py               |  1 -
 Allura/allura/tests/functional/test_site_admin.py         |  1 -
 Allura/allura/tests/model/test_auth.py                    |  2 +-
 Allura/allura/tests/model/test_notification.py            |  1 -
 Allura/allura/tests/model/test_repo.py                    |  1 -
 Allura/allura/tests/test_decorators.py                    |  2 +-
 Allura/allura/tests/test_diff.py                          |  1 -
 Allura/allura/tests/test_globals.py                       |  3 ---
 Allura/allura/tests/test_helpers.py                       |  1 -
 Allura/allura/tests/test_mail_util.py                     |  1 -
 Allura/allura/tests/test_markdown.py                      |  1 -
 Allura/allura/tests/test_scripttask.py                    |  1 -
 Allura/allura/tests/test_security.py                      |  2 +-
 Allura/allura/tests/test_tasks.py                         |  1 -
 Allura/allura/tests/test_utils.py                         |  2 --
 Allura/allura/tests/test_webhooks.py                      |  1 -
 Allura/allura/tests/unit/spam/test_spam_filter.py         |  1 -
 Allura/allura/tests/unit/test_artifact.py                 |  1 -
 Allura/allura/tests/unit/test_project.py                  |  1 -
 Allura/allura/tests/unit/test_repo.py                     |  2 --
 Allura/allura/tests/unit/test_sitemapentry.py             |  1 -
 Allura/allura/tests/unit/test_solr.py                     |  1 -
 Allura/allura/webhooks.py                                 |  1 -
 Allura/allura/websetup/bootstrap.py                       |  4 ----
 Allura/allura/websetup/schema.py                          |  1 -
 AlluraTest/alluratest/controller.py                       |  5 +----
 AlluraTest/alluratest/tools.py                            |  2 --
 AlluraTest/alluratest/validation.py                       |  5 -----
 ForgeActivity/forgeactivity/main.py                       |  2 +-
 ForgeBlog/forgeblog/model/blog.py                         |  1 -
 ForgeBlog/forgeblog/tests/test_commands.py                |  3 ---
 ForgeDiscussion/forgediscussion/controllers/forum.py      |  1 -
 ForgeDiscussion/forgediscussion/controllers/root.py       |  2 +-
 ForgeDiscussion/forgediscussion/forum_main.py             |  1 -
 ForgeDiscussion/forgediscussion/import_support.py         |  1 -
 ForgeDiscussion/forgediscussion/model/forum.py            |  2 --
 .../forgediscussion/tests/functional/test_forum.py        |  1 -
 ForgeDiscussion/forgediscussion/widgets/forum_widgets.py  |  2 --
 ForgeFeedback/forgefeedback/feedback_main.py              |  5 ++---
 ForgeFeedback/forgefeedback/model/feedback.py             |  5 -----
 ForgeFeedback/forgefeedback/tests/functional/test_root.py |  4 ----
 ForgeFiles/forgefiles/files_main.py                       |  2 +-
 ForgeGit/forgegit/controllers.py                          |  2 +-
 ForgeGit/forgegit/tests/model/test_repository.py          |  1 -
 ForgeGit/forgegit/tests/test_git_app.py                   |  1 -
 ForgeGit/forgegit/tests/test_tasks.py                     |  1 -
 ForgeImporters/forgeimporters/github/tracker.py           |  1 -
 ForgeImporters/forgeimporters/github/wiki.py              |  1 -
 ForgeImporters/forgeimporters/trac/tests/test_tickets.py  |  2 +-
 ForgeSVN/forgesvn/controllers.py                          |  2 +-
 ForgeSVN/forgesvn/model/svn.py                            |  3 +--
 ForgeSVN/forgesvn/svn_main.py                             |  1 -
 ForgeSVN/forgesvn/tests/model/test_repository.py          |  1 -
 ForgeSVN/forgesvn/tests/test_svn_app.py                   |  1 -
 ForgeSVN/forgesvn/tests/test_tasks.py                     |  1 -
 ForgeShortUrl/forgeshorturl/model/shorturl.py             |  2 +-
 ForgeTracker/forgetracker/import_support.py               |  1 -
 ForgeTracker/forgetracker/model/ticket.py                 |  1 -
 ForgeTracker/forgetracker/plugins.py                      |  2 --
 ForgeTracker/forgetracker/search.py                       |  1 -
 ForgeTracker/forgetracker/tests/functional/test_root.py   |  4 ----
 .../forgetracker/tests/unit/test_root_controller.py       |  1 -
 ForgeTracker/forgetracker/tests/unit/test_ticket_model.py |  1 -
 ForgeTracker/forgetracker/widgets/ticket_form.py          |  1 -
 ForgeTracker/forgetracker/widgets/ticket_search.py        |  1 -
 ForgeUserStats/forgeuserstats/controllers/userstats.py    |  1 -
 ForgeUserStats/forgeuserstats/tests/test_model.py         |  1 -
 ForgeUserStats/forgeuserstats/tests/test_stats.py         |  1 -
 ForgeWiki/forgewiki/converters.py                         |  1 -
 ForgeWiki/forgewiki/model/wiki.py                         |  1 -
 run_tests                                                 |  1 -
 .../migrations/032-subscribe-merge-request-submitters.py  |  2 +-
 scripts/migrations/033-change-comment-anon-permissions.py |  5 ++---
 .../034-update_subscriptions_ticket_and_mr_titles.py      |  1 -
 scripts/perf/generate-projects.py                         |  1 -
 scripts/perf/load-up-forum.py                             |  7 +++----
 scripts/trac_import.py                                    |  1 -
 140 files changed, 49 insertions(+), 228 deletions(-)

diff --git a/Allura/allura/command/base.py b/Allura/allura/command/base.py
index de09018c9..cf495fbf4 100644
--- a/Allura/allura/command/base.py
+++ b/Allura/allura/command/base.py
@@ -18,7 +18,6 @@
 import os
 import logging
 
-import six
 import tg
 from paste.script import command
 from paste.deploy import appconfig
diff --git a/Allura/allura/command/create_trove_categories.py 
b/Allura/allura/command/create_trove_categories.py
index bdb9815b9..d17304047 100644
--- a/Allura/allura/command/create_trove_categories.py
+++ b/Allura/allura/command/create_trove_categories.py
@@ -25,7 +25,6 @@ from mock import patch, Mock
 from . import base
 
 from allura import model as M
-import six
 
 log = logging.getLogger(__name__)
 
diff --git a/Allura/allura/command/reclone_repo.py 
b/Allura/allura/command/reclone_repo.py
index a25e8ca68..ff99336bc 100644
--- a/Allura/allura/command/reclone_repo.py
+++ b/Allura/allura/command/reclone_repo.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import warnings
 
 from tg import tmpl_context as c
 
diff --git a/Allura/allura/command/script.py b/Allura/allura/command/script.py
index a004d41fa..27b841de0 100644
--- a/Allura/allura/command/script.py
+++ b/Allura/allura/command/script.py
@@ -18,7 +18,6 @@
 import sys
 import os.path
 import cProfile
-import warnings
 
 from tg import tmpl_context as c
 import tg
diff --git a/Allura/allura/command/show_models.py 
b/Allura/allura/command/show_models.py
index b5d9d4300..6702ba990 100644
--- a/Allura/allura/command/show_models.py
+++ b/Allura/allura/command/show_models.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import sys
 from collections import defaultdict
 from contextlib import contextmanager
 from itertools import groupby
@@ -32,7 +31,6 @@ from allura.lib.exceptions import CompoundError
 from allura.lib import helpers as h
 from allura.lib import utils
 from . import base
-import six
 
 
 class ShowModelsCommand(base.Command):
diff --git a/Allura/allura/command/taskd.py b/Allura/allura/command/taskd.py
index 2268d0426..01d4b710d 100644
--- a/Allura/allura/command/taskd.py
+++ b/Allura/allura/command/taskd.py
@@ -20,7 +20,6 @@ import re
 import logging
 import os
 import time
-import six.moves.queue
 from contextlib import contextmanager
 from datetime import datetime, timedelta
 import signal
diff --git a/Allura/allura/config/app_cfg.py b/Allura/allura/config/app_cfg.py
index dd4b975ef..bf33f6ab0 100644
--- a/Allura/allura/config/app_cfg.py
+++ b/Allura/allura/config/app_cfg.py
@@ -50,7 +50,7 @@ from tg.support.converters import asint
 
 import allura
 # needed for tg.configuration to work
-from allura.lib import app_globals, helpers
+from allura.lib import helpers
 from allura.lib.package_path_loader import PackagePathLoader
 
 log = logging.getLogger(__name__)
diff --git a/Allura/allura/config/middleware.py 
b/Allura/allura/config/middleware.py
index ec3547274..19c8e3e3b 100644
--- a/Allura/allura/config/middleware.py
+++ b/Allura/allura/config/middleware.py
@@ -24,8 +24,6 @@ import pickle
 import re
 import warnings
 
-import six
-import tg
 import pkg_resources
 from tg import config
 from paste.deploy.converters import asbool, aslist, asint
@@ -38,7 +36,6 @@ from werkzeug.debug import DebuggedApplication
 import activitystream
 import ew
 import formencode
-import ming
 from ming.odm.middleware import MingMiddleware
 from beaker_session_jwt import JWTCookieSession
 
diff --git a/Allura/allura/controllers/auth.py 
b/Allura/allura/controllers/auth.py
index bcfa181e3..770281005 100644
--- a/Allura/allura/controllers/auth.py
+++ b/Allura/allura/controllers/auth.py
@@ -22,7 +22,6 @@ import os
 from base64 import b32encode
 from datetime import datetime
 import re
-import warnings
 from urllib.parse import urlparse, urljoin
 
 import bson
diff --git a/Allura/allura/controllers/basetest_project_root.py 
b/Allura/allura/controllers/basetest_project_root.py
index a110a962f..805c80a8e 100644
--- a/Allura/allura/controllers/basetest_project_root.py
+++ b/Allura/allura/controllers/basetest_project_root.py
@@ -27,12 +27,10 @@ from tg import TGController
 from paste.deploy.converters import asbool
 
 from allura.lib.security import require, require_authenticated, 
require_access, has_access
-from allura.lib import helpers as h
 from allura.lib import plugin
 from allura import model as M
 from .root import RootController
 from .project import ProjectController
-from .rest import RestController
 
 __all__ = ['RootController']
 
diff --git a/Allura/allura/controllers/discuss.py 
b/Allura/allura/controllers/discuss.py
index 0d732f43c..e5ed81f87 100644
--- a/Allura/allura/controllers/discuss.py
+++ b/Allura/allura/controllers/discuss.py
@@ -15,14 +15,13 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-from urllib.parse import unquote, urlsplit, parse_qs
+from urllib.parse import unquote
 from datetime import datetime
 import logging
 
 import pymongo
 from tg import expose, redirect, validate, request, flash, response
-from tg.decorators import with_trailing_slash, without_trailing_slash, 
before_render, before_validate
-from decorator import decorator
+from tg.decorators import with_trailing_slash, without_trailing_slash
 
 from tg import tmpl_context as c, app_globals as g
 from webob import exc
@@ -44,7 +43,6 @@ from allura.lib.widgets import discuss as DW
 from allura.lib.widgets import form_fields as ffw
 
 from allura.model.auth import User
-from allura.model.artifact import ArtifactReference
 from .attachments import AttachmentsController, AttachmentController
 from .feed import FeedArgs, FeedController
 import six
diff --git a/Allura/allura/controllers/newforge.py 
b/Allura/allura/controllers/newforge.py
index bd0f389ce..68351fd3f 100644
--- a/Allura/allura/controllers/newforge.py
+++ b/Allura/allura/controllers/newforge.py
@@ -19,7 +19,7 @@ from io import BytesIO
 
 import six
 from tg import expose
-from tg.decorators import without_trailing_slash, with_trailing_slash
+from tg.decorators import without_trailing_slash
 from webob import exc
 
 from tg import app_globals as g
diff --git a/Allura/allura/controllers/project.py 
b/Allura/allura/controllers/project.py
index 9f5868dc7..86ba0a7b4 100644
--- a/Allura/allura/controllers/project.py
+++ b/Allura/allura/controllers/project.py
@@ -28,7 +28,6 @@ from tg.decorators import with_trailing_slash, 
without_trailing_slash
 from tg import tmpl_context as c, app_globals as g
 from paste.deploy.converters import asbool
 from webob import exc
-import jinja2
 import markupsafe
 import pymongo
 
@@ -49,7 +48,6 @@ from allura.lib.widgets import form_fields as ffw
 from allura.lib.widgets import project_list as plw
 from allura.lib import plugin, exceptions
 from .search import ProjectBrowseController
-from allura.ext.user_profile.user_main import UserProfileApp
 
 log = logging.getLogger(__name__)
 
diff --git a/Allura/allura/controllers/repository.py 
b/Allura/allura/controllers/repository.py
index 8138fd57b..111ba510a 100644
--- a/Allura/allura/controllers/repository.py
+++ b/Allura/allura/controllers/repository.py
@@ -15,13 +15,11 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import os
 import logging
 import difflib
 
 from allura.lib.utils import permanent_redirect
-from datetime import datetime
-from urllib.parse import quote, unquote
+from urllib.parse import unquote
 from collections import defaultdict, OrderedDict
 
 
diff --git a/Allura/allura/controllers/rest.py 
b/Allura/allura/controllers/rest.py
index e0b54fd16..82a39e1f4 100644
--- a/Allura/allura/controllers/rest.py
+++ b/Allura/allura/controllers/rest.py
@@ -20,7 +20,7 @@ from __future__ import annotations
 import json
 import logging
 from datetime import datetime, timedelta
-from urllib.parse import unquote, urlparse, parse_qs, parse_qsl
+from urllib.parse import unquote, parse_qs
 
 import oauthlib.oauth1
 import oauthlib.oauth2
@@ -31,7 +31,6 @@ import tg
 from tg import expose, flash, redirect, config
 from tg import tmpl_context as c, app_globals as g
 from tg import request, response
-from tg.decorators import without_trailing_slash
 import colander
 from ming.odm import session
 
diff --git a/Allura/allura/controllers/root.py 
b/Allura/allura/controllers/root.py
index c626ddf4e..fd0337538 100644
--- a/Allura/allura/controllers/root.py
+++ b/Allura/allura/controllers/root.py
@@ -19,7 +19,7 @@
 import logging
 from string import Template
 
-from tg import expose, request, config, session, redirect, flash
+from tg import expose, request, redirect, flash
 from tg.decorators import with_trailing_slash
 from tg import tmpl_context as c
 from tg import response
diff --git a/Allura/allura/controllers/site_admin.py 
b/Allura/allura/controllers/site_admin.py
index 19ed71e4a..ca1e845b2 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -20,7 +20,7 @@ import logging
 from datetime import datetime, timedelta
 import shlex
 
-from tg import expose, validate, flash, config, redirect
+from tg import expose, validate, flash, redirect
 from tg.decorators import with_trailing_slash, without_trailing_slash
 import bson
 import tg
diff --git a/Allura/allura/controllers/trovecategories.py 
b/Allura/allura/controllers/trovecategories.py
index d94d60e42..971da330c 100644
--- a/Allura/allura/controllers/trovecategories.py
+++ b/Allura/allura/controllers/trovecategories.py
@@ -31,7 +31,6 @@ from allura.lib.security import require_authenticated, 
require_site_admin
 from allura.lib.widgets import forms
 from allura.lib.plugin import SiteAdminExtension
 from allura.app import SitemapEntry
-import six
 
 
 class F:
diff --git a/Allura/allura/ext/admin/admin_main.py 
b/Allura/allura/ext/admin/admin_main.py
index 6feecd038..e5620aafb 100644
--- a/Allura/allura/ext/admin/admin_main.py
+++ b/Allura/allura/ext/admin/admin_main.py
@@ -18,7 +18,6 @@
 import logging
 import re
 import os
-from random import randint
 from collections import OrderedDict
 from datetime import datetime
 from urllib.parse import urlparse
@@ -26,7 +25,7 @@ import json
 from operator import itemgetter, attrgetter
 import pkg_resources
 
-from tg import tmpl_context as c, app_globals as g, response
+from tg import tmpl_context as c, app_globals as g
 from tg import request
 from paste.deploy.converters import asbool, aslist
 from tg import expose, redirect, flash, validate, config, jsonify
@@ -35,13 +34,12 @@ from webob import exc
 from bson import ObjectId
 from ming.odm.odmsession import ThreadLocalODMSession
 from ming.odm import session
-import PIL
 
 from allura.app import Application, DefaultAdminController, SitemapEntry
 from allura.lib import helpers as h
 from allura import version
 from allura import model as M
-from allura.lib.security import has_access, require_access, is_site_admin
+from allura.lib.security import has_access, require_access
 from allura.lib.widgets import form_fields as ffw
 from allura.lib import exceptions as forge_exc
 from allura.lib import plugin
diff --git a/Allura/allura/ext/admin/widgets.py 
b/Allura/allura/ext/admin/widgets.py
index e5537f467..2e1dfba23 100644
--- a/Allura/allura/ext/admin/widgets.py
+++ b/Allura/allura/ext/admin/widgets.py
@@ -14,7 +14,6 @@
 #       KIND, either express or implied.  See the License for the
 #       specific language governing permissions and limitations
 #       under the License.
-import tg
 from tg import tmpl_context as c
 
 import ew as ew_core
@@ -28,7 +27,6 @@ from allura.lib.widgets import forms as ff
 from allura.lib.widgets import form_fields as ffw
 
 from bson import ObjectId
-from paste.deploy.converters import aslist
 
 
 class CardField(ew._Jinja2Widget):
diff --git a/Allura/allura/ext/user_profile/user_main.py 
b/Allura/allura/ext/user_profile/user_main.py
index cf7840523..635693e8d 100644
--- a/Allura/allura/ext/user_profile/user_main.py
+++ b/Allura/allura/ext/user_profile/user_main.py
@@ -27,7 +27,6 @@ from tg import tmpl_context as c, app_globals as g
 from pytz import timezone
 from tg import expose, redirect, validate, flash
 from tg.decorators import without_trailing_slash
-from decorator import decorator
 from webob import exc
 
 from allura import version
@@ -40,7 +39,7 @@ from allura.lib.decorators import require_post
 from allura.lib.plugin import AuthenticationProvider
 from allura.lib.security import require_access
 from allura.lib.widgets.user_profile import SendMessageForm, SectionsUtil, 
SectionBase, ProjectsSectionBase
-from allura.model import User, ACE, ProjectRole
+from allura.model import ACE, ProjectRole
 
 log = logging.getLogger(__name__)
 
diff --git a/Allura/allura/lib/app_globals.py b/Allura/allura/lib/app_globals.py
index fc6bfbba9..0870579f8 100644
--- a/Allura/allura/lib/app_globals.py
+++ b/Allura/allura/lib/app_globals.py
@@ -18,11 +18,9 @@ from __future__ import annotations
 
 import re
 import logging
-import html
 import hashlib
 import json
 import datetime
-from urllib.parse import urlencode
 from subprocess import Popen, PIPE
 import os
 import time
@@ -63,7 +61,6 @@ from allura.lib.macro import uncacheable_macros_names
 from allura.lib.widgets import analytics
 from allura.lib.security import Credentials
 from allura.lib.solr import MockSOLR, make_solr_from_config
-from allura.model.session import artifact_orm_session
 import six
 
 """The application's Globals object"""
diff --git a/Allura/allura/lib/custom_middleware.py 
b/Allura/allura/lib/custom_middleware.py
index f73036d16..0e8c0392a 100644
--- a/Allura/allura/lib/custom_middleware.py
+++ b/Allura/allura/lib/custom_middleware.py
@@ -34,7 +34,7 @@ from allura.lib import helpers as h
 from allura.lib.utils import is_ajax
 from allura import model as M
 import allura.model.repository
-from tg import tmpl_context as c, app_globals as g
+from tg import tmpl_context as c
 
 log = logging.getLogger(__name__)
 
diff --git a/Allura/allura/lib/decorators.py b/Allura/allura/lib/decorators.py
index a0fecc1f4..cd27647b4 100644
--- a/Allura/allura/lib/decorators.py
+++ b/Allura/allura/lib/decorators.py
@@ -16,10 +16,8 @@
 #       under the License.
 
 import inspect
-import sys
 import json
 import logging
-import six
 from http.cookies import SimpleCookie as Cookie
 from collections import defaultdict
 from urllib.parse import unquote
@@ -38,7 +36,6 @@ from tg import response
 from webob.exc import HTTPFound, WSGIHTTPException
 
 from allura.lib import helpers as h
-from allura.lib import utils
 
 
 log = logging.getLogger(__name__)
diff --git a/Allura/allura/lib/diff.py b/Allura/allura/lib/diff.py
index ee9087253..e9f7b60e8 100644
--- a/Allura/allura/lib/diff.py
+++ b/Allura/allura/lib/diff.py
@@ -19,7 +19,7 @@ from __future__ import annotations
 import html
 import contextlib
 import logging
-from collections.abc import Iterable, Generator
+from collections.abc import Iterable
 
 import sxsdiff
 from diff_match_patch import diff_match_patch
diff --git a/Allura/allura/lib/helpers.py b/Allura/allura/lib/helpers.py
index 4ac03e2ae..8631f09ca 100644
--- a/Allura/allura/lib/helpers.py
+++ b/Allura/allura/lib/helpers.py
@@ -21,7 +21,6 @@ import sys
 import os
 import os.path
 import difflib
-import jinja2
 
 import urllib.request
 import urllib.parse
@@ -32,13 +31,11 @@ import json
 import logging
 import string
 import random
-import pickle
 from hashlib import sha1
 from datetime import datetime, timedelta
-from collections import defaultdict, OrderedDict
+from collections import defaultdict
 import shlex
 import socket
-from functools import partial
 from io import BytesIO
 import html
 import http.client
@@ -60,10 +57,12 @@ from tg.decorators import before_validate
 from formencode.variabledecode import variable_decode
 import formencode
 from markupsafe import Markup
-from jinja2.filters import escape, do_filesizeformat
+from jinja2.filters import escape
+from jinja2.filters import do_filesizeformat  # noqa: F401 RUF100
 from jinja2.utils import pass_context, htmlsafe_json_dumps
 from paste.deploy.converters import asbool, aslist, asint
-from webhelpers2 import date, text
+from webhelpers2 import date
+from webhelpers2 import text  # noqa: F401 RUF100
 from webob.exc import HTTPUnauthorized
 
 from allura.lib import exceptions as exc
@@ -72,10 +71,9 @@ from allura.lib import validators
 import urllib.parse as urlparse
 from urllib.parse import urlencode
 import math
-from webob.multidict import MultiDict
 
 # import to make available to templates, don't delete:
-from .security import has_access, is_allowed_by_role, is_site_admin
+from .security import has_access, is_allowed_by_role, is_site_admin  # noqa: 
F401 RUF100
 
 
 log = logging.getLogger(__name__)
@@ -955,7 +953,6 @@ def ming_config(**conf):
     :param \*\*conf: keyword arguments defining the new ming configuration
 
     """
-    import ming
     from ming.session import Session
     datastores = Session._datastores
     try:
diff --git a/Allura/allura/lib/macro.py b/Allura/allura/lib/macro.py
index f0e32e150..711bd3de4 100644
--- a/Allura/allura/lib/macro.py
+++ b/Allura/allura/lib/macro.py
@@ -29,7 +29,6 @@ import six.moves.urllib.request
 import six.moves.urllib.error
 
 import oembed
-import jinja2
 import markupsafe
 from operator import attrgetter
 from urllib.parse import urlparse, urlunparse
diff --git a/Allura/allura/lib/markdown_extensions.py 
b/Allura/allura/lib/markdown_extensions.py
index a942e8ba4..28ffd13aa 100644
--- a/Allura/allura/lib/markdown_extensions.py
+++ b/Allura/allura/lib/markdown_extensions.py
@@ -19,7 +19,6 @@ from __future__ import annotations
 import re
 import logging
 import warnings
-from typing import List
 import xml.etree.ElementTree as etree
 
 from urllib.parse import urljoin
@@ -37,7 +36,6 @@ from . import macro
 from . import helpers as h
 from allura import model as M
 from allura.lib.utils import ForgeHTMLSanitizerFilter, is_nofollow_url
-import six
 
 log = logging.getLogger(__name__)
 
diff --git a/Allura/allura/lib/multifactor.py b/Allura/allura/lib/multifactor.py
index c80465501..8368497b6 100644
--- a/Allura/allura/lib/multifactor.py
+++ b/Allura/allura/lib/multifactor.py
@@ -24,7 +24,6 @@ from collections import OrderedDict
 from base64 import b32decode, b32encode
 from time import time
 import errno
-import warnings
 
 import bson
 from allura.lib.exceptions import InvalidRecoveryCode, 
MultifactorRateLimitError
diff --git a/Allura/allura/lib/patches.py b/Allura/allura/lib/patches.py
index 964624d0b..d8d642394 100644
--- a/Allura/allura/lib/patches.py
+++ b/Allura/allura/lib/patches.py
@@ -15,17 +15,13 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import re
 
 import webob
 import tg.decorators
 from decorator import decorator
 from tg import request
-import mock
-import json
 
 from allura.lib import helpers as h
-import six
 
 _patched = False
 def apply():
diff --git a/Allura/allura/lib/phone/nexmo.py b/Allura/allura/lib/phone/nexmo.py
index fa1443eb7..9ac4829f7 100644
--- a/Allura/allura/lib/phone/nexmo.py
+++ b/Allura/allura/lib/phone/nexmo.py
@@ -21,7 +21,6 @@ import html
 import json
 
 import requests
-import jinja2
 import markupsafe
 
 from allura.lib.phone import PhoneService
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index c836378a6..fa059bd38 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -24,8 +24,6 @@ import os
 import logging
 import subprocess
 import string
-import random
-import sys
 import warnings
 from contextlib import contextmanager
 from urllib.parse import urlparse
@@ -49,7 +47,7 @@ except ImportError:
     ldap = modlist = None
 import pkg_resources
 import tg
-from tg import config, request, redirect, response, flash
+from tg import config, request, redirect, response
 from tg import tmpl_context as c, app_globals as g
 from webob import exc, Request
 from paste.deploy.converters import asbool, asint, aslist
diff --git a/Allura/allura/lib/project_create_helpers.py 
b/Allura/allura/lib/project_create_helpers.py
index 387eb0f68..2ec2cb3f7 100644
--- a/Allura/allura/lib/project_create_helpers.py
+++ b/Allura/allura/lib/project_create_helpers.py
@@ -29,11 +29,9 @@ import colander as col
 import bson
 import requests
 import formencode
-import six
 from urllib.parse import urlparse
 
 from allura.lib.helpers import slugify
-from allura.model import Neighborhood
 from ming.base import Object
 from ming.odm import ThreadLocalODMSession
 from tg import tmpl_context as c, app_globals as g
diff --git a/Allura/allura/lib/repository.py b/Allura/allura/lib/repository.py
index d4d21ff9f..f76374bc9 100644
--- a/Allura/allura/lib/repository.py
+++ b/Allura/allura/lib/repository.py
@@ -18,7 +18,6 @@
 import logging
 
 import six
-from urllib.parse import quote
 
 from tg import tmpl_context as c, app_globals as g
 from tg import request
diff --git a/Allura/allura/lib/search.py b/Allura/allura/lib/search.py
index 0489f1ac2..69531f5e9 100644
--- a/Allura/allura/lib/search.py
+++ b/Allura/allura/lib/search.py
@@ -18,13 +18,11 @@
 
 import ast
 import re
-import socket
 from logging import getLogger
 
 
 import bson
 import markdown
-import jinja2
 import markupsafe
 from tg import redirect, url
 from tg import tmpl_context as c, app_globals as g
@@ -34,7 +32,6 @@ from pysolr import SolrError
 from allura.lib import helpers as h
 from allura.lib.solr import escape_solr_arg
 from allura.lib.utils import urlencode
-import six
 
 log = getLogger(__name__)
 
diff --git a/Allura/allura/lib/solr.py b/Allura/allura/lib/solr.py
index 012fb728a..49511d8aa 100644
--- a/Allura/allura/lib/solr.py
+++ b/Allura/allura/lib/solr.py
@@ -26,7 +26,6 @@ from webob.exc import HTTPRequestEntityTooLarge
 from paste.deploy.converters import asbool
 import pysolr
 from pysolr import SolrError
-import six
 
 from allura.lib.helpers import shlex_split
 
diff --git a/Allura/allura/lib/spam/stopforumspamfilter.py 
b/Allura/allura/lib/spam/stopforumspamfilter.py
index 80d234c9e..dc240ce34 100644
--- a/Allura/allura/lib/spam/stopforumspamfilter.py
+++ b/Allura/allura/lib/spam/stopforumspamfilter.py
@@ -24,7 +24,6 @@ from tg import request
 
 from allura.lib import utils
 from allura.lib.spam import SpamFilter
-import six
 
 log = logging.getLogger(__name__)
 
diff --git a/Allura/allura/lib/utils.py b/Allura/allura/lib/utils.py
index d025f4f67..d3b27fd6b 100644
--- a/Allura/allura/lib/utils.py
+++ b/Allura/allura/lib/utils.py
@@ -20,7 +20,6 @@ import base64
 from collections.abc import Iterable, Mapping, MutableMapping
 from contextlib import contextmanager
 import time
-import string
 import hashlib
 import binascii
 import logging.handlers
@@ -29,11 +28,10 @@ import datetime
 import random
 import mimetypes
 import re
-from typing import Type, TypeVar
+from typing import TypeVar
 import magic
 from itertools import groupby
 import operator as op
-import collections
 import ming
 from urllib.parse import urlparse
 import six.moves.urllib.request
diff --git a/Allura/allura/lib/validators.py b/Allura/allura/lib/validators.py
index 9bce7b396..1a949d7e0 100644
--- a/Allura/allura/lib/validators.py
+++ b/Allura/allura/lib/validators.py
@@ -23,7 +23,6 @@ from formencode import validators as fev
 from tg import tmpl_context as c
 from . import helpers as h
 from datetime import datetime
-import six
 from urllib.parse import urlsplit
 from ipaddress import ip_address
 import socket
diff --git a/Allura/allura/lib/widgets/auth_widgets.py 
b/Allura/allura/lib/widgets/auth_widgets.py
index 52a849fc9..1382545cb 100644
--- a/Allura/allura/lib/widgets/auth_widgets.py
+++ b/Allura/allura/lib/widgets/auth_widgets.py
@@ -21,14 +21,12 @@ from ew.core import validator
 
 from tg import request, tmpl_context as c
 from formencode import Invalid
-from formencode import validators as fev
 from webob import exc
 
 from .forms import ForgeForm
 from tg import tmpl_context as c, app_globals as g
 
 from allura.lib import plugin
-from allura import model as M
 
 
 class LoginForm(ForgeForm):
diff --git a/Allura/allura/lib/widgets/form_fields.py 
b/Allura/allura/lib/widgets/form_fields.py
index d2347daca..646c98180 100644
--- a/Allura/allura/lib/widgets/form_fields.py
+++ b/Allura/allura/lib/widgets/form_fields.py
@@ -23,12 +23,10 @@ from tg import request, url
 import json
 import logging
 
-from formencode import validators as fev
 import paginate
 
 import ew as ew_core
 import ew.jinja2_ew as ew
-import six
 
 from allura.lib import validators as v
 
diff --git a/Allura/allura/lib/widgets/forms.py 
b/Allura/allura/lib/widgets/forms.py
index d3c8ddff8..cc3744feb 100644
--- a/Allura/allura/lib/widgets/forms.py
+++ b/Allura/allura/lib/widgets/forms.py
@@ -16,7 +16,6 @@
 #       under the License.
 
 import logging
-from html import escape as html_escape
 
 import html
 from tg import app_globals as g, tmpl_context as c
diff --git a/Allura/allura/lib/widgets/oauth_widgets.py 
b/Allura/allura/lib/widgets/oauth_widgets.py
index ba314c3d0..7fe33b75e 100644
--- a/Allura/allura/lib/widgets/oauth_widgets.py
+++ b/Allura/allura/lib/widgets/oauth_widgets.py
@@ -17,7 +17,6 @@
 
 import ew as ew_core
 import ew.jinja2_ew as ew
-from formencode import validators as fev
 
 from allura.lib import validators as V
 
diff --git a/Allura/allura/lib/widgets/project_list.py 
b/Allura/allura/lib/widgets/project_list.py
index 01bc4e2f3..b91d2dd84 100644
--- a/Allura/allura/lib/widgets/project_list.py
+++ b/Allura/allura/lib/widgets/project_list.py
@@ -23,7 +23,6 @@ from paste.deploy.converters import asbool
 
 from allura import model as M
 from allura.lib.security import Credentials
-import six
 
 
 class ProjectSummary(ew_core.Widget):
diff --git a/Allura/allura/model/artifact.py b/Allura/allura/model/artifact.py
index 0758a9569..32c126daa 100644
--- a/Allura/allura/model/artifact.py
+++ b/Allura/allura/model/artifact.py
@@ -47,7 +47,6 @@ from .project import AppConfig
 from .notification import MailFooter
 
 from .filesystem import File
-import six
 
 if typing.TYPE_CHECKING:
     from ming.odm.mapper import Query
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index 607a4b5cb..51dc98617 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -18,10 +18,8 @@
 from __future__ import annotations
 
 import logging
-import calendar
 import typing
 
-import six
 from markupsafe import Markup
 from urllib.parse import urlparse
 from email import header
@@ -38,7 +36,6 @@ from tg import config
 from tg import tmpl_context as c, app_globals as g
 from tg import request
 from ming import schema as S
-from ming import Field
 from ming.odm import session, state
 from ming.odm import FieldProperty, RelationProperty, ForeignIdProperty
 from ming.odm.declarative import MappedClass
@@ -52,7 +49,6 @@ from allura.lib import utils
 from allura.lib.decorators import memoize
 from allura.lib.search import SearchIndexable
 from .session import main_orm_session, main_explicitflush_orm_session
-from .session import project_orm_session
 from .timeline import ActivityNode, ActivityObject
 
 
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index 2199ecdd4..6cb0b6ef3 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -20,12 +20,10 @@ import logging
 from datetime import datetime
 import typing
 
-import jinja2
 import markupsafe
 import pymongo
 from pymongo.errors import DuplicateKeyError
 from tg import tmpl_context as c, app_globals as g
-import tg
 
 from ming import schema
 from ming.odm.base import session
diff --git a/Allura/allura/model/index.py b/Allura/allura/model/index.py
index c778db3b3..50b33999f 100644
--- a/Allura/allura/model/index.py
+++ b/Allura/allura/model/index.py
@@ -39,7 +39,6 @@ from allura.lib import helpers as h
 
 from .session import main_orm_session
 from .project import Project
-import six
 
 if typing.TYPE_CHECKING:
     from ming.odm.mapper import Query
diff --git a/Allura/allura/model/monq_model.py 
b/Allura/allura/model/monq_model.py
index 4dbc532dc..2e2bc9466 100644
--- a/Allura/allura/model/monq_model.py
+++ b/Allura/allura/model/monq_model.py
@@ -23,7 +23,7 @@ from datetime import datetime, timedelta
 import typing
 
 import pymongo
-from tg import tmpl_context as c, app_globals as g
+from tg import tmpl_context as c
 from tg import config
 from paste.deploy.converters import asbool
 
diff --git a/Allura/allura/model/neighborhood.py 
b/Allura/allura/model/neighborhood.py
index 9487518a3..60b38ea31 100644
--- a/Allura/allura/model/neighborhood.py
+++ b/Allura/allura/model/neighborhood.py
@@ -27,7 +27,7 @@ from ming.odm.declarative import MappedClass
 from ming.utils import LazyProperty
 
 from tg import request
-from tg import tmpl_context as c, app_globals as g
+from tg import tmpl_context as c
 
 from allura.lib import plugin
 
diff --git a/Allura/allura/model/notification.py 
b/Allura/allura/model/notification.py
index 5b08cf1e8..a8b5a7625 100644
--- a/Allura/allura/model/notification.py
+++ b/Allura/allura/model/notification.py
@@ -35,7 +35,6 @@ Periodically:
 '''
 
 import logging
-from allura.lib.decorators import memoize
 from bson import ObjectId
 from datetime import datetime, timedelta
 from collections import defaultdict
@@ -58,7 +57,6 @@ import allura.tasks.mail_tasks
 
 from .session import main_orm_session
 from .auth import User, AlluraUserProperty
-import six
 
 if typing.TYPE_CHECKING:
     from ming.odm.mapper import Query
diff --git a/Allura/allura/model/repo_refresh.py 
b/Allura/allura/model/repo_refresh.py
index 91b724568..e5dbbbea2 100644
--- a/Allura/allura/model/repo_refresh.py
+++ b/Allura/allura/model/repo_refresh.py
@@ -22,9 +22,9 @@ import bson
 import tg
 import jinja2
 from paste.deploy.converters import asint
-from tg import tmpl_context as c, app_globals as g
+from tg import app_globals as g
 
-from ming.odm import mapper, session, ThreadLocalODMSession
+from ming.odm import session
 from ming.odm.base import ObjectState, state
 
 from allura.lib import utils
diff --git a/Allura/allura/model/repository.py 
b/Allura/allura/model/repository.py
index 06128afab..b39ca28f1 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -48,7 +48,7 @@ from ming import schema as S
 from ming.odm import session
 from ming import Field, collection, Index
 from ming.utils import LazyProperty
-from ming.odm import FieldProperty, session, Mapper, mapper, MappedClass, 
RelationProperty
+from ming.odm import FieldProperty, session, Mapper, MappedClass, 
RelationProperty
 from ming.base import Object
 
 from allura.lib import helpers as h
diff --git a/Allura/allura/model/session.py b/Allura/allura/model/session.py
index 15558dabe..2752afa46 100644
--- a/Allura/allura/model/session.py
+++ b/Allura/allura/model/session.py
@@ -24,7 +24,6 @@ from ming.odm.base import ObjectState
 from ming.odm.base import state
 from ming.odm.odmsession import ThreadLocalODMSession, SessionExtension
 from contextlib import contextmanager
-from tg import tmpl_context as c
 
 from allura.lib.utils import chunked_list
 from allura.tasks import index_tasks
@@ -117,7 +116,6 @@ class ArtifactSessionExtension(ManagedSessionExtension):
     def after_flush(self, obj=None):
         "Update artifact references, and add/update this artifact to solr"
         if not getattr(self.session, 'disable_index', False):
-            from tg import app_globals as g
             from .index import ArtifactReference, Shortlink
             from .session import main_orm_session
             # Ensure artifact references & shortlinks exist for new objects
diff --git a/Allura/allura/model/webhook.py b/Allura/allura/model/webhook.py
index 34d39ac9c..1be2797e3 100644
--- a/Allura/allura/model/webhook.py
+++ b/Allura/allura/model/webhook.py
@@ -25,7 +25,6 @@ from tg import config
 
 from allura.model import Artifact
 from allura.lib import helpers as h
-import six
 
 if typing.TYPE_CHECKING:
     from ming.odm.mapper import Query
diff --git a/Allura/allura/scripts/reindex_projects.py 
b/Allura/allura/scripts/reindex_projects.py
index 41b9d47c5..305b0571f 100644
--- a/Allura/allura/scripts/reindex_projects.py
+++ b/Allura/allura/scripts/reindex_projects.py
@@ -19,7 +19,7 @@ import argparse
 import logging
 
 from pymongo.errors import InvalidDocument
-from tg import tmpl_context as c, app_globals as g
+from tg import tmpl_context as c
 
 from allura.scripts import ScriptTask
 from allura import model as M
diff --git a/Allura/allura/tasks/event_tasks.py 
b/Allura/allura/tasks/event_tasks.py
index 3bed9a0b2..213ef09cf 100644
--- a/Allura/allura/tasks/event_tasks.py
+++ b/Allura/allura/tasks/event_tasks.py
@@ -19,7 +19,6 @@ import sys
 
 from allura.lib.decorators import task, event_handler
 from allura.lib.exceptions import CompoundError
-import six
 
 
 @task
diff --git a/Allura/allura/tasks/export_tasks.py 
b/Allura/allura/tasks/export_tasks.py
index 13bb6f44a..0c83b734a 100644
--- a/Allura/allura/tasks/export_tasks.py
+++ b/Allura/allura/tasks/export_tasks.py
@@ -25,7 +25,6 @@ from tg import app_globals as g, tmpl_context as c
 
 from allura.tasks import mail_tasks
 from allura.lib.decorators import task
-from allura.lib import helpers as h
 from allura.model.repository import zipdir
 
 
diff --git a/Allura/allura/tasks/index_tasks.py 
b/Allura/allura/tasks/index_tasks.py
index d907b3319..b1cab900a 100644
--- a/Allura/allura/tasks/index_tasks.py
+++ b/Allura/allura/tasks/index_tasks.py
@@ -30,7 +30,6 @@ from allura.lib import helpers as h
 from allura.lib.decorators import task
 from allura.lib.exceptions import CompoundError
 from allura.lib.solr import make_solr_from_config
-import six
 
 if typing.TYPE_CHECKING:
     import pysolr
diff --git a/Allura/allura/tasks/repo_tasks.py 
b/Allura/allura/tasks/repo_tasks.py
index b0f24bf5f..e7855d655 100644
--- a/Allura/allura/tasks/repo_tasks.py
+++ b/Allura/allura/tasks/repo_tasks.py
@@ -24,7 +24,6 @@ from ming.odm import session
 
 from allura.lib.decorators import task
 from allura.lib.repository import RepositoryApp
-from allura.lib.utils import skip_mod_date
 import git
 from git import SymbolicReference
 
diff --git a/Allura/allura/tests/functional/test_auth.py 
b/Allura/allura/tests/functional/test_auth.py
index d862c7a8e..a30f938b2 100644
--- a/Allura/allura/tests/functional/test_auth.py
+++ b/Allura/allura/tests/functional/test_auth.py
@@ -34,11 +34,11 @@ from mock import patch, Mock
 import mock
 import pytest
 import webtest
-from tg import tmpl_context as c, app_globals as g
+from tg import tmpl_context as c
 
 from allura.tests import TestController
 from allura.tests import decorators as td
-from allura.tests.decorators import audits, out_audits, assert_logmsg
+from allura.tests.decorators import audits, out_audits
 from alluratest.controller import setup_trove_categories, TestRestApiBase, 
oauth1_webtest
 from allura import model as M
 from allura.model.oauth import dummy_oauths
diff --git a/Allura/allura/tests/functional/test_discuss.py 
b/Allura/allura/tests/functional/test_discuss.py
index 0b88c576d..13935414b 100644
--- a/Allura/allura/tests/functional/test_discuss.py
+++ b/Allura/allura/tests/functional/test_discuss.py
@@ -17,8 +17,6 @@
 
 import os
 from mock import patch
-import pytest
-from webtest.app import AppError
 from ming.odm import session
 
 from allura.tests import TestController
diff --git a/Allura/allura/tests/functional/test_rest.py 
b/Allura/allura/tests/functional/test_rest.py
index 21d260254..a5ceaeaae 100644
--- a/Allura/allura/tests/functional/test_rest.py
+++ b/Allura/allura/tests/functional/test_rest.py
@@ -19,7 +19,6 @@
 import json
 from datetime import datetime, timedelta
 
-import tg
 from bson import ObjectId
 from tg import app_globals as g
 import mock
diff --git a/Allura/allura/tests/functional/test_root.py 
b/Allura/allura/tests/functional/test_root.py
index 8dfbe0dd7..d11568388 100644
--- a/Allura/allura/tests/functional/test_root.py
+++ b/Allura/allura/tests/functional/test_root.py
@@ -27,7 +27,6 @@ Please read http://pythonpaste.org/webtest/ for more 
information.
 
 """
 import os
-import re
 from unittest import skipIf
 
 import pytest
diff --git a/Allura/allura/tests/functional/test_site_admin.py 
b/Allura/allura/tests/functional/test_site_admin.py
index 7a017f7af..78e775904 100644
--- a/Allura/allura/tests/functional/test_site_admin.py
+++ b/Allura/allura/tests/functional/test_site_admin.py
@@ -18,7 +18,6 @@
 import json
 import datetime as dt
 import bson
-import pytest
 
 from mock import patch, MagicMock
 from ming.odm import ThreadLocalODMSession
diff --git a/Allura/allura/tests/model/test_auth.py 
b/Allura/allura/tests/model/test_auth.py
index 4f6e708e4..3a6ece759 100644
--- a/Allura/allura/tests/model/test_auth.py
+++ b/Allura/allura/tests/model/test_auth.py
@@ -33,7 +33,7 @@ from allura import model as M
 from allura.lib import helpers as h
 from allura.lib import plugin
 from allura.tests import decorators as td
-from alluratest.controller import setup_basic_test, setup_global_objects, 
setup_functional_test, setup_unit_test
+from alluratest.controller import setup_basic_test, setup_global_objects, 
setup_functional_test
 
 
 class TestAuth:
diff --git a/Allura/allura/tests/model/test_notification.py 
b/Allura/allura/tests/model/test_notification.py
index ba502823e..42b14728c 100644
--- a/Allura/allura/tests/model/test_notification.py
+++ b/Allura/allura/tests/model/test_notification.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import unittest
 from datetime import timedelta
 import collections
 
diff --git a/Allura/allura/tests/model/test_repo.py 
b/Allura/allura/tests/model/test_repo.py
index f1f57af8f..7434f4b1b 100644
--- a/Allura/allura/tests/model/test_repo.py
+++ b/Allura/allura/tests/model/test_repo.py
@@ -18,7 +18,6 @@
 from datetime import datetime
 from collections import defaultdict, OrderedDict
 
-import unittest
 import mock
 import pytest
 from tg import tmpl_context as c
diff --git a/Allura/allura/tests/test_decorators.py 
b/Allura/allura/tests/test_decorators.py
index 607833303..638f365d7 100644
--- a/Allura/allura/tests/test_decorators.py
+++ b/Allura/allura/tests/test_decorators.py
@@ -20,7 +20,7 @@ import random
 import gc
 
 from allura.lib.decorators import task, memoize
-from alluratest.controller import setup_basic_test, setup_global_objects
+from alluratest.controller import setup_basic_test
 
 
 class TestTask:
diff --git a/Allura/allura/tests/test_diff.py b/Allura/allura/tests/test_diff.py
index 153f37798..0d528af68 100644
--- a/Allura/allura/tests/test_diff.py
+++ b/Allura/allura/tests/test_diff.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import unittest
 
 from allura.lib.diff import HtmlSideBySideDiff
 
diff --git a/Allura/allura/tests/test_globals.py 
b/Allura/allura/tests/test_globals.py
index e8f349a73..c88623c5d 100644
--- a/Allura/allura/tests/test_globals.py
+++ b/Allura/allura/tests/test_globals.py
@@ -22,9 +22,7 @@ from textwrap import dedent
 import pytest
 
 import allura
-import unittest
 import hashlib
-import six
 from mock import patch, Mock
 
 from bson import ObjectId
@@ -37,7 +35,6 @@ from alluratest.controller import (
     setup_basic_test,
     setup_global_objects,
     setup_unit_test,
-    setup_functional_test,
     setup_trove_categories,
 )
 
diff --git a/Allura/allura/tests/test_helpers.py 
b/Allura/allura/tests/test_helpers.py
index 050de3239..817abde69 100644
--- a/Allura/allura/tests/test_helpers.py
+++ b/Allura/allura/tests/test_helpers.py
@@ -42,7 +42,6 @@ from allura.lib.security import has_access
 from allura.lib.security import Credentials
 from allura.tests import decorators as td
 from alluratest.controller import setup_basic_test
-import six
 
 # httpbin.org should work, but lately has been unreliable
 # httpbin.io does not allow /redirect-to to localhost
diff --git a/Allura/allura/tests/test_mail_util.py 
b/Allura/allura/tests/test_mail_util.py
index f32b07387..c549e5a01 100644
--- a/Allura/allura/tests/test_mail_util.py
+++ b/Allura/allura/tests/test_mail_util.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import unittest
 from email.mime.multipart import MIMEMultipart
 from email.mime.text import MIMEText
 
diff --git a/Allura/allura/tests/test_markdown.py 
b/Allura/allura/tests/test_markdown.py
index f86506e6c..3e56fe81e 100644
--- a/Allura/allura/tests/test_markdown.py
+++ b/Allura/allura/tests/test_markdown.py
@@ -102,7 +102,6 @@ class TestCommitMessageExtension:
     @mock.patch('allura.lib.markdown_extensions.TracRef2.get_comment_slug')
     @mock.patch('allura.lib.markdown_extensions.M.Shortlink.lookup')
     def test_convert(self, lookup, get_comment_slug):
-        from allura.lib.app_globals import ForgeMarkdown
 
         shortlink = mock.Mock(url='/p/project/tool/artifact/')
         shortlink.ref.artifact.deleted = False
diff --git a/Allura/allura/tests/test_scripttask.py 
b/Allura/allura/tests/test_scripttask.py
index edbfda5cf..48a4205f3 100644
--- a/Allura/allura/tests/test_scripttask.py
+++ b/Allura/allura/tests/test_scripttask.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import unittest
 import mock
 
 from allura.scripts.scripttask import ScriptTask
diff --git a/Allura/allura/tests/test_security.py 
b/Allura/allura/tests/test_security.py
index a1413583f..efa07b0f4 100644
--- a/Allura/allura/tests/test_security.py
+++ b/Allura/allura/tests/test_security.py
@@ -26,7 +26,7 @@ from allura.lib.security import Credentials, all_allowed, 
has_access
 from allura import model as M
 from forgewiki import model as WM
 from allura.lib.security import HIBPClientError, HIBPClient
-from mock import Mock, patch
+from mock import patch
 from requests.exceptions import Timeout
 
 
diff --git a/Allura/allura/tests/test_tasks.py 
b/Allura/allura/tests/test_tasks.py
index 81fb4123d..0d953f0c6 100644
--- a/Allura/allura/tests/test_tasks.py
+++ b/Allura/allura/tests/test_tasks.py
@@ -19,7 +19,6 @@ import email.iterators
 import operator
 import shutil
 from textwrap import dedent
-import unittest
 
 import six
 from base64 import b64encode
diff --git a/Allura/allura/tests/test_utils.py 
b/Allura/allura/tests/test_utils.py
index 8878ea21a..64d02c59b 100644
--- a/Allura/allura/tests/test_utils.py
+++ b/Allura/allura/tests/test_utils.py
@@ -17,11 +17,9 @@
 
 import json
 import time
-import unittest
 import datetime as dt
 from os import path
 
-import six
 import ming
 from ming.odm import session
 from bson import ObjectId
diff --git a/Allura/allura/tests/test_webhooks.py 
b/Allura/allura/tests/test_webhooks.py
index 76b78a076..d0bbd83e2 100644
--- a/Allura/allura/tests/test_webhooks.py
+++ b/Allura/allura/tests/test_webhooks.py
@@ -42,7 +42,6 @@ from alluratest.controller import (
     TestController,
     TestRestApiBase,
 )
-import six
 
 
 # important to be distinct from 'test' and 'test2' which ForgeGit and
diff --git a/Allura/allura/tests/unit/spam/test_spam_filter.py 
b/Allura/allura/tests/unit/spam/test_spam_filter.py
index f2977fe8f..f9f758164 100644
--- a/Allura/allura/tests/unit/spam/test_spam_filter.py
+++ b/Allura/allura/tests/unit/spam/test_spam_filter.py
@@ -16,7 +16,6 @@
 #       under the License.
 
 import mock
-import unittest
 
 from ming.odm import ThreadLocalODMSession
 
diff --git a/Allura/allura/tests/unit/test_artifact.py 
b/Allura/allura/tests/unit/test_artifact.py
index 470d21034..bac61bfd7 100644
--- a/Allura/allura/tests/unit/test_artifact.py
+++ b/Allura/allura/tests/unit/test_artifact.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import unittest
 
 from allura import model as M
 
diff --git a/Allura/allura/tests/unit/test_project.py 
b/Allura/allura/tests/unit/test_project.py
index 125022e06..ef1c1d9c2 100644
--- a/Allura/allura/tests/unit/test_project.py
+++ b/Allura/allura/tests/unit/test_project.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import unittest
 from mock import Mock
 
 from tg import config
diff --git a/Allura/allura/tests/unit/test_repo.py 
b/Allura/allura/tests/unit/test_repo.py
index e9983a580..6d177a2f0 100644
--- a/Allura/allura/tests/unit/test_repo.py
+++ b/Allura/allura/tests/unit/test_repo.py
@@ -16,10 +16,8 @@
 #       under the License.
 
 import datetime
-import unittest
 
 import pytest
-import six
 from mock import patch, Mock, MagicMock, call
 
 from tg import tmpl_context as c
diff --git a/Allura/allura/tests/unit/test_sitemapentry.py 
b/Allura/allura/tests/unit/test_sitemapentry.py
index 73d4bbd8c..f4ec40822 100644
--- a/Allura/allura/tests/unit/test_sitemapentry.py
+++ b/Allura/allura/tests/unit/test_sitemapentry.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import unittest
 from mock import Mock
 
 from allura.app import SitemapEntry
diff --git a/Allura/allura/tests/unit/test_solr.py 
b/Allura/allura/tests/unit/test_solr.py
index 54c2144e7..42c4643ce 100644
--- a/Allura/allura/tests/unit/test_solr.py
+++ b/Allura/allura/tests/unit/test_solr.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import unittest
 
 import mock
 from markupsafe import Markup
diff --git a/Allura/allura/webhooks.py b/Allura/allura/webhooks.py
index 54f0354e7..68098f84d 100644
--- a/Allura/allura/webhooks.py
+++ b/Allura/allura/webhooks.py
@@ -42,7 +42,6 @@ from allura.lib import validators as v
 from allura.lib.decorators import require_post, task
 from allura.lib.utils import DateJSONEncoder
 from allura import model as M
-import six
 
 
 log = logging.getLogger(__name__)
diff --git a/Allura/allura/websetup/bootstrap.py 
b/Allura/allura/websetup/bootstrap.py
index 6ac4b430c..c0e47e6db 100644
--- a/Allura/allura/websetup/bootstrap.py
+++ b/Allura/allura/websetup/bootstrap.py
@@ -17,9 +17,7 @@
 
 """Setup the allura application"""
 import os
-import sys
 import logging
-import shutil
 from datetime import datetime
 from textwrap import dedent
 
@@ -28,7 +26,6 @@ from tg import tmpl_context as c, app_globals as g
 from paste.deploy.converters import asbool
 import ew
 
-from allura.lib.decorators import memoize
 from allura.model.oauth import dummy_oauths
 from ming import Session, mim
 from ming.odm import state, session
@@ -43,7 +40,6 @@ from allura.command import CreateTroveCategoriesCommand
 from allura.websetup.schema import REGISTRY
 
 from forgewiki import model as WM
-import six
 
 log = logging.getLogger(__name__)
 
diff --git a/Allura/allura/websetup/schema.py b/Allura/allura/websetup/schema.py
index 52bfd9763..424e2d0a7 100644
--- a/Allura/allura/websetup/schema.py
+++ b/Allura/allura/websetup/schema.py
@@ -35,7 +35,6 @@ REGISTRY = Registry()
 
 def setup_schema(command, conf, vars):
     """Place any commands to setup allura here"""
-    import ming
     import allura
 
     # turbogears has its own special magic wired up for its globals, can't use 
a regular Registry
diff --git a/AlluraTest/alluratest/controller.py 
b/AlluraTest/alluratest/controller.py
index 1c4cf32b6..b41d69dfe 100644
--- a/AlluraTest/alluratest/controller.py
+++ b/AlluraTest/alluratest/controller.py
@@ -25,14 +25,11 @@ import six.moves.urllib.error
 import json
 
 import mock
-import beaker.session
-from bs4 import BeautifulSoup
 from formencode import variabledecode
 from paste.deploy import loadapp
 from paste.deploy.converters import asbool
 from paste.script.appinstall import SetupCommand
-from tg import tmpl_context as c, app_globals as g
-from tg import url, request, response, session
+from tg import tmpl_context as c
 import tg
 from tg.wsgiapp import RequestLocals
 from webob import Response, Request
diff --git a/AlluraTest/alluratest/tools.py b/AlluraTest/alluratest/tools.py
index 3f2c0eab8..3dcd5c4a2 100644
--- a/AlluraTest/alluratest/tools.py
+++ b/AlluraTest/alluratest/tools.py
@@ -15,9 +15,7 @@
 #       specific language governing permissions and limitations
 #       under the License.
 import functools
-import re
 
-from decorator import decorator
 import unittest
 testcase = unittest.TestCase(methodName='__init__')  # py2 needs a methodName 
that is a valid attr :/
 
diff --git a/AlluraTest/alluratest/validation.py 
b/AlluraTest/alluratest/validation.py
index c8c246aff..434b1a140 100644
--- a/AlluraTest/alluratest/validation.py
+++ b/AlluraTest/alluratest/validation.py
@@ -18,19 +18,14 @@
 """
 Functions to syntax-validate output content
 """
-from os import path
 import os
 import sys
 import logging
 import tempfile
 import subprocess
 import json
-import six.moves.urllib.parse
-import six.moves.urllib.request
-import six.moves.urllib.error
 import re
 import pkg_resources
-import six
 
 import webtest
 from webtest import TestApp, TestResponse
diff --git a/ForgeActivity/forgeactivity/main.py 
b/ForgeActivity/forgeactivity/main.py
index de05a1944..2a911a3c8 100644
--- a/ForgeActivity/forgeactivity/main.py
+++ b/ForgeActivity/forgeactivity/main.py
@@ -26,7 +26,7 @@ from tg import tmpl_context as c, app_globals as g
 from tg import request, response
 from tg import expose, validate, config
 from tg.decorators import with_trailing_slash, without_trailing_slash
-from paste.deploy.converters import asbool, asint
+from paste.deploy.converters import asbool
 from webob import exc
 import feedgenerator as FG
 from activitystream.storage.mingstorage import Activity
diff --git a/ForgeBlog/forgeblog/model/blog.py 
b/ForgeBlog/forgeblog/model/blog.py
index c152b7862..5010d1482 100644
--- a/ForgeBlog/forgeblog/model/blog.py
+++ b/ForgeBlog/forgeblog/model/blog.py
@@ -35,7 +35,6 @@ from allura.model.timeline import ActivityObject
 from allura.model.types import MarkdownCache
 from allura.lib import helpers as h
 from allura.lib import utils
-import six
 
 if typing.TYPE_CHECKING:
     from ming.odm.mapper import Query
diff --git a/ForgeBlog/forgeblog/tests/test_commands.py 
b/ForgeBlog/forgeblog/tests/test_commands.py
index b6d2f7c01..4a1d797ec 100644
--- a/ForgeBlog/forgeblog/tests/test_commands.py
+++ b/ForgeBlog/forgeblog/tests/test_commands.py
@@ -15,12 +15,9 @@
 #       specific language governing permissions and limitations
 #       under the License.
 import html
-from datetime import datetime, timedelta
 from io import BytesIO
 from unittest import skipIf
 import pkg_resources
-import mock
-import feedparser
 from mock import patch
 
 from ming.odm.odmsession import ThreadLocalODMSession
diff --git a/ForgeDiscussion/forgediscussion/controllers/forum.py 
b/ForgeDiscussion/forgediscussion/controllers/forum.py
index 8a2a15918..b7f3e0761 100644
--- a/ForgeDiscussion/forgediscussion/controllers/forum.py
+++ b/ForgeDiscussion/forgediscussion/controllers/forum.py
@@ -22,7 +22,6 @@ import pymongo
 from allura.lib.search import mapped_artifacts_from_index_ids
 
 from tg import expose, validate, redirect
-from tg import request
 from tg import tmpl_context as c, app_globals as g
 from webob import exc
 from formencode import validators
diff --git a/ForgeDiscussion/forgediscussion/controllers/root.py 
b/ForgeDiscussion/forgediscussion/controllers/root.py
index da5b157ef..2c985d8f6 100644
--- a/ForgeDiscussion/forgediscussion/controllers/root.py
+++ b/ForgeDiscussion/forgediscussion/controllers/root.py
@@ -33,7 +33,7 @@ from formencode import validators
 from webob import exc
 import pymongo
 
-from allura.lib.security import require_access, has_access, 
require_authenticated
+from allura.lib.security import require_access, has_access
 from allura.lib.search import search_app
 from allura.lib import helpers as h
 from allura.lib import validators as v
diff --git a/ForgeDiscussion/forgediscussion/forum_main.py 
b/ForgeDiscussion/forgediscussion/forum_main.py
index a3bf469d1..f1d9448f8 100644
--- a/ForgeDiscussion/forgediscussion/forum_main.py
+++ b/ForgeDiscussion/forgediscussion/forum_main.py
@@ -20,7 +20,6 @@ import six.moves.urllib.request
 import six.moves.urllib.parse
 import six.moves.urllib.error
 import json
-import os
 
 # Non-stdlib imports
 from tg import tmpl_context as c, app_globals as g
diff --git a/ForgeDiscussion/forgediscussion/import_support.py 
b/ForgeDiscussion/forgediscussion/import_support.py
index cd0d6a89e..80b484793 100644
--- a/ForgeDiscussion/forgediscussion/import_support.py
+++ b/ForgeDiscussion/forgediscussion/import_support.py
@@ -26,7 +26,6 @@ from tg import tmpl_context as c
 from allura import model as M
 
 from forgediscussion import model as DM
-import six
 
 log = logging.getLogger(__name__)
 
diff --git a/ForgeDiscussion/forgediscussion/model/forum.py 
b/ForgeDiscussion/forgediscussion/model/forum.py
index 3e0be4ae7..45dfcd00c 100644
--- a/ForgeDiscussion/forgediscussion/model/forum.py
+++ b/ForgeDiscussion/forgediscussion/model/forum.py
@@ -15,9 +15,7 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import re
 import logging
-from itertools import chain
 import typing
 
 import pymongo
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py 
b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
index 6665fa784..4bbe6965b 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
@@ -25,7 +25,6 @@ from email.mime.multipart import MIMEMultipart
 
 import pkg_resources
 import pymongo
-import webtest
 
 from ming.odm import ThreadLocalODMSession
 from tg import tmpl_context as c
diff --git a/ForgeDiscussion/forgediscussion/widgets/forum_widgets.py 
b/ForgeDiscussion/forgediscussion/widgets/forum_widgets.py
index 4c90af637..1909b6d89 100644
--- a/ForgeDiscussion/forgediscussion/widgets/forum_widgets.py
+++ b/ForgeDiscussion/forgediscussion/widgets/forum_widgets.py
@@ -25,10 +25,8 @@ from allura.lib import validators as V
 from allura.lib.widgets import discuss as DW
 from allura.lib.widgets import form_fields as ffw
 from allura.lib.widgets.forms import CsrfForm
-from allura.lib.widgets.subscriptions import SubscribeForm
 
 from forgediscussion import model as M
-import six
 
 
 class _ThreadsTable(DW._ThreadsTable):
diff --git a/ForgeFeedback/forgefeedback/feedback_main.py 
b/ForgeFeedback/forgefeedback/feedback_main.py
index 581fa61f7..07b937e27 100644
--- a/ForgeFeedback/forgefeedback/feedback_main.py
+++ b/ForgeFeedback/forgefeedback/feedback_main.py
@@ -20,7 +20,7 @@ import pymongo
 
 # Non-stdlib imports
 
-from tg import expose, flash, url, config, request, redirect
+from tg import expose, flash, redirect
 from tg.decorators import with_trailing_slash, without_trailing_slash
 from tg import tmpl_context as c, app_globals as g
 from ming.odm import session
@@ -39,8 +39,7 @@ from allura.app import (
 from allura.controllers import BaseController
 from allura.controllers.feed import FeedController
 from allura.lib.decorators import require_post
-from allura.lib.security import (require_access, has_access)
-from allura.model import project
+from allura.lib.security import (require_access)
 
 # Local imports
 
diff --git a/ForgeFeedback/forgefeedback/model/feedback.py 
b/ForgeFeedback/forgefeedback/model/feedback.py
index bb01cdee4..fcffd65a7 100644
--- a/ForgeFeedback/forgefeedback/model/feedback.py
+++ b/ForgeFeedback/forgefeedback/model/feedback.py
@@ -16,9 +16,6 @@
 #       under the License.
 
 import logging
-import six.moves.urllib.request
-import six.moves.urllib.parse
-import six.moves.urllib.error
 import typing
 from datetime import datetime
 
@@ -32,9 +29,7 @@ from ming.odm import FieldProperty, ForeignIdProperty, 
RelationProperty
 
 from allura.model.artifact import VersionedArtifact
 from allura.model.auth import AlluraUserProperty, User
-from allura.model.project import ProjectRole
 from allura.model.timeline import ActivityObject
-from allura.lib import helpers as h
 
 if typing.TYPE_CHECKING:
     from ming.odm.mapper import Query
diff --git a/ForgeFeedback/forgefeedback/tests/functional/test_root.py 
b/ForgeFeedback/forgefeedback/tests/functional/test_root.py
index 69243f0d5..b751eb7a3 100644
--- a/ForgeFeedback/forgefeedback/tests/functional/test_root.py
+++ b/ForgeFeedback/forgefeedback/tests/functional/test_root.py
@@ -15,14 +15,10 @@
 #       specific language governing permissions and limitations
 #       under the License.
 from tg import tmpl_context as c
-from tg import config
 
 from allura import model as M
 from alluratest.controller import TestController
-from allura.lib import helpers as h
-from allura.tests import decorators as td
 
-from forgefeedback import model as FM
 
 
 class TestFeedback(TestController):
diff --git a/ForgeFiles/forgefiles/files_main.py 
b/ForgeFiles/forgefiles/files_main.py
index 98517a6ed..7c91a6896 100755
--- a/ForgeFiles/forgefiles/files_main.py
+++ b/ForgeFiles/forgefiles/files_main.py
@@ -23,7 +23,7 @@ from urllib.parse import unquote
 from tg import config, redirect, expose, flash
 from tg.decorators import with_trailing_slash, without_trailing_slash
 from tg import tmpl_context as c, app_globals as g
-from tg import request, response
+from tg import request
 from jinja2.exceptions import TemplateNotFound
 
 from allura.app import Application
diff --git a/ForgeGit/forgegit/controllers.py b/ForgeGit/forgegit/controllers.py
index 2062d0c24..ee64b0b60 100644
--- a/ForgeGit/forgegit/controllers.py
+++ b/ForgeGit/forgegit/controllers.py
@@ -17,7 +17,7 @@
 
 
 from allura.lib.utils import permanent_redirect
-from tg import expose, redirect
+from tg import expose
 from tg.decorators import with_trailing_slash
 from tg import tmpl_context as c
 
diff --git a/ForgeGit/forgegit/tests/model/test_repository.py 
b/ForgeGit/forgegit/tests/model/test_repository.py
index 7d0e97130..adcbf756f 100644
--- a/ForgeGit/forgegit/tests/model/test_repository.py
+++ b/ForgeGit/forgegit/tests/model/test_repository.py
@@ -19,7 +19,6 @@
 import os
 import shutil
 import stat
-import unittest
 import pkg_resources
 import datetime
 import email.iterators
diff --git a/ForgeGit/forgegit/tests/test_git_app.py 
b/ForgeGit/forgegit/tests/test_git_app.py
index ee4df227f..d158b30f5 100644
--- a/ForgeGit/forgegit/tests/test_git_app.py
+++ b/ForgeGit/forgegit/tests/test_git_app.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import unittest
 
 from tg import tmpl_context as c
 from ming.odm import ThreadLocalODMSession
diff --git a/ForgeGit/forgegit/tests/test_tasks.py 
b/ForgeGit/forgegit/tests/test_tasks.py
index 48ea4828e..48ab369bd 100644
--- a/ForgeGit/forgegit/tests/test_tasks.py
+++ b/ForgeGit/forgegit/tests/test_tasks.py
@@ -14,7 +14,6 @@
 #       KIND, either express or implied.  See the License for the
 #       specific language governing permissions and limitations
 #       under the License.
-import unittest
 import mock
 from testfixtures import LogCapture
 
diff --git a/ForgeImporters/forgeimporters/github/tracker.py 
b/ForgeImporters/forgeimporters/github/tracker.py
index 26f66551d..a9f27d205 100644
--- a/ForgeImporters/forgeimporters/github/tracker.py
+++ b/ForgeImporters/forgeimporters/github/tracker.py
@@ -19,7 +19,6 @@ import re
 import logging
 from datetime import datetime
 from urllib.error import HTTPError
-import six
 from io import BytesIO
 
 from tg import (
diff --git a/ForgeImporters/forgeimporters/github/wiki.py 
b/ForgeImporters/forgeimporters/github/wiki.py
index a0fc47770..a36e0e858 100644
--- a/ForgeImporters/forgeimporters/github/wiki.py
+++ b/ForgeImporters/forgeimporters/github/wiki.py
@@ -21,7 +21,6 @@ from datetime import datetime
 from tempfile import mkdtemp
 from shutil import rmtree
 
-import six
 
 from bs4 import BeautifulSoup
 import git
diff --git a/ForgeImporters/forgeimporters/trac/tests/test_tickets.py 
b/ForgeImporters/forgeimporters/trac/tests/test_tickets.py
index daff4e392..9cdadba1c 100644
--- a/ForgeImporters/forgeimporters/trac/tests/test_tickets.py
+++ b/ForgeImporters/forgeimporters/trac/tests/test_tickets.py
@@ -26,7 +26,7 @@ from ming.odm import ThreadLocalODMSession
 from tg import tmpl_context as c, config
 
 from allura.tests import TestController
-from allura.tests.decorators import with_tracker, with_wiki
+from allura.tests.decorators import with_tracker
 from alluratest.controller import TestRestApiBase, setup_unit_test
 from alluratest.tools import module_not_available
 
diff --git a/ForgeSVN/forgesvn/controllers.py b/ForgeSVN/forgesvn/controllers.py
index ac07d05a5..030e2f0e2 100644
--- a/ForgeSVN/forgesvn/controllers.py
+++ b/ForgeSVN/forgesvn/controllers.py
@@ -17,7 +17,7 @@
 
 
 from allura.lib.utils import permanent_redirect
-from tg import expose, redirect
+from tg import expose
 from tg.decorators import with_trailing_slash
 from tg import tmpl_context as c
 
diff --git a/ForgeSVN/forgesvn/model/svn.py b/ForgeSVN/forgesvn/model/svn.py
index 6d210f128..278f4bf4b 100644
--- a/ForgeSVN/forgesvn/model/svn.py
+++ b/ForgeSVN/forgesvn/model/svn.py
@@ -36,7 +36,7 @@ import tg
 import pysvn
 from paste.deploy.converters import asbool, asint
 from pymongo.errors import DuplicateKeyError
-from tg import tmpl_context as c, app_globals as g
+from tg import app_globals as g
 
 from ming.base import Object
 from ming.odm import Mapper, FieldProperty
@@ -44,7 +44,6 @@ from ming.utils import LazyProperty
 
 from allura import model as M
 from allura.lib import helpers as h
-from allura.model.auth import User
 from allura.model.repository import zipdir
 from allura.model import repository as RM
 
diff --git a/ForgeSVN/forgesvn/svn_main.py b/ForgeSVN/forgesvn/svn_main.py
index f2bf240b0..cf712eedd 100644
--- a/ForgeSVN/forgesvn/svn_main.py
+++ b/ForgeSVN/forgesvn/svn_main.py
@@ -26,7 +26,6 @@ from ming.odm.odmsession import ThreadLocalODMSession
 from tg import expose, redirect, validate, flash
 from tg.decorators import with_trailing_slash, without_trailing_slash
 from timermiddleware import Timer
-from paste.deploy.converters import asint
 
 # Pyforge-specific imports
 import allura.tasks.repo_tasks
diff --git a/ForgeSVN/forgesvn/tests/model/test_repository.py 
b/ForgeSVN/forgesvn/tests/model/test_repository.py
index 6d3338f3c..f1e95c18e 100644
--- a/ForgeSVN/forgesvn/tests/model/test_repository.py
+++ b/ForgeSVN/forgesvn/tests/model/test_repository.py
@@ -17,7 +17,6 @@
 
 import os
 import shutil
-import unittest
 from unittest import skipUnless
 
 import pkg_resources
diff --git a/ForgeSVN/forgesvn/tests/test_svn_app.py 
b/ForgeSVN/forgesvn/tests/test_svn_app.py
index 1811445d7..ad910ceab 100644
--- a/ForgeSVN/forgesvn/tests/test_svn_app.py
+++ b/ForgeSVN/forgesvn/tests/test_svn_app.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import unittest
 
 from tg import tmpl_context as c
 from ming.odm import ThreadLocalODMSession
diff --git a/ForgeSVN/forgesvn/tests/test_tasks.py 
b/ForgeSVN/forgesvn/tests/test_tasks.py
index a948a4f82..8df3e80d1 100644
--- a/ForgeSVN/forgesvn/tests/test_tasks.py
+++ b/ForgeSVN/forgesvn/tests/test_tasks.py
@@ -16,7 +16,6 @@
 #       under the License.
 
 import shutil
-import unittest
 import os
 
 import tg
diff --git a/ForgeShortUrl/forgeshorturl/model/shorturl.py 
b/ForgeShortUrl/forgeshorturl/model/shorturl.py
index 605eb690b..8da0aef9b 100644
--- a/ForgeShortUrl/forgeshorturl/model/shorturl.py
+++ b/ForgeShortUrl/forgeshorturl/model/shorturl.py
@@ -19,7 +19,7 @@ import typing
 import pymongo
 from tg import config
 from tg import tmpl_context as c
-from ming.odm import FieldProperty, ForeignIdProperty, session
+from ming.odm import FieldProperty, session
 from datetime import datetime
 from allura.model.auth import User
 from allura import model as M
diff --git a/ForgeTracker/forgetracker/import_support.py 
b/ForgeTracker/forgetracker/import_support.py
index 13acf1c0b..abfe426bd 100644
--- a/ForgeTracker/forgetracker/import_support.py
+++ b/ForgeTracker/forgetracker/import_support.py
@@ -31,7 +31,6 @@ from allura.lib.plugin import ImportIdConverter
 
 # Local imports
 from forgetracker import model as TM
-import six
 
 try:
     from forgeimporters.base import ProjectExtractor
diff --git a/ForgeTracker/forgetracker/model/ticket.py 
b/ForgeTracker/forgetracker/model/ticket.py
index 9ca5a77bf..05a0fbd74 100644
--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -32,7 +32,6 @@ import pymongo
 from pymongo.errors import OperationFailure
 from tg import tmpl_context as c, app_globals as g
 from paste.deploy.converters import aslist, asbool
-import jinja2
 import markupsafe
 
 from ming import schema
diff --git a/ForgeTracker/forgetracker/plugins.py 
b/ForgeTracker/forgetracker/plugins.py
index 676deb255..71f6832de 100644
--- a/ForgeTracker/forgetracker/plugins.py
+++ b/ForgeTracker/forgetracker/plugins.py
@@ -17,7 +17,5 @@
 
 import logging
 
-from tg import config
-from tg import app_globals as g
 
 log = logging.getLogger(__name__)
diff --git a/ForgeTracker/forgetracker/search.py 
b/ForgeTracker/forgetracker/search.py
index 10cd3c083..d215cc631 100644
--- a/ForgeTracker/forgetracker/search.py
+++ b/ForgeTracker/forgetracker/search.py
@@ -17,7 +17,6 @@
 from tg import tmpl_context as c
 
 from allura.lib.search import search
-import six
 
 
 FACET_PARAMS = {
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py 
b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 2e1ffb229..a392db564 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -15,9 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 from datetime import datetime
-import six.moves.urllib.request
-import six.moves.urllib.parse
-import six.moves.urllib.error
 import os
 import time
 import json
@@ -48,7 +45,6 @@ from allura.lib.utils import urlencode
 from allura.tests import decorators as td
 from allura.tasks import mail_tasks
 from ming.odm.odmsession import ThreadLocalODMSession
-import six
 
 
 def find(d, pred):
diff --git a/ForgeTracker/forgetracker/tests/unit/test_root_controller.py 
b/ForgeTracker/forgetracker/tests/unit/test_root_controller.py
index 9f1a6950a..aa8312c39 100644
--- a/ForgeTracker/forgetracker/tests/unit/test_root_controller.py
+++ b/ForgeTracker/forgetracker/tests/unit/test_root_controller.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import unittest
 
 from mock import Mock, patch
 from ming.odm.odmsession import session
diff --git a/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py 
b/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
index d62b6bf19..f580797fb 100644
--- a/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
+++ b/ForgeTracker/forgetracker/tests/unit/test_ticket_model.py
@@ -17,7 +17,6 @@
 
 from tg import tmpl_context as c
 from datetime import datetime
-from io import BytesIO
 import os
 import six.moves.urllib.parse
 import six.moves.urllib.request
diff --git a/ForgeTracker/forgetracker/widgets/ticket_form.py 
b/ForgeTracker/forgetracker/widgets/ticket_form.py
index aa45ee83d..fc19fb94e 100644
--- a/ForgeTracker/forgetracker/widgets/ticket_form.py
+++ b/ForgeTracker/forgetracker/widgets/ticket_form.py
@@ -26,7 +26,6 @@ from allura import model as M
 from allura.lib.widgets import form_fields as ffw
 from allura.lib import helpers as h
 from allura.lib import validators as v
-import six
 
 
 class TicketCustomFields(ew.CompoundField):
diff --git a/ForgeTracker/forgetracker/widgets/ticket_search.py 
b/ForgeTracker/forgetracker/widgets/ticket_search.py
index 8139becf6..effa98f3b 100644
--- a/ForgeTracker/forgetracker/widgets/ticket_search.py
+++ b/ForgeTracker/forgetracker/widgets/ticket_search.py
@@ -20,7 +20,6 @@ import ew.jinja2_ew as ew
 
 from allura.lib.widgets import form_fields as ffw
 from allura.lib.widgets import forms
-import six
 
 
 
diff --git a/ForgeUserStats/forgeuserstats/controllers/userstats.py 
b/ForgeUserStats/forgeuserstats/controllers/userstats.py
index 7df06f51f..02e10c663 100644
--- a/ForgeUserStats/forgeuserstats/controllers/userstats.py
+++ b/ForgeUserStats/forgeuserstats/controllers/userstats.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 from datetime import datetime
-import re
 
 from tg import expose, validate, redirect
 from tg.decorators import with_trailing_slash
diff --git a/ForgeUserStats/forgeuserstats/tests/test_model.py 
b/ForgeUserStats/forgeuserstats/tests/test_model.py
index 74703fa86..9842cc642 100644
--- a/ForgeUserStats/forgeuserstats/tests/test_model.py
+++ b/ForgeUserStats/forgeuserstats/tests/test_model.py
@@ -16,7 +16,6 @@
 #       under the License.
 
 import pkg_resources
-import unittest
 from datetime import datetime, timedelta
 
 from tg import tmpl_context as c
diff --git a/ForgeUserStats/forgeuserstats/tests/test_stats.py 
b/ForgeUserStats/forgeuserstats/tests/test_stats.py
index 9e4bb43ed..b44e900d7 100644
--- a/ForgeUserStats/forgeuserstats/tests/test_stats.py
+++ b/ForgeUserStats/forgeuserstats/tests/test_stats.py
@@ -16,7 +16,6 @@
 #       under the License.
 
 import pkg_resources
-import unittest
 
 from tg import tmpl_context as c
 
diff --git a/ForgeWiki/forgewiki/converters.py 
b/ForgeWiki/forgewiki/converters.py
index 0a3575649..5a194e4f8 100644
--- a/ForgeWiki/forgewiki/converters.py
+++ b/ForgeWiki/forgewiki/converters.py
@@ -17,7 +17,6 @@
 
 import re
 from bs4 import BeautifulSoup
-import six
 
 _inline_img = re.compile(r'\[\[(File|Image):([^\]|]+)[^]]*\]\]', re.UNICODE)
 _inline_img_markdown = r'[[img src=\2]]'
diff --git a/ForgeWiki/forgewiki/model/wiki.py 
b/ForgeWiki/forgewiki/model/wiki.py
index 4b10c2a76..5b6d0e682 100644
--- a/ForgeWiki/forgewiki/model/wiki.py
+++ b/ForgeWiki/forgewiki/model/wiki.py
@@ -35,7 +35,6 @@ from allura.model import (
     Snapshot,
     Feed,
     Thread,
-    Post,
     User,
     BaseAttachment,
     Notification,
diff --git a/run_tests b/run_tests
index e83aec083..3310ca91e 100755
--- a/run_tests
+++ b/run_tests
@@ -18,7 +18,6 @@
 #       under the License.
 
 import argparse
-from collections import defaultdict
 from glob import glob
 import json
 import multiprocessing
diff --git a/scripts/migrations/032-subscribe-merge-request-submitters.py 
b/scripts/migrations/032-subscribe-merge-request-submitters.py
index f04c20574..cc630f921 100644
--- a/scripts/migrations/032-subscribe-merge-request-submitters.py
+++ b/scripts/migrations/032-subscribe-merge-request-submitters.py
@@ -17,7 +17,7 @@
 
 import logging
 
-from ming.odm import ThreadLocalODMSession, state
+from ming.odm import ThreadLocalODMSession
 
 from allura.lib import utils
 from allura import model as M
diff --git a/scripts/migrations/033-change-comment-anon-permissions.py 
b/scripts/migrations/033-change-comment-anon-permissions.py
index 2cfb824d9..26f5790dc 100644
--- a/scripts/migrations/033-change-comment-anon-permissions.py
+++ b/scripts/migrations/033-change-comment-anon-permissions.py
@@ -15,14 +15,13 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import sys
 import logging
-from ming.odm import ThreadLocalODMSession, session
+from ming.odm import session
 from tg import tmpl_context as c
 from allura import model as M
 from forgediscussion.model import ForumPost
 from allura.lib import utils, security
-from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, 
ArgumentTypeError
+from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
 
 
 log = logging.getLogger(__name__)
diff --git 
a/scripts/migrations/034-update_subscriptions_ticket_and_mr_titles.py 
b/scripts/migrations/034-update_subscriptions_ticket_and_mr_titles.py
index 3eb4c488a..7e3dc1c3e 100644
--- a/scripts/migrations/034-update_subscriptions_ticket_and_mr_titles.py
+++ b/scripts/migrations/034-update_subscriptions_ticket_and_mr_titles.py
@@ -22,7 +22,6 @@ from tg import tmpl_context as c
 from bson import ObjectId
 
 from ming.odm import session
-from ming.odm import ThreadLocalODMSession
 
 from allura import model as M
 from forgetracker import model as TM
diff --git a/scripts/perf/generate-projects.py 
b/scripts/perf/generate-projects.py
index 503ed255c..1122fa762 100644
--- a/scripts/perf/generate-projects.py
+++ b/scripts/perf/generate-projects.py
@@ -15,7 +15,6 @@
 #       specific language governing permissions and limitations
 #       under the License.
 
-import re
 from ming.odm import ThreadLocalODMSession
 from allura import model as M
 
diff --git a/scripts/perf/load-up-forum.py b/scripts/perf/load-up-forum.py
index 3e6773f15..91338dec1 100644
--- a/scripts/perf/load-up-forum.py
+++ b/scripts/perf/load-up-forum.py
@@ -17,12 +17,11 @@
 
 
 import logging
-import uuid
-from ming.odm import ThreadLocalODMSession, session
+from ming.odm import session
 from tg import tmpl_context as c
 from allura import model as M
-from forgediscussion.model import ForumPost, Forum
-from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, 
ArgumentTypeError
+from forgediscussion.model import Forum
+from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
 from allura.lib import helpers as h
 from random import randint
 
diff --git a/scripts/trac_import.py b/scripts/trac_import.py
index dc61bf04b..a066d0004 100644
--- a/scripts/trac_import.py
+++ b/scripts/trac_import.py
@@ -20,7 +20,6 @@ from optparse import OptionParser
 
 from allura.lib.import_api import AlluraImportApiClient
 from tracwikiimporter.scripts.wiki_from_trac.loaders import import_wiki
-import six
 
 
 def main():

Reply via email to