Skip to content

Commit

Permalink
Bump pytest-mypy-plugins and improve jinja2 stubs (#1601)
Browse files Browse the repository at this point in the history
Bump `pytest-mypy-plugins` and improve `jinja2` stubs

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
sobolevn and pre-commit-ci[bot] committed Jun 29, 2023
1 parent 08a11d7 commit 5f0e8bc
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 28 deletions.
8 changes: 8 additions & 0 deletions django-stubs/template/backends/jinja2.pyi
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from collections.abc import Callable
from typing import Any

from _typeshed import Incomplete
from django.template.exceptions import TemplateSyntaxError

from .base import BaseEngine
Expand All @@ -17,4 +18,11 @@ class Origin:
template_name: str | None
def __init__(self, name: str, template_name: str | None) -> None: ...

class Template:
template: Incomplete
backend: Jinja2
origin: Origin
def __init__(self, template: Incomplete, backend: Jinja2) -> None: ...
def render(self, context: Incomplete | None = ..., request: Incomplete | None = ...) -> Incomplete: ...

def get_exception_info(exception: TemplateSyntaxError) -> dict[str, Any]: ...
3 changes: 1 addition & 2 deletions mypy_django_plugin/django/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,11 @@ def initialize_django(settings_module: str) -> Tuple["Apps", "LazySettings"]:
from django.apps import apps
from django.conf import settings

apps.get_models.cache_clear() # type: ignore
apps.get_swappable_settings_name.cache_clear() # type: ignore
apps.clear_cache()

if not settings.configured:
settings._setup() # type: ignore

apps.populate(settings.INSTALLED_APPS)

assert apps.apps_ready, "Apps are not ready"
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
black==23.3.0
pre-commit==3.3.3
pytest==7.4.0
pytest-mypy-plugins==1.11.1
pytest-mypy-plugins==2.0.0
psycopg2-binary
Django==4.2.2
-e ./django_stubs_ext
Expand Down
4 changes: 3 additions & 1 deletion scripts/stubtest/allowlist_todo.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2280,7 +2280,6 @@ django.template.VariableDoesNotExist.__init__
django.template.backends.base.BaseEngine.template_dirs
django.template.backends.django.get_template_tag_modules
django.template.backends.dummy.TemplateStrings.template_dirs
django.template.backends.jinja2
django.template.base.Context
django.template.base.FilterExpression.is_var
django.template.base.Node.__iter__
Expand Down Expand Up @@ -2406,3 +2405,6 @@ django.urls.path
django.urls.re_path
django.urls.resolvers.LocaleRegexDescriptor.__get__
django.urls.resolvers.ResolverMatch.__iter__

# Jinja related:
django.template.backends.jinja2.Jinja2.template_context_processors
3 changes: 2 additions & 1 deletion scripts/tests_extension_hook.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ def django_plugin_hook(test_item: YamlTestItem) -> None:

if installed_apps is not None:
# custom_settings is empty, add INSTALLED_APPS
installed_apps += ["django.contrib.contenttypes"]
if "django.contrib.contenttypes" not in installed_apps:
installed_apps += ["django.contrib.contenttypes"]
installed_apps_as_str = "(" + ",".join([repr(app) for app in installed_apps]) + ",)"
custom_settings += "INSTALLED_APPS = " + installed_apps_as_str

Expand Down
29 changes: 6 additions & 23 deletions tests/typecheck/models/test_extra_methods.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,31 +20,14 @@
gender = models.CharField(max_length=100, choices=GENDER_CHOICES)
- case: date_datetime_fields_have_get_next_by_get_previous_by
main: |
from myapp.models import MyUser
reveal_type(MyUser().get_next_by_date()) # N: Revealed type is "myapp.models.MyUser"
reveal_type(MyUser().get_next_by_datetime()) # N: Revealed type is "myapp.models.MyUser"
reveal_type(MyUser().get_previous_by_date()) # N: Revealed type is "myapp.models.MyUser"
reveal_type(MyUser().get_previous_by_datetime()) # N: Revealed type is "myapp.models.MyUser"
# accept arbitrary kwargs
MyUser().get_next_by_date(arg1=1, arg2=2)
installed_apps:
- myapp
files:
- path: myapp/__init__.py
- path: myapp/models.py
content: |
from django.db import models
class MyUser(models.Model):
date = models.DateField()
datetime = models.DateTimeField()
- case: date_datetime_fields_have_get_next_by_get_previous_by_no_explicit_any
disable_cache: true
parametrized:
- allow_any: "true"
- allow_any: "false"
mypy_config: |
[mypy-myapp.models]
disallow_any_generics = true
disallow_any_explicit = true
disallow_any_generics = {{ allow_any }}
disallow_any_explicit = {{ allow_any }}
main: |
from myapp.models import MyUser
reveal_type(MyUser().get_next_by_date()) # N: Revealed type is "myapp.models.MyUser"
Expand Down

0 comments on commit 5f0e8bc

Please sign in to comment.