This is an automated email from the ASF dual-hosted git repository.
dill0wn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/allura.git
The following commit(s) were added to refs/heads/master by this push:
new 542a06021 run pyupgrade (targeting 3.7 still)
542a06021 is described below
commit 542a060218aa4ea769fa8082b90af9e81c55f3cd
Author: Dave Brondsema <[email protected]>
AuthorDate: Mon Jul 3 20:28:22 2023 +0000
run pyupgrade (targeting 3.7 still)
---
Allura/allura/app.py | 2 +-
Allura/allura/config/middleware.py | 2 +-
Allura/allura/controllers/attachments.py | 2 +-
Allura/allura/controllers/auth.py | 2 +-
Allura/allura/controllers/basetest_project_root.py | 2 +-
Allura/allura/controllers/discuss.py | 4 ++--
Allura/allura/controllers/project.py | 2 +-
Allura/allura/controllers/repository.py | 2 +-
Allura/allura/controllers/rest.py | 2 +-
Allura/allura/controllers/site_admin.py | 2 +-
Allura/allura/ext/admin/admin_main.py | 4 ++--
Allura/allura/lib/app_globals.py | 2 +-
Allura/allura/lib/decorators.py | 2 +-
Allura/allura/lib/helpers.py | 2 +-
Allura/allura/lib/macro.py | 2 +-
Allura/allura/lib/mail_util.py | 4 ++--
Allura/allura/lib/markdown_extensions.py | 2 +-
Allura/allura/lib/phone/nexmo.py | 2 +-
Allura/allura/lib/plugin.py | 4 ++--
Allura/allura/lib/project_create_helpers.py | 2 +-
Allura/allura/lib/repository.py | 2 +-
Allura/allura/lib/utils.py | 4 ++--
Allura/allura/lib/validators.py | 2 +-
Allura/allura/model/auth.py | 14 +++++++-------
Allura/allura/model/index.py | 4 ++--
Allura/allura/model/project.py | 10 +++++-----
Allura/allura/model/repo_refresh.py | 2 +-
Allura/allura/model/repository.py | 16 ++++++++--------
Allura/allura/scripts/trac_export.py | 2 +-
Allura/allura/tests/decorators.py | 2 +-
Allura/allura/tests/functional/test_auth.py | 4 ++--
Allura/allura/tests/functional/test_gravatar.py | 2 +-
Allura/allura/tests/functional/test_newforge.py | 2 +-
Allura/allura/tests/test_helpers.py | 4 ++--
Allura/allura/tests/test_mail_util.py | 4 ++--
Allura/ldap-setup.py | 2 +-
AlluraTest/alluratest/test_syntax.py | 2 +-
ForgeActivity/forgeactivity/main.py | 2 +-
ForgeChat/forgechat/command.py | 2 +-
ForgeDiscussion/forgediscussion/controllers/root.py | 2 +-
.../forgediscussion/tests/functional/test_forum.py | 6 +++---
ForgeFiles/forgefiles/files_main.py | 2 +-
ForgeFiles/forgefiles/model/files.py | 2 +-
ForgeGit/forgegit/model/git_repo.py | 2 +-
ForgeImporters/forgeimporters/base.py | 4 ++--
ForgeImporters/forgeimporters/github/tracker.py | 2 +-
.../forgeimporters/tests/github/test_tracker.py | 2 +-
ForgeTracker/forgetracker/tracker_main.py | 2 +-
ForgeWiki/forgewiki/wiki_main.py | 4 ++--
scripts/teamforge-import.py | 6 +++---
50 files changed, 82 insertions(+), 82 deletions(-)
diff --git a/Allura/allura/app.py b/Allura/allura/app.py
index 154c6bf32..a1489cbde 100644
--- a/Allura/allura/app.py
+++ b/Allura/allura/app.py
@@ -17,7 +17,7 @@
import os
import logging
-from six.moves.urllib_parse import urljoin
+from urllib.parse import urljoin
from io import BytesIO
from collections import defaultdict
from xml.etree import ElementTree as ET
diff --git a/Allura/allura/config/middleware.py
b/Allura/allura/config/middleware.py
index 58ee37078..c7503f17a 100644
--- a/Allura/allura/config/middleware.py
+++ b/Allura/allura/config/middleware.py
@@ -228,7 +228,7 @@ def allura_globals_middleware(app):
def get_tg_vars(context):
import tg
from allura.lib import helpers as h
- from six.moves.urllib.parse import quote, quote_plus
+ from urllib.parse import quote, quote_plus
context.setdefault('g', tg.app_globals)
context.setdefault('c', tg.tmpl_context)
context.setdefault('h', h)
diff --git a/Allura/allura/controllers/attachments.py
b/Allura/allura/controllers/attachments.py
index 9d1ec5e2a..1552ecb91 100644
--- a/Allura/allura/controllers/attachments.py
+++ b/Allura/allura/controllers/attachments.py
@@ -17,7 +17,7 @@
import six
-from six.moves.urllib.parse import unquote
+from urllib.parse import unquote
from webob import exc
from tg import expose, request, redirect
diff --git a/Allura/allura/controllers/auth.py
b/Allura/allura/controllers/auth.py
index cfd85933e..fea00d13e 100644
--- a/Allura/allura/controllers/auth.py
+++ b/Allura/allura/controllers/auth.py
@@ -21,7 +21,7 @@ from base64 import b32encode
from datetime import datetime
import re
import warnings
-from six.moves.urllib.parse import urlparse, urljoin
+from urllib.parse import urlparse, urljoin
import bson
import formencode as fe
diff --git a/Allura/allura/controllers/basetest_project_root.py
b/Allura/allura/controllers/basetest_project_root.py
index 428b24b79..90dc7e88c 100644
--- a/Allura/allura/controllers/basetest_project_root.py
+++ b/Allura/allura/controllers/basetest_project_root.py
@@ -17,7 +17,7 @@
"""Main Controller"""
import logging
-from six.moves.urllib.parse import unquote
+from urllib.parse import unquote
from tg import tmpl_context as c
from tg import request
diff --git a/Allura/allura/controllers/discuss.py
b/Allura/allura/controllers/discuss.py
index 986fe9151..94cc65e8d 100644
--- a/Allura/allura/controllers/discuss.py
+++ b/Allura/allura/controllers/discuss.py
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-from six.moves.urllib.parse import unquote, urlsplit, parse_qs
+from urllib.parse import unquote, urlsplit, parse_qs
from datetime import datetime
import logging
@@ -189,7 +189,7 @@ class ThreadController(BaseController, FeedController,
metaclass=h.ProxiedAttrMe
self.discussion = discussion_controller.discussion
self.thread = self.M.Thread.query.get(_id=thread_id)
if not self.thread:
- url = '/p/{}/discussion/{}/'.format(c.project.shortname,
c.forum.shortname)
+ url = f'/p/{c.project.shortname}/discussion/{c.forum.shortname}/'
utils.permanent_redirect(url)
@expose()
diff --git a/Allura/allura/controllers/project.py
b/Allura/allura/controllers/project.py
index 61abe252d..8ddb21da8 100644
--- a/Allura/allura/controllers/project.py
+++ b/Allura/allura/controllers/project.py
@@ -20,7 +20,7 @@ import logging
from datetime import datetime, timedelta
import six
-from six.moves.urllib.parse import unquote
+from urllib.parse import unquote
from bson import ObjectId
from tg import expose, flash, redirect, validate, request, config, session
diff --git a/Allura/allura/controllers/repository.py
b/Allura/allura/controllers/repository.py
index ea9ac74f9..224e5decf 100644
--- a/Allura/allura/controllers/repository.py
+++ b/Allura/allura/controllers/repository.py
@@ -21,7 +21,7 @@ import difflib
from allura.lib.utils import permanent_redirect
from datetime import datetime
-from six.moves.urllib.parse import quote, unquote
+from urllib.parse import quote, unquote
from collections import defaultdict, OrderedDict
diff --git a/Allura/allura/controllers/rest.py
b/Allura/allura/controllers/rest.py
index 4972a575f..ef4ae4ca5 100644
--- a/Allura/allura/controllers/rest.py
+++ b/Allura/allura/controllers/rest.py
@@ -198,7 +198,7 @@ class Oauth1Validator(oauthlib.oauth1.RequestValidator):
@property
def safe_characters(self):
# add a few characters, so tests can have clear readable values
- return super(Oauth1Validator, self).safe_characters | {'_', '-'}
+ return super().safe_characters | {'_', '-'}
def get_default_realms(self, client_key, request):
return []
diff --git a/Allura/allura/controllers/site_admin.py
b/Allura/allura/controllers/site_admin.py
index 440c024f0..5b41bc94a 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -48,7 +48,7 @@ from allura.command.show_models import dfs,
build_model_inheritance_graph
from allura.scripts.delete_projects import DeleteProjects
import allura
-from six.moves.urllib.parse import urlparse
+from urllib.parse import urlparse
import six
diff --git a/Allura/allura/ext/admin/admin_main.py
b/Allura/allura/ext/admin/admin_main.py
index 08aec761d..fc2f2ac53 100644
--- a/Allura/allura/ext/admin/admin_main.py
+++ b/Allura/allura/ext/admin/admin_main.py
@@ -21,7 +21,7 @@ import os
from random import randint
from collections import OrderedDict
from datetime import datetime
-from six.moves.urllib.parse import urlparse
+from urllib.parse import urlparse
import json
from operator import itemgetter, attrgetter
import pkg_resources
@@ -570,7 +570,7 @@ class ProjectAdminController(BaseController):
require_access(c.project, 'update')
if id is not None and id != '':
screenshot = M.ProjectFile.query.get(project_id=c.project._id,
_id=ObjectId(id))
- M.AuditLog.log('screenshots: deleted screenshot
{}'.format(screenshot.filename))
+ M.AuditLog.log(f'screenshots: deleted screenshot
{screenshot.filename}')
M.ProjectFile.query.remove(
dict(project_id=c.project._id, _id=ObjectId(id)))
g.post_event('project_updated')
diff --git a/Allura/allura/lib/app_globals.py b/Allura/allura/lib/app_globals.py
index d9aa1b9ed..2016d6b48 100644
--- a/Allura/allura/lib/app_globals.py
+++ b/Allura/allura/lib/app_globals.py
@@ -25,7 +25,7 @@ import html
import hashlib
import json
import datetime
-from six.moves.urllib.parse import urlencode
+from urllib.parse import urlencode
from subprocess import Popen, PIPE
import os
import time
diff --git a/Allura/allura/lib/decorators.py b/Allura/allura/lib/decorators.py
index b2b15f152..c889ea799 100644
--- a/Allura/allura/lib/decorators.py
+++ b/Allura/allura/lib/decorators.py
@@ -22,7 +22,7 @@ import logging
import six
from http.cookies import SimpleCookie as Cookie
from collections import defaultdict
-from six.moves.urllib.parse import unquote
+from urllib.parse import unquote
from datetime import datetime
from datetime import timedelta
diff --git a/Allura/allura/lib/helpers.py b/Allura/allura/lib/helpers.py
index 2bea1c07a..a164863d9 100644
--- a/Allura/allura/lib/helpers.py
+++ b/Allura/allura/lib/helpers.py
@@ -30,7 +30,7 @@ import json
import logging
import string
import random
-import six.moves.cPickle as pickle
+import pickle as pickle
from hashlib import sha1
from datetime import datetime, timedelta
from collections import defaultdict, OrderedDict
diff --git a/Allura/allura/lib/macro.py b/Allura/allura/lib/macro.py
index a4e5b9bc5..20d8fb244 100644
--- a/Allura/allura/lib/macro.py
+++ b/Allura/allura/lib/macro.py
@@ -32,7 +32,7 @@ import oembed
import jinja2
import markupsafe
from operator import attrgetter
-from six.moves.urllib.parse import urlparse, urlunparse
+from urllib.parse import urlparse, urlunparse
import pymongo
from tg import tmpl_context as c, app_globals as g
diff --git a/Allura/allura/lib/mail_util.py b/Allura/allura/lib/mail_util.py
index 2caef5c26..fb8459ec9 100644
--- a/Allura/allura/lib/mail_util.py
+++ b/Allura/allura/lib/mail_util.py
@@ -19,8 +19,8 @@ import re
import logging
import smtplib
import email.parser
-from six.moves.email_mime_multipart import MIMEMultipart
-from six.moves.email_mime_text import MIMEText
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
from email import header
from email.message import EmailMessage
diff --git a/Allura/allura/lib/markdown_extensions.py
b/Allura/allura/lib/markdown_extensions.py
index ab7025d14..cc03be1b1 100644
--- a/Allura/allura/lib/markdown_extensions.py
+++ b/Allura/allura/lib/markdown_extensions.py
@@ -20,7 +20,7 @@ import logging
from typing import List
import xml.etree.ElementTree as etree
-from six.moves.urllib.parse import urljoin
+from urllib.parse import urljoin
from tg import config
from bs4 import BeautifulSoup
diff --git a/Allura/allura/lib/phone/nexmo.py b/Allura/allura/lib/phone/nexmo.py
index 1e20ef802..653159da2 100644
--- a/Allura/allura/lib/phone/nexmo.py
+++ b/Allura/allura/lib/phone/nexmo.py
@@ -16,7 +16,7 @@
# under the License.
import logging
-from six.moves.urllib.parse import urljoin
+from urllib.parse import urljoin
import html
import json
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index 949051ca4..80c0525a2 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -25,8 +25,8 @@ import subprocess
import string
import crypt
import random
-from six.moves.urllib.request import urlopen
-from six.moves.urllib.parse import urlparse
+from urllib.request import urlopen
+from urllib.parse import urlparse
from io import BytesIO
from random import randint
from hashlib import sha256
diff --git a/Allura/allura/lib/project_create_helpers.py
b/Allura/allura/lib/project_create_helpers.py
index 650058f89..77c2c5adf 100644
--- a/Allura/allura/lib/project_create_helpers.py
+++ b/Allura/allura/lib/project_create_helpers.py
@@ -30,7 +30,7 @@ import bson
import requests
import formencode
import six
-from six.moves.urllib.parse import urlparse
+from urllib.parse import urlparse
from allura.lib.helpers import slugify
from allura.model import Neighborhood
diff --git a/Allura/allura/lib/repository.py b/Allura/allura/lib/repository.py
index b92c0ee25..a64f2c6dd 100644
--- a/Allura/allura/lib/repository.py
+++ b/Allura/allura/lib/repository.py
@@ -18,7 +18,7 @@
import logging
import six
-from six.moves.urllib.parse import quote
+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/utils.py b/Allura/allura/lib/utils.py
index c1c27e118..df42eeeeb 100644
--- a/Allura/allura/lib/utils.py
+++ b/Allura/allura/lib/utils.py
@@ -35,7 +35,7 @@ from itertools import groupby
import operator as op
import collections
import ming
-from six.moves.urllib.parse import urlparse
+from urllib.parse import urlparse
import six.moves.urllib.request
import six.moves.urllib.parse
import six.moves.urllib.error
@@ -159,7 +159,7 @@ class
CustomWatchedFileHandler(logging.handlers.WatchedFileHandler):
return super().format(record)
-def chunked_find(cls: Type[T], query: dict | None = None, pagesize: int =
1024, sort_key: str | None = '_id',
+def chunked_find(cls: type[T], query: dict | None = None, pagesize: int =
1024, sort_key: str | None = '_id',
sort_dir: int = 1) -> Iterable[Iterable[T]]:
'''
Execute a mongo query against the specified class, yield some results at
diff --git a/Allura/allura/lib/validators.py b/Allura/allura/lib/validators.py
index 8d1d498f4..50f27834b 100644
--- a/Allura/allura/lib/validators.py
+++ b/Allura/allura/lib/validators.py
@@ -51,7 +51,7 @@ class URL(fev.URL):
class URLIsPrivate(URL):
def _convert_to_python(self, value, state):
- value = super(URLIsPrivate, self)._convert_to_python(value, state)
+ value = super()._convert_to_python(value, state)
url_components = urlsplit(value)
try:
host_ip = socket.gethostbyname(url_components.netloc)
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index 274cac15d..74652226a 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -23,7 +23,7 @@ import typing
import six
from markupsafe import Markup
-from six.moves.urllib.parse import urlparse
+from urllib.parse import urlparse
from email import header
from hashlib import sha256
from datetime import timedelta, datetime, time
@@ -84,7 +84,7 @@ class EmailAddress(MappedClass):
indexes = ['nonce', ]
unique_indexes = [('email', 'claimed_by_user_id'), ]
- query: 'Query[EmailAddress]'
+ query: Query[EmailAddress]
_id = FieldProperty(S.ObjectId)
email = FieldProperty(str)
@@ -195,7 +195,7 @@ class AuthGlobals(MappedClass):
name = 'auth_globals'
session = main_orm_session
- query: 'Query[AuthGlobals]'
+ query: Query[AuthGlobals]
_id = FieldProperty(int)
next_uid = FieldProperty(int, if_missing=10000)
@@ -251,7 +251,7 @@ class User(MappedClass, ActivityNode, ActivityObject,
SearchIndexable):
dict(fields=('tool_data.phone_verification.number_hash',),
sparse=True),
]
- query: 'Query[User]'
+ query: Query[User]
type_s = 'User'
@@ -887,7 +887,7 @@ class ProjectRole(MappedClass):
('roles',),
]
- query: 'Query[ProjectRole]'
+ query: Query[ProjectRole]
_id = FieldProperty(S.ObjectId)
user_id: ObjectId = AlluraUserProperty(if_missing=None)
@@ -1021,7 +1021,7 @@ class AuditLog(MappedClass):
'user_id',
]
- query: 'Query[AuditLog]'
+ query: Query[AuditLog]
_id = FieldProperty(S.ObjectId)
project_id = ForeignIdProperty('Project', if_missing=None)
@@ -1111,7 +1111,7 @@ class UserLoginDetails(MappedClass):
unique_indexes = [('user_id', 'ip', 'ua'), # DuplicateKeyError
checked in add_login_detail
]
- query: 'Query[UserLoginDetails]'
+ query: Query[UserLoginDetails]
_id = FieldProperty(S.ObjectId)
user_id: ObjectId = AlluraUserProperty(required=True)
diff --git a/Allura/allura/model/index.py b/Allura/allura/model/index.py
index 028e00c0c..374fcb9cf 100644
--- a/Allura/allura/model/index.py
+++ b/Allura/allura/model/index.py
@@ -21,9 +21,9 @@ from itertools import groupby
import typing
from ming.odm.property import FieldProperty
-from six.moves.cPickle import dumps, loads
+from pickle import dumps, loads
from collections import defaultdict
-from six.moves.urllib.parse import unquote
+from urllib.parse import unquote
import bson
import pymongo
diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index e6ff5af2e..63b7e413a 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -87,7 +87,7 @@ class ProjectFile(File):
session = main_orm_session
indexes = [('project_id', 'category')]
- query: 'Query[ProjectFile]'
+ query: Query[ProjectFile]
project_id = FieldProperty(S.ObjectId)
category = FieldProperty(str)
@@ -101,7 +101,7 @@ class ProjectCategory(MappedClass):
session = main_orm_session
name = 'project_category'
- query: 'Query[ProjectCategory]'
+ query: Query[ProjectCategory]
_id = FieldProperty(S.ObjectId)
parent_id = FieldProperty(S.ObjectId, if_missing=None)
@@ -138,7 +138,7 @@ class TroveCategory(MappedClass):
extensions = [TroveCategoryMapperExtension]
indexes = ['trove_cat_id', 'trove_parent_id', 'shortname', 'fullpath']
- query: 'Query[TroveCategory]'
+ query: Query[TroveCategory]
_id = FieldProperty(S.ObjectId)
trove_cat_id = FieldProperty(int, if_missing=None)
@@ -228,7 +228,7 @@ class Project(SearchIndexable, MappedClass, ActivityNode,
ActivityObject):
('neighborhood_id', 'is_nbhd_project', 'deleted')]
unique_indexes = [('neighborhood_id', 'shortname')]
- query: 'Query[Project]'
+ query: Query[Project]
type_s = 'Project'
@@ -1409,7 +1409,7 @@ class AppConfig(MappedClass, ActivityObject):
'options.import_id',
('options.mount_point', 'project_id')]
- query: 'Query[AppConfig]'
+ query: Query[AppConfig]
# AppConfig schema
_id = FieldProperty(S.ObjectId)
diff --git a/Allura/allura/model/repo_refresh.py
b/Allura/allura/model/repo_refresh.py
index 2cd19be3f..91b724568 100644
--- a/Allura/allura/model/repo_refresh.py
+++ b/Allura/allura/model/repo_refresh.py
@@ -16,7 +16,7 @@
# under the License.
import logging
-from six.moves.cPickle import dumps
+from pickle import dumps
import bson
import tg
diff --git a/Allura/allura/model/repository.py
b/Allura/allura/model/repository.py
index 90b47e5e4..0a4856ba6 100644
--- a/Allura/allura/model/repository.py
+++ b/Allura/allura/model/repository.py
@@ -28,9 +28,9 @@ from hashlib import sha1
from datetime import datetime, timedelta
from time import time
from collections import defaultdict, OrderedDict
-from six.moves.urllib.parse import urljoin
+from urllib.parse import urljoin
from threading import Thread
-from six.moves.queue import Queue
+from queue import Queue
from itertools import chain, islice
import typing
from collections.abc import Iterable
@@ -354,7 +354,7 @@ class Repository(Artifact, ActivityObject):
name = 'generic-repository'
indexes = ['upstream_repo.name']
- query: 'Query[Repository]'
+ query: Query[Repository]
_impl = None
repo_id = 'repo'
@@ -812,7 +812,7 @@ class MergeRequest(VersionedArtifact, ActivityObject):
indexes = ['commit_id', 'creator_id']
unique_indexes = [('app_config_id', 'request_number')]
- query: 'Query[MergeRequest]'
+ query: Query[MergeRequest]
type_s = 'MergeRequest'
@@ -1056,7 +1056,7 @@ class CommitStatus(MappedClass):
name = 'commit_status'
indexes = [('commit_id', 'context'),]
- query: 'Query[CommitStatus]'
+ query: Query[CommitStatus]
_id = FieldProperty(S.ObjectId)
state = FieldProperty(str)
@@ -1094,7 +1094,7 @@ class Commit(MappedClass, RepoObject, ActivityObject):
'repo_ids',
]
- query: 'Query[Commit]'
+ query: Query[Commit]
_id = FieldProperty(str) # hexsha of the commit (for Git and Hg)
tree_id = FieldProperty(str)
@@ -1362,7 +1362,7 @@ class Tree(MappedClass, RepoObject):
indexes = [
]
- query: 'Query[Tree]'
+ query: Query[Tree]
_id = FieldProperty(str)
tree_ids = FieldProperty([dict(name=str, id=str)])
@@ -1638,7 +1638,7 @@ class LastCommit(MappedClass, RepoObject):
('commit_id', 'path'),
]
- query: 'Query[LastCommit]'
+ query: Query[LastCommit]
_id = FieldProperty(S.ObjectId)
commit_id = FieldProperty(str)
diff --git a/Allura/allura/scripts/trac_export.py
b/Allura/allura/scripts/trac_export.py
index 6b2949ba4..86b5f569e 100644
--- a/Allura/allura/scripts/trac_export.py
+++ b/Allura/allura/scripts/trac_export.py
@@ -42,7 +42,7 @@ except ImportError:
try:
from allura.lib.helpers import urlopen
except ImportError:
- from six.moves.urllib.request import urlopen
+ from urllib.request import urlopen
log = logging.getLogger(__name__)
diff --git a/Allura/allura/tests/decorators.py
b/Allura/allura/tests/decorators.py
index 8ef264f71..6b1ea527e 100644
--- a/Allura/allura/tests/decorators.py
+++ b/Allura/allura/tests/decorators.py
@@ -19,7 +19,7 @@ import sys
import re
from functools import wraps
import contextlib
-from six.moves.urllib.parse import parse_qs
+from urllib.parse import parse_qs
from ming.odm.odmsession import ThreadLocalODMSession
from tg import tmpl_context as c
diff --git a/Allura/allura/tests/functional/test_auth.py
b/Allura/allura/tests/functional/test_auth.py
index fc2536678..5a2562ef3 100644
--- a/Allura/allura/tests/functional/test_auth.py
+++ b/Allura/allura/tests/functional/test_auth.py
@@ -22,8 +22,8 @@ from datetime import datetime, time, timedelta
from time import time as time_time
import json
-from six.moves.urllib.parse import urlparse, parse_qs
-from six.moves.urllib.parse import urlencode
+from urllib.parse import urlparse, parse_qs
+from urllib.parse import urlencode
from bson import ObjectId
import re
diff --git a/Allura/allura/tests/functional/test_gravatar.py
b/Allura/allura/tests/functional/test_gravatar.py
index 7f8364518..8c3daa154 100644
--- a/Allura/allura/tests/functional/test_gravatar.py
+++ b/Allura/allura/tests/functional/test_gravatar.py
@@ -15,7 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-from six.moves.urllib.parse import urlparse, parse_qs
+from urllib.parse import urlparse, parse_qs
import tg
from mock import patch
diff --git a/Allura/allura/tests/functional/test_newforge.py
b/Allura/allura/tests/functional/test_newforge.py
index 9b8fbc01a..92b4cfe01 100644
--- a/Allura/allura/tests/functional/test_newforge.py
+++ b/Allura/allura/tests/functional/test_newforge.py
@@ -16,7 +16,7 @@
# under the License.
-from six.moves.urllib.parse import quote
+from urllib.parse import quote
from allura.tests import TestController
from allura.tests import decorators as td
diff --git a/Allura/allura/tests/test_helpers.py
b/Allura/allura/tests/test_helpers.py
index 8b93283b1..9db093a81 100644
--- a/Allura/allura/tests/test_helpers.py
+++ b/Allura/allura/tests/test_helpers.py
@@ -485,7 +485,7 @@ class TestUrlOpen(TestCase):
@patch('six.moves.urllib.request.urlopen')
def test_handled_http_error(self, urlopen):
- from six.moves.urllib.error import HTTPError
+ from urllib.error import HTTPError
def side_effect(url, timeout=None):
raise HTTPError('url', 408, 'timeout', None, io.BytesIO())
@@ -496,7 +496,7 @@ class TestUrlOpen(TestCase):
@patch('six.moves.urllib.request.urlopen')
def test_unhandled_http_error(self, urlopen):
- from six.moves.urllib.error import HTTPError
+ from urllib.error import HTTPError
def side_effect(url, timeout=None):
raise HTTPError('url', 404, 'timeout', None, io.BytesIO())
diff --git a/Allura/allura/tests/test_mail_util.py
b/Allura/allura/tests/test_mail_util.py
index b0454ac12..76fd42965 100644
--- a/Allura/allura/tests/test_mail_util.py
+++ b/Allura/allura/tests/test_mail_util.py
@@ -16,8 +16,8 @@
# under the License.
import unittest
-from six.moves.email_mime_multipart import MIMEMultipart
-from six.moves.email_mime_text import MIMEText
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
import mock
import pytest
diff --git a/Allura/ldap-setup.py b/Allura/ldap-setup.py
index 8b80b238b..baf5432ac 100644
--- a/Allura/ldap-setup.py
+++ b/Allura/ldap-setup.py
@@ -23,7 +23,7 @@ import string
import logging
from contextlib import contextmanager
from tempfile import mkstemp
-from six.moves.configparser import ConfigParser, NoOptionError
+from configparser import ConfigParser, NoOptionError
logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger('ldap-setup')
diff --git a/AlluraTest/alluratest/test_syntax.py
b/AlluraTest/alluratest/test_syntax.py
index 39eef5302..c4feb0b9e 100644
--- a/AlluraTest/alluratest/test_syntax.py
+++ b/AlluraTest/alluratest/test_syntax.py
@@ -20,7 +20,7 @@ from subprocess import Popen, PIPE
import sys
from unittest import SkipTest
-from six.moves import zip_longest
+from itertools import zip_longest
toplevel_dir = os.path.abspath(os.path.dirname(__file__) + "/../..")
BASE_PATH = (toplevel_dir,) #freeze main path
diff --git a/ForgeActivity/forgeactivity/main.py
b/ForgeActivity/forgeactivity/main.py
index ec2ca318c..5d85145da 100644
--- a/ForgeActivity/forgeactivity/main.py
+++ b/ForgeActivity/forgeactivity/main.py
@@ -149,7 +149,7 @@ class ForgeActivityController(BaseController):
else:
# fix gravatar urls with old default avatar urls in them
t.actor.activity_extras.icon_url = re.sub(r'([&?])d=[^&]*',
-
r'\1d={}'.format(default_avatar),
+
fr'\1d={default_avatar}',
t.actor.activity_extras.icon_url)
if t.actor.activity_url:
t.actor.activity_url = f'{t.actor.activity_url}profile/'
diff --git a/ForgeChat/forgechat/command.py b/ForgeChat/forgechat/command.py
index e3475b063..39999c75e 100644
--- a/ForgeChat/forgechat/command.py
+++ b/ForgeChat/forgechat/command.py
@@ -23,7 +23,7 @@ import socket
import asyncore
import asynchat
import random
-from six.moves.urllib.parse import urljoin
+from urllib.parse import urljoin
from datetime import datetime, timedelta
import tg
diff --git a/ForgeDiscussion/forgediscussion/controllers/root.py
b/ForgeDiscussion/forgediscussion/controllers/root.py
index d1a9ac9cb..212245f79 100644
--- a/ForgeDiscussion/forgediscussion/controllers/root.py
+++ b/ForgeDiscussion/forgediscussion/controllers/root.py
@@ -19,7 +19,7 @@ import json
import logging
import six
-from six.moves.urllib.parse import unquote
+from urllib.parse import unquote
from datetime import date, datetime, timedelta, time
import calendar
from collections import OrderedDict
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
index 7c2fb9913..18e2a3f93 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py
@@ -19,9 +19,9 @@ import mock
import pytest
import random
import logging
-from six.moves.email_mime_text import MIMEText
-from six.moves.email_mime_image import MIMEImage
-from six.moves.email_mime_multipart import MIMEMultipart
+from email.mime.text import MIMEText
+from email.mime.image import MIMEImage
+from email.mime.multipart import MIMEMultipart
import pkg_resources
import pymongo
diff --git a/ForgeFiles/forgefiles/files_main.py
b/ForgeFiles/forgefiles/files_main.py
index 12c0ac652..98517a6ed 100755
--- a/ForgeFiles/forgefiles/files_main.py
+++ b/ForgeFiles/forgefiles/files_main.py
@@ -18,7 +18,7 @@
'''This is the main controller module for the Files Plugin.'''
import logging
-from six.moves.urllib.parse import unquote
+from urllib.parse import unquote
from tg import config, redirect, expose, flash
from tg.decorators import with_trailing_slash, without_trailing_slash
diff --git a/ForgeFiles/forgefiles/model/files.py
b/ForgeFiles/forgefiles/model/files.py
index e2de35082..43d0af0af 100755
--- a/ForgeFiles/forgefiles/model/files.py
+++ b/ForgeFiles/forgefiles/model/files.py
@@ -20,7 +20,7 @@ Upload, UploadFolder & UploadFile are the collections'''
from datetime import datetime
-from six.moves.urllib.parse import quote
+from urllib.parse import quote
import re
import typing
diff --git a/ForgeGit/forgegit/model/git_repo.py
b/ForgeGit/forgegit/model/git_repo.py
index 4979a7dc3..37758f5d6 100644
--- a/ForgeGit/forgegit/model/git_repo.py
+++ b/ForgeGit/forgegit/model/git_repo.py
@@ -78,7 +78,7 @@ class Repository(M.Repository):
class __mongometa__:
name = 'git-repository'
- query: 'Query[Repository]'
+ query: Query[Repository]
@LazyProperty
def _impl(self):
diff --git a/ForgeImporters/forgeimporters/base.py
b/ForgeImporters/forgeimporters/base.py
index 8119d7f35..f21539c29 100644
--- a/ForgeImporters/forgeimporters/base.py
+++ b/ForgeImporters/forgeimporters/base.py
@@ -25,8 +25,8 @@ import six.moves.urllib.parse
import six.moves.urllib.error
from collections import defaultdict
import traceback
-from six.moves.urllib.parse import urlparse
-from six.moves.urllib.parse import unquote
+from urllib.parse import urlparse
+from urllib.parse import unquote
from datetime import datetime
import six
diff --git a/ForgeImporters/forgeimporters/github/tracker.py
b/ForgeImporters/forgeimporters/github/tracker.py
index f277a424e..334843542 100644
--- a/ForgeImporters/forgeimporters/github/tracker.py
+++ b/ForgeImporters/forgeimporters/github/tracker.py
@@ -18,7 +18,7 @@
import re
import logging
from datetime import datetime
-from six.moves.urllib.error import HTTPError
+from urllib.error import HTTPError
import six
from io import BytesIO
diff --git a/ForgeImporters/forgeimporters/tests/github/test_tracker.py
b/ForgeImporters/forgeimporters/tests/github/test_tracker.py
index 15c575c75..faf378381 100644
--- a/ForgeImporters/forgeimporters/tests/github/test_tracker.py
+++ b/ForgeImporters/forgeimporters/tests/github/test_tracker.py
@@ -18,7 +18,7 @@
from datetime import datetime
from operator import itemgetter
from unittest import TestCase
-from six.moves.urllib.error import HTTPError
+from urllib.error import HTTPError
import mock
from ...github import tracker
diff --git a/ForgeTracker/forgetracker/tracker_main.py
b/ForgeTracker/forgetracker/tracker_main.py
index 1a93e9166..d2dcc20cf 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -18,7 +18,7 @@
import logging
import re
from datetime import datetime, timedelta
-from six.moves.urllib.parse import urlencode, unquote
+from urllib.parse import urlencode, unquote
from webob import exc
import json
import os
diff --git a/ForgeWiki/forgewiki/wiki_main.py b/ForgeWiki/forgewiki/wiki_main.py
index e7d44c749..1414d2235 100644
--- a/ForgeWiki/forgewiki/wiki_main.py
+++ b/ForgeWiki/forgewiki/wiki_main.py
@@ -21,7 +21,7 @@ import os
from pprint import pformat
import six
-from six.moves.urllib.parse import unquote, urlencode
+from urllib.parse import unquote, urlencode
# Non-stdlib imports
from tg import expose, validate, redirect, flash, jsonify
@@ -411,7 +411,7 @@ class RootController(BaseController, DispatchIndex,
FeedController):
self._discuss = AppDiscussionController()
def catch_all(self, *args, **kw):
- url = '/{}/?{}'.format(request.controller_url, urlencode(kw))
+ url = f'/{request.controller_url}/?{urlencode(kw)}'
redirect(h.urlquote(h.really_unicode(url)))
def _check_security(self):
diff --git a/scripts/teamforge-import.py b/scripts/teamforge-import.py
index ff72c8398..939ae1e7f 100644
--- a/scripts/teamforge-import.py
+++ b/scripts/teamforge-import.py
@@ -24,13 +24,13 @@ import os
from time import mktime
import time
import json
-from six.moves.urllib.parse import urlparse
+from urllib.parse import urlparse
import six.moves.urllib.request
import six.moves.urllib.parse
import six.moves.urllib.error
-from six.moves.http_cookiejar import CookieJar
+from http.cookiejar import CookieJar
from datetime import datetime
-from six.moves.configparser import ConfigParser
+from configparser import ConfigParser
import random
import string