From f48579437e2bf90ffee663062ae8c09f0fa6666b Mon Sep 17 00:00:00 2001 From: Braden MacDonald Date: Fri, 23 Jun 2023 15:56:36 -0700 Subject: [PATCH] feat: type hinting more code with mypy --- mypy.ini | 14 +++++++++++++- requirements/constraints.txt | 5 +++++ requirements/edx/development.in | 2 ++ requirements/edx/development.txt | 23 ++++++++++++++++++++++- 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/mypy.ini b/mypy.ini index eee85b592ff7..49d6f61b29d6 100644 --- a/mypy.ini +++ b/mypy.ini @@ -3,4 +3,16 @@ follow_imports = silent ignore_missing_imports = True allow_untyped_globals = True exclude = tests -files = openedx/core/djangoapps/content/learning_sequences/,openedx/core/types +plugins = + mypy_django_plugin.main, + mypy_drf_plugin.main +files = + openedx/core/djangoapps/content/learning_sequences/, + openedx/core/djangoapps/content_staging, + openedx/core/djangoapps/content_libraries, + openedx/core/djangoapps/xblock, + openedx/core/types + +[mypy.plugins.django-stubs] +# content_staging only works with CMS; others work with either, so we run mypy with CMS settings. +django_settings_module = "cms.envs.test" diff --git a/requirements/constraints.txt b/requirements/constraints.txt index c96ddb4ba00a..5f37f95298ae 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -113,3 +113,8 @@ djangorestframework<3.15.0 # tests failing with greater version. Fix this in separate ticket. pillow<10.0.0 + +# The version of django-stubs we can use depends on which Django release we're using +# 1.16.0 works with Django 3.2 through 4.1 +django-stubs==1.16.0 +djangorestframework-stubs==3.14.0 # Pinned to match django-stubs. Remove this when we can remove the above pin. diff --git a/requirements/edx/development.in b/requirements/edx/development.in index ffdc299eddd9..5909f60268ff 100644 --- a/requirements/edx/development.in +++ b/requirements/edx/development.in @@ -16,6 +16,8 @@ click # Used for perf_tests utilities in modulestore django-debug-toolbar # A set of panels that display debug information about the current request/response +django-stubs # Typing stubs for Django, so it works with mypy +djangorestframework-stubs # Typing stubs for DRF mypy # static type checking pywatchman # More efficient checking for runserver reload trigger events vulture # Detects possible dead/unused code, used in scripts/find-dead-code.sh diff --git a/requirements/edx/development.txt b/requirements/edx/development.txt index 6b6183120e96..f2f956401e44 100644 --- a/requirements/edx/development.txt +++ b/requirements/edx/development.txt @@ -358,6 +358,8 @@ django==3.2.20 # django-splash # django-statici18n # django-storages + # django-stubs + # django-stubs-ext # django-user-tasks # djangorestframework # drf-jwt @@ -576,6 +578,13 @@ django-storages==1.9.1 # -r requirements/edx/doc.txt # -r requirements/edx/testing.txt # edxval +django-stubs==1.16.0 + # via + # -c requirements/edx/../constraints.txt + # -r requirements/edx/development.in + # djangorestframework-stubs +django-stubs-ext==4.2.2 + # via django-stubs django-user-tasks==3.0.0 # via # -r requirements/edx/doc.txt @@ -618,6 +627,10 @@ djangorestframework==3.14.0 # openedx-blockstore # ora2 # super-csv +djangorestframework-stubs==3.14.0 + # via + # -c requirements/edx/../constraints.txt + # -r requirements/edx/development.in djangorestframework-xml==2.0.0 # via # -r requirements/edx/doc.txt @@ -1226,7 +1239,10 @@ multidict==6.0.4 # aiohttp # yarl mypy==1.4.1 - # via -r requirements/edx/development.in + # via + # -r requirements/edx/development.in + # django-stubs + # djangorestframework-stubs mypy-extensions==1.0.0 # via mypy mysqlclient==2.2.0 @@ -1721,6 +1737,7 @@ requests==2.31.0 # analytics-python # coreapi # django-oauth-toolkit + # djangorestframework-stubs # edx-bulk-grades # edx-drf-extensions # edx-enterprise @@ -2012,6 +2029,7 @@ tomli==2.0.1 # -r requirements/edx/testing.txt # build # coverage + # django-stubs # import-linter # mypy # pip-tools @@ -2043,6 +2061,9 @@ typing-extensions==4.7.1 # asgiref # astroid # django-countries + # django-stubs + # django-stubs-ext + # djangorestframework-stubs # faker # fastapi # grimp