Skip to content

Commit

Permalink
django.core.management stub update (#1787)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
UnknownPlatypus authored Oct 21, 2023
1 parent 35bd241 commit 1334efd
Show file tree
Hide file tree
Showing 10 changed files with 44 additions and 47 deletions.
4 changes: 3 additions & 1 deletion django-stubs/core/management/color.pyi
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
HAS_COLORAMA: bool

def supports_color() -> bool: ...

class Style:
# set by make_style
# set by make_style. Method names are keys in django.utils.termcolors.PALETTES
def ERROR(self, text: str) -> str: ...
def SUCCESS(self, text: str) -> str: ...
def WARNING(self, text: str) -> str: ...
Expand Down
3 changes: 3 additions & 0 deletions django-stubs/core/management/commands/dumpdata.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
from django.core.management.base import BaseCommand

has_bz2: bool
has_lzma: bool

class ProxyModelWarning(Warning): ...
class Command(BaseCommand): ...
3 changes: 3 additions & 0 deletions django-stubs/core/management/commands/loaddata.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ from django.apps.config import AppConfig
from django.core.management.base import BaseCommand
from django.db.models.base import Model

has_bz2: bool
has_lzma: bool

READ_STDIN: str

class Command(BaseCommand):
Expand Down
1 change: 1 addition & 0 deletions django-stubs/core/management/templates.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ class TemplateCommand(BaseCommand):
def splitext(self, the_path: str) -> tuple[str, str]: ...
def extract(self, filename: str) -> str: ...
def is_url(self, template: str) -> bool: ...
def apply_umask(self, old_path: str, new_path: str) -> None: ...
def make_writeable(self, filename: str) -> None: ...
7 changes: 3 additions & 4 deletions django-stubs/core/paginator.pyi
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from collections.abc import Iterable, Iterator, Sequence, Sized
from typing import Generic, Protocol, TypeVar, overload
from typing import ClassVar, Generic, Protocol, TypeVar, overload

from typing_extensions import TypeAlias
from django.utils.functional import _StrPromise

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

class Paginator(Generic[_T]):
ELLIPSIS: ClassVar[_StrPromise]
object_list: _SupportsPagination[_T]
per_page: int
orphans: int
Expand All @@ -42,8 +43,6 @@ class Paginator(Generic[_T]):
self, number: int | float | str = ..., *, on_each_side: int = ..., on_ends: int = ...
) -> Iterator[str | int]: ...

QuerySetPaginator: TypeAlias = Paginator

class Page(Sequence[_T]):
object_list: _SupportsPagination[_T]
number: int
Expand Down
9 changes: 2 additions & 7 deletions django-stubs/core/serializers/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,10 @@ from typing import Any

from django.db.models.base import Model

from .base import DeserializationError as DeserializationError
from .base import DeserializedObject
from .base import Deserializer as Deserializer
from .base import M2MDeserializationError as M2MDeserializationError
from .base import SerializationError as SerializationError
from .base import Serializer as Serializer
from .base import DeserializedObject, Deserializer, Serializer
from .base import SerializerDoesNotExist as SerializerDoesNotExist

BUILTIN_SERIALIZERS: Any
BUILTIN_SERIALIZERS: dict[str, str]

class BadSerializer:
internal_use_only: bool
Expand Down
7 changes: 7 additions & 0 deletions django-stubs/core/serializers/base.pyi
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
from collections.abc import Collection, Iterable, Sequence
from typing import IO, Any

from _typeshed import ReadableBuffer
from django.db.models.base import Model
from django.db.models.fields import Field
from django.db.models.fields.related import ForeignKey, ManyToManyField

DEFER_FIELD: object

class PickleSerializer:
protocol: int
def __init__(self, protocol: int | None = ...) -> None: ...
def dumps(self, obj: Any) -> bytes: ...
def loads(self, data: ReadableBuffer) -> Any: ...

class SerializerDoesNotExist(KeyError): ...
class SerializationError(Exception): ...

Expand Down
2 changes: 2 additions & 0 deletions django-stubs/core/validators.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ class URLValidator(RegexValidator):
tld_re: str
host_re: str
schemes: Sequence[str]
unsafe_chars: frozenset[str]
max_length: int
def __init__(self, schemes: Sequence[str] | None = ..., **kwargs: Any) -> None: ...
def __call__(self, value: str) -> None: ...
def deconstruct(obj) -> tuple[str, Sequence[Any], dict[str, Any]]: ...
Expand Down
20 changes: 20 additions & 0 deletions scripts/stubtest/allowlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ django.core.validators.EmailValidator.literal_regex
django.core.validators.EmailValidator.user_regex
django.core.validators.slug_re
django.core.validators.slug_unicode_re
django.core.validators.URLValidator.regex
django.core.management.commands.makemessages.plural_forms_re
django.http.request.host_validation_re
django.middleware.csrf.invalid_token_chars_re
Expand Down Expand Up @@ -105,6 +106,25 @@ django.db.migrations.operations.models.AlterTogetherOptionOperation.option_name
django.views.generic.detail.SingleObjectMixin.model
django.views.generic.edit.BaseDeleteView.form_class

