[WIP/RFC] Revisit patching of mypy builtins (reveal_{type,locals}) (#615)

* Revisit patching of mypy builtins (reveal_{type,locals})

Fixes https://github.com/typeddjango/django-stubs/issues/609
Reverts ee58b18f15

* Create test_patching.yml

Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
This commit is contained in:
Daniel Hahler
2021-06-25 15:56:21 +02:00
committed by GitHub
parent 159a0e4790
commit a00563cfa4
5 changed files with 32 additions and 13 deletions

View File

@@ -1,4 +1,3 @@
import builtins
from typing import Any, Generic, List, Optional, Tuple, Type, TypeVar
from django import VERSION as VERSION
@@ -62,9 +61,5 @@ def monkeypatch() -> None:
for el in suited_for_this_version:
el.cls.__class_getitem__ = classmethod(lambda cls, *args, **kwargs: cls)
# Define mypy builtins, to not cause NameError during setting up Django.
builtins.reveal_type = lambda _: None
builtins.reveal_locals = lambda: None
__all__ = ["monkeypatch"]

View File

@@ -29,9 +29,6 @@ def make_generic_classes(
with suppress(AttributeError):
delattr(el.cls, "__class_getitem__")
del builtins.reveal_type
del builtins.reveal_locals
def factory(django_version: Optional[_VersionSpec] = None) -> None:
if django_version is not None:
monkeypatch.setattr(patch, "VERSION", django_version)
@@ -71,11 +68,15 @@ def test_patched_version_specific(
assert el.cls[int] is el.cls
def test_patched_mypy_builtins(
def test_mypy_builtins_not_patched_globally(
make_generic_classes: _MakeGenericClasses,
) -> None:
"""Ensures that we properly patch builtins with `mypy` specific helpers."""
"""Ensures that builtins are not patched with `mypy` specific helpers.
This should only happend during `django.setup()`
(https://github.com/typeddjango/django-stubs/issues/609).
"""
make_generic_classes()
assert builtins.reveal_type
assert builtins.reveal_locals
assert not hasattr(builtins, "reveal_type")
assert not hasattr(builtins, "reveal_locals")

View File

@@ -0,0 +1,15 @@
- case: patch_reveal_type_during_django_setup
main: |
# `main` is empty on purpose, because we test the `django.setup()` step.
# It executes the `myapp/models.py` file and should not produce anything,
# because `reveal_type` and `reveal_locals` are patched.
installed_apps:
- myapp
files:
- path: myapp/__init__.py
- path: myapp/models.py
content: |
# Will be executed during `django.setup()`:
a = 1
reveal_type(a)
reveal_locals()