Fix #224 add paths in mypy's mypy_path option or MYPYPATH env var for import discovery (#498)

This commit is contained in:
Daniel Hillier
2020-10-23 09:06:49 +11:00
committed by GitHub
parent 9d4d06f8b3
commit 92eb068a04
2 changed files with 33 additions and 0 deletions

View File

@@ -1,8 +1,10 @@
import configparser import configparser
import sys
from functools import partial from functools import partial
from typing import Callable, Dict, List, NoReturn, Optional, Tuple, cast from typing import Callable, Dict, List, NoReturn, Optional, Tuple, cast
from django.db.models.fields.related import RelatedField from django.db.models.fields.related import RelatedField
from mypy.modulefinder import mypy_path
from mypy.nodes import MypyFile, TypeInfo from mypy.nodes import MypyFile, TypeInfo
from mypy.options import Options from mypy.options import Options
from mypy.plugin import ( from mypy.plugin import (
@@ -91,6 +93,10 @@ class NewSemanalDjangoPlugin(Plugin):
def __init__(self, options: Options) -> None: def __init__(self, options: Options) -> None:
super().__init__(options) super().__init__(options)
django_settings_module = extract_django_settings_module(options.config_file) django_settings_module = extract_django_settings_module(options.config_file)
# Add paths from MYPYPATH env var
sys.path.extend(mypy_path())
# Add paths from mypy_path config option
sys.path.extend(options.mypy_path)
self.django_context = DjangoContext(django_settings_module) self.django_context = DjangoContext(django_settings_module)
def _get_current_queryset_bases(self) -> Dict[str, int]: def _get_current_queryset_bases(self) -> Dict[str, int]:

View File

@@ -38,3 +38,30 @@
class MyModel(models.Model): class MyModel(models.Model):
user = models.ForeignKey('auth.User', on_delete=models.CASCADE) user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
- case: add_mypy_path_to_package_search
main: |
import extra_module
mypy_config: |
[mypy]
mypy_path = ./extras
[mypy.plugins.django-stubs]
django_settings_module = mysettings
files:
- path: extras/extra_module.py
content: |
def extra_fn():
pass
- case: add_mypypath_env_var_to_package_search
main: |
import extra_module
mypy_config: |
[mypy.plugins.django-stubs]
django_settings_module = mysettings
env:
- MYPYPATH=./extras
files:
- path: extras/extra_module.py
content: |
def extra_fn():
pass