Skip to content

Commit 1334efd

Browse files
django.core.management stub update (#1787)
* Fix ` django.core.validators.URLValidator` * Fix `django.core.serializers` stubs * `QuerySetPaginator` alias removed in django3.2 * Update `django.core.management.templates.TemplateCommand.apply_umask` * Move `django.core.management.color.Style` errors to allowlist * Add `django.core.management.commands.loaddata` missing import const
1 parent 35bd241 commit 1334efd

File tree

10 files changed

+44
-47
lines changed

10 files changed

+44
-47
lines changed

django-stubs/core/management/color.pyi

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
HAS_COLORAMA: bool
2+
13
def supports_color() -> bool: ...
24

35
class Style:
4-
# set by make_style
6+
# set by make_style. Method names are keys in django.utils.termcolors.PALETTES
57
def ERROR(self, text: str) -> str: ...
68
def SUCCESS(self, text: str) -> str: ...
79
def WARNING(self, text: str) -> str: ...
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
from django.core.management.base import BaseCommand
22

3+
has_bz2: bool
4+
has_lzma: bool
5+
36
class ProxyModelWarning(Warning): ...
47
class Command(BaseCommand): ...

django-stubs/core/management/commands/loaddata.pyi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ from django.apps.config import AppConfig
55
from django.core.management.base import BaseCommand
66
from django.db.models.base import Model
77

8+
has_bz2: bool
9+
has_lzma: bool
10+
811
READ_STDIN: str
912

1013
class Command(BaseCommand):

django-stubs/core/management/templates.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ class TemplateCommand(BaseCommand):
1919
def splitext(self, the_path: str) -> tuple[str, str]: ...
2020
def extract(self, filename: str) -> str: ...
2121
def is_url(self, template: str) -> bool: ...
22+
def apply_umask(self, old_path: str, new_path: str) -> None: ...
2223
def make_writeable(self, filename: str) -> None: ...

django-stubs/core/paginator.pyi

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from collections.abc import Iterable, Iterator, Sequence, Sized
2-
from typing import Generic, Protocol, TypeVar, overload
2+
from typing import ClassVar, Generic, Protocol, TypeVar, overload
33

4-
from typing_extensions import TypeAlias
4+
from django.utils.functional import _StrPromise
55

66
class UnorderedObjectListWarning(RuntimeWarning): ...
77
class InvalidPage(Exception): ...
@@ -17,6 +17,7 @@ class _SupportsPagination(Protocol[_T], Sized, Iterable):
1717
def __getitem__(self, __index: slice) -> _SupportsPagination[_T]: ...
1818

1919
class Paginator(Generic[_T]):
20+
ELLIPSIS: ClassVar[_StrPromise]
2021
object_list: _SupportsPagination[_T]
2122
per_page: int
2223
orphans: int
@@ -42,8 +43,6 @@ class Paginator(Generic[_T]):
4243
self, number: int | float | str = ..., *, on_each_side: int = ..., on_ends: int = ...
4344
) -> Iterator[str | int]: ...
4445

45-
QuerySetPaginator: TypeAlias = Paginator
46-
4746
class Page(Sequence[_T]):
4847
object_list: _SupportsPagination[_T]
4948
number: int

django-stubs/core/serializers/__init__.pyi

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,10 @@ from typing import Any
33

44
from django.db.models.base import Model
55

6-
from .base import DeserializationError as DeserializationError
7-
from .base import DeserializedObject
8-
from .base import Deserializer as Deserializer
9-
from .base import M2MDeserializationError as M2MDeserializationError
10-
from .base import SerializationError as SerializationError
11-
from .base import Serializer as Serializer
6+
from .base import DeserializedObject, Deserializer, Serializer
127
from .base import SerializerDoesNotExist as SerializerDoesNotExist
138

14-
BUILTIN_SERIALIZERS: Any
9+
BUILTIN_SERIALIZERS: dict[str, str]
1510

