Better linting config (#664)

* Better linting config

* Applies isort on django-stubs, only style changes

* Fixes black and isort compat
This commit is contained in:
Nikita Sobolev
2021-07-04 16:16:43 +03:00
committed by GitHub
parent 552f2ffc0c
commit d5e45db79b
288 changed files with 1158 additions and 1201 deletions

View File

@@ -4,7 +4,7 @@ default_language_version:
python: python3.9
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.3.0
rev: v4.0.1
hooks:
- id: check-yaml
- id: trailing-whitespace
@@ -12,20 +12,26 @@ repos:
- id: debug-statements
- id: check-merge-conflict
- repo: https://github.com/asottile/pyupgrade
rev: v2.7.3
rev: v2.20.0
hooks:
- id: pyupgrade
args: ["--py36-plus"]
- repo: https://github.com/pre-commit/mirrors-isort
rev: v5.6.4
rev: v5.9.1
hooks:
- id: isort
name: isort (python)
args: ["--profile", "black"]
- id: isort
name: isort (pyi)
types: [pyi]
args: ["--profile", "black"]
- repo: https://github.com/psf/black
rev: 20.8b1
rev: 21.6b0
hooks:
- id: black
- repo: https://gitlab.com/pycqa/flake8
rev: 3.8.4
rev: 3.9.2
hooks:
- id: flake8
- repo: local

View File

@@ -3,7 +3,7 @@ black==21.6b0
requests==2.24.0
coreapi==2.3.3
gitpython==3.1.9
pre-commit==2.7.1
pre-commit==2.13.0
pytest==6.1.1
pytest-mypy-plugins==1.7.0
psycopg2-binary

View File

@@ -1,4 +1,5 @@
from typing import Any, NamedTuple
from .utils.version import get_version as get_version
VERSION: Any

View File

@@ -1,3 +1,2 @@
from .config import AppConfig as AppConfig
from .registry import apps as apps

View File

@@ -1,4 +1,4 @@
from typing import Any, Iterator, Type, Optional, Dict
from typing import Any, Dict, Iterator, Optional, Type
from django.apps.registry import Apps
from django.db.models.base import Model

View File

@@ -1,3 +1,3 @@
from typing import Dict, Any
from typing import Any, Dict
LANG_INFO: Dict[str, Any] = ...

View File

@@ -1,9 +1,8 @@
# Stubs for django.conf.urls (Python 3.5)
from typing import Any, Callable, Dict, Optional, overload, Sequence, Tuple, Union
from typing import Any, Callable, Dict, Optional, Sequence, Tuple, Union, overload
from django.http.response import HttpResponse, HttpResponseBase
from django.urls import URLResolver, URLPattern
from django.urls import URLPattern, URLResolver
handler400: Union[str, Callable[..., HttpResponse]] = ...
handler403: Union[str, Callable[..., HttpResponse]] = ...

View File

@@ -1,4 +1,4 @@
from typing import Any, List, Tuple, Callable
from typing import Any, Callable, List, Tuple
from django.urls.resolvers import URLPattern

View File

@@ -1,25 +1,23 @@
from .decorators import action as action, register as register
from .filters import (
AllValuesFieldListFilter as AllValuesFieldListFilter,
BooleanFieldListFilter as BooleanFieldListFilter,
ChoicesFieldListFilter as ChoicesFieldListFilter,
DateFieldListFilter as DateFieldListFilter,
FieldListFilter as FieldListFilter,
ListFilter as ListFilter,
RelatedFieldListFilter as RelatedFieldListFilter,
RelatedOnlyFieldListFilter as RelatedOnlyFieldListFilter,
SimpleListFilter as SimpleListFilter,
EmptyFieldListFilter as EmptyFieldListFilter,
)
from .helpers import ACTION_CHECKBOX_NAME as ACTION_CHECKBOX_NAME
from .options import (
HORIZONTAL as HORIZONTAL,
VERTICAL as VERTICAL,
ModelAdmin as ModelAdmin,
StackedInline as StackedInline,
TabularInline as TabularInline,
)
from .sites import AdminSite as AdminSite, site as site
from . import checks as checks
from .decorators import action as action
from .decorators import register as register
from .filters import AllValuesFieldListFilter as AllValuesFieldListFilter
from .filters import BooleanFieldListFilter as BooleanFieldListFilter
from .filters import ChoicesFieldListFilter as ChoicesFieldListFilter
from .filters import DateFieldListFilter as DateFieldListFilter
from .filters import EmptyFieldListFilter as EmptyFieldListFilter
from .filters import FieldListFilter as FieldListFilter
from .filters import ListFilter as ListFilter
from .filters import RelatedFieldListFilter as RelatedFieldListFilter
from .filters import RelatedOnlyFieldListFilter as RelatedOnlyFieldListFilter
from .filters import SimpleListFilter as SimpleListFilter
from .helpers import ACTION_CHECKBOX_NAME as ACTION_CHECKBOX_NAME
from .options import HORIZONTAL as HORIZONTAL
from .options import VERTICAL as VERTICAL
from .options import ModelAdmin as ModelAdmin
from .options import StackedInline as StackedInline
from .options import TabularInline as TabularInline
from .sites import AdminSite as AdminSite
from .sites import site as site
def autodiscover() -> None: ...

View File

@@ -1,10 +1,9 @@
from typing import Any, List, Optional, Sequence
from django.apps.config import AppConfig
from django.contrib.admin.options import BaseModelAdmin
from django.core.checks.messages import CheckMessage, Error
from django.apps.config import AppConfig
def check_admin_app(app_configs: Optional[Sequence[AppConfig]] = ..., **kwargs: Any) -> List[Error]: ...
def check_dependencies(app_configs: Optional[Sequence[AppConfig]] = ..., **kwargs: Any) -> List[Error]: ...

View File

@@ -1,4 +1,4 @@
from typing import Callable, Optional, Type, Sequence, Union, TypeVar, Any
from typing import Any, Callable, Optional, Sequence, Type, TypeVar, Union
from django.contrib.admin import ModelAdmin
from django.contrib.admin.sites import AdminSite

View File

@@ -1,13 +1,12 @@
from typing import Any, Callable, Dict, List, Optional, Tuple, Type, Iterator
from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, Type
from django.contrib.admin.options import ModelAdmin
from django.core.handlers.wsgi import WSGIRequest
from django.db.models.base import Model
from django.db.models.fields import Field
from django.db.models.fields.related import RelatedField
from django.db.models.query import QuerySet
from django.db.models.fields import Field
class ListFilter:
title: Any = ...
template: str = ...

View File

@@ -1,14 +1,13 @@
from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, Union, Iterable
from typing import Any, Callable, Dict, Iterable, Iterator, List, Optional, Tuple, Union
from django import forms
from django.db.models.fields import AutoField
from django.forms.boundfield import BoundField
from django.forms.forms import BaseForm
from django.forms.utils import ErrorDict
from django.forms.widgets import Media, Widget
from django.utils.safestring import SafeText
from django import forms
from django.db.models.fields import AutoField
ACTION_CHECKBOX_NAME: str
class ActionForm(forms.Form):

View File

@@ -2,9 +2,8 @@ from typing import Any, Optional, Union
from uuid import UUID
from django.contrib.contenttypes.models import ContentType
from django.db.models.base import Model
from django.db import models
from django.db.models.base import Model
ADDITION: int
CHANGE: int

View File

@@ -6,20 +6,16 @@ from typing import (
Generic,
Iterator,
List,
Mapping,
Optional,
Sequence,
Set,
Tuple,
Type,
Union,
Mapping,
TypeVar,
Union,
)
from django.forms.forms import BaseForm
from django.forms.models import BaseInlineFormSet
from typing_extensions import Literal, TypedDict
from django.contrib.admin.filters import ListFilter
from django.contrib.admin.models import LogEntry
from django.contrib.admin.sites import AdminSite
@@ -29,19 +25,20 @@ from django.contrib.contenttypes.models import ContentType
from django.core.checks.messages import CheckMessage
from django.core.paginator import Paginator
from django.db.models.base import Model
from django.db.models.fields import Field
from django.db.models.fields.related import ForeignKey, ManyToManyField, RelatedField
from django.db.models.options import Options
from django.db.models.query import QuerySet
from django.forms.fields import TypedChoiceField
from django.forms.models import ModelChoiceField, ModelMultipleChoiceField
from django.forms.forms import BaseForm
from django.forms.models import BaseInlineFormSet, ModelChoiceField, ModelMultipleChoiceField
from django.forms.widgets import Media
from django.http.request import HttpRequest
from django.http.response import HttpResponse, HttpResponseBase, HttpResponseRedirect, JsonResponse
from django.template.response import TemplateResponse
from django.urls.resolvers import URLPattern
from django.utils.safestring import SafeText
from django.db.models.fields import Field
from typing_extensions import Literal, TypedDict
IS_POPUP_VAR: str
TO_FIELD_VAR: str

View File

@@ -4,14 +4,14 @@ from typing import Any, Callable, Dict, Iterable, List, Optional, Tuple, Type, U
from django.apps.config import AppConfig
from django.contrib.admin.options import ModelAdmin
from django.contrib.auth.forms import AuthenticationForm
from django.core.checks import CheckMessage
from django.core.handlers.wsgi import WSGIRequest
from django.db.models.base import Model
from django.db.models.query import QuerySet
from django.http.response import HttpResponse
from django.template.response import TemplateResponse
from django.urls import URLResolver, URLPattern
from django.urls import URLPattern, URLResolver
from django.utils.functional import LazyObject
from django.core.checks import CheckMessage
if sys.version_info >= (3, 9):
from weakref import WeakSet

View File

@@ -1,4 +1,4 @@
from typing import Any, Dict, Iterator, List, Optional, Union, Iterable
from typing import Any, Dict, Iterable, Iterator, List, Optional, Union
from django.contrib.admin.filters import FieldListFilter
from django.contrib.admin.templatetags.base import InclusionAdminNode

View File

@@ -9,13 +9,12 @@ from django.contrib.auth.forms import AdminPasswordChangeForm
from django.core.handlers.wsgi import WSGIRequest
from django.db.models.base import Model
from django.db.models.deletion import Collector
from django.db.models.fields import Field, reverse_related
from django.db.models.fields.reverse_related import ManyToOneRel
from django.db.models.options import Options
from django.db.models.query import QuerySet
from django.forms.forms import BaseForm
from django.db.models.fields import Field, reverse_related
class FieldIsAForeignKeyColumnName(Exception): ...
def lookup_needs_distinct(opts: Options, lookup_path: str) -> bool: ...

View File

@@ -2,17 +2,14 @@ from collections import OrderedDict
from typing import Any, Callable, Dict, List, Optional, Tuple, Type, Union
from django.contrib.admin.filters import ListFilter, SimpleListFilter
from django.contrib.admin.options import ( # noqa: F401
ModelAdmin,
IS_POPUP_VAR as IS_POPUP_VAR,
TO_FIELD_VAR as TO_FIELD_VAR,
)
from django.contrib.admin.options import IS_POPUP_VAR as IS_POPUP_VAR # noqa: F401
from django.contrib.admin.options import TO_FIELD_VAR as TO_FIELD_VAR
from django.contrib.admin.options import ModelAdmin
from django.core.handlers.wsgi import WSGIRequest
from django.db.models.base import Model
from django.db.models.expressions import Combinable, CombinedExpression, OrderBy
from django.db.models.query import QuerySet
from django.db.models.options import Options
from django.db.models.query import QuerySet
from django.forms.formsets import BaseFormSet
ALL_VAR: str

View File

@@ -1,13 +1,12 @@
from typing import Any, Dict, Optional, Tuple, Union
from uuid import UUID
from django import forms
from django.contrib.admin.sites import AdminSite
from django.db.models.fields.reverse_related import ForeignObjectRel, ManyToOneRel
from django.forms.models import ModelChoiceIterator
from django.forms.widgets import Media
from django import forms
class FilteredSelectMultiple(forms.SelectMultiple):
@property
def media(self) -> Media: ...

View File

@@ -1,6 +1,7 @@
from django.apps import AppConfig as AppConfig
from typing import Any
from django.apps import AppConfig as AppConfig
class AdminDocsConfig(AppConfig):
name: str = ...
verbose_name: Any = ...

View File

@@ -1,10 +1,9 @@
from typing import Any
from django.contrib import admin
from django.core.handlers.wsgi import WSGIRequest
from django.http.response import HttpResponse
from django.contrib import admin
csrf_protect_m: Any
sensitive_post_parameters_m: Any

View File

@@ -1,8 +1,7 @@
from typing import Any, Optional, Set, Union
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.models import AnonymousUser, User, Permission
from django.contrib.auth.models import AnonymousUser, Permission, User
from django.db.models.base import Model
from django.http.request import HttpRequest

View File

@@ -1,10 +1,10 @@
import sys
from typing import Any, Optional, Tuple, List, overload, TypeVar, Union
from typing import Any, List, Optional, Tuple, TypeVar, Union, overload
from django.db import models
from django.db.models.base import Model
from django.db.models.expressions import Combinable
from django.db.models.fields import BooleanField
from django.db import models
if sys.version_info < (3, 8):
from typing_extensions import Literal

View File

@@ -1,8 +1,7 @@
from typing import Any, List, Optional, Sequence
from django.core.checks.messages import CheckMessage
from django.apps.config import AppConfig
from django.core.checks.messages import CheckMessage
def check_user_model(app_configs: Optional[Sequence[AppConfig]] = ..., **kwargs: Any) -> List[CheckMessage]: ...
def check_models_permissions(app_configs: Optional[Sequence[AppConfig]] = ..., **kwargs: Any) -> List[CheckMessage]: ...

View File

@@ -1,9 +1,8 @@
from typing import Callable, List, Optional, Set, Union, TypeVar, overload
from typing import Callable, List, Optional, Set, TypeVar, Union, overload
from django.contrib.auth import REDIRECT_FIELD_NAME as REDIRECT_FIELD_NAME # noqa: F401
from django.http.response import HttpResponseBase
from django.contrib.auth.models import AbstractUser
from django.http.response import HttpResponseBase
_VIEW = TypeVar("_VIEW", bound=Callable[..., HttpResponseBase])

View File

@@ -1,13 +1,12 @@
from typing import Any, Dict, Iterator, Optional
from django import forms
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.models import User
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.core.exceptions import ValidationError
from django.core.handlers.wsgi import WSGIRequest
from django import forms
UserModel: Any
class ReadOnlyPasswordHashWidget(forms.Widget):

View File

@@ -2,14 +2,14 @@ import sys
from typing import Any, Collection, Optional, Set, Tuple, Type, TypeVar, Union
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.base_user import AbstractBaseUser as AbstractBaseUser, BaseUserManager as BaseUserManager
from django.contrib.auth.base_user import AbstractBaseUser as AbstractBaseUser
from django.contrib.auth.base_user import BaseUserManager as BaseUserManager
from django.contrib.auth.validators import UnicodeUsernameValidator
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.db.models.base import Model
from django.db.models.manager import EmptyManager
from django.db import models
if sys.version_info < (3, 8):
from typing_extensions import Literal
else:

View File

@@ -1,8 +1,7 @@
from typing import Any, List, Optional, Sequence
from django.core.checks.messages import CheckMessage
from django.apps.config import AppConfig
from django.core.checks.messages import CheckMessage
def check_generic_foreign_keys(
app_configs: Optional[Sequence[AppConfig]] = ..., **kwargs: Any

View File

@@ -4,6 +4,7 @@ from django.contrib.contenttypes.models import ContentType
from django.core.checks.messages import CheckMessage
from django.db.models.base import Model
from django.db.models.expressions import Combinable
from django.db.models.fields import Field, PositiveIntegerField
from django.db.models.fields.mixins import FieldCacheMixin
from django.db.models.fields.related import ForeignObject
from django.db.models.fields.related_descriptors import ReverseManyToOneDescriptor
@@ -12,8 +13,6 @@ from django.db.models.query import QuerySet
from django.db.models.query_utils import FilteredRelation, PathInfo
from django.db.models.sql.where import WhereNode
from django.db.models.fields import Field, PositiveIntegerField
class GenericForeignKey(FieldCacheMixin):
# django-stubs implementation only fields
_pyi_private_set_type: Union[Any, Combinable]

View File

@@ -1,8 +1,7 @@
from typing import Any, Dict, List
from django.db.models.deletion import Collector
from django.core.management import BaseCommand
from django.db.models.deletion import Collector
class Command(BaseCommand): ...

View File

@@ -1,6 +1,7 @@
from django.contrib import admin as admin
from typing import Any
from django.contrib import admin as admin
class FlatPageAdmin(admin.ModelAdmin):
form: Any = ...
fieldsets: Any = ...

View File

@@ -1,6 +1,7 @@
from django.apps import AppConfig as AppConfig
from typing import Any
from django.apps import AppConfig as AppConfig
class FlatPagesConfig(AppConfig):
name: str = ...
verbose_name: Any = ...

View File

@@ -1,5 +1,4 @@
from django.contrib.sites.models import Site
from django.db import models
class FlatPage(models.Model):

View File

@@ -1,12 +1,11 @@
from django.contrib.admin import (
AdminSite as AdminSite,
HORIZONTAL as HORIZONTAL,
ModelAdmin as ModelAdmin,
StackedInline as StackedInline,
TabularInline as TabularInline,
VERTICAL as VERTICAL,
autodiscover as autodiscover,
register as register,
site as site,
)
from django.contrib.gis.admin.options import GeoModelAdmin as GeoModelAdmin, OSMGeoAdmin as OSMGeoAdmin
from django.contrib.admin import HORIZONTAL as HORIZONTAL
from django.contrib.admin import VERTICAL as VERTICAL
from django.contrib.admin import AdminSite as AdminSite
from django.contrib.admin import ModelAdmin as ModelAdmin
from django.contrib.admin import StackedInline as StackedInline
from django.contrib.admin import TabularInline as TabularInline
from django.contrib.admin import autodiscover as autodiscover
from django.contrib.admin import register as register
from django.contrib.admin import site as site
from django.contrib.gis.admin.options import GeoModelAdmin as GeoModelAdmin
from django.contrib.gis.admin.options import OSMGeoAdmin as OSMGeoAdmin

View File

@@ -1,6 +1,7 @@
from django.contrib.admin import ModelAdmin as ModelAdmin
from typing import Any
from django.contrib.admin import ModelAdmin as ModelAdmin
spherical_mercator_srid: int
class GeoModelAdmin(ModelAdmin):

View File

@@ -1,6 +1,7 @@
from django.forms.widgets import Textarea as Textarea
from typing import Any
from django.forms.widgets import Textarea as Textarea
geo_context: Any
logger: Any

View File

@@ -1,6 +1,7 @@
from django.apps import AppConfig as AppConfig
from typing import Any
from django.apps import AppConfig as AppConfig
class GISConfig(AppConfig):
name: str = ...
verbose_name: Any = ...

View File

@@ -1,6 +1,7 @@
from django.db.backends.mysql.base import DatabaseWrapper as MySQLDatabaseWrapper
from typing import Any
from django.db.backends.mysql.base import DatabaseWrapper as MySQLDatabaseWrapper
class DatabaseWrapper(MySQLDatabaseWrapper):
SchemaEditorClass: Any = ...
features_class: Any = ...

View File

@@ -1,6 +1,7 @@
from django.db.backends.mysql.introspection import DatabaseIntrospection as DatabaseIntrospection
from typing import Any
from django.db.backends.mysql.introspection import DatabaseIntrospection as DatabaseIntrospection
class MySQLIntrospection(DatabaseIntrospection):
data_types_reverse: Any = ...
def get_geometry_type(self, table_name: Any, description: Any): ...

View File

@@ -1,6 +1,7 @@
from typing import Any
from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations as BaseSpatialOperations
from django.db.backends.mysql.operations import DatabaseOperations as DatabaseOperations
from typing import Any
class MySQLOperations(BaseSpatialOperations, DatabaseOperations):
mysql: bool = ...

View File

@@ -1,6 +1,7 @@
from django.db.backends.mysql.schema import DatabaseSchemaEditor as DatabaseSchemaEditor
from typing import Any
from django.db.backends.mysql.schema import DatabaseSchemaEditor as DatabaseSchemaEditor
logger: Any
class MySQLGISSchemaEditor(DatabaseSchemaEditor):

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.db.backends.base.adapter import WKTAdapter
from typing import Any
from django.contrib.gis.db.backends.base.adapter import WKTAdapter
class OracleSpatialAdapter(WKTAdapter):
input_size: Any = ...
wkt: Any = ...

View File

@@ -1,6 +1,7 @@
from django.db.backends.oracle.base import DatabaseWrapper as OracleDatabaseWrapper
from typing import Any
from django.db.backends.oracle.base import DatabaseWrapper as OracleDatabaseWrapper
class DatabaseWrapper(OracleDatabaseWrapper):
SchemaEditorClass: Any = ...
features_class: Any = ...

View File

@@ -1,6 +1,7 @@
from django.db.backends.oracle.introspection import DatabaseIntrospection as DatabaseIntrospection
from typing import Any
from django.db.backends.oracle.introspection import DatabaseIntrospection as DatabaseIntrospection
class OracleIntrospection(DatabaseIntrospection):
def data_types_reverse(self): ...
def get_geometry_type(self, table_name: Any, description: Any): ...

View File

@@ -1,6 +1,7 @@
from typing import Any
from django.contrib.gis.db import models as models
from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin as SpatialRefSysMixin
from typing import Any
class OracleGeometryColumns(models.Model):
table_name: Any = ...

View File

@@ -1,7 +1,8 @@
from typing import Any
from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations as BaseSpatialOperations
from django.contrib.gis.db.backends.utils import SpatialOperator as SpatialOperator
from django.db.backends.oracle.operations import DatabaseOperations as DatabaseOperations
from typing import Any
DEFAULT_TOLERANCE: str

View File

@@ -1,6 +1,7 @@
from django.db.backends.oracle.schema import DatabaseSchemaEditor
from typing import Any
from django.db.backends.oracle.schema import DatabaseSchemaEditor
class OracleGISSchemaEditor(DatabaseSchemaEditor):
sql_add_geometry_metadata: str = ...
sql_add_spatial_index: str = ...

View File

@@ -1,6 +1,7 @@
from django.db.backends.postgresql.base import DatabaseWrapper as Psycopg2DatabaseWrapper
from typing import Any
from django.db.backends.postgresql.base import DatabaseWrapper as Psycopg2DatabaseWrapper
class DatabaseWrapper(Psycopg2DatabaseWrapper):
SchemaEditorClass: Any = ...
features: Any = ...

View File

@@ -1,6 +1,7 @@
from django.db.backends.postgresql.introspection import DatabaseIntrospection as DatabaseIntrospection
from typing import Any
from django.db.backends.postgresql.introspection import DatabaseIntrospection as DatabaseIntrospection
class PostGISIntrospection(DatabaseIntrospection):
postgis_oid_lookup: Any = ...
ignored_tables: Any = ...

View File

@@ -1,6 +1,7 @@
from typing import Any
from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin as SpatialRefSysMixin
from django.db import models as models
from typing import Any
class PostGISGeometryColumns(models.Model):
f_table_catalog: Any = ...

View File

@@ -1,8 +1,9 @@
from typing import Any
from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations
from django.contrib.gis.db.backends.utils import SpatialOperator
from django.db.backends.postgresql.operations import DatabaseOperations
from django.db.models import Func
from typing import Any
BILATERAL: str

View File

@@ -1,6 +1,7 @@
from django.db.backends.postgresql.schema import DatabaseSchemaEditor
from typing import Any
from django.db.backends.postgresql.schema import DatabaseSchemaEditor
class PostGISSchemaEditor(DatabaseSchemaEditor):
geom_index_type: str = ...
geom_index_ops_nd: str = ...

View File

@@ -1,5 +1,6 @@
from django.contrib.gis.db.backends.base.adapter import WKTAdapter as WKTAdapter
from typing import Any
from django.contrib.gis.db.backends.base.adapter import WKTAdapter as WKTAdapter
class SpatiaLiteAdapter(WKTAdapter):
def __conform__(self, protocol: Any): ...

View File

@@ -1,6 +1,7 @@
from django.db.backends.sqlite3.base import DatabaseWrapper as SQLiteDatabaseWrapper
from typing import Any
from django.db.backends.sqlite3.base import DatabaseWrapper as SQLiteDatabaseWrapper
class DatabaseWrapper(SQLiteDatabaseWrapper):
SchemaEditorClass: Any = ...
client_class: Any = ...

View File

@@ -1,9 +1,8 @@
from django.db.backends.sqlite3.introspection import (
DatabaseIntrospection as DatabaseIntrospection,
FlexibleFieldLookupDict as FlexibleFieldLookupDict,
)
from typing import Any
from django.db.backends.sqlite3.introspection import DatabaseIntrospection as DatabaseIntrospection
from django.db.backends.sqlite3.introspection import FlexibleFieldLookupDict as FlexibleFieldLookupDict
class GeoFlexibleFieldLookupDict(FlexibleFieldLookupDict):
base_data_types_reverse: Any = ...

View File

@@ -1,6 +1,7 @@
from typing import Any
from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin as SpatialRefSysMixin
from django.db import models as models
from typing import Any
class SpatialiteGeometryColumns(models.Model):
f_table_name: Any = ...

View File

@@ -1,7 +1,8 @@
from typing import Any
from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations
from django.contrib.gis.db.backends.utils import SpatialOperator as SpatialOperator
from django.db.backends.sqlite3.operations import DatabaseOperations
from typing import Any
class SpatialiteNullCheckOperator(SpatialOperator):
def as_sql(self, connection: Any, lookup: Any, template_params: Any, sql_params: Any): ...

View File

@@ -1,6 +1,7 @@
from django.db.backends.sqlite3.schema import DatabaseSchemaEditor as DatabaseSchemaEditor
from typing import Any
from django.db.backends.sqlite3.schema import DatabaseSchemaEditor as DatabaseSchemaEditor
class SpatialiteSchemaEditor(DatabaseSchemaEditor):
sql_add_geometry_column: str = ...
sql_add_spatial_index: str = ...

View File

@@ -1,14 +1,12 @@
# noqa: F401
from django.db.models import *
from django.contrib.gis.db.models.aggregates import *
from django.contrib.gis.db.models.fields import (
GeometryCollectionField as GeometryCollectionField,
GeometryField as GeometryField,
LineStringField as LineStringField,
MultiLineStringField as MultiLineStringField,
MultiPointField as MultiPointField,
MultiPolygonField as MultiPolygonField,
PointField as PointField,
PolygonField as PolygonField,
RasterField as RasterField,
)
from django.contrib.gis.db.models.fields import GeometryCollectionField as GeometryCollectionField
from django.contrib.gis.db.models.fields import GeometryField as GeometryField
from django.contrib.gis.db.models.fields import LineStringField as LineStringField
from django.contrib.gis.db.models.fields import MultiLineStringField as MultiLineStringField
from django.contrib.gis.db.models.fields import MultiPointField as MultiPointField
from django.contrib.gis.db.models.fields import MultiPolygonField as MultiPolygonField
from django.contrib.gis.db.models.fields import PointField as PointField
from django.contrib.gis.db.models.fields import PolygonField as PolygonField
from django.contrib.gis.db.models.fields import RasterField as RasterField
from django.db.models import *

View File

@@ -1,6 +1,7 @@
from django.db.models import Aggregate
from typing import Any, Optional
from django.db.models import Aggregate
class GeoAggregate(Aggregate):
function: Any = ...
is_extent: bool = ...

View File

@@ -1,4 +1,5 @@
from typing import Any, Iterable, NamedTuple, Optional, TypeVar, Union, Tuple
from typing import Any, Iterable, NamedTuple, Optional, Tuple, TypeVar, Union
from django.db.models.fields import Field, _ErrorMessagesToOverride, _FieldChoices, _ValidatorCallable
# __set__ value type

View File

@@ -1,6 +1,8 @@
from django.db.models import Func, Transform as StandardTransform
from typing import Any, Optional
from django.db.models import Func
from django.db.models import Transform as StandardTransform
NUMERIC_TYPES: Any
class GeoFuncMixin:

View File

@@ -1,6 +1,7 @@
from django.db.models import Lookup, Transform
from typing import Any
from django.db.models import Lookup, Transform
class RasterBandTransform(Transform): ...
class GISLookup(Lookup):

View File

@@ -1,6 +1,7 @@
from django.db.models.query_utils import DeferredAttribute
from typing import Any, Optional
from django.db.models.query_utils import DeferredAttribute
class SpatialProxy(DeferredAttribute):
def __init__(self, klass: Any, field: Any, load_func: Optional[Any] = ...) -> None: ...
def __get__(self, instance: Any, cls: Optional[Any] = ...): ...

View File

@@ -1,6 +1,7 @@
from django.db import models as models
from typing import Any
from django.db import models as models
class AreaField(models.FloatField):
geo_field: Any = ...
def __init__(self, geo_field: Any) -> None: ...

View File

@@ -1,6 +1,7 @@
from typing import Any
from django.contrib.syndication.views import Feed as BaseFeed
from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed
from typing import Any
class GeoFeedMixin:
def georss_coords(self, coords: Any): ...

View File

@@ -1,6 +1,7 @@
from django import forms as forms
from typing import Any, Optional
from django import forms as forms
class GeometryField(forms.Field):
widget: Any = ...
geom_type: str = ...

View File

@@ -1,6 +1,7 @@
from django.forms.widgets import Widget as Widget
from typing import Any, Optional
from django.forms.widgets import Widget as Widget
logger: Any
class BaseGeometryWidget(Widget):

View File

@@ -1,15 +1,9 @@
from django.contrib.gis.gdal.error import (
GDALException as GDALException,
SRSException as SRSException,
check_err as check_err,
)
from django.contrib.gis.gdal.libgdal import (
GDAL_VERSION as GDAL_VERSION,
gdal_full_version as gdal_full_version,
gdal_version as gdal_version,
)
from django.contrib.gis.gdal.srs import (
AxisOrder as AxisOrder,
CoordTransform as CoordTransform,
SpatialReference as SpatialReference,
)
from django.contrib.gis.gdal.error import GDALException as GDALException
from django.contrib.gis.gdal.error import SRSException as SRSException
from django.contrib.gis.gdal.error import check_err as check_err
from django.contrib.gis.gdal.libgdal import GDAL_VERSION as GDAL_VERSION
from django.contrib.gis.gdal.libgdal import gdal_full_version as gdal_full_version
from django.contrib.gis.gdal.libgdal import gdal_version as gdal_version
from django.contrib.gis.gdal.srs import AxisOrder as AxisOrder
from django.contrib.gis.gdal.srs import CoordTransform as CoordTransform
from django.contrib.gis.gdal.srs import SpatialReference as SpatialReference

View File

@@ -1,5 +1,6 @@
from django.contrib.gis.ptr import CPointerBase as CPointerBase
from typing import Any
from django.contrib.gis.ptr import CPointerBase as CPointerBase
class GDALBase(CPointerBase):
null_ptr_exception_class: Any = ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any
from django.contrib.gis.gdal.base import GDALBase as GDALBase
class DataSource(GDALBase):
destructor: Any = ...
encoding: Any = ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any
from django.contrib.gis.gdal.base import GDALBase as GDALBase
class Driver(GDALBase):
ptr: Any = ...
def __init__(self, dr_input: Any) -> None: ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any
from django.contrib.gis.gdal.base import GDALBase as GDALBase
class Feature(GDALBase):
destructor: Any = ...
ptr: Any = ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any
from django.contrib.gis.gdal.base import GDALBase as GDALBase
class Field(GDALBase):
ptr: Any = ...
__class__: Any = ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any, Optional
from django.contrib.gis.gdal.base import GDALBase as GDALBase
class OGRGeometry(GDALBase):
destructor: Any = ...
ptr: Any = ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any
from django.contrib.gis.gdal.base import GDALBase as GDALBase
class Layer(GDALBase):
ptr: Any = ...
def __init__(self, layer_ptr: Any, ds: Any) -> None: ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.gdal.raster.base import GDALRasterBase as GDALRasterBase
from typing import Any, Optional
from django.contrib.gis.gdal.raster.base import GDALRasterBase as GDALRasterBase
class GDALBand(GDALRasterBase):
source: Any = ...
def __init__(self, source: Any, index: Any) -> None: ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from typing import Any
from django.contrib.gis.gdal.base import GDALBase as GDALBase
class GDALRasterBase(GDALBase):
@property
def metadata(self): ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.gdal.raster.base import GDALRasterBase as GDALRasterBase
from typing import Any, Optional
from django.contrib.gis.gdal.raster.base import GDALRasterBase as GDALRasterBase
class TransformPoint(list):
indices: Any = ...
def __init__(self, raster: Any, prop: Any) -> None: ...

View File

@@ -1,7 +1,8 @@
from django.contrib.gis.gdal.base import GDALBase as GDALBase
from enum import IntEnum
from typing import Any, Optional
from django.contrib.gis.gdal.base import GDALBase as GDALBase
class AxisOrder(IntEnum):
TRADITIONAL: int = ...
AUTHORITY: int = ...

View File

@@ -1,3 +1,4 @@
from .base import GeoIP2 as GeoIP2, GeoIP2Exception as GeoIP2Exception
from .base import GeoIP2 as GeoIP2
from .base import GeoIP2Exception as GeoIP2Exception
HAS_GEOIP2: bool

View File

@@ -1,12 +1,17 @@
from .collections import (
GeometryCollection as GeometryCollection,
MultiLineString as MultiLineString,
MultiPoint as MultiPoint,
MultiPolygon as MultiPolygon,
)
from .factory import fromfile as fromfile, fromstr as fromstr
from .geometry import GEOSGeometry as GEOSGeometry, hex_regex as hex_regex, wkt_regex as wkt_regex
from .io import WKBReader as WKBReader, WKBWriter as WKBWriter, WKTReader as WKTReader, WKTWriter as WKTWriter
from .linestring import LineString as LineString, LinearRing as LinearRing
from .collections import GeometryCollection as GeometryCollection
from .collections import MultiLineString as MultiLineString
from .collections import MultiPoint as MultiPoint
from .collections import MultiPolygon as MultiPolygon
from .factory import fromfile as fromfile
from .factory import fromstr as fromstr
from .geometry import GEOSGeometry as GEOSGeometry
from .geometry import hex_regex as hex_regex
from .geometry import wkt_regex as wkt_regex
from .io import WKBReader as WKBReader
from .io import WKBWriter as WKBWriter
from .io import WKTReader as WKTReader
from .io import WKTWriter as WKTWriter
from .linestring import LinearRing as LinearRing
from .linestring import LineString as LineString
from .point import Point as Point
from .polygon import Polygon as Polygon

View File

@@ -1,5 +1,6 @@
from django.contrib.gis.ptr import CPointerBase as CPointerBase
from typing import Any
from django.contrib.gis.ptr import CPointerBase as CPointerBase
class GEOSBase(CPointerBase):
null_ptr_exception_class: Any = ...

View File

@@ -1,6 +1,8 @@
from django.contrib.gis.geos.geometry import GEOSGeometry as GEOSGeometry, LinearGeometryMixin as LinearGeometryMixin
from typing import Any
from django.contrib.gis.geos.geometry import GEOSGeometry as GEOSGeometry
from django.contrib.gis.geos.geometry import LinearGeometryMixin as LinearGeometryMixin
class GeometryCollection(GEOSGeometry):
def __init__(self, *args: Any, **kwargs: Any) -> None: ...
def __iter__(self) -> Any: ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.geos.base import GEOSBase as GEOSBase
from typing import Any
from django.contrib.gis.geos.base import GEOSBase as GEOSBase
class GEOSCoordSeq(GEOSBase):
ptr_type: Any = ...
def __init__(self, ptr: Any, z: bool = ...) -> None: ...

View File

@@ -1,11 +1,10 @@
from django.contrib.gis.geometry import ( # noqa: F401
hex_regex as hex_regex,
json_regex as json_regex,
wkt_regex as wkt_regex,
)
from typing import Any, Optional
from django.contrib.gis.geometry import hex_regex as hex_regex # noqa: F401
from django.contrib.gis.geometry import json_regex as json_regex
from django.contrib.gis.geometry import wkt_regex as wkt_regex
from django.contrib.gis.geos.base import GEOSBase as GEOSBase
from django.contrib.gis.geos.mutable_list import ListMixin as ListMixin
from typing import Any, Optional
class GEOSGeometryBase(GEOSBase):
ptr_type: Any = ...

View File

@@ -1,11 +1,9 @@
from django.contrib.gis.geos.prototypes.io import ( # noqa: F401
WKBWriter as WKBWriter,
WKTWriter as WKTWriter,
_WKBReader,
_WKTReader,
)
from typing import Any
from django.contrib.gis.geos.prototypes.io import WKBWriter as WKBWriter # noqa: F401
from django.contrib.gis.geos.prototypes.io import WKTWriter as WKTWriter
from django.contrib.gis.geos.prototypes.io import _WKBReader, _WKTReader
class WKBReader(_WKBReader):
def read(self, wkb: Any): ...

View File

@@ -1,6 +1,8 @@
from django.contrib.gis.geos.geometry import GEOSGeometry as GEOSGeometry, LinearGeometryMixin as LinearGeometryMixin
from typing import Any
from django.contrib.gis.geos.geometry import GEOSGeometry as GEOSGeometry
from django.contrib.gis.geos.geometry import LinearGeometryMixin as LinearGeometryMixin
class LineString(LinearGeometryMixin, GEOSGeometry):
has_cs: bool = ...
def __init__(self, *args: Any, **kwargs: Any) -> None: ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.geos.geometry import GEOSGeometry as GEOSGeometry
from typing import Any, Optional
from django.contrib.gis.geos.geometry import GEOSGeometry as GEOSGeometry
class Point(GEOSGeometry):
has_cs: bool = ...
def __init__(

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.geos.geometry import GEOSGeometry as GEOSGeometry
from typing import Any
from django.contrib.gis.geos.geometry import GEOSGeometry as GEOSGeometry
class Polygon(GEOSGeometry):
def __init__(self, *args: Any, **kwargs: Any) -> None: ...
def __iter__(self) -> Any: ...

View File

@@ -1,6 +1,7 @@
from .base import GEOSBase as GEOSBase
from typing import Any
from .base import GEOSBase as GEOSBase
class PreparedGeometry(GEOSBase):
ptr_type: Any = ...
destructor: Any = ...

View File

@@ -1,57 +1,51 @@
from django.contrib.gis.geos.prototypes.coordseq import (
create_cs as create_cs,
cs_clone as cs_clone,
cs_getdims as cs_getdims,
cs_getordinate as cs_getordinate,
cs_getsize as cs_getsize,
cs_getx as cs_getx,
cs_gety as cs_gety,
cs_getz as cs_getz,
cs_is_ccw as cs_is_ccw,
cs_setordinate as cs_setordinate,
cs_setx as cs_setx,
cs_sety as cs_sety,
cs_setz as cs_setz,
get_cs as get_cs,
)
from django.contrib.gis.geos.prototypes.geom import (
create_collection as create_collection,
create_empty_polygon as create_empty_polygon,
create_linearring as create_linearring,
create_linestring as create_linestring,
create_point as create_point,
create_polygon as create_polygon,
destroy_geom as destroy_geom,
geom_clone as geom_clone,
geos_get_srid as geos_get_srid,
geos_normalize as geos_normalize,
geos_set_srid as geos_set_srid,
geos_type as geos_type,
geos_typeid as geos_typeid,
get_dims as get_dims,
get_extring as get_extring,
get_geomn as get_geomn,
get_intring as get_intring,
get_nrings as get_nrings,
get_num_coords as get_num_coords,
get_num_geoms as get_num_geoms,
)
from django.contrib.gis.geos.prototypes.predicates import (
geos_contains as geos_contains,
geos_covers as geos_covers,
geos_crosses as geos_crosses,
geos_disjoint as geos_disjoint,
geos_equals as geos_equals,
geos_equalsexact as geos_equalsexact,
geos_hasz as geos_hasz,
geos_intersects as geos_intersects,
geos_isclosed as geos_isclosed,
geos_isempty as geos_isempty,
geos_isring as geos_isring,
geos_issimple as geos_issimple,
geos_isvalid as geos_isvalid,
geos_overlaps as geos_overlaps,
geos_relatepattern as geos_relatepattern,
geos_touches as geos_touches,
geos_within as geos_within,
)
from django.contrib.gis.geos.prototypes.coordseq import create_cs as create_cs
from django.contrib.gis.geos.prototypes.coordseq import cs_clone as cs_clone
from django.contrib.gis.geos.prototypes.coordseq import cs_getdims as cs_getdims
from django.contrib.gis.geos.prototypes.coordseq import cs_getordinate as cs_getordinate
from django.contrib.gis.geos.prototypes.coordseq import cs_getsize as cs_getsize
from django.contrib.gis.geos.prototypes.coordseq import cs_getx as cs_getx
from django.contrib.gis.geos.prototypes.coordseq import cs_gety as cs_gety
from django.contrib.gis.geos.prototypes.coordseq import cs_getz as cs_getz
from django.contrib.gis.geos.prototypes.coordseq import cs_is_ccw as cs_is_ccw
from django.contrib.gis.geos.prototypes.coordseq import cs_setordinate as cs_setordinate
from django.contrib.gis.geos.prototypes.coordseq import cs_setx as cs_setx
from django.contrib.gis.geos.prototypes.coordseq import cs_sety as cs_sety
from django.contrib.gis.geos.prototypes.coordseq import cs_setz as cs_setz
from django.contrib.gis.geos.prototypes.coordseq import get_cs as get_cs
from django.contrib.gis.geos.prototypes.geom import create_collection as create_collection
from django.contrib.gis.geos.prototypes.geom import create_empty_polygon as create_empty_polygon
from django.contrib.gis.geos.prototypes.geom import create_linearring as create_linearring
from django.contrib.gis.geos.prototypes.geom import create_linestring as create_linestring
from django.contrib.gis.geos.prototypes.geom import create_point as create_point
from django.contrib.gis.geos.prototypes.geom import create_polygon as create_polygon
from django.contrib.gis.geos.prototypes.geom import destroy_geom as destroy_geom
from django.contrib.gis.geos.prototypes.geom import geom_clone as geom_clone
from django.contrib.gis.geos.prototypes.geom import geos_get_srid as geos_get_srid
from django.contrib.gis.geos.prototypes.geom import geos_normalize as geos_normalize
from django.contrib.gis.geos.prototypes.geom import geos_set_srid as geos_set_srid
from django.contrib.gis.geos.prototypes.geom import geos_type as geos_type
from django.contrib.gis.geos.prototypes.geom import geos_typeid as geos_typeid
from django.contrib.gis.geos.prototypes.geom import get_dims as get_dims
from django.contrib.gis.geos.prototypes.geom import get_extring as get_extring
from django.contrib.gis.geos.prototypes.geom import get_geomn as get_geomn
from django.contrib.gis.geos.prototypes.geom import get_intring as get_intring
from django.contrib.gis.geos.prototypes.geom import get_nrings as get_nrings
from django.contrib.gis.geos.prototypes.geom import get_num_coords as get_num_coords
from django.contrib.gis.geos.prototypes.geom import get_num_geoms as get_num_geoms
from django.contrib.gis.geos.prototypes.predicates import geos_contains as geos_contains
from django.contrib.gis.geos.prototypes.predicates import geos_covers as geos_covers
from django.contrib.gis.geos.prototypes.predicates import geos_crosses as geos_crosses
from django.contrib.gis.geos.prototypes.predicates import geos_disjoint as geos_disjoint
from django.contrib.gis.geos.prototypes.predicates import geos_equals as geos_equals
from django.contrib.gis.geos.prototypes.predicates import geos_equalsexact as geos_equalsexact
from django.contrib.gis.geos.prototypes.predicates import geos_hasz as geos_hasz
from django.contrib.gis.geos.prototypes.predicates import geos_intersects as geos_intersects
from django.contrib.gis.geos.prototypes.predicates import geos_isclosed as geos_isclosed
from django.contrib.gis.geos.prototypes.predicates import geos_isempty as geos_isempty
from django.contrib.gis.geos.prototypes.predicates import geos_isring as geos_isring
from django.contrib.gis.geos.prototypes.predicates import geos_issimple as geos_issimple
from django.contrib.gis.geos.prototypes.predicates import geos_isvalid as geos_isvalid
from django.contrib.gis.geos.prototypes.predicates import geos_overlaps as geos_overlaps
from django.contrib.gis.geos.prototypes.predicates import geos_relatepattern as geos_relatepattern
from django.contrib.gis.geos.prototypes.predicates import geos_touches as geos_touches
from django.contrib.gis.geos.prototypes.predicates import geos_within as geos_within

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.geos.libgeos import GEOSFuncFactory as GEOSFuncFactory
from typing import Any
from django.contrib.gis.geos.libgeos import GEOSFuncFactory as GEOSFuncFactory
def check_cs_op(result: Any, func: Any, cargs: Any): ...
def check_cs_get(result: Any, func: Any, cargs: Any): ...

View File

@@ -1,7 +1,8 @@
from ctypes import c_char_p
from django.contrib.gis.geos.libgeos import GEOSFuncFactory as GEOSFuncFactory
from typing import Any
from django.contrib.gis.geos.libgeos import GEOSFuncFactory as GEOSFuncFactory
c_uchar_p: Any
class geos_char_p(c_char_p): ...

View File

@@ -1,11 +1,10 @@
import threading
from ctypes import Structure
from django.contrib.gis.geos.base import GEOSBase as GEOSBase
from django.contrib.gis.geos.libgeos import (
GEOSFuncFactory as GEOSFuncFactory,
)
from typing import Any, Optional
from django.contrib.gis.geos.base import GEOSBase as GEOSBase
from django.contrib.gis.geos.libgeos import GEOSFuncFactory as GEOSFuncFactory
class WKTReader_st(Structure): ...
class WKTWriter_st(Structure): ...
class WKBReader_st(Structure): ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.geos.libgeos import GEOSFuncFactory
from typing import Any
from django.contrib.gis.geos.libgeos import GEOSFuncFactory
class DblFromGeom(GEOSFuncFactory):
restype: Any = ...
errcheck: Any = ...

View File

@@ -1,6 +1,7 @@
from django.contrib.gis.geos.libgeos import GEOSFuncFactory as GEOSFuncFactory
from typing import Any
from django.contrib.gis.geos.libgeos import GEOSFuncFactory as GEOSFuncFactory
class UnaryPredicate(GEOSFuncFactory):
argtypes: Any = ...
restype: Any = ...

View File

@@ -1,8 +1,7 @@
from django.contrib.gis.geos.libgeos import (
GEOSFuncFactory as GEOSFuncFactory,
)
from typing import Any
from django.contrib.gis.geos.libgeos import GEOSFuncFactory as GEOSFuncFactory
geos_prepare: Any
prepared_destroy: Any

View File

@@ -1,7 +1,8 @@
import threading
from django.contrib.gis.geos.base import GEOSBase as GEOSBase
from typing import Any
from django.contrib.gis.geos.base import GEOSBase as GEOSBase
class GEOSContextHandle(GEOSBase):
ptr_type: Any = ...
destructor: Any = ...

Some files were not shown because too many files have changed in this diff Show More