mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Bumped minimum isort version to 5.1.0.
Fixed inner imports per isort 5. isort 5.0.0 to 5.1.0 was unstable.
This commit is contained in:
parent
1173db4a16
commit
e74b3d724e
@ -128,6 +128,7 @@ class Apps:
|
|||||||
"""Raise an exception if all apps haven't been imported yet."""
|
"""Raise an exception if all apps haven't been imported yet."""
|
||||||
if not self.apps_ready:
|
if not self.apps_ready:
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
# If "not ready" is due to unconfigured settings, accessing
|
# If "not ready" is due to unconfigured settings, accessing
|
||||||
# INSTALLED_APPS raises a more helpful ImproperlyConfigured
|
# INSTALLED_APPS raises a more helpful ImproperlyConfigured
|
||||||
# exception.
|
# exception.
|
||||||
|
@ -814,8 +814,7 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
|||||||
2. ('field', SomeFieldListFilter) - a field-based list filter class
|
2. ('field', SomeFieldListFilter) - a field-based list filter class
|
||||||
3. SomeListFilter - a non-field list filter class
|
3. SomeListFilter - a non-field list filter class
|
||||||
"""
|
"""
|
||||||
|
from django.contrib.admin import FieldListFilter, ListFilter
|
||||||
from django.contrib.admin import ListFilter, FieldListFilter
|
|
||||||
|
|
||||||
if callable(item) and not isinstance(item, models.Field):
|
if callable(item) and not isinstance(item, models.Field):
|
||||||
# If item is option 3, it should be a ListFilter...
|
# If item is option 3, it should be a ListFilter...
|
||||||
|
@ -10,7 +10,7 @@ def register(*models, site=None):
|
|||||||
The `site` kwarg is an admin site to use instead of the default admin site.
|
The `site` kwarg is an admin site to use instead of the default admin site.
|
||||||
"""
|
"""
|
||||||
from django.contrib.admin import ModelAdmin
|
from django.contrib.admin import ModelAdmin
|
||||||
from django.contrib.admin.sites import site as default_site, AdminSite
|
from django.contrib.admin.sites import AdminSite, site as default_site
|
||||||
|
|
||||||
def _model_admin_wrapper(admin_class):
|
def _model_admin_wrapper(admin_class):
|
||||||
if not models:
|
if not models:
|
||||||
|
@ -808,7 +808,7 @@ class ModelAdmin(BaseModelAdmin):
|
|||||||
|
|
||||||
The default implementation creates an admin LogEntry object.
|
The default implementation creates an admin LogEntry object.
|
||||||
"""
|
"""
|
||||||
from django.contrib.admin.models import LogEntry, ADDITION
|
from django.contrib.admin.models import ADDITION, LogEntry
|
||||||
return LogEntry.objects.log_action(
|
return LogEntry.objects.log_action(
|
||||||
user_id=request.user.pk,
|
user_id=request.user.pk,
|
||||||
content_type_id=get_content_type_for_model(object).pk,
|
content_type_id=get_content_type_for_model(object).pk,
|
||||||
@ -824,7 +824,7 @@ class ModelAdmin(BaseModelAdmin):
|
|||||||
|
|
||||||
The default implementation creates an admin LogEntry object.
|
The default implementation creates an admin LogEntry object.
|
||||||
"""
|
"""
|
||||||
from django.contrib.admin.models import LogEntry, CHANGE
|
from django.contrib.admin.models import CHANGE, LogEntry
|
||||||
return LogEntry.objects.log_action(
|
return LogEntry.objects.log_action(
|
||||||
user_id=request.user.pk,
|
user_id=request.user.pk,
|
||||||
content_type_id=get_content_type_for_model(object).pk,
|
content_type_id=get_content_type_for_model(object).pk,
|
||||||
@ -841,7 +841,7 @@ class ModelAdmin(BaseModelAdmin):
|
|||||||
|
|
||||||
The default implementation creates an admin LogEntry object.
|
The default implementation creates an admin LogEntry object.
|
||||||
"""
|
"""
|
||||||
from django.contrib.admin.models import LogEntry, DELETION
|
from django.contrib.admin.models import DELETION, LogEntry
|
||||||
return LogEntry.objects.log_action(
|
return LogEntry.objects.log_action(
|
||||||
user_id=request.user.pk,
|
user_id=request.user.pk,
|
||||||
content_type_id=get_content_type_for_model(object).pk,
|
content_type_id=get_content_type_for_model(object).pk,
|
||||||
@ -1910,6 +1910,7 @@ class ModelAdmin(BaseModelAdmin):
|
|||||||
def history_view(self, request, object_id, extra_context=None):
|
def history_view(self, request, object_id, extra_context=None):
|
||||||
"The 'history' admin view for this model."
|
"The 'history' admin view for this model."
|
||||||
from django.contrib.admin.models import LogEntry
|
from django.contrib.admin.models import LogEntry
|
||||||
|
|
||||||
# First check if the user can see this history.
|
# First check if the user can see this history.
|
||||||
model = self.model
|
model = self.model
|
||||||
obj = self.get_object(request, unquote(object_id))
|
obj = self.get_object(request, unquote(object_id))
|
||||||
|
@ -240,11 +240,11 @@ class AdminSite:
|
|||||||
return update_wrapper(inner, view)
|
return update_wrapper(inner, view)
|
||||||
|
|
||||||
def get_urls(self):
|
def get_urls(self):
|
||||||
from django.urls import include, path, re_path
|
|
||||||
# Since this module gets imported in the application's root package,
|
# Since this module gets imported in the application's root package,
|
||||||
# it cannot import models from other applications at the module level,
|
# it cannot import models from other applications at the module level,
|
||||||
# and django.contrib.contenttypes.views imports ContentType.
|
# and django.contrib.contenttypes.views imports ContentType.
|
||||||
from django.contrib.contenttypes import views as contenttype_views
|
from django.contrib.contenttypes import views as contenttype_views
|
||||||
|
from django.urls import include, path, re_path
|
||||||
|
|
||||||
def wrap(view, cacheable=False):
|
def wrap(view, cacheable=False):
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
@ -385,11 +385,11 @@ class AdminSite:
|
|||||||
index_path = reverse('admin:index', current_app=self.name)
|
index_path = reverse('admin:index', current_app=self.name)
|
||||||
return HttpResponseRedirect(index_path)
|
return HttpResponseRedirect(index_path)
|
||||||
|
|
||||||
from django.contrib.auth.views import LoginView
|
|
||||||
# Since this module gets imported in the application's root package,
|
# Since this module gets imported in the application's root package,
|
||||||
# it cannot import models from other applications at the module level,
|
# it cannot import models from other applications at the module level,
|
||||||
# and django.contrib.admin.forms eventually imports User.
|
# and django.contrib.admin.forms eventually imports User.
|
||||||
from django.contrib.admin.forms import AdminAuthenticationForm
|
from django.contrib.admin.forms import AdminAuthenticationForm
|
||||||
|
from django.contrib.auth.views import LoginView
|
||||||
context = {
|
context = {
|
||||||
**self.each_context(request),
|
**self.each_context(request),
|
||||||
'title': _('Log in'),
|
'title': _('Log in'),
|
||||||
|
@ -186,11 +186,15 @@ class OracleOperations(BaseSpatialOperations, DatabaseOperations):
|
|||||||
|
|
||||||
# Routines for getting the OGC-compliant models.
|
# Routines for getting the OGC-compliant models.
|
||||||
def geometry_columns(self):
|
def geometry_columns(self):
|
||||||
from django.contrib.gis.db.backends.oracle.models import OracleGeometryColumns
|
from django.contrib.gis.db.backends.oracle.models import (
|
||||||
|
OracleGeometryColumns,
|
||||||
|
)
|
||||||
return OracleGeometryColumns
|
return OracleGeometryColumns
|
||||||
|
|
||||||
def spatial_ref_sys(self):
|
def spatial_ref_sys(self):
|
||||||
from django.contrib.gis.db.backends.oracle.models import OracleSpatialRefSys
|
from django.contrib.gis.db.backends.oracle.models import (
|
||||||
|
OracleSpatialRefSys,
|
||||||
|
)
|
||||||
return OracleSpatialRefSys
|
return OracleSpatialRefSys
|
||||||
|
|
||||||
def modify_insert_params(self, placeholder, params):
|
def modify_insert_params(self, placeholder, params):
|
||||||
|
@ -189,11 +189,15 @@ class SpatiaLiteOperations(BaseSpatialOperations, DatabaseOperations):
|
|||||||
|
|
||||||
# Routines for getting the OGC-compliant models.
|
# Routines for getting the OGC-compliant models.
|
||||||
def geometry_columns(self):
|
def geometry_columns(self):
|
||||||
from django.contrib.gis.db.backends.spatialite.models import SpatialiteGeometryColumns
|
from django.contrib.gis.db.backends.spatialite.models import (
|
||||||
|
SpatialiteGeometryColumns,
|
||||||
|
)
|
||||||
return SpatialiteGeometryColumns
|
return SpatialiteGeometryColumns
|
||||||
|
|
||||||
def spatial_ref_sys(self):
|
def spatial_ref_sys(self):
|
||||||
from django.contrib.gis.db.backends.spatialite.models import SpatialiteSpatialRefSys
|
from django.contrib.gis.db.backends.spatialite.models import (
|
||||||
|
SpatialiteSpatialRefSys,
|
||||||
|
)
|
||||||
return SpatialiteSpatialRefSys
|
return SpatialiteSpatialRefSys
|
||||||
|
|
||||||
def get_geometry_converter(self, expression):
|
def get_geometry_converter(self, expression):
|
||||||
|
@ -83,6 +83,7 @@ class SpatialiteSchemaEditor(DatabaseSchemaEditor):
|
|||||||
|
|
||||||
def delete_model(self, model, **kwargs):
|
def delete_model(self, model, **kwargs):
|
||||||
from django.contrib.gis.db.models import GeometryField
|
from django.contrib.gis.db.models import GeometryField
|
||||||
|
|
||||||
# Drop spatial metadata (dropping the table does not automatically remove them)
|
# Drop spatial metadata (dropping the table does not automatically remove them)
|
||||||
for field in model._meta.local_fields:
|
for field in model._meta.local_fields:
|
||||||
if isinstance(field, GeometryField):
|
if isinstance(field, GeometryField):
|
||||||
@ -113,6 +114,7 @@ class SpatialiteSchemaEditor(DatabaseSchemaEditor):
|
|||||||
|
|
||||||
def remove_field(self, model, field):
|
def remove_field(self, model, field):
|
||||||
from django.contrib.gis.db.models import GeometryField
|
from django.contrib.gis.db.models import GeometryField
|
||||||
|
|
||||||
# NOTE: If the field is a geometry field, the table is just recreated,
|
# NOTE: If the field is a geometry field, the table is just recreated,
|
||||||
# the parent's remove_field can't be used cause it will skip the
|
# the parent's remove_field can't be used cause it will skip the
|
||||||
# recreation if the field does not have a database type. Geometry fields
|
# recreation if the field does not have a database type. Geometry fields
|
||||||
@ -125,6 +127,7 @@ class SpatialiteSchemaEditor(DatabaseSchemaEditor):
|
|||||||
|
|
||||||
def alter_db_table(self, model, old_db_table, new_db_table, disable_constraints=True):
|
def alter_db_table(self, model, old_db_table, new_db_table, disable_constraints=True):
|
||||||
from django.contrib.gis.db.models import GeometryField
|
from django.contrib.gis.db.models import GeometryField
|
||||||
|
|
||||||
# Remove geometry-ness from temp table
|
# Remove geometry-ness from temp table
|
||||||
for field in model._meta.local_fields:
|
for field in model._meta.local_fields:
|
||||||
if isinstance(field, GeometryField):
|
if isinstance(field, GeometryField):
|
||||||
|
@ -37,12 +37,13 @@ class GEOSGeometryBase(GEOSBase):
|
|||||||
if cls is None:
|
if cls is None:
|
||||||
if GEOSGeometryBase._GEOS_CLASSES is None:
|
if GEOSGeometryBase._GEOS_CLASSES is None:
|
||||||
# Inner imports avoid import conflicts with GEOSGeometry.
|
# Inner imports avoid import conflicts with GEOSGeometry.
|
||||||
from .linestring import LineString, LinearRing
|
from .collections import (
|
||||||
|
GeometryCollection, MultiLineString, MultiPoint,
|
||||||
|
MultiPolygon,
|
||||||
|
)
|
||||||
|
from .linestring import LinearRing, LineString
|
||||||
from .point import Point
|
from .point import Point
|
||||||
from .polygon import Polygon
|
from .polygon import Polygon
|
||||||
from .collections import (
|
|
||||||
GeometryCollection, MultiPoint, MultiLineString, MultiPolygon,
|
|
||||||
)
|
|
||||||
GEOSGeometryBase._GEOS_CLASSES = {
|
GEOSGeometryBase._GEOS_CLASSES = {
|
||||||
0: Point,
|
0: Point,
|
||||||
1: LineString,
|
1: LineString,
|
||||||
|
@ -107,6 +107,7 @@ class Command(BaseCommand):
|
|||||||
# Returning the output of ogrinspect with the given arguments
|
# Returning the output of ogrinspect with the given arguments
|
||||||
# and options.
|
# and options.
|
||||||
from django.contrib.gis.utils.ogrinspect import _ogrinspect, mapping
|
from django.contrib.gis.utils.ogrinspect import _ogrinspect, mapping
|
||||||
|
|
||||||
# Filter options to params accepted by `_ogrinspect`
|
# Filter options to params accepted by `_ogrinspect`
|
||||||
ogr_options = {k: v for k, v in options.items()
|
ogr_options = {k: v for k, v in options.items()
|
||||||
if k in get_func_args(_ogrinspect) and v is not None}
|
if k in get_func_args(_ogrinspect) and v is not None}
|
||||||
|
@ -9,6 +9,8 @@ from django.core.exceptions import ImproperlyConfigured
|
|||||||
try:
|
try:
|
||||||
# LayerMapping requires DJANGO_SETTINGS_MODULE to be set,
|
# LayerMapping requires DJANGO_SETTINGS_MODULE to be set,
|
||||||
# and ImproperlyConfigured is raised if that's not the case.
|
# and ImproperlyConfigured is raised if that's not the case.
|
||||||
from django.contrib.gis.utils.layermapping import LayerMapping, LayerMapError # NOQA
|
from django.contrib.gis.utils.layermapping import ( # NOQA
|
||||||
|
LayerMapError, LayerMapping,
|
||||||
|
)
|
||||||
except ImproperlyConfigured:
|
except ImproperlyConfigured:
|
||||||
pass
|
pass
|
||||||
|
@ -28,8 +28,10 @@ def _fd(f):
|
|||||||
|
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
import msvcrt
|
import msvcrt
|
||||||
from ctypes import (sizeof, c_ulong, c_void_p, c_int64,
|
from ctypes import (
|
||||||
Structure, Union, POINTER, windll, byref)
|
POINTER, Structure, Union, byref, c_int64, c_ulong, c_void_p, sizeof,
|
||||||
|
windll,
|
||||||
|
)
|
||||||
from ctypes.wintypes import BOOL, DWORD, HANDLE
|
from ctypes.wintypes import BOOL, DWORD, HANDLE
|
||||||
|
|
||||||
LOCK_SH = 0 # the default
|
LOCK_SH = 0 # the default
|
||||||
|
@ -39,7 +39,7 @@ class Command(BaseCommand):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def handle(self, **options):
|
def handle(self, **options):
|
||||||
from django.conf import settings, Settings, global_settings
|
from django.conf import Settings, global_settings, settings
|
||||||
|
|
||||||
# Because settings are imported lazily, we need to explicitly load them.
|
# Because settings are imported lazily, we need to explicitly load them.
|
||||||
if not settings.configured:
|
if not settings.configured:
|
||||||
|
@ -41,6 +41,7 @@ class Command(BaseCommand):
|
|||||||
|
|
||||||
def python(self, options):
|
def python(self, options):
|
||||||
import code
|
import code
|
||||||
|
|
||||||
# Set up a dictionary to serve as the environment for the shell, so
|
# Set up a dictionary to serve as the environment for the shell, so
|
||||||
# that tab completion works on objects that are imported at runtime.
|
# that tab completion works on objects that are imported at runtime.
|
||||||
imported_objects = {}
|
imported_objects = {}
|
||||||
|
@ -18,10 +18,9 @@ from django.db import models
|
|||||||
|
|
||||||
# Use the C (faster) implementation if possible
|
# Use the C (faster) implementation if possible
|
||||||
try:
|
try:
|
||||||
from yaml import CSafeLoader as SafeLoader
|
from yaml import CSafeDumper as SafeDumper, CSafeLoader as SafeLoader
|
||||||
from yaml import CSafeDumper as SafeDumper
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from yaml import SafeLoader, SafeDumper
|
from yaml import SafeDumper, SafeLoader
|
||||||
|
|
||||||
|
|
||||||
class DjangoSafeDumper(SafeDumper):
|
class DjangoSafeDumper(SafeDumper):
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import _thread
|
||||||
import copy
|
import copy
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
@ -5,7 +6,6 @@ import warnings
|
|||||||
from collections import deque
|
from collections import deque
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
|
||||||
import _thread
|
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
@ -64,7 +64,9 @@ class RelatedIn(In):
|
|||||||
# For multicolumn lookups we need to build a multicolumn where clause.
|
# For multicolumn lookups we need to build a multicolumn where clause.
|
||||||
# This clause is either a SubqueryConstraint (for values that need to be compiled to
|
# This clause is either a SubqueryConstraint (for values that need to be compiled to
|
||||||
# SQL) or an OR-combined list of (col1 = val1 AND col2 = val2 AND ...) clauses.
|
# SQL) or an OR-combined list of (col1 = val1 AND col2 = val2 AND ...) clauses.
|
||||||
from django.db.models.sql.where import WhereNode, SubqueryConstraint, AND, OR
|
from django.db.models.sql.where import (
|
||||||
|
AND, OR, SubqueryConstraint, WhereNode,
|
||||||
|
)
|
||||||
|
|
||||||
root_constraint = WhereNode(connector=OR)
|
root_constraint = WhereNode(connector=OR)
|
||||||
if self.rhs_is_direct_value():
|
if self.rhs_is_direct_value():
|
||||||
@ -120,7 +122,7 @@ class RelatedLookupMixin:
|
|||||||
if isinstance(self.lhs, MultiColSource):
|
if isinstance(self.lhs, MultiColSource):
|
||||||
assert self.rhs_is_direct_value()
|
assert self.rhs_is_direct_value()
|
||||||
self.rhs = get_normalized_value(self.rhs, self.lhs)
|
self.rhs = get_normalized_value(self.rhs, self.lhs)
|
||||||
from django.db.models.sql.where import WhereNode, AND
|
from django.db.models.sql.where import AND, WhereNode
|
||||||
root_constraint = WhereNode()
|
root_constraint = WhereNode()
|
||||||
for target, source, val in zip(self.lhs.targets, self.lhs.sources, self.rhs):
|
for target, source, val in zip(self.lhs.targets, self.lhs.sources, self.rhs):
|
||||||
lookup_class = target.get_lookup(self.lookup_name)
|
lookup_class = target.get_lookup(self.lookup_name)
|
||||||
|
@ -32,7 +32,9 @@ class FixDurationInputMixin:
|
|||||||
if self.output_field.get_internal_type() == 'DurationField':
|
if self.output_field.get_internal_type() == 'DurationField':
|
||||||
expression = self.get_source_expressions()[0]
|
expression = self.get_source_expressions()[0]
|
||||||
options = self._get_repr_options()
|
options = self._get_repr_options()
|
||||||
from django.db.backends.oracle.functions import IntervalToSeconds, SecondsToInterval
|
from django.db.backends.oracle.functions import (
|
||||||
|
IntervalToSeconds, SecondsToInterval,
|
||||||
|
)
|
||||||
return compiler.compile(
|
return compiler.compile(
|
||||||
SecondsToInterval(self.__class__(IntervalToSeconds(expression), **options))
|
SecondsToInterval(self.__class__(IntervalToSeconds(expression), **options))
|
||||||
)
|
)
|
||||||
|
@ -29,7 +29,9 @@ class Lookup:
|
|||||||
if bilateral_transforms:
|
if bilateral_transforms:
|
||||||
# Warn the user as soon as possible if they are trying to apply
|
# Warn the user as soon as possible if they are trying to apply
|
||||||
# a bilateral transformation on a nested QuerySet: that won't work.
|
# a bilateral transformation on a nested QuerySet: that won't work.
|
||||||
from django.db.models.sql.query import Query # avoid circular import
|
from django.db.models.sql.query import ( # avoid circular import
|
||||||
|
Query,
|
||||||
|
)
|
||||||
if isinstance(rhs, Query):
|
if isinstance(rhs, Query):
|
||||||
raise NotImplementedError("Bilateral transformations on nested querysets are not implemented.")
|
raise NotImplementedError("Bilateral transformations on nested querysets are not implemented.")
|
||||||
self.bilateral_transforms = bilateral_transforms
|
self.bilateral_transforms = bilateral_transforms
|
||||||
|
@ -815,7 +815,7 @@ class BaseModelFormSet(BaseFormSet):
|
|||||||
|
|
||||||
def add_fields(self, form, index):
|
def add_fields(self, form, index):
|
||||||
"""Add a hidden field for the object's primary key."""
|
"""Add a hidden field for the object's primary key."""
|
||||||
from django.db.models import AutoField, OneToOneField, ForeignKey
|
from django.db.models import AutoField, ForeignKey, OneToOneField
|
||||||
self._pk_field = pk = self.model._meta.pk
|
self._pk_field = pk = self.model._meta.pk
|
||||||
# If a pk isn't editable, then it won't be on the form, so we need to
|
# If a pk isn't editable, then it won't be on the form, so we need to
|
||||||
# add it here so we can tell which object is which when we get the
|
# add it here so we can tell which object is which when we get the
|
||||||
|
@ -40,6 +40,7 @@ def debug(request):
|
|||||||
if settings.DEBUG and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:
|
if settings.DEBUG and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:
|
||||||
context_extras['debug'] = True
|
context_extras['debug'] = True
|
||||||
from django.db import connections
|
from django.db import connections
|
||||||
|
|
||||||
# Return a lazy reference that computes connection.queries on access,
|
# Return a lazy reference that computes connection.queries on access,
|
||||||
# to ensure it contains queries triggered after this function runs.
|
# to ensure it contains queries triggered after this function runs.
|
||||||
context_extras['sql_queries'] = lazy(
|
context_extras['sql_queries'] = lazy(
|
||||||
|
@ -428,7 +428,7 @@ class URLNode(Node):
|
|||||||
self.asvar = asvar
|
self.asvar = asvar
|
||||||
|
|
||||||
def render(self, context):
|
def render(self, context):
|
||||||
from django.urls import reverse, NoReverseMatch
|
from django.urls import NoReverseMatch, reverse
|
||||||
args = [arg.resolve(context) for arg in self.args]
|
args = [arg.resolve(context) for arg in self.args]
|
||||||
kwargs = {k: v.resolve(context) for k, v in self.kwargs.items()}
|
kwargs = {k: v.resolve(context) for k, v in self.kwargs.items()}
|
||||||
view_name = self.view_name.resolve(context)
|
view_name = self.view_name.resolve(context)
|
||||||
|
@ -611,6 +611,7 @@ class ClientMixin:
|
|||||||
|
|
||||||
def _login(self, user, backend=None):
|
def _login(self, user, backend=None):
|
||||||
from django.contrib.auth import login
|
from django.contrib.auth import login
|
||||||
|
|
||||||
# Create a fake request to store login details.
|
# Create a fake request to store login details.
|
||||||
request = HttpRequest()
|
request = HttpRequest()
|
||||||
if self.session:
|
if self.session:
|
||||||
|
@ -70,7 +70,9 @@ class SeleniumTestCaseBase(type(LiveServerTestCase)):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_capability(cls, browser):
|
def get_capability(cls, browser):
|
||||||
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
|
from selenium.webdriver.common.desired_capabilities import (
|
||||||
|
DesiredCapabilities,
|
||||||
|
)
|
||||||
return getattr(DesiredCapabilities, browser.upper())
|
return getattr(DesiredCapabilities, browser.upper())
|
||||||
|
|
||||||
def create_options(self):
|
def create_options(self):
|
||||||
|
@ -175,7 +175,9 @@ def static_finders_changed(**kwargs):
|
|||||||
@receiver(setting_changed)
|
@receiver(setting_changed)
|
||||||
def auth_password_validators_changed(**kwargs):
|
def auth_password_validators_changed(**kwargs):
|
||||||
if kwargs['setting'] == 'AUTH_PASSWORD_VALIDATORS':
|
if kwargs['setting'] == 'AUTH_PASSWORD_VALIDATORS':
|
||||||
from django.contrib.auth.password_validation import get_default_password_validators
|
from django.contrib.auth.password_validation import (
|
||||||
|
get_default_password_validators,
|
||||||
|
)
|
||||||
get_default_password_validators.cache_clear()
|
get_default_password_validators.cache_clear()
|
||||||
|
|
||||||
|
|
||||||
|
@ -300,6 +300,7 @@ class BaseReloader:
|
|||||||
logger.debug('Waiting for apps ready_event.')
|
logger.debug('Waiting for apps ready_event.')
|
||||||
self.wait_for_apps_ready(apps, django_main_thread)
|
self.wait_for_apps_ready(apps, django_main_thread)
|
||||||
from django.urls import get_resolver
|
from django.urls import get_resolver
|
||||||
|
|
||||||
# Prevent a race condition where URL modules aren't loaded when the
|
# Prevent a race condition where URL modules aren't loaded when the
|
||||||
# reloader starts by accessing the urlconf_module property.
|
# reloader starts by accessing the urlconf_module property.
|
||||||
try:
|
try:
|
||||||
|
@ -56,7 +56,9 @@ class Trans:
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
if settings.USE_I18N:
|
if settings.USE_I18N:
|
||||||
from django.utils.translation import trans_real as trans
|
from django.utils.translation import trans_real as trans
|
||||||
from django.utils.translation.reloader import watch_for_translation_changes, translation_file_changed
|
from django.utils.translation.reloader import (
|
||||||
|
translation_file_changed, watch_for_translation_changes,
|
||||||
|
)
|
||||||
autoreload_started.connect(watch_for_translation_changes, dispatch_uid='translation_file_changed')
|
autoreload_started.connect(watch_for_translation_changes, dispatch_uid='translation_file_changed')
|
||||||
file_changed.connect(translation_file_changed, dispatch_uid='translation_file_changed')
|
file_changed.connect(translation_file_changed, dispatch_uid='translation_file_changed')
|
||||||
else:
|
else:
|
||||||
|
@ -30,6 +30,7 @@ def translation_file_changed(sender, file_path, **kwargs):
|
|||||||
"""Clear the internal translations cache if a .mo file is modified."""
|
"""Clear the internal translations cache if a .mo file is modified."""
|
||||||
if file_path.suffix == '.mo':
|
if file_path.suffix == '.mo':
|
||||||
import gettext
|
import gettext
|
||||||
|
|
||||||
from django.utils.translation import trans_real
|
from django.utils.translation import trans_real
|
||||||
gettext._translations = {}
|
gettext._translations = {}
|
||||||
trans_real._translations = {}
|
trans_real._translations = {}
|
||||||
|
@ -105,7 +105,7 @@ def csrf_failure(request, reason="", template_name=CSRF_FAILURE_TEMPLATE_NAME):
|
|||||||
"""
|
"""
|
||||||
Default view used when request fails CSRF protection
|
Default view used when request fails CSRF protection
|
||||||
"""
|
"""
|
||||||
from django.middleware.csrf import REASON_NO_REFERER, REASON_NO_CSRF_COOKIE
|
from django.middleware.csrf import REASON_NO_CSRF_COOKIE, REASON_NO_REFERER
|
||||||
c = {
|
c = {
|
||||||
'title': _("Forbidden"),
|
'title': _("Forbidden"),
|
||||||
'main': _("CSRF verification failed. Request aborted."),
|
'main': _("CSRF verification failed. Request aborted."),
|
||||||
|
@ -101,7 +101,7 @@ Imports
|
|||||||
|
|
||||||
.. console::
|
.. console::
|
||||||
|
|
||||||
$ python -m pip install isort
|
$ python -m pip install isort >= 5.1.0
|
||||||
$ isort -rc .
|
$ isort -rc .
|
||||||
|
|
||||||
This runs ``isort`` recursively from your current directory, modifying any
|
This runs ``isort`` recursively from your current directory, modifying any
|
||||||
|
@ -80,7 +80,7 @@ version of Python. A list of default environments can be seen as follows:
|
|||||||
py3
|
py3
|
||||||
flake8
|
flake8
|
||||||
docs
|
docs
|
||||||
isort
|
isort>=5.1.0
|
||||||
|
|
||||||
Testing other Python versions and database backends
|
Testing other Python versions and database backends
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
@ -26,6 +26,7 @@ def cxOracle_py3_bug(func):
|
|||||||
we mark them as expected failures until someone fixes them in #23843.
|
we mark them as expected failures until someone fixes them in #23843.
|
||||||
"""
|
"""
|
||||||
from unittest import expectedFailure
|
from unittest import expectedFailure
|
||||||
|
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
return expectedFailure(func) if connection.vendor == 'oracle' else func
|
return expectedFailure(func) if connection.vendor == 'oracle' else func
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ except ImportError:
|
|||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
from psycopg2 import errorcodes
|
from psycopg2 import errorcodes
|
||||||
|
|
||||||
from django.db.backends.postgresql.creation import DatabaseCreation
|
from django.db.backends.postgresql.creation import DatabaseCreation
|
||||||
|
|
||||||
|
|
||||||
|
@ -129,10 +129,10 @@ class Tests(TestCase):
|
|||||||
ISOLATION_LEVEL_READ_COMMITTED as read_committed,
|
ISOLATION_LEVEL_READ_COMMITTED as read_committed,
|
||||||
ISOLATION_LEVEL_SERIALIZABLE as serializable,
|
ISOLATION_LEVEL_SERIALIZABLE as serializable,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Since this is a django.test.TestCase, a transaction is in progress
|
# Since this is a django.test.TestCase, a transaction is in progress
|
||||||
# and the isolation level isn't reported as 0. This test assumes that
|
# and the isolation level isn't reported as 0. This test assumes that
|
||||||
# PostgreSQL is configured with the default isolation level.
|
# PostgreSQL is configured with the default isolation level.
|
||||||
|
|
||||||
# Check the level on the psycopg2 connection, not the Django wrapper.
|
# Check the level on the psycopg2 connection, not the Django wrapper.
|
||||||
default_level = read_committed if psycopg2.__version__ < '2.7' else None
|
default_level = read_committed if psycopg2.__version__ < '2.7' else None
|
||||||
self.assertEqual(connection.connection.isolation_level, default_level)
|
self.assertEqual(connection.connection.isolation_level, default_level)
|
||||||
|
@ -142,7 +142,7 @@ class Geo3DTest(Geo3DLoadingHelper, TestCase):
|
|||||||
Testing LayerMapping on 3D models.
|
Testing LayerMapping on 3D models.
|
||||||
"""
|
"""
|
||||||
# Import here as GDAL is required for those imports
|
# Import here as GDAL is required for those imports
|
||||||
from django.contrib.gis.utils import LayerMapping, LayerMapError
|
from django.contrib.gis.utils import LayerMapError, LayerMapping
|
||||||
|
|
||||||
point_mapping = {'point': 'POINT'}
|
point_mapping = {'point': 'POINT'}
|
||||||
mpoint_mapping = {'mpoint': 'MULTIPOINT'}
|
mpoint_mapping = {'mpoint': 'MULTIPOINT'}
|
||||||
|
@ -143,7 +143,9 @@ class RasterFieldTest(TransactionTestCase):
|
|||||||
unprojected coordinate systems. This test just checks that the lookup
|
unprojected coordinate systems. This test just checks that the lookup
|
||||||
can be called, but doesn't check if the result makes logical sense.
|
can be called, but doesn't check if the result makes logical sense.
|
||||||
"""
|
"""
|
||||||
from django.contrib.gis.db.backends.postgis.operations import PostGISOperations
|
from django.contrib.gis.db.backends.postgis.operations import (
|
||||||
|
PostGISOperations,
|
||||||
|
)
|
||||||
|
|
||||||
# Create test raster and geom.
|
# Create test raster and geom.
|
||||||
rast = GDALRaster(json.loads(JSON_RASTER))
|
rast = GDALRaster(json.loads(JSON_RASTER))
|
||||||
|
@ -4,7 +4,9 @@ from django.core.exceptions import ImproperlyConfigured
|
|||||||
from django.db import ProgrammingError
|
from django.db import ProgrammingError
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from django.contrib.gis.db.backends.postgis.operations import PostGISOperations
|
from django.contrib.gis.db.backends.postgis.operations import (
|
||||||
|
PostGISOperations,
|
||||||
|
)
|
||||||
HAS_POSTGRES = True
|
HAS_POSTGRES = True
|
||||||
except ImportError:
|
except ImportError:
|
||||||
HAS_POSTGRES = False
|
HAS_POSTGRES = False
|
||||||
|
@ -53,11 +53,17 @@ spatialite = _default_db == 'spatialite'
|
|||||||
gisfield_may_be_null = not mysql
|
gisfield_may_be_null = not mysql
|
||||||
|
|
||||||
if oracle and 'gis' in settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE']:
|
if oracle and 'gis' in settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE']:
|
||||||
from django.contrib.gis.db.backends.oracle.models import OracleSpatialRefSys as SpatialRefSys
|
from django.contrib.gis.db.backends.oracle.models import (
|
||||||
|
OracleSpatialRefSys as SpatialRefSys,
|
||||||
|
)
|
||||||
elif postgis:
|
elif postgis:
|
||||||
from django.contrib.gis.db.backends.postgis.models import PostGISSpatialRefSys as SpatialRefSys
|
from django.contrib.gis.db.backends.postgis.models import (
|
||||||
|
PostGISSpatialRefSys as SpatialRefSys,
|
||||||
|
)
|
||||||
elif spatialite:
|
elif spatialite:
|
||||||
from django.contrib.gis.db.backends.spatialite.models import SpatialiteSpatialRefSys as SpatialRefSys
|
from django.contrib.gis.db.backends.spatialite.models import (
|
||||||
|
SpatialiteSpatialRefSys as SpatialRefSys,
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
SpatialRefSys = None
|
SpatialRefSys = None
|
||||||
|
|
||||||
|
@ -15,10 +15,9 @@ except ImproperlyConfigured:
|
|||||||
|
|
||||||
if Image:
|
if Image:
|
||||||
from .models import (
|
from .models import (
|
||||||
Person, PersonWithHeight, PersonWithHeightAndWidth,
|
Person, PersonDimensionsFirst, PersonTwoImages, PersonWithHeight,
|
||||||
PersonDimensionsFirst, PersonTwoImages, TestImageFieldFile,
|
PersonWithHeightAndWidth, TestImageFieldFile, temp_storage_dir,
|
||||||
)
|
)
|
||||||
from .models import temp_storage_dir
|
|
||||||
else:
|
else:
|
||||||
# Pillow not available, create dummy classes (tests will be skipped anyway)
|
# Pillow not available, create dummy classes (tests will be skipped anyway)
|
||||||
class Person:
|
class Person:
|
||||||
|
@ -30,7 +30,7 @@ from .models import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
if test_images:
|
if test_images:
|
||||||
from .models import ImageFile, OptionalImageFile, NoExtensionImageFile
|
from .models import ImageFile, NoExtensionImageFile, OptionalImageFile
|
||||||
|
|
||||||
class ImageFileForm(forms.ModelForm):
|
class ImageFileForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -8,6 +8,7 @@ try:
|
|||||||
from psycopg2.extras import (
|
from psycopg2.extras import (
|
||||||
DateRange, DateTimeRange, DateTimeTZRange, NumericRange,
|
DateRange, DateTimeRange, DateTimeTZRange, NumericRange,
|
||||||
)
|
)
|
||||||
|
|
||||||
from django.contrib.postgres.fields import (
|
from django.contrib.postgres.fields import (
|
||||||
DateRangeField, DateTimeRangeField, IntegerRangeField,
|
DateRangeField, DateTimeRangeField, IntegerRangeField,
|
||||||
)
|
)
|
||||||
|
@ -25,14 +25,17 @@ from .models import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
from psycopg2.extras import NumericRange
|
||||||
|
|
||||||
from django.contrib.postgres.aggregates import ArrayAgg
|
from django.contrib.postgres.aggregates import ArrayAgg
|
||||||
from django.contrib.postgres.fields import ArrayField
|
from django.contrib.postgres.fields import ArrayField
|
||||||
from django.contrib.postgres.fields.array import IndexTransform, SliceTransform
|
from django.contrib.postgres.fields.array import (
|
||||||
|
IndexTransform, SliceTransform,
|
||||||
|
)
|
||||||
from django.contrib.postgres.forms import (
|
from django.contrib.postgres.forms import (
|
||||||
SimpleArrayField, SplitArrayField, SplitArrayWidget,
|
SimpleArrayField, SplitArrayField, SplitArrayWidget,
|
||||||
)
|
)
|
||||||
from django.db.backends.postgresql.base import PSYCOPG2_VERSION
|
from django.db.backends.postgresql.base import PSYCOPG2_VERSION
|
||||||
from psycopg2.extras import NumericRange
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ from .models import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from psycopg2.extras import NumericRange, DateRange
|
from psycopg2.extras import DateRange, NumericRange
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass # psycopg2 isn't installed.
|
pass # psycopg2 isn't installed.
|
||||||
|
|
||||||
|
@ -14,10 +14,12 @@ from . import PostgreSQLTestCase
|
|||||||
from .models import HotelReservation, RangesModel, Room, Scene
|
from .models import HotelReservation, RangesModel, Room, Scene
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from django.contrib.postgres.constraints import ExclusionConstraint
|
|
||||||
from django.contrib.postgres.fields import DateTimeRangeField, RangeBoundary, RangeOperators
|
|
||||||
|
|
||||||
from psycopg2.extras import DateRange, NumericRange
|
from psycopg2.extras import DateRange, NumericRange
|
||||||
|
|
||||||
|
from django.contrib.postgres.constraints import ExclusionConstraint
|
||||||
|
from django.contrib.postgres.fields import (
|
||||||
|
DateTimeRangeField, RangeBoundary, RangeOperators,
|
||||||
|
)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
try:
|
try:
|
||||||
from django.contrib.postgres.fields import JSONField
|
|
||||||
from django.contrib.postgres.fields.jsonb import KeyTransform, KeyTextTransform
|
|
||||||
from django.contrib.postgres import forms
|
from django.contrib.postgres import forms
|
||||||
|
from django.contrib.postgres.fields import JSONField
|
||||||
|
from django.contrib.postgres.fields.jsonb import (
|
||||||
|
KeyTextTransform, KeyTransform,
|
||||||
|
)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -11,11 +11,11 @@ from django.test.utils import CaptureQueriesContext
|
|||||||
from . import PostgreSQLTestCase
|
from . import PostgreSQLTestCase
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
from django.contrib.postgres.indexes import BrinIndex, BTreeIndex
|
||||||
from django.contrib.postgres.operations import (
|
from django.contrib.postgres.operations import (
|
||||||
AddIndexConcurrently, BloomExtension, CreateExtension,
|
AddIndexConcurrently, BloomExtension, CreateExtension,
|
||||||
RemoveIndexConcurrently,
|
RemoveIndexConcurrently,
|
||||||
)
|
)
|
||||||
from django.contrib.postgres.indexes import BrinIndex, BTreeIndex
|
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ from .models import (
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange
|
from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange
|
||||||
|
|
||||||
from django.contrib.postgres import fields as pg_fields, forms as pg_forms
|
from django.contrib.postgres import fields as pg_fields, forms as pg_forms
|
||||||
from django.contrib.postgres.validators import (
|
from django.contrib.postgres.validators import (
|
||||||
RangeMaxValueValidator, RangeMinValueValidator,
|
RangeMaxValueValidator, RangeMinValueValidator,
|
||||||
|
@ -4,7 +4,9 @@ from . import PostgreSQLTestCase
|
|||||||
from .models import CharFieldModel, TextFieldModel
|
from .models import CharFieldModel, TextFieldModel
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from django.contrib.postgres.search import TrigramDistance, TrigramSimilarity
|
from django.contrib.postgres.search import (
|
||||||
|
TrigramDistance, TrigramSimilarity,
|
||||||
|
)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
4
tox.ini
4
tox.ini
@ -9,7 +9,7 @@ envlist =
|
|||||||
py3
|
py3
|
||||||
flake8
|
flake8
|
||||||
docs
|
docs
|
||||||
isort
|
isort >= 5.1.0
|
||||||
|
|
||||||
# Add environment to use the default python3 installation
|
# Add environment to use the default python3 installation
|
||||||
[testenv:py3]
|
[testenv:py3]
|
||||||
@ -55,7 +55,7 @@ basepython = python3
|
|||||||
usedevelop = false
|
usedevelop = false
|
||||||
deps = isort
|
deps = isort
|
||||||
changedir = {toxinidir}
|
changedir = {toxinidir}
|
||||||
commands = isort --recursive --check-only --diff django tests scripts
|
commands = isort --check-only --diff django tests scripts
|
||||||
|
|
||||||
[testenv:javascript]
|
[testenv:javascript]
|
||||||
usedevelop = false
|
usedevelop = false
|
||||||
|
Loading…
Reference in New Issue
Block a user