python: Sort imports with isort.

Fixes #2665.

Regenerated by tabbott with `lint --fix` after a rebase and change in
parameters.

Note from tabbott: In a few cases, this converts technical debt in the
form of unsorted imports into different technical debt in the form of
our largest files having very long, ugly import sequences at the
start.  I expect this change will increase pressure for us to split
those files, which isn't a bad thing.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2020-06-10 15:54:34 -07:00
committed by Tim Abbott
parent b666aef2d3
commit 365fe0b3d5
528 changed files with 4801 additions and 3806 deletions

View File

@@ -15,67 +15,81 @@
import binascii
import copy
import logging
from abc import ABC, abstractmethod
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Type, TypeVar, Union, cast
import jwt
import magic
import ujson
from abc import ABC, abstractmethod
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Type, TypeVar, Union, \
cast
from typing_extensions import TypedDict
from zxcvbn import zxcvbn
from django_auth_ldap.backend import LDAPBackend, LDAPReverseEmailSearch, \
_LDAPUser, ldap_error
from decorator import decorator
from django.conf import settings
from django.contrib.auth import authenticate, get_backends
from django.contrib.auth.backends import RemoteUserBackend
from django.conf import settings
from django.core.exceptions import ValidationError
from django.core.validators import validate_email
from django.dispatch import receiver, Signal
from django.http import HttpResponse, HttpResponseRedirect, HttpRequest
from django.dispatch import Signal, receiver
from django.http import HttpRequest, HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from django.utils.translation import ugettext as _
from django_auth_ldap.backend import LDAPBackend, LDAPReverseEmailSearch, _LDAPUser, ldap_error
from jwt.algorithms import RSAAlgorithm
from jwt.exceptions import PyJWTError
from lxml.etree import XMLSyntaxError
from requests import HTTPError
from onelogin.saml2.errors import OneLogin_Saml2_Error
from onelogin.saml2.response import OneLogin_Saml2_Response
from social_core.backends.github import GithubOAuth2, GithubOrganizationOAuth2, \
GithubTeamOAuth2
from social_core.backends.azuread import AzureADOAuth2
from social_core.backends.gitlab import GitLabOAuth2
from social_core.backends.base import BaseAuth
from social_core.backends.google import GoogleOAuth2
from requests import HTTPError
from social_core.backends.apple import AppleIdAuth
from social_core.backends.azuread import AzureADOAuth2
from social_core.backends.base import BaseAuth
from social_core.backends.github import GithubOAuth2, GithubOrganizationOAuth2, GithubTeamOAuth2
from social_core.backends.gitlab import GitLabOAuth2
from social_core.backends.google import GoogleOAuth2
from social_core.backends.saml import SAMLAuth
from social_core.exceptions import (
AuthFailed,
AuthMissingParameter,
AuthStateForbidden,
SocialAuthBaseException,
)
from social_core.pipeline.partial import partial
from social_core.exceptions import AuthFailed, SocialAuthBaseException, \
AuthMissingParameter, AuthStateForbidden
from typing_extensions import TypedDict
from zxcvbn import zxcvbn
from zerver.decorator import client_is_exempt_from_rate_limiting
from zerver.lib.actions import do_create_user, do_reactivate_user, do_deactivate_user, \
do_update_user_custom_profile_data_if_changed
from zerver.lib.avatar import is_avatar_new, avatar_url
from zerver.lib.actions import (
do_create_user,
do_deactivate_user,
do_reactivate_user,
do_update_user_custom_profile_data_if_changed,
)
from zerver.lib.avatar import avatar_url, is_avatar_new
from zerver.lib.avatar_hash import user_avatar_content_hash
from zerver.lib.create_user import get_role_for_new_user
from zerver.lib.dev_ldap_directory import init_fakeldap
from zerver.lib.email_validation import email_allowed_for_realm, \
validate_email_not_already_in_realm
from zerver.lib.email_validation import email_allowed_for_realm, validate_email_not_already_in_realm
from zerver.lib.mobile_auth_otp import is_valid_otp
from zerver.lib.rate_limiter import RateLimitedObject
from zerver.lib.redis_utils import get_dict_from_redis, get_redis_client, put_dict_in_redis
from zerver.lib.request import JsonableError
from zerver.lib.users import check_full_name, validate_user_custom_profile_field
from zerver.lib.redis_utils import get_redis_client, get_dict_from_redis, put_dict_in_redis
from zerver.lib.subdomains import get_subdomain
from zerver.models import CustomProfileField, DisposableEmailError, DomainNotAllowedForRealmError, \
EmailContainsPlusError, PreregistrationUser, UserProfile, Realm, custom_profile_fields_for_realm, \
get_user_profile_by_id, remote_user_to_email, \
email_to_username, get_realm, get_user_by_delivery_email, supported_auth_backends
from zerver.lib.users import check_full_name, validate_user_custom_profile_field
from zerver.models import (
CustomProfileField,
DisposableEmailError,
DomainNotAllowedForRealmError,
EmailContainsPlusError,
PreregistrationUser,
Realm,
UserProfile,
custom_profile_fields_for_realm,
email_to_username,
get_realm,
get_user_by_delivery_email,
get_user_profile_by_id,
remote_user_to_email,
supported_auth_backends,
)
redis_client = get_redis_client()
@@ -505,10 +519,11 @@ class ZulipLDAPAuthBackendBase(ZulipAuthMixin, LDAPBackend):
def sync_avatar_from_ldap(self, user: UserProfile, ldap_user: _LDAPUser) -> None:
if 'avatar' in settings.AUTH_LDAP_USER_ATTR_MAP:
# We do local imports here to avoid import loops
from zerver.lib.upload import upload_avatar_image
from zerver.lib.actions import do_change_avatar_fields
from io import BytesIO
from zerver.lib.actions import do_change_avatar_fields
from zerver.lib.upload import upload_avatar_image
avatar_attr_name = settings.AUTH_LDAP_USER_ATTR_MAP['avatar']
if avatar_attr_name not in ldap_user.attrs: # nocoverage
# If this specific user doesn't have e.g. a
@@ -1236,8 +1251,7 @@ def social_auth_finish(backend: Any,
comments below as well as login_or_register_remote_user in
`zerver/views/auth.py` for the details on how that dispatch works.
"""
from zerver.views.auth import (login_or_register_remote_user,
redirect_and_log_into_subdomain)
from zerver.views.auth import login_or_register_remote_user, redirect_and_log_into_subdomain
user_profile = kwargs['user_profile']
return_data = kwargs['return_data']

View File

@@ -1,21 +1,28 @@
from copy import deepcopy
import os
import time
import sys
import time
from copy import deepcopy
from typing import Any, Dict, List, Optional, Tuple, Union
from urllib.parse import urljoin
from zerver.lib.db import TimeTrackingConnection
import zerver.lib.logging_util
from zerver.lib.db import TimeTrackingConnection
from .config import DEPLOY_ROOT, PRODUCTION, DEVELOPMENT, get_secret, get_config, get_from_file_if_exists
from .config import (
DEPLOY_ROOT,
DEVELOPMENT,
PRODUCTION,
get_config,
get_from_file_if_exists,
get_secret,
)
from .configured_settings import (
ADMINS,
ALLOWED_HOSTS,
AUTHENTICATION_BACKENDS,
AUTH_LDAP_BIND_DN,
AUTH_LDAP_CONNECTION_OPTIONS,
AUTH_LDAP_SERVER_URI,
AUTHENTICATION_BACKENDS,
CAMO_URI,
DEBUG,
DEBUG_ERROR_REPORTING,
@@ -156,6 +163,8 @@ ALLOWED_HOSTS += [EXTERNAL_HOST.split(":")[0],
ALLOWED_HOSTS += REALM_HOSTS.values()
from django.template.loaders import app_directories
class TwoFactorLoader(app_directories.Loader):
def get_dirs(self) -> List[str]:
dirs = super().get_dirs()

View File

@@ -1,6 +1,6 @@
import configparser
import os
from typing import Optional, overload
import configparser
DEPLOY_ROOT = os.path.realpath(os.path.dirname(os.path.dirname(__file__)))

View File

@@ -10,6 +10,7 @@ from .default_settings import * # noqa: F401,F403 isort: skip
# Import variables like secrets from the prod_settings file
# Import prod_settings after determining the deployment/machine type
from .config import PRODUCTION
if PRODUCTION:
from .prod_settings import * # noqa: F401,F403 isort: skip
else:

View File

@@ -1,10 +1,11 @@
from typing import Any, Dict, List, Optional, TYPE_CHECKING
from typing import TYPE_CHECKING, Any, Dict, List, Optional
if TYPE_CHECKING:
from django_auth_ldap.config import LDAPSearch
from typing_extensions import TypedDict
from .config import PRODUCTION, DEVELOPMENT, get_secret
from .config import DEVELOPMENT, PRODUCTION, get_secret
if PRODUCTION:
from .prod_settings import EXTERNAL_HOST, ZULIP_ADMINISTRATOR
else:

View File

@@ -113,6 +113,7 @@ FAKE_LDAP_MODE = None # type: Optional[str]
if FAKE_LDAP_MODE:
import ldap
from django_auth_ldap.config import LDAPSearch
# To understand these parameters, read the docs in
# prod_settings_template.py and on ReadTheDocs.
LDAP_APPEND_DOMAIN = None

View File

@@ -1,16 +1,18 @@
import os
from urllib.parse import urlsplit
from django.conf.urls import url
from django.conf import settings
from django.conf.urls import url
from django.conf.urls.static import static
from django.contrib.staticfiles.views import serve as staticfiles_serve
from django.http import HttpRequest, HttpResponse
from django.views.generic import TemplateView
import os
from django.views.static import serve
import zerver.views.development.registration
import zerver.views.auth
import zerver.views.development.email_log
import zerver.views.development.integrations
import zerver.views.development.registration
# These URLs are available only in the development environment

View File

@@ -1,17 +1,16 @@
import logging
from typing import List
import configparser
import logging
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from typing import List
from django.conf import settings
from django.core.mail.backends.base import BaseEmailBackend
from django.core.mail import EmailMultiAlternatives
from django.core.mail.backends.base import BaseEmailBackend
from django.template import loader
def get_forward_address() -> str:
config = configparser.ConfigParser()
config.read(settings.FORWARD_ADDRESS_CONFIG_FILE)

View File

@@ -2,7 +2,7 @@ from typing import Any
from django.conf import settings
from django.contrib.staticfiles.storage import staticfiles_storage
from django.template.defaultfilters import slugify, pluralize
from django.template.defaultfilters import pluralize, slugify
from django.urls import reverse
from django.utils import translation
from django.utils.timesince import timesince

View File

@@ -1,9 +1,10 @@
from django.urls import path
import zerver.views
import zerver.views.streams
import zerver.views.auth
import zerver.views.tutorial
import zerver.views.report
import zerver.views.streams
import zerver.views.tutorial
# Future endpoints should add to urls.py, which includes these legacy urls

View File

@@ -5,6 +5,7 @@ import ldap
from django_auth_ldap.config import LDAPSearch
from zerver.lib.db import TimeTrackingConnection
from .config import DEPLOY_ROOT, get_from_file_if_exists
from .settings import (
AUTHENTICATION_BACKENDS,

View File

@@ -1,4 +1,5 @@
import os
# test_settings.py works differently from
# dev_settings.py/prod_settings.py; it actually is directly referenced
# by the test suite as DJANGO_SETTINGS_MODULE and imports settings.py

View File

@@ -1,49 +1,51 @@
from django.conf import settings
from django.conf.urls import url, include
from django.conf.urls.i18n import i18n_patterns
from django.views.generic import TemplateView, RedirectView
from django.utils.module_loading import import_string
import os
from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.i18n import i18n_patterns
from django.contrib.auth.views import (
LoginView,
PasswordResetCompleteView,
PasswordResetConfirmView,
PasswordResetDoneView,
)
from django.utils.module_loading import import_string
from django.views.generic import RedirectView, TemplateView
import zerver.forms
from zproject import dev_urls
from zproject.legacy_urls import legacy_urls
from zerver.views.documentation import IntegrationView, MarkdownDirectoryView
from zerver.lib.integrations import WEBHOOK_INTEGRATIONS
from django.contrib.auth.views import (LoginView, PasswordResetDoneView,
PasswordResetConfirmView, PasswordResetCompleteView)
import zerver.tornado.views
import zerver.views
import zerver.views.auth
import zerver.views.archive
import zerver.views.auth
import zerver.views.camo
import zerver.views.compatibility
import zerver.views.home
import zerver.views.email_mirror
import zerver.views.registration
import zerver.views.portico
import zerver.views.zephyr
import zerver.views.users
import zerver.views.unsubscribe
import zerver.views.digest
import zerver.views.documentation
import zerver.views.email_mirror
import zerver.views.home
import zerver.views.messages
import zerver.views.muting
import zerver.views.portico
import zerver.views.realm
import zerver.views.realm_export
import zerver.views.registration
import zerver.views.streams
import zerver.views.unsubscribe
import zerver.views.upload
import zerver.views.user_groups
import zerver.views.user_settings
import zerver.views.muting
import zerver.views.streams
import zerver.views.realm
import zerver.views.digest
import zerver.views.messages
import zerver.views.realm_export
import zerver.views.upload
import zerver.views.users
import zerver.views.video_calls
import zerver.views.zephyr
from zerver.lib.integrations import WEBHOOK_INTEGRATIONS
from zerver.lib.rest import rest_dispatch
from zerver.views.documentation import IntegrationView, MarkdownDirectoryView
from zproject import dev_urls
from zproject.legacy_urls import legacy_urls
if settings.TWO_FACTOR_AUTHENTICATION_ENABLED:
from two_factor.urls import urlpatterns as tf_urls
from two_factor.gateways.twilio.urls import urlpatterns as tf_twilio_urls
from two_factor.urls import urlpatterns as tf_urls
# NB: There are several other pieces of code which route requests by URL:
#

View File

@@ -25,6 +25,7 @@ setup_path()
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "zproject.settings")
import django
try:
django.setup()
except Exception as e:
@@ -45,10 +46,12 @@ except Exception as e:
# need to import zerver.models first before the middleware tries to import it.
import zerver.models
zerver.models
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()