1611
class BadSerializer:
1712
internal_use_only: bool

django-stubs/core/serializers/base.pyi

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
from collections.abc import Collection, Iterable, Sequence
22
from typing import IO, Any
33

4+
from _typeshed import ReadableBuffer
45
from django.db.models.base import Model
56
from django.db.models.fields import Field
67
from django.db.models.fields.related import ForeignKey, ManyToManyField
78

89
DEFER_FIELD: object
910

11+
class PickleSerializer:
12+
protocol: int
13+
def __init__(self, protocol: int | None = ...) -> None: ...
14+
def dumps(self, obj: Any) -> bytes: ...
15+
def loads(self, data: ReadableBuffer) -> Any: ...
16+
1017
class SerializerDoesNotExist(KeyError): ...
1118
class SerializationError(Exception): ...
1219

django-stubs/core/validators.pyi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ class URLValidator(RegexValidator):
3939
tld_re: str
4040
host_re: str
4141
schemes: Sequence[str]
42+
unsafe_chars: frozenset[str]
43+
max_length: int
4244
def __init__(self, schemes: Sequence[str] | None = ..., **kwargs: Any) -> None: ...
4345
def __call__(self, value: str) -> None: ...
4446
def deconstruct(obj) -> tuple[str, Sequence[Any], dict[str, Any]]: ...

scripts/stubtest/allowlist.txt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ django.core.validators.EmailValidator.literal_regex
5858
django.core.validators.EmailValidator.user_regex
5959
django.core.validators.slug_re
6060
django.core.validators.slug_unicode_re
61+
django.core.validators.URLValidator.regex
6162
django.core.management.commands.makemessages.plural_forms_re
6263
django.http.request.host_validation_re
6364
django.middleware.csrf.invalid_token_chars_re
@@ -105,6 +106,25 @@ django.db.migrations.operations.models.AlterTogetherOptionOperation.option_name
105106
django.views.generic.detail.SingleObjectMixin.model
106107
django.views.generic.edit.BaseDeleteView.form_class
107108

109+
# Dynamically added via django.core.management.color.make_style
110+
django.core.management.color.Style.ERROR
111+
django.core.management.color.Style.ERROR_OUTPUT
112+
django.core.management.color.Style.HTTP_BAD_REQUEST
113+
django.core.management.color.Style.HTTP_INFO
114+
django.core.management.color.Style.HTTP_NOT_FOUND
115+
django.core.management.color.Style.HTTP_NOT_MODIFIED
116+
django.core.management.color.Style.HTTP_REDIRECT
117+
django.core.management.color.Style.HTTP_SERVER_ERROR
118+
django.core.management.color.Style.HTTP_SUCCESS
119+
django.core.management.color.Style.MIGRATE_HEADING
120+
django.core.management.color.Style.MIGRATE_LABEL
121+
django.core.management.color.Style.NOTICE
122+
django.core.management.color.Style.SQL_COLTYPE
123+
django.core.management.color.Style.SQL_FIELD
124+
django.core.management.color.Style.SQL_KEYWORD
125+
django.core.management.color.Style.SQL_TABLE
126+
django.core.management.color.Style.SUCCESS
127+
django.core.management.color.Style.WARNING
108128
# `error: <...> is not present at runtime`
109129
# This happens often for variables removed in later django version.
110130
# We still keep them in stubs to be a bit more backward compatible.

scripts/stubtest/allowlist_todo.txt

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -897,30 +897,9 @@ django.core.management.BaseCommand.suppressed_base_arguments
897897
django.core.management.base.ALL_CHECKS
898898
django.core.management.base.BaseCommand.add_base_argument
899899
django.core.management.base.BaseCommand.suppressed_base_arguments
900-
django.core.management.color.HAS_COLORAMA
901-
django.core.management.color.Style.ERROR
902-
django.core.management.color.Style.ERROR_OUTPUT
903-
django.core.management.color.Style.HTTP_BAD_REQUEST
904-
django.core.management.color.Style.HTTP_INFO
905-
django.core.management.color.Style.HTTP_NOT_FOUND
906-
django.core.management.color.Style.HTTP_NOT_MODIFIED
907-
django.core.management.color.Style.HTTP_REDIRECT
908-
django.core.management.color.Style.HTTP_SERVER_ERROR
909-
django.core.management.color.Style.HTTP_SUCCESS
910-
django.core.management.color.Style.MIGRATE_HEADING
911-
django.core.management.color.Style.MIGRATE_LABEL
912-
django.core.management.color.Style.NOTICE
913-
django.core.management.color.Style.SQL_COLTYPE
914-
django.core.management.color.Style.SQL_FIELD
915-
django.core.management.color.Style.SQL_KEYWORD
916-
django.core.management.color.Style.SQL_TABLE
917-
django.core.management.color.Style.SUCCESS
918-
django.core.management.color.Style.WARNING
919900
django.core.management.commands.compilemessages.Command.handle
920901
django.core.management.commands.dbshell.Command.handle
921902
django.core.management.commands.diffsettings.Command.handle
922-
django.core.management.commands.dumpdata.has_bz2
923-
django.core.management.commands.dumpdata.has_lzma
924903
django.core.management.commands.flush.Command.handle
925904
django.core.management.commands.flush.Command.stealth_options
926905
django.core.management.commands.inspectdb.Command.get_meta
@@ -932,8 +911,6 @@ django.core.management.commands.loaddata.Command.get_fixture_name_and_dirs
932911
django.core.management.commands.loaddata.Command.get_targets
933912
django.core.management.commands.loaddata.Command.reset_sequences
934913
django.core.management.commands.loaddata.Command.save_obj
935-
django.core.management.commands.loaddata.has_bz2
936-
django.core.management.commands.loaddata.has_lzma
937914
django.core.management.commands.makemessages.BuildFile.is_templatized
938915
django.core.management.commands.makemessages.BuildFile.path
939916
django.core.management.commands.makemessages.BuildFile.work_path
@@ -960,20 +937,11 @@ django.core.management.commands.sqlflush.Command.handle
960937
django.core.management.commands.squashmigrations.Command.handle
961938
django.core.management.commands.startapp.Command.handle
962939
django.core.management.commands.startproject.Command.handle
963-
django.core.management.templates.TemplateCommand.apply_umask
964940
django.core.management.utils.find_formatters
965941
django.core.management.utils.run_formatters
966942
django.core.management.utils.sentinel
967-
django.core.paginator.Paginator.ELLIPSIS
968943
django.core.paginator.Paginator.count
969944
django.core.paginator.Paginator.num_pages
970-
django.core.paginator.QuerySetPaginator
971-
django.core.serializers.DeserializationError
972-
django.core.serializers.Deserializer
973-
django.core.serializers.M2MDeserializationError
974-
django.core.serializers.SerializationError
975-
django.core.serializers.Serializer
976-
django.core.serializers.base.PickleSerializer
977945
django.core.servers.basehttp.ServerHandler.__init__
978946
django.core.servers.basehttp.ThreadedWSGIServer.__init__
979947
django.core.signing.BASE62_ALPHABET
@@ -995,9 +963,6 @@ django.core.validators.ProhibitNullCharactersValidator.__new__
995963
django.core.validators.RegexValidator.__new__
996964
django.core.validators.StepValueValidator.__new__
997965
django.core.validators.URLValidator.__new__
998-
django.core.validators.URLValidator.regex
999-
django.core.validators.URLValidator.unsafe_chars
1000-
django.core.validators.URLValidator.max_length
1001966
django.db.backends.base.base.BaseDatabaseWrapper.SchemaEditorClass
1002967
django.db.backends.base.base.BaseDatabaseWrapper.client_class
1003968
django.db.backends.base.base.BaseDatabaseWrapper.close_if_health_check_failed

0 commit comments

Comments
 (0)