mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-06 20:24:31 +08:00
enable test folders: select_for_update, i18n, httpwrappers, auth_tests, extra_regress (#107)
This commit is contained in:
3
django-stubs/conf/locale/__init__.pyi
Normal file
3
django-stubs/conf/locale/__init__.pyi
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from typing import Dict, Any
|
||||||
|
|
||||||
|
LANG_INFO: Dict[str, Any] = ...
|
||||||
@@ -10,7 +10,7 @@ class BaseUserManager(models.Manager):
|
|||||||
|
|
||||||
class AbstractBaseUser(models.Model):
|
class AbstractBaseUser(models.Model):
|
||||||
password: models.CharField = ...
|
password: models.CharField = ...
|
||||||
last_login: Optional[models.DateTimeField] = ...
|
last_login: models.DateTimeField = ...
|
||||||
is_active: models.BooleanField = ...
|
is_active: models.BooleanField = ...
|
||||||
REQUIRED_FIELDS: List[str] = ...
|
REQUIRED_FIELDS: List[str] = ...
|
||||||
class Meta: ...
|
class Meta: ...
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class BasePasswordHasher:
|
|||||||
memory_cost: int = ...
|
memory_cost: int = ...
|
||||||
parallelism: int = ...
|
parallelism: int = ...
|
||||||
digest: Any = ...
|
digest: Any = ...
|
||||||
iterations: Optional[int] = ...
|
iterations: int = ...
|
||||||
def salt(self) -> str: ...
|
def salt(self) -> str: ...
|
||||||
def verify(self, password: str, encoded: str) -> bool: ...
|
def verify(self, password: str, encoded: str) -> bool: ...
|
||||||
def encode(self, password: str, salt: str) -> Any: ...
|
def encode(self, password: str, salt: str) -> Any: ...
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
|
import getpass as getpass
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
class NotRunningInTTYException(Exception): ...
|
class NotRunningInTTYException(Exception): ...
|
||||||
class Command(BaseCommand): ...
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
stdin: Any
|
||||||
|
|||||||
@@ -2,21 +2,20 @@ from pathlib import Path, PosixPath
|
|||||||
from typing import Any, List, Mapping, Optional, Protocol, Sequence, Set, Union
|
from typing import Any, List, Mapping, Optional, Protocol, Sequence, Set, Union
|
||||||
|
|
||||||
from django.contrib.auth.base_user import AbstractBaseUser
|
from django.contrib.auth.base_user import AbstractBaseUser
|
||||||
|
from django.db.models.base import Model
|
||||||
|
|
||||||
|
_UserModel = Model
|
||||||
|
|
||||||
class PasswordValidator(Protocol):
|
class PasswordValidator(Protocol):
|
||||||
def validate(self, password: str, user: Optional[AbstractBaseUser] = ...): ...
|
def password_changed(self, password: str, user: Optional[_UserModel] = ...): ...
|
||||||
|
|
||||||
def get_default_password_validators() -> List[PasswordValidator]: ...
|
def get_default_password_validators() -> List[PasswordValidator]: ...
|
||||||
def get_password_validators(validator_config: Sequence[Mapping[str, Any]]) -> List[PasswordValidator]: ...
|
def get_password_validators(validator_config: Sequence[Mapping[str, Any]]) -> List[PasswordValidator]: ...
|
||||||
def validate_password(
|
def validate_password(
|
||||||
password: str,
|
password: str, user: Optional[_UserModel] = ..., password_validators: Optional[Sequence[PasswordValidator]] = ...
|
||||||
user: Optional[AbstractBaseUser] = ...,
|
|
||||||
password_validators: Optional[Sequence[PasswordValidator]] = ...,
|
|
||||||
) -> None: ...
|
) -> None: ...
|
||||||
def password_changed(
|
def password_changed(
|
||||||
password: str,
|
password: str, user: Optional[_UserModel] = ..., password_validators: Optional[Sequence[PasswordValidator]] = ...
|
||||||
user: Optional[AbstractBaseUser] = ...,
|
|
||||||
password_validators: Optional[Sequence[PasswordValidator]] = ...,
|
|
||||||
) -> None: ...
|
) -> None: ...
|
||||||
def password_validators_help_texts(password_validators: Optional[Sequence[PasswordValidator]] = ...) -> List[str]: ...
|
def password_validators_help_texts(password_validators: Optional[Sequence[PasswordValidator]] = ...) -> List[str]: ...
|
||||||
|
|
||||||
@@ -25,7 +24,7 @@ password_validators_help_text_html: Any
|
|||||||
class MinimumLengthValidator:
|
class MinimumLengthValidator:
|
||||||
min_length: int = ...
|
min_length: int = ...
|
||||||
def __init__(self, min_length: int = ...) -> None: ...
|
def __init__(self, min_length: int = ...) -> None: ...
|
||||||
def validate(self, password: str, user: Optional[AbstractBaseUser] = ...) -> None: ...
|
def validate(self, password: str, user: Optional[_UserModel] = ...) -> None: ...
|
||||||
def get_help_text(self) -> str: ...
|
def get_help_text(self) -> str: ...
|
||||||
|
|
||||||
class UserAttributeSimilarityValidator:
|
class UserAttributeSimilarityValidator:
|
||||||
@@ -33,16 +32,16 @@ class UserAttributeSimilarityValidator:
|
|||||||
user_attributes: Sequence[str] = ...
|
user_attributes: Sequence[str] = ...
|
||||||
max_similarity: float = ...
|
max_similarity: float = ...
|
||||||
def __init__(self, user_attributes: Sequence[str] = ..., max_similarity: float = ...) -> None: ...
|
def __init__(self, user_attributes: Sequence[str] = ..., max_similarity: float = ...) -> None: ...
|
||||||
def validate(self, password: str, user: Optional[AbstractBaseUser] = ...) -> None: ...
|
def validate(self, password: str, user: Optional[_UserModel] = ...) -> None: ...
|
||||||
def get_help_text(self) -> str: ...
|
def get_help_text(self) -> str: ...
|
||||||
|
|
||||||
class CommonPasswordValidator:
|
class CommonPasswordValidator:
|
||||||
DEFAULT_PASSWORD_LIST_PATH: Path = ...
|
DEFAULT_PASSWORD_LIST_PATH: Path = ...
|
||||||
passwords: Set[str] = ...
|
passwords: Set[str] = ...
|
||||||
def __init__(self, password_list_path: Union[PosixPath, str] = ...) -> None: ...
|
def __init__(self, password_list_path: Union[PosixPath, str] = ...) -> None: ...
|
||||||
def validate(self, password: str, user: Optional[AbstractBaseUser] = ...) -> None: ...
|
def validate(self, password: str, user: Optional[_UserModel] = ...) -> None: ...
|
||||||
def get_help_text(self) -> str: ...
|
def get_help_text(self) -> str: ...
|
||||||
|
|
||||||
class NumericPasswordValidator:
|
class NumericPasswordValidator:
|
||||||
def validate(self, password: str, user: Optional[AbstractBaseUser] = ...) -> None: ...
|
def validate(self, password: str, user: Optional[_UserModel] = ...) -> None: ...
|
||||||
def get_help_text(self) -> str: ...
|
def get_help_text(self) -> str: ...
|
||||||
|
|||||||
3
django-stubs/contrib/auth/urls.pyi
Normal file
3
django-stubs/contrib/auth/urls.pyi
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from typing import Any, List
|
||||||
|
|
||||||
|
urlpatterns: List[Any] = ...
|
||||||
@@ -71,7 +71,8 @@ class EmailMessage:
|
|||||||
reply_to: Optional[Union[List[Optional[str]], str]] = ...,
|
reply_to: Optional[Union[List[Optional[str]], str]] = ...,
|
||||||
) -> None: ...
|
) -> None: ...
|
||||||
def get_connection(self, fail_silently: bool = ...) -> Any: ...
|
def get_connection(self, fail_silently: bool = ...) -> Any: ...
|
||||||
def message(self) -> MIMEMixin: ...
|
# TODO: when typeshed gets more types for email.Message, move it to MIMEMessage, now it has too many false-positives
|
||||||
|
def message(self) -> Any: ...
|
||||||
def recipients(self) -> List[str]: ...
|
def recipients(self) -> List[str]: ...
|
||||||
def send(self, fail_silently: bool = ...) -> int: ...
|
def send(self, fail_silently: bool = ...) -> int: ...
|
||||||
def attach(
|
def attach(
|
||||||
|
|||||||
45
django-stubs/core/management/commands/makemessages.pyi
Normal file
45
django-stubs/core/management/commands/makemessages.pyi
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
import os
|
||||||
|
import re
|
||||||
|
from typing import Any, Pattern, Type, Optional
|
||||||
|
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from django.utils.functional import cached_property
|
||||||
|
from django.utils.jslex import prepare_js_for_gettext
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.utils.translation import templatize
|
||||||
|
|
||||||
|
plural_forms_re: Pattern = ...
|
||||||
|
STATUS_OK: int = ...
|
||||||
|
NO_LOCALE_DIR: Any = ...
|
||||||
|
|
||||||
|
def check_programs(*programs: str) -> None: ...
|
||||||
|
|
||||||
|
class TranslatableFile:
|
||||||
|
dirpath: str
|
||||||
|
file_name: str
|
||||||
|
locale_dir: str
|
||||||
|
def __init__(self, dirpath: str, file_name: str, locale_dir: Optional[str]) -> None: ...
|
||||||
|
|
||||||
|
class BuildFile:
|
||||||
|
"""
|
||||||
|
Represent the state of a translatable file during the build process.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, command: BaseCommand, domain: str, translatable: TranslatableFile) -> None: ...
|
||||||
|
@property
|
||||||
|
def is_templatized(self) -> bool: ...
|
||||||
|
@property
|
||||||
|
def path(self) -> str: ...
|
||||||
|
@property
|
||||||
|
def work_path(self) -> str: ...
|
||||||
|
def preprocess(self) -> None: ...
|
||||||
|
def postprocess_messages(self, msgs: str) -> str: ...
|
||||||
|
def cleanup(self) -> None: ...
|
||||||
|
|
||||||
|
def normalize_eols(raw_contents: str) -> str: ...
|
||||||
|
def write_pot_file(potfile: str, msgs: str) -> None: ...
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
translatable_file_class: Type[TranslatableFile] = ...
|
||||||
|
build_file_class: Type[BuildFile] = ...
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
from typing import Any, Dict, List, Optional, Sequence, Set, Tuple, TypeVar, Union
|
from typing import Any, Dict, List, Optional, Sequence, Set, Tuple, TypeVar, Union
|
||||||
|
|
||||||
from django.core import checks
|
|
||||||
from django.db.models.manager import Manager
|
from django.db.models.manager import Manager
|
||||||
|
|
||||||
from django.core.checks.messages import CheckMessage
|
from django.core.checks.messages import CheckMessage
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from typing import Any, Dict, Iterator, List, Mapping, Optional, Sequence, Type, Union
|
from typing import Any, Dict, Iterator, List, Mapping, Optional, Sequence, Type, Union, Tuple
|
||||||
|
|
||||||
from django.core.exceptions import ValidationError as ValidationError
|
from django.core.exceptions import ValidationError as ValidationError
|
||||||
from django.forms.boundfield import BoundField
|
from django.forms.boundfield import BoundField
|
||||||
@@ -12,6 +12,8 @@ class DeclarativeFieldsMetaclass(MediaDefiningClass):
|
|||||||
def __new__(mcs, name: str, bases: Sequence[Type[BaseForm]], attrs: Dict[str, Any]) -> Type[BaseForm]: ...
|
def __new__(mcs, name: str, bases: Sequence[Type[BaseForm]], attrs: Dict[str, Any]) -> Type[BaseForm]: ...
|
||||||
|
|
||||||
class BaseForm:
|
class BaseForm:
|
||||||
|
class Meta:
|
||||||
|
fields: Sequence[str] = ...
|
||||||
default_renderer: Any = ...
|
default_renderer: Any = ...
|
||||||
field_order: Any = ...
|
field_order: Any = ...
|
||||||
use_required_attribute: bool = ...
|
use_required_attribute: bool = ...
|
||||||
|
|||||||
@@ -1,5 +1,20 @@
|
|||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from typing import Any, BinaryIO, Dict, Iterable, List, Mapping, Optional, Pattern, Set, Tuple, Union, overload
|
from typing import (
|
||||||
|
Any,
|
||||||
|
BinaryIO,
|
||||||
|
Dict,
|
||||||
|
Iterable,
|
||||||
|
List,
|
||||||
|
Mapping,
|
||||||
|
Optional,
|
||||||
|
Pattern,
|
||||||
|
Set,
|
||||||
|
Tuple,
|
||||||
|
Union,
|
||||||
|
overload,
|
||||||
|
TypeVar,
|
||||||
|
Type,
|
||||||
|
)
|
||||||
|
|
||||||
from django.contrib.sessions.backends.base import SessionBase
|
from django.contrib.sessions.backends.base import SessionBase
|
||||||
from django.utils.datastructures import CaseInsensitiveMapping, ImmutableList, MultiValueDict
|
from django.utils.datastructures import CaseInsensitiveMapping, ImmutableList, MultiValueDict
|
||||||
@@ -60,8 +75,10 @@ class HttpRequest(BytesIO):
|
|||||||
def body(self) -> bytes: ...
|
def body(self) -> bytes: ...
|
||||||
def _load_post_and_files(self) -> None: ...
|
def _load_post_and_files(self) -> None: ...
|
||||||
|
|
||||||
|
_Q = TypeVar("_Q", bound="QueryDict")
|
||||||
|
|
||||||
class QueryDict(MultiValueDict[str, str]):
|
class QueryDict(MultiValueDict[str, str]):
|
||||||
encoding: Any = ...
|
encoding: str = ...
|
||||||
_mutable: bool = ...
|
_mutable: bool = ...
|
||||||
def __init__(
|
def __init__(
|
||||||
self, query_string: Optional[Union[str, bytes]] = ..., mutable: bool = ..., encoding: Optional[str] = ...
|
self, query_string: Optional[Union[str, bytes]] = ..., mutable: bool = ..., encoding: Optional[str] = ...
|
||||||
@@ -70,6 +87,14 @@ class QueryDict(MultiValueDict[str, str]):
|
|||||||
def setlistdefault(self, key: str, default_list: Optional[List[str]] = ...) -> List[str]: ...
|
def setlistdefault(self, key: str, default_list: Optional[List[str]] = ...) -> List[str]: ...
|
||||||
def appendlist(self, key: str, value: str) -> None: ...
|
def appendlist(self, key: str, value: str) -> None: ...
|
||||||
def urlencode(self, safe: Optional[str] = ...) -> str: ...
|
def urlencode(self, safe: Optional[str] = ...) -> str: ...
|
||||||
|
@classmethod
|
||||||
|
def fromkeys(
|
||||||
|
cls: Type[_Q],
|
||||||
|
iterable: Iterable[Union[bytes, str]],
|
||||||
|
value: Any = ...,
|
||||||
|
mutable: bool = ...,
|
||||||
|
encoding: Optional[str] = ...,
|
||||||
|
) -> _Q: ...
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def bytes_to_text(s: bytes, encoding: str) -> str: ...
|
def bytes_to_text(s: bytes, encoding: str) -> str: ...
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ class OrderedSet(MutableSet[_K]):
|
|||||||
|
|
||||||
class MultiValueDictKeyError(KeyError): ...
|
class MultiValueDictKeyError(KeyError): ...
|
||||||
|
|
||||||
|
_D = TypeVar("_D", bound="MultiValueDict")
|
||||||
|
|
||||||
class MultiValueDict(MutableMapping[_K, _V]):
|
class MultiValueDict(MutableMapping[_K, _V]):
|
||||||
@overload
|
@overload
|
||||||
def __init__(self, key_to_list_mapping: Mapping[_K, Optional[List[_V]]] = ...) -> None: ...
|
def __init__(self, key_to_list_mapping: Mapping[_K, Optional[List[_V]]] = ...) -> None: ...
|
||||||
@@ -41,7 +43,7 @@ class MultiValueDict(MutableMapping[_K, _V]):
|
|||||||
def appendlist(self, key: _K, value: _V) -> None: ...
|
def appendlist(self, key: _K, value: _V) -> None: ...
|
||||||
def lists(self) -> Iterable[Tuple[_K, List[_V]]]: ...
|
def lists(self) -> Iterable[Tuple[_K, List[_V]]]: ...
|
||||||
def dict(self) -> Dict[_K, Union[_V, List[_V]]]: ...
|
def dict(self) -> Dict[_K, Union[_V, List[_V]]]: ...
|
||||||
def copy(self) -> MultiValueDict[_K, _V]: ...
|
def copy(self: _D) -> _D: ...
|
||||||
# These overrides are needed to convince mypy that this isn't an abstract class
|
# These overrides are needed to convince mypy that this isn't an abstract class
|
||||||
def __delitem__(self, item: _K) -> None: ...
|
def __delitem__(self, item: _K) -> None: ...
|
||||||
def __getitem__(self, item: _K) -> Union[_V, Literal[[]]]: ... # type: ignore
|
def __getitem__(self, item: _K) -> Union[_V, Literal[[]]]: ... # type: ignore
|
||||||
|
|||||||
7
django-stubs/utils/translation/reloader.pyi
Normal file
7
django-stubs/utils/translation/reloader.pyi
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
from typing import Any, Optional
|
||||||
|
|
||||||
|
from django.utils.autoreload import BaseReloader
|
||||||
|
|
||||||
|
def watch_for_translation_changes(sender: BaseReloader, **kwargs: Any) -> None: ...
|
||||||
|
def translation_file_changed(sender: Optional[BaseReloader], file_path: Path, **kwargs: Any) -> bool: ...
|
||||||
@@ -87,6 +87,8 @@ IGNORED_ERRORS = {
|
|||||||
'xml.dom',
|
'xml.dom',
|
||||||
'numpy',
|
'numpy',
|
||||||
'tblib',
|
'tblib',
|
||||||
|
'bcrypt',
|
||||||
|
'argon2',
|
||||||
# TODO: values().annotate()
|
# TODO: values().annotate()
|
||||||
'TypedDict',
|
'TypedDict',
|
||||||
'namedtuple',
|
'namedtuple',
|
||||||
@@ -138,7 +140,21 @@ IGNORED_ERRORS = {
|
|||||||
'"validate_password" does not return a value',
|
'"validate_password" does not return a value',
|
||||||
'"password_changed" does not return a value',
|
'"password_changed" does not return a value',
|
||||||
re.compile(r'"validate" of "([A-Za-z]+)" does not return a value'),
|
re.compile(r'"validate" of "([A-Za-z]+)" does not return a value'),
|
||||||
'Module has no attribute "SessionStore"'
|
'Module has no attribute "SessionStore"',
|
||||||
|
'AbstractBaseUser',
|
||||||
|
'Argument "user" to "password_changed" has incompatible type "object"',
|
||||||
|
'Argument "password_validators" to "password_changed" has incompatible type "Tuple[Validator]"; '
|
||||||
|
+ 'expected "Optional[Sequence[PasswordValidator]]"',
|
||||||
|
'Value of type "Optional[List[_Record]]" is not indexable',
|
||||||
|
'"Model" has no attribute',
|
||||||
|
'Incompatible type for "id" of "User"',
|
||||||
|
re.compile(r'Module has no attribute "(update|revert)_proxy_model_permissions"'),
|
||||||
|
'Unsupported right operand type for in ("object")',
|
||||||
|
'mock_getpass',
|
||||||
|
'Unsupported left operand type for + ("Sequence[str]")',
|
||||||
|
'AuthenticationFormWithInactiveUsersOkay',
|
||||||
|
'has no attribute "alternatives"',
|
||||||
|
'Incompatible types in assignment (expression has type "Dict[str, Any]", variable has type "QueryDict")'
|
||||||
],
|
],
|
||||||
'basic': [
|
'basic': [
|
||||||
'Unexpected keyword argument "unknown_kwarg" for "refresh_from_db" of "Model"',
|
'Unexpected keyword argument "unknown_kwarg" for "refresh_from_db" of "Model"',
|
||||||
@@ -221,6 +237,9 @@ IGNORED_ERRORS = {
|
|||||||
'expressions_window': [
|
'expressions_window': [
|
||||||
'has incompatible type "str"'
|
'has incompatible type "str"'
|
||||||
],
|
],
|
||||||
|
'extra_regress': [
|
||||||
|
'"User" has no attribute "alpha"'
|
||||||
|
],
|
||||||
'file_uploads': [
|
'file_uploads': [
|
||||||
'"Iterable[Any]" has no attribute',
|
'"Iterable[Any]" has no attribute',
|
||||||
'"IO[Any]" has no attribute'
|
'"IO[Any]" has no attribute'
|
||||||
@@ -285,12 +304,23 @@ IGNORED_ERRORS = {
|
|||||||
'"HasLinkThing" has no attribute',
|
'"HasLinkThing" has no attribute',
|
||||||
'"Link" has no attribute'
|
'"Link" has no attribute'
|
||||||
],
|
],
|
||||||
|
'httpwrappers': [
|
||||||
|
'Argument 2 to "appendlist" of "QueryDict"',
|
||||||
|
'Incompatible types in assignment (expression has type "int", target has type "Union[str, List[str]]")',
|
||||||
|
'Argument 1 to "fromkeys" of "QueryDict" has incompatible type "int"'
|
||||||
|
],
|
||||||
'humanize_tests': [
|
'humanize_tests': [
|
||||||
'Argument 1 to "append" of "list" has incompatible type "None"; expected "str"'
|
'Argument 1 to "append" of "list" has incompatible type "None"; expected "str"'
|
||||||
],
|
],
|
||||||
'inline_formsets': [
|
'inline_formsets': [
|
||||||
'has no attribute "form"'
|
'has no attribute "form"'
|
||||||
],
|
],
|
||||||
|
'i18n': [
|
||||||
|
'Incompatible types in assignment (expression has type "I18nForm", variable has type "SelectDateForm")',
|
||||||
|
'has incompatible type "object"',
|
||||||
|
'Value of type "Optional[List[_Record]]" is not indexable',
|
||||||
|
'"Command" has no attribute'
|
||||||
|
],
|
||||||
'logging_tests': [
|
'logging_tests': [
|
||||||
'"Handler" has no attribute "stream"'
|
'"Handler" has no attribute "stream"'
|
||||||
],
|
],
|
||||||
@@ -474,6 +504,9 @@ IGNORED_ERRORS = {
|
|||||||
'Incompatible types in assignment (expression has type "Parent2", variable has type "Parent1")',
|
'Incompatible types in assignment (expression has type "Parent2", variable has type "Parent1")',
|
||||||
'has no attribute'
|
'has no attribute'
|
||||||
],
|
],
|
||||||
|
'select_for_update': [
|
||||||
|
'has incompatible type "object"'
|
||||||
|
],
|
||||||
'servers': [
|
'servers': [
|
||||||
re.compile('Argument [0-9] to "WSGIRequestHandler"'),
|
re.compile('Argument [0-9] to "WSGIRequestHandler"'),
|
||||||
'"HTTPResponse" has no attribute',
|
'"HTTPResponse" has no attribute',
|
||||||
@@ -564,7 +597,7 @@ TESTS_DIRS = [
|
|||||||
'annotations',
|
'annotations',
|
||||||
'app_loading',
|
'app_loading',
|
||||||
'apps',
|
'apps',
|
||||||
# TODO: 'auth_tests',
|
'auth_tests',
|
||||||
'backends',
|
'backends',
|
||||||
'base',
|
'base',
|
||||||
'bash_completion',
|
'bash_completion',
|
||||||
@@ -604,7 +637,7 @@ TESTS_DIRS = [
|
|||||||
'expressions',
|
'expressions',
|
||||||
'expressions_case',
|
'expressions_case',
|
||||||
'expressions_window',
|
'expressions_window',
|
||||||
# TODO: 'extra_regress',
|
'extra_regress',
|
||||||
'field_deconstruction',
|
'field_deconstruction',
|
||||||
'field_defaults',
|
'field_defaults',
|
||||||
'field_subclassing',
|
'field_subclassing',
|
||||||
@@ -629,9 +662,9 @@ TESTS_DIRS = [
|
|||||||
'get_or_create',
|
'get_or_create',
|
||||||
# TODO: 'gis_tests',
|
# TODO: 'gis_tests',
|
||||||
'handlers',
|
'handlers',
|
||||||
# TODO: 'httpwrappers',
|
'httpwrappers',
|
||||||
'humanize_tests',
|
'humanize_tests',
|
||||||
# TODO: 'i18n',
|
'i18n',
|
||||||
'import_error_package',
|
'import_error_package',
|
||||||
'indexes',
|
'indexes',
|
||||||
'inline_formsets',
|
'inline_formsets',
|
||||||
@@ -705,7 +738,7 @@ TESTS_DIRS = [
|
|||||||
'reverse_lookup',
|
'reverse_lookup',
|
||||||
'save_delete_hooks',
|
'save_delete_hooks',
|
||||||
'schema',
|
'schema',
|
||||||
# TODO: 'select_for_update',
|
'select_for_update',
|
||||||
'select_related',
|
'select_related',
|
||||||
'select_related_onetoone',
|
'select_related_onetoone',
|
||||||
'select_related_regress',
|
'select_related_regress',
|
||||||
|
|||||||
Reference in New Issue
Block a user