From cdc4f1d0d380398c05a2d4d1641689bdae5d5ba5 Mon Sep 17 00:00:00 2001 From: David Lord Date: Sun, 26 Dec 2021 07:39:10 -0700 Subject: [PATCH] fix new mypy findings --- setup.cfg | 1 + src/jinja2/compiler.py | 2 +- src/jinja2/debug.py | 2 -- src/jinja2/environment.py | 12 ++++++------ src/jinja2/ext.py | 2 +- src/jinja2/idtracking.py | 2 +- src/jinja2/lexer.py | 2 +- src/jinja2/loaders.py | 2 +- src/jinja2/parser.py | 2 +- src/jinja2/sandbox.py | 2 +- src/jinja2/visitor.py | 2 +- tests/test_async.py | 1 - 12 files changed, 15 insertions(+), 17 deletions(-) diff --git a/setup.cfg b/setup.cfg index f952317..9dd6c51 100644 --- a/setup.cfg +++ b/setup.cfg @@ -87,6 +87,7 @@ per-file-ignores = [mypy] files = src/jinja2 python_version = 3.6 +show_error_codes = True disallow_subclassing_any = True disallow_untyped_calls = True disallow_untyped_defs = True diff --git a/src/jinja2/compiler.py b/src/jinja2/compiler.py index 52fd5b8..c7f94c0 100644 --- a/src/jinja2/compiler.py +++ b/src/jinja2/compiler.py @@ -218,7 +218,7 @@ class Frame: def copy(self) -> "Frame": """Create a copy of the current one.""" - rv = t.cast(Frame, object.__new__(self.__class__)) + rv = object.__new__(self.__class__) rv.__dict__.update(self.__dict__) rv.symbols = self.symbols.copy() return rv diff --git a/src/jinja2/debug.py b/src/jinja2/debug.py index 805866b..a7e555e 100644 --- a/src/jinja2/debug.py +++ b/src/jinja2/debug.py @@ -199,7 +199,6 @@ if sys.version_info >= (3, 7): tb.tb_next = tb_next return tb - elif platform.python_implementation() == "PyPy": # PyPy might have special support, and won't work with ctypes. try: @@ -225,7 +224,6 @@ elif platform.python_implementation() == "PyPy": return tputil.make_proxy(controller, obj=tb) # type: ignore - else: # Use ctypes to assign tb_next at the C level since it's read-only # from Python. diff --git a/src/jinja2/environment.py b/src/jinja2/environment.py index a231d9c..20df7b2 100644 --- a/src/jinja2/environment.py +++ b/src/jinja2/environment.py @@ -938,7 +938,7 @@ class Environment: @internalcode def _load_template( - self, name: str, globals: t.Optional[t.Mapping[str, t.Any]] + self, name: str, globals: t.Optional[t.MutableMapping[str, t.Any]] ) -> "Template": if self.loader is None: raise TypeError("no loader for this environment specified") @@ -966,7 +966,7 @@ class Environment: self, name: t.Union[str, "Template"], parent: t.Optional[str] = None, - globals: t.Optional[t.Mapping[str, t.Any]] = None, + globals: t.Optional[t.MutableMapping[str, t.Any]] = None, ) -> "Template": """Load a template by name with :attr:`loader` and return a :class:`Template`. If the template does not exist a @@ -1001,7 +1001,7 @@ class Environment: self, names: t.Iterable[t.Union[str, "Template"]], parent: t.Optional[str] = None, - globals: t.Optional[t.Mapping[str, t.Any]] = None, + globals: t.Optional[t.MutableMapping[str, t.Any]] = None, ) -> "Template": """Like :meth:`get_template`, but tries loading multiple names. If none of the names can be loaded a :exc:`TemplatesNotFound` @@ -1057,7 +1057,7 @@ class Environment: str, "Template", t.List[t.Union[str, "Template"]] ], parent: t.Optional[str] = None, - globals: t.Optional[t.Mapping[str, t.Any]] = None, + globals: t.Optional[t.MutableMapping[str, t.Any]] = None, ) -> "Template": """Use :meth:`select_template` if an iterable of template names is given, or :meth:`get_template` if one name is given. @@ -1073,7 +1073,7 @@ class Environment: def from_string( self, source: t.Union[str, nodes.Template], - globals: t.Optional[t.Mapping[str, t.Any]] = None, + globals: t.Optional[t.MutableMapping[str, t.Any]] = None, template_class: t.Optional[t.Type["Template"]] = None, ) -> "Template": """Load a template from a source string without using @@ -1092,7 +1092,7 @@ class Environment: return cls.from_code(self, self.compile(source), gs, None) def make_globals( - self, d: t.Optional[t.Mapping[str, t.Any]] + self, d: t.Optional[t.MutableMapping[str, t.Any]] ) -> t.MutableMapping[str, t.Any]: """Make the globals map for a template. Any given template globals overlay the environment :attr:`globals`. diff --git a/src/jinja2/ext.py b/src/jinja2/ext.py index 3e98293..43c04cd 100644 --- a/src/jinja2/ext.py +++ b/src/jinja2/ext.py @@ -91,7 +91,7 @@ class Extension: def bind(self, environment: Environment) -> "Extension": """Create a copy of this extension bound to another environment.""" - rv = t.cast(Extension, object.__new__(self.__class__)) + rv = object.__new__(self.__class__) rv.__dict__.update(self.__dict__) rv.environment = environment return rv diff --git a/src/jinja2/idtracking.py b/src/jinja2/idtracking.py index 38c525e..995ebaa 100644 --- a/src/jinja2/idtracking.py +++ b/src/jinja2/idtracking.py @@ -84,7 +84,7 @@ class Symbols: return rv def copy(self) -> "Symbols": - rv = t.cast(Symbols, object.__new__(self.__class__)) + rv = object.__new__(self.__class__) rv.__dict__.update(self.__dict__) rv.refs = self.refs.copy() rv.loads = self.loads.copy() diff --git a/src/jinja2/lexer.py b/src/jinja2/lexer.py index c25ab0f..b46a7e1 100644 --- a/src/jinja2/lexer.py +++ b/src/jinja2/lexer.py @@ -723,7 +723,7 @@ class Lexer: # tuples support more options if isinstance(tokens, tuple): - groups = m.groups() + groups: t.Sequence[str] = m.groups() if isinstance(tokens, OptionalLStrip): # Rule supports lstrip. Match will look like diff --git a/src/jinja2/loaders.py b/src/jinja2/loaders.py index 4fac3a0..d7d9bd0 100644 --- a/src/jinja2/loaders.py +++ b/src/jinja2/loaders.py @@ -603,7 +603,7 @@ class ModuleLoader(BaseLoader): if not isinstance(path, abc.Iterable) or isinstance(path, str): path = [path] - mod.__path__ = [os.fspath(p) for p in path] # type: ignore + mod.__path__ = [os.fspath(p) for p in path] sys.modules[package_name] = weakref.proxy( mod, lambda x: sys.modules.pop(package_name, None) diff --git a/src/jinja2/parser.py b/src/jinja2/parser.py index 7ad73fc..4447396 100644 --- a/src/jinja2/parser.py +++ b/src/jinja2/parser.py @@ -160,7 +160,7 @@ class Parser: self._last_identifier += 1 rv = object.__new__(nodes.InternalName) nodes.Node.__init__(rv, f"fi{self._last_identifier}", lineno=lineno) - return rv # type: ignore + return rv def parse_statement(self) -> t.Union[nodes.Node, t.List[nodes.Node]]: """Parse a single statement.""" diff --git a/src/jinja2/sandbox.py b/src/jinja2/sandbox.py index 4294884..06d7414 100644 --- a/src/jinja2/sandbox.py +++ b/src/jinja2/sandbox.py @@ -409,7 +409,7 @@ class ImmutableSandboxedEnvironment(SandboxedEnvironment): class SandboxedFormatter(Formatter): def __init__(self, env: Environment, **kwargs: t.Any) -> None: self._env = env - super().__init__(**kwargs) # type: ignore + super().__init__(**kwargs) def get_field( self, field_name: str, args: t.Sequence[t.Any], kwargs: t.Mapping[str, t.Any] diff --git a/src/jinja2/visitor.py b/src/jinja2/visitor.py index b150e57..71e341e 100644 --- a/src/jinja2/visitor.py +++ b/src/jinja2/visitor.py @@ -30,7 +30,7 @@ class NodeVisitor: exists for this node. In that case the generic visit function is used instead. """ - return getattr(self, f"visit_{type(node).__name__}", None) # type: ignore + return getattr(self, f"visit_{type(node).__name__}", None) def visit(self, node: Node, *args: t.Any, **kwargs: t.Any) -> t.Any: """Visit a node.""" diff --git a/tests/test_async.py b/tests/test_async.py index 375a7ba..ecd9af6 100644 --- a/tests/test_async.py +++ b/tests/test_async.py @@ -20,7 +20,6 @@ if sys.version_info < (3, 7): loop = asyncio.get_event_loop() return loop.run_until_complete(coro) - else: def run(coro):