This incorporates all type information I could glean from loaddata at
django/django@adb40d217e.
- Remove `help` per review comment:
https://github.com/typeddjango/django-stubs/pull/536#discussion_r533179013
- Add `exclude_models` and `exclude_apps` based on the return type of
`..utils.parse_apps_and_model_labels`.
- Change `loaddata`'s `fixture_labels` to `Sequence` of `str` instead of
`Iterable` because in practice it's a tuple, but at a type level, the
important thing is that `loaddata` iterates over `fixture_labels` more than
once. General iterables (which include iterators) need not support iteration
more than once.
- Correct the return type of `parse_name` to account for the possibility that
the data and compression formats are `None`.
- Correct the return type of `find_fixtures` to be a list of the same type that
`parse_name` returns.
- Add a type annotation for `SingleZipReader.read`. Django implements the method
in a way that actually conflicts with `zipfile.ZipFile.read`'s type. This
necessitates a `type: ignore[override]` to keep the tests passing. Mypy is
correct that there is an override error, but Django's code is what it is.
(And that method's signature was introduced way back in Django version 1.1,
commit django/django@089ab18c025917f38a2e3731ae4024d4810df1ec.)
- Added some of the instance attributes from command arguments: ignore, using, app_label, verbosity, format.
- Added class attribute: help.
- Fixed return type of find_fixtures.
* run black
* create monkeypatching function for adding get_item dunder
* whoops i forgot the test
* change the name in INSTALLED_APPS to make test pass
* turn the whole thing into a proper package
* move django_stubs_ext to requirements.txt
* also install requirements.txt
* attempt to fix pre-commit
* numerous small code review fixes
* fix dependency issues
* small dependency fixes
* configure proper license file location
* add the rest of the monkeypatching
* use strict mypy
* update contributing with a note monkeypatching generics
* copy release script from parent package
* Add stubs for remaining commands in django.core.management.commands
* Tighten up stub definitions in django.core.management.commands
* Apply some missing declarations in django.core.management.commands
* change get_user to use a protocol requiring a session
define a "_HasSession" protocol, and update contrib.auth.get_user to use it
get_user only requires a session field, and idiomatic django testing frequently calls get_user with a TestClient
* run black
* use union for get_user instead of a protocol
* create tests for get_user typechecking
* properly import test client
* Add `is_active` field to `django.contrib.auth.AbstractBaseUser` model
* Favor defining type than setting concrete value
* Update type to reflect sub-class implementation
This also corrects the fact that "run_checks" only returns a concatenated list
of all registered check results, which may only contain CheckMessage:
302caa40e4/django/core/checks/registry.py (L60)
The Django API requires that registered checks take an "app_configs"
argument, which is a list of AppConfig. This is practically also passed by
keyword, so all parameters should be specified with a "= ..." to indicate
that they are keywords.
Django always passed "app_configs" as a list, but checks can accept and
use a more general more Sequence.
The Django API also requires that registered checks take "**kwargs".
This results in the canonical parameters of:
"app_configs: Optional[Sequence[AppConfig]] = ..., **kwargs: Any"