# Dynamically added via django.core.management.color.make_style
django.core.management.color.Style.ERROR
django.core.management.color.Style.ERROR_OUTPUT
django.core.management.color.Style.HTTP_BAD_REQUEST
django.core.management.color.Style.HTTP_INFO
django.core.management.color.Style.HTTP_NOT_FOUND
django.core.management.color.Style.HTTP_NOT_MODIFIED
django.core.management.color.Style.HTTP_REDIRECT
django.core.management.color.Style.HTTP_SERVER_ERROR
django.core.management.color.Style.HTTP_SUCCESS
django.core.management.color.Style.MIGRATE_HEADING
django.core.management.color.Style.MIGRATE_LABEL
django.core.management.color.Style.NOTICE
django.core.management.color.Style.SQL_COLTYPE
django.core.management.color.Style.SQL_FIELD
django.core.management.color.Style.SQL_KEYWORD
django.core.management.color.Style.SQL_TABLE
django.core.management.color.Style.SUCCESS
django.core.management.color.Style.WARNING
# `error: <...> is not present at runtime`
# This happens often for variables removed in later django version.
# We still keep them in stubs to be a bit more backward compatible.
Expand Down
35 changes: 0 additions & 35 deletions scripts/stubtest/allowlist_todo.txt
Original file line number Diff line number Diff line change
Expand Up @@ -897,30 +897,9 @@ django.core.management.BaseCommand.suppressed_base_arguments
django.core.management.base.ALL_CHECKS
django.core.management.base.BaseCommand.add_base_argument
django.core.management.base.BaseCommand.suppressed_base_arguments
django.core.management.color.HAS_COLORAMA
django.core.management.color.Style.ERROR
django.core.management.color.Style.ERROR_OUTPUT
django.core.management.color.Style.HTTP_BAD_REQUEST
django.core.management.color.Style.HTTP_INFO
django.core.management.color.Style.HTTP_NOT_FOUND
django.core.management.color.Style.HTTP_NOT_MODIFIED
django.core.management.color.Style.HTTP_REDIRECT
django.core.management.color.Style.HTTP_SERVER_ERROR
django.core.management.color.Style.HTTP_SUCCESS
django.core.management.color.Style.MIGRATE_HEADING
django.core.management.color.Style.MIGRATE_LABEL
django.core.management.color.Style.NOTICE
django.core.management.color.Style.SQL_COLTYPE
django.core.management.color.Style.SQL_FIELD
django.core.management.color.Style.SQL_KEYWORD
django.core.management.color.Style.SQL_TABLE
django.core.management.color.Style.SUCCESS
django.core.management.color.Style.WARNING
django.core.management.commands.compilemessages.Command.handle
django.core.management.commands.dbshell.Command.handle
django.core.management.commands.diffsettings.Command.handle
django.core.management.commands.dumpdata.has_bz2
django.core.management.commands.dumpdata.has_lzma
django.core.management.commands.flush.Command.handle
django.core.management.commands.flush.Command.stealth_options
django.core.management.commands.inspectdb.Command.get_meta
Expand All @@ -932,8 +911,6 @@ django.core.management.commands.loaddata.Command.get_fixture_name_and_dirs
django.core.management.commands.loaddata.Command.get_targets
django.core.management.commands.loaddata.Command.reset_sequences
django.core.management.commands.loaddata.Command.save_obj
django.core.management.commands.loaddata.has_bz2
django.core.management.commands.loaddata.has_lzma
django.core.management.commands.makemessages.BuildFile.is_templatized
django.core.management.commands.makemessages.BuildFile.path
django.core.management.commands.makemessages.BuildFile.work_path
Expand All @@ -960,20 +937,11 @@ django.core.management.commands.sqlflush.Command.handle
django.core.management.commands.squashmigrations.Command.handle
django.core.management.commands.startapp.Command.handle
django.core.management.commands.startproject.Command.handle
django.core.management.templates.TemplateCommand.apply_umask
django.core.management.utils.find_formatters
django.core.management.utils.run_formatters
django.core.management.utils.sentinel
django.core.paginator.Paginator.ELLIPSIS
django.core.paginator.Paginator.count
django.core.paginator.Paginator.num_pages
django.core.paginator.QuerySetPaginator
django.core.serializers.DeserializationError
django.core.serializers.Deserializer
django.core.serializers.M2MDeserializationError
django.core.serializers.SerializationError
django.core.serializers.Serializer
django.core.serializers.base.PickleSerializer
django.core.servers.basehttp.ServerHandler.__init__
django.core.servers.basehttp.ThreadedWSGIServer.__init__
django.core.signing.BASE62_ALPHABET
Expand All @@ -995,9 +963,6 @@ django.core.validators.ProhibitNullCharactersValidator.__new__
django.core.validators.RegexValidator.__new__
django.core.validators.StepValueValidator.__new__
django.core.validators.URLValidator.__new__
django.core.validators.URLValidator.regex
django.core.validators.URLValidator.unsafe_chars
django.core.validators.URLValidator.max_length
django.db.backends.base.base.BaseDatabaseWrapper.SchemaEditorClass
django.db.backends.base.base.BaseDatabaseWrapper.client_class
django.db.backends.base.base.BaseDatabaseWrapper.close_if_health_check_failed
Expand Down

0 comments on commit 1334efd

Please sign in to comment.