Extended django-stubs
This is an extension on the django-stubs project that attempts to make it possible to work with abstract Django ORM models as if they represent all the concrete models that extend from them.
There are also some extra changes to improve the experience of using this
mypy
plugin.
The intention is to get this code working and tested and documented before getting those changes into the django-stubs project itself.
Built Docs
History
This project comes from working on a large Django project (millions of lines of
code) that has varying levels of typing maturity within it. There is work to
get this project onto the latest version of mypy
and django-stubs
, but
it is difficult due to 100s of errors introduced by a change from mypy
1.5.0.
Most of these errors are due to using variables that are typed as Abstract Django ORM models when they should be typed as the concrete models that inherit those abstract models. Unfortunately this is not straight forward due to a few factors that mean what concrete models are available can’t be explicitly specified.
This project exists so that it can work with either the old version of
django-stubs
that is in use or the latest django-stubs
. Support for the
old version is purely a transitional clutch.
Status
This mostly works and is in a reasonable tidy state, but there needs to be a lot
more tests created and more work done on ensuring that the mypy
daemon can
still produce the correct results as code changes.
The current tasks to do next include:
Actual test coverage
Remake the
Dependencies
class to be coherent and not so messyProbably implement an actual graph structure that can be added and removed from incrementally
Remove the
get_customize_class_mro_hook
in favour of looking at theDepdendencies
hook.
Add more functionality and ensure the code works at scale
Potentially make it so that getting information from django context happens in a subprocess so that the import space of the plugin itself is not soiled by the imports from the django project (makes refreshing the context difficult)