]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
fix typing that wasn't available in Python 3.6.0 1434/head 1435/head
authorDavid Lord <davidism@gmail.com>
Fri, 14 May 2021 00:24:19 +0000 (17:24 -0700)
committerDavid Lord <davidism@gmail.com>
Fri, 14 May 2021 00:25:08 +0000 (17:25 -0700)
CHANGES.rst
src/jinja2/bccache.py
src/jinja2/compiler.py
src/jinja2/environment.py
src/jinja2/lexer.py
src/jinja2/nodes.py
src/jinja2/parser.py
src/jinja2/runtime.py
src/jinja2/utils.py

index a303e81144bdb26407d5a516211ec14abf74e152..bc05ed490ce294a383779e05f04c54c4039efbb9 100644 (file)
@@ -8,6 +8,7 @@ Unreleased
 -   Update MarkupSafe dependency to >= 2.0. :pr:`1418`
 -   Mark top-level names as exported so type checking understands
     imports in user projects. :issue:`1426`
+-   Fix some types that weren't available in Python 3.6.0. :issue:`1433`
 
 
 Version 3.0.0
index bbe4bee4e0c6d05093aa3e6c01f160e05845d34b..ee210ef00d44193365ae480209df00ee92d3db9f 100644 (file)
@@ -210,7 +210,7 @@ class FileSystemBytecodeCache(BytecodeCache):
         self.pattern = pattern
 
     def _get_default_cache_dir(self) -> str:
-        def _unsafe_dir() -> t.NoReturn:
+        def _unsafe_dir() -> "te.NoReturn":
             raise RuntimeError(
                 "Cannot determine safe temp directory.  You "
                 "need to explicitly provide one."
index a8cfe9e333b5ae19124cda634e100705c38ad7fe..ef4c0a1f18afde73a6b3d24f84ece53e4d278289 100644 (file)
@@ -23,6 +23,7 @@ from .utils import concat
 from .visitor import NodeVisitor
 
 if t.TYPE_CHECKING:
+    import typing_extensions as te
     from .environment import Environment
 
 F = t.TypeVar("F", bound=t.Callable[..., t.Any])
@@ -376,7 +377,7 @@ class CodeGenerator(NodeVisitor):
 
     # -- Various compilation helpers
 
-    def fail(self, msg: str, lineno: int) -> t.NoReturn:
+    def fail(self, msg: str, lineno: int) -> "te.NoReturn":
         """Fail with a :exc:`TemplateAssertionError`."""
         raise TemplateAssertionError(msg, lineno, self.name, self.filename)
 
index 833edf7a384d38ffb25f4f77977dde41b3e537e6..9c173b25be3a253db132140765a8fb580df62e00 100644 (file)
@@ -915,7 +915,7 @@ class Environment:
 
         return names
 
-    def handle_exception(self, source: t.Optional[str] = None) -> t.NoReturn:
+    def handle_exception(self, source: t.Optional[str] = None) -> "te.NoReturn":
         """Exception handling helper.  This is used internally to either raise
         rewritten exceptions or return a rendered traceback for the template.
         """
index c15158214399d4c4358f1772a8f4acbd8ad1f5d9..97260126782e57b941cf77eb91a84a79bb09f3a8 100644 (file)
@@ -14,6 +14,7 @@ from .exceptions import TemplateSyntaxError
 from .utils import LRUCache
 
 if t.TYPE_CHECKING:
+    import typing_extensions as te
     from .environment import Environment
 
 # cache for the lexers. Exists in order to be able to have multiple
@@ -259,7 +260,7 @@ class Failure:
         self.message = message
         self.error_class = cls
 
-    def __call__(self, lineno: int, filename: str) -> t.NoReturn:
+    def __call__(self, lineno: int, filename: str) -> "te.NoReturn":
         raise self.error_class(self.message, lineno, filename)
 
 
@@ -326,7 +327,7 @@ class TokenStream:
         filename: t.Optional[str],
     ):
         self._iter = iter(generator)
-        self._pushed: t.Deque[Token] = deque()
+        self._pushed: "te.Deque[Token]" = deque()
         self.name = name
         self.filename = filename
         self.closed = False
index d867c9b10c632fa349b7f896442123b032b86030..1feb543e9a7ca51c3af610cdfb5494f1291c24e5 100644 (file)
@@ -12,6 +12,7 @@ from markupsafe import Markup
 from .utils import _PassArg
 
 if t.TYPE_CHECKING:
+    import typing_extensions as te
     from .environment import Environment
 
 _NodeBound = t.TypeVar("_NodeBound", bound="Node")
@@ -1196,7 +1197,7 @@ class ScopedEvalContextModifier(EvalContextModifier):
 
 
 # make sure nobody creates custom nodes
-def _failing_new(*args: t.Any, **kwargs: t.Any) -> t.NoReturn:
+def _failing_new(*args: t.Any, **kwargs: t.Any) -> "te.NoReturn":
     raise TypeError("can't create custom node types")
 
 
index 408864c5f2f644e14ac2c9e77a8870112043a8d5..7ad73fcc0f0f3ca5b340447715b27ff404d38a47 100644 (file)
@@ -76,7 +76,7 @@ class Parser:
         msg: str,
         lineno: t.Optional[int] = None,
         exc: t.Type[TemplateSyntaxError] = TemplateSyntaxError,
-    ) -> t.NoReturn:
+    ) -> "te.NoReturn":
         """Convenience method that raises `exc` with the message, passed
         line number or last line number as well as the current name and
         filename.
@@ -90,7 +90,7 @@ class Parser:
         name: t.Optional[str],
         end_token_stack: t.List[t.Tuple[str, ...]],
         lineno: t.Optional[int],
-    ) -> t.NoReturn:
+    ) -> "te.NoReturn":
         expected: t.Set[str] = set()
         for exprs in end_token_stack:
             expected.update(map(describe_token_expr, exprs))
@@ -125,7 +125,9 @@ class Parser:
 
         self.fail(" ".join(message), lineno)
 
-    def fail_unknown_tag(self, name: str, lineno: t.Optional[int] = None) -> t.NoReturn:
+    def fail_unknown_tag(
+        self, name: str, lineno: t.Optional[int] = None
+    ) -> "te.NoReturn":
         """Called if the parser encounters an unknown tag.  Tries to fail
         with a human readable error message that could help to identify
         the problem.
@@ -136,7 +138,7 @@ class Parser:
         self,
         end_tokens: t.Optional[t.Tuple[str, ...]] = None,
         lineno: t.Optional[int] = None,
-    ) -> t.NoReturn:
+    ) -> "te.NoReturn":
         """Like fail_unknown_tag but for end of template situations."""
         stack = list(self._end_token_stack)
         if end_tokens is not None:
index 883c2f7712ee034a464cfea9954074446a6f0e75..87bb1327e03ad9e34ac2eda0bc885bd43840ee20 100644 (file)
@@ -894,7 +894,9 @@ class Undefined:
         )
 
     @internalcode
-    def _fail_with_undefined_error(self, *args: t.Any, **kwargs: t.Any) -> t.NoReturn:
+    def _fail_with_undefined_error(
+        self, *args: t.Any, **kwargs: t.Any
+    ) -> "te.NoReturn":
         """Raise an :exc:`UndefinedError` when operations are performed
         on the undefined value.
         """
@@ -985,7 +987,7 @@ def make_logging_undefined(
 
         def _fail_with_undefined_error(  # type: ignore
             self, *args: t.Any, **kwargs: t.Any
-        ) -> t.NoReturn:
+        ) -> "te.NoReturn":
             try:
                 super()._fail_with_undefined_error(*args, **kwargs)
             except self._undefined_exception as e:
index d06c1e4e83f98c09893a16fbf3112081db65a3cc..85311747f7711117e8cbcffd6474a3e4597a0681 100644 (file)
@@ -14,6 +14,9 @@ from urllib.parse import quote_from_bytes
 
 import markupsafe
 
+if t.TYPE_CHECKING:
+    import typing_extensions as te
+
 F = t.TypeVar("F", bound=t.Callable[..., t.Any])
 
 # special singleton representing missing values for the runtime
@@ -503,7 +506,7 @@ class LRUCache:
     def __init__(self, capacity: int) -> None:
         self.capacity = capacity
         self._mapping: t.Dict[t.Any, t.Any] = {}
-        self._queue: t.Deque[t.Any] = deque()
+        self._queue: "te.Deque[t.Any]" = deque()
         self._postinit()
 
     def _postinit(self) -> None: