mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 20:44:04 +00:00
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:
committed by
Tim Abbott
parent
b666aef2d3
commit
365fe0b3d5
@@ -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']
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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__)))
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
#
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user