Skip to content

Upgrading Jinja2 2 to 3

Unknown2.11.3 → 3.1.6Security6Changed2Fixed17Other1

UnknownUpgrade verdict

DepDelta hasn't looked for the notes of 1 of 14 releases yet, so breaking changes can't be ruled out.

  • DepDelta hasn't finished looking for the notes in this range, so it can't rule out breaking changes yet.
Top 3 of 6 that need code or config changes

Python requirement changed in 3.1.0: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* → >=3.7.

Security6
The |attr filter no longer bypasses the environment's attribute lookup, so the sandbox can apply its checks.
|attr
The sandboxed environment handles indirect calls to str.format, such as by passing a stored reference to a filter that calls its argument.
str.formatHigh · CVSS 7.8
Escape template name before formatting it into error messages, to avoid issues with names that contain f-string syntax.
High · CVSS 8.8
Sandbox does not allow clear and pop on known mutable sequence types.
clearpop
The xmlattr filter now rejects keys containing /, >, or = in addition to spaces.
xmlattrMedium · CVSS 5.4
Fixes GHSA-h5c8-rqwp-cp95, affecting users of xmlattr who pass user input as attribute keys.
xmlattrMedium · CVSS 5.4

Generated by DepDelta from published Python source. Not mixed with prose notes.

  • removed: export contextfilter
  • removed: export contextfunction
  • removed: export environmentfilter
  • removed: export environmentfunction
  • removed: export evalcontextfilter
  • removed: export evalcontextfunction
  • added: export pass_context
  • added: export pass_environment
  • added: export pass_eval_context
  • added: async function auto_await(value: t.Union[t.Awaitable[V], V]) -> V
  • added: async function auto_to_list(value: t.Union[t.AsyncIterable[V], t.Iterable[V]]) -> t.List[V]
  • added: function async_variant(normal_func)
  • added: function auto_aiter(iterable: t.Union[t.AsyncIterable[V], t.Iterable[V]]) -> t.AsyncIterator[V]
  • added: variable V
  • removed: async function async_select_or_reject(args, kwargs, modfunc, lookup_attr)
  • removed: async function auto_to_seq(value)
  • removed: async function do_first(environment, seq)
  • removed: async function do_groupby(environment, value, attribute)
  • removed: async function do_join(eval_ctx, value, d=…, attribute=…)
  • removed: async function do_list(value)
  • removed: async function do_map(*args, **kwargs)
  • removed: async function do_reject(*args, **kwargs)
  • removed: async function do_rejectattr(*args, **kwargs)
  • removed: async function do_select(*args, **kwargs)
  • removed: async function do_selectattr(*args, **kwargs)
  • removed: async function do_slice(value, slices, fill_with=…)
  • removed: async function do_sum(environment, iterable, attribute=…, start=…)
  • removed: function asyncfiltervariant(original)
  • removed: function dualfilter(normal_filter, async_filter)
  • removed: variable ASYNC_FILTERS
  • removed: async function auto_aiter(iterable)
  • removed: async function auto_await(value)
  • removed: async function concat_async(async_gen)
  • removed: async function generate_async(self, *args, **kwargs)
  • removed: async function get_default_module_async(self)
  • removed: async function make_async_loop_context(iterable, undefined, recurse=…, depth0=…)
  • removed: async function make_module_async(self, vars=…, shared=…, locals=…)
  • removed: async function render_async(self, *args, **kwargs)
  • removed: class AsyncLoopContext(LoopContext)
  • removed: function patch_all()
  • removed: function patch_filters()
  • removed: function patch_runtime()
  • removed: function patch_template()
  • removed: function wrap_block_reference_call(original_call)
  • removed: function wrap_default_module(original_default_module)
  • removed: function wrap_generate_func(original_generate)
  • removed: function wrap_macro_invoke(original_invoke)
  • removed: function wrap_render_func(original_render)
  • removed: property AsyncLoopContext.last
  • removed: property AsyncLoopContext.length
  • removed: property AsyncLoopContext.nextitem
  • removed: property AsyncLoopContext.revindex
  • removed: property AsyncLoopContext.revindex0
  • changed: class Bucket(object) → class Bucket
  • changed: class BytecodeCache(object) → class BytecodeCache
  • changed: constructor Bucket(environment, key, checksum) → constructor Bucket(environment: Environment, key: str, checksum: str) -> None
  • changed: constructor FileSystemBytecodeCache(directory=…, pattern=…) → constructor FileSystemBytecodeCache(directory: t.Optional[str]=…, pattern: str=…) -> None
  • changed: constructor MemcachedBytecodeCache(client, prefix=…, timeout=…, ignore_memcache_errors=…) → constructor MemcachedBytecodeCache(client: _MemcachedClient, prefix: str=…, timeout: t.Optional[int]=…, ignore_memcache_errors: bool=…)
  • changed: method Bucket.bytecode_from_string(string) → method Bucket.bytecode_from_string(string: bytes) -> None
  • changed: method Bucket.bytecode_to_string() → method Bucket.bytecode_to_string() -> bytes
  • changed: method Bucket.load_bytecode(f) → method Bucket.load_bytecode(f: t.BinaryIO) -> None
  • changed: method Bucket.reset() → method Bucket.reset() -> None
  • changed: method Bucket.write_bytecode(f) → method Bucket.write_bytecode(f: t.IO[bytes]) -> None
  • changed: method BytecodeCache.clear() → method BytecodeCache.clear() -> None
  • changed: method BytecodeCache.dump_bytecode(bucket) → method BytecodeCache.dump_bytecode(bucket: Bucket) -> None
  • changed: method BytecodeCache.get_bucket(environment, name, filename, source) → method BytecodeCache.get_bucket(environment: Environment, name: str, filename: t.Optional[str], source: str) -> Bucket
  • changed: method BytecodeCache.get_cache_key(name, filename=…) → method BytecodeCache.get_cache_key(name: str, filename: t.Optional[t.Union[str]]=…) -> str
  • changed: method BytecodeCache.get_source_checksum(source) → method BytecodeCache.get_source_checksum(source: str) -> str
  • changed: method BytecodeCache.load_bytecode(bucket) → method BytecodeCache.load_bytecode(bucket: Bucket) -> None
  • changed: method BytecodeCache.set_bucket(bucket) → method BytecodeCache.set_bucket(bucket: Bucket) -> None
  • changed: method FileSystemBytecodeCache.clear() → method FileSystemBytecodeCache.clear() -> None
  • changed: method FileSystemBytecodeCache.dump_bytecode(bucket) → method FileSystemBytecodeCache.dump_bytecode(bucket: Bucket) -> None
  • changed: method FileSystemBytecodeCache.load_bytecode(bucket) → method FileSystemBytecodeCache.load_bytecode(bucket: Bucket) -> None
  • changed: method MemcachedBytecodeCache.dump_bytecode(bucket) → method MemcachedBytecodeCache.dump_bytecode(bucket: Bucket) -> None
  • changed: method MemcachedBytecodeCache.load_bytecode(bucket) → method MemcachedBytecodeCache.load_bytecode(bucket: Bucket) -> None
  • removed: method CodeGenerator.binop(interceptable=…)
  • removed: method CodeGenerator.uaop(interceptable=…)
  • removed: variable code_features
  • removed: variable dict_item_iter
  • removed: variable supports_yield_from
  • changed: class Frame(object) → class Frame
  • changed: class MacroRef(object) → class MacroRef
  • changed: constructor CodeGenerator(environment, name, filename, stream=…, defer_init=…, optimized=…) → constructor CodeGenerator(environment: Environment, name: t.Optional[str], filename: t.Optional[str], stream: t.Optional[t.TextIO]=…, defer_init: bool=…, optimized: bool=…) -> None
  • changed: constructor DependencyFinderVisitor() → constructor DependencyFinderVisitor() -> None
  • changed: constructor Frame(eval_ctx, parent=…, level=…) → constructor Frame(eval_ctx: EvalContext, parent: t.Optional[Frame]=…, level: t.Optional[int]=…) -> None
  • changed: constructor MacroRef(node) → constructor MacroRef(node: t.Union[nodes.Macro, nodes.CallBlock]) -> None
  • changed: constructor UndeclaredNameVisitor(names) → constructor UndeclaredNameVisitor(names: t.Iterable[str]) -> None
  • changed: function find_undeclared(nodes, names) → function find_undeclared(nodes: t.Iterable[nodes.Node], names: t.Iterable[str]) -> t.Set[str]
  • changed: function generate(node, environment, name, filename, stream=…, defer_init=…, optimized=…) → function generate(node: nodes.Template, environment: Environment, name: t.Optional[str], filename: t.Optional[str], stream: t.Optional[t.TextIO]=…, defer_init: bool=…, optimized: bool=…) -> t.Optional[str]
  • changed: function has_safe_repr(value) → function has_safe_repr(value: t.Any) -> bool
  • changed: function optimizeconst(f) → function optimizeconst(f: F) -> F
  • changed: method CodeGenerator.blockvisit(nodes, frame) → method CodeGenerator.blockvisit(nodes: t.Iterable[nodes.Node], frame: Frame) -> None
  • changed: method CodeGenerator.buffer(frame) → method CodeGenerator.buffer(frame: Frame) -> None
  • changed: method CodeGenerator.derive_context(frame) → method CodeGenerator.derive_context(frame: Frame) -> str
  • changed: method CodeGenerator.dump_local_context(frame) → method CodeGenerator.dump_local_context(frame: Frame) -> str
  • changed: method CodeGenerator.end_write(frame) → method CodeGenerator.end_write(frame: Frame) -> None
  • changed: method CodeGenerator.enter_frame(frame) → method CodeGenerator.enter_frame(frame: Frame) -> None
  • changed: method CodeGenerator.fail(msg, lineno) → method CodeGenerator.fail(msg: str, lineno: int) -> te.NoReturn
  • changed: method CodeGenerator.func(name) → method CodeGenerator.func(name: str) -> str
  • changed: method CodeGenerator.get_context_ref() → method CodeGenerator.get_context_ref() -> str
  • changed: method CodeGenerator.get_resolve_func() → method CodeGenerator.get_resolve_func() -> str
  • changed: method CodeGenerator.indent() → method CodeGenerator.indent() -> None
  • changed: method CodeGenerator.leave_frame(frame, with_python_scope=…) → method CodeGenerator.leave_frame(frame: Frame, with_python_scope: bool=…) -> None
  • changed: method CodeGenerator.macro_body(node, frame) → method CodeGenerator.macro_body(node: t.Union[nodes.Macro, nodes.CallBlock], frame: Frame) -> t.Tuple[Frame, MacroRef]
  • changed: method CodeGenerator.macro_def(macro_ref, frame) → method CodeGenerator.macro_def(macro_ref: MacroRef, frame: Frame) -> None
  • changed: method CodeGenerator.mark_parameter_stored(target) → method CodeGenerator.mark_parameter_stored(target: str) -> None
  • changed: method CodeGenerator.newline(node=…, extra=…) → method CodeGenerator.newline(node: t.Optional[nodes.Node]=…, extra: int=…) -> None
  • changed: method CodeGenerator.outdent(step=…) → method CodeGenerator.outdent(step: int=…) -> None
  • changed: method CodeGenerator.parameter_is_undeclared(target) → method CodeGenerator.parameter_is_undeclared(target: str) -> bool
  • changed: method CodeGenerator.pop_assign_tracking(frame) → method CodeGenerator.pop_assign_tracking(frame: Frame) -> None
  • changed: method CodeGenerator.pop_context_reference() → method CodeGenerator.pop_context_reference() -> None
  • changed: method CodeGenerator.pop_parameter_definitions() → method CodeGenerator.pop_parameter_definitions() -> None
  • changed: method CodeGenerator.position(node) → method CodeGenerator.position(node: nodes.Node) -> str
  • changed: method CodeGenerator.pull_dependencies(nodes) → method CodeGenerator.pull_dependencies(nodes: t.Iterable[nodes.Node]) -> None
  • changed: method CodeGenerator.push_assign_tracking() → method CodeGenerator.push_assign_tracking() -> None
  • changed: method CodeGenerator.push_context_reference(target) → method CodeGenerator.push_context_reference(target: str) -> None
  • changed: method CodeGenerator.push_parameter_definitions(frame) → method CodeGenerator.push_parameter_definitions(frame: Frame) -> None
  • changed: method CodeGenerator.return_buffer_contents(frame, force_unescaped=…) → method CodeGenerator.return_buffer_contents(frame: Frame, force_unescaped: bool=…) -> None
  • changed: method CodeGenerator.signature(node, frame, extra_kwargs=…) → method CodeGenerator.signature(node: t.Union[nodes.Call, nodes.Filter, nodes.Test], frame: Frame, extra_kwargs: t.Optional[t.Mapping[str, t.Any]]=…) -> None
  • changed: method CodeGenerator.simple_write(s, frame, node=…) → method CodeGenerator.simple_write(s: str, frame: Frame, node: t.Optional[nodes.Node]=…) -> None
  • changed: method CodeGenerator.start_write(frame, node=…) → method CodeGenerator.start_write(frame: Frame, node: t.Optional[nodes.Node]=…) -> None
  • changed: method CodeGenerator.temporary_identifier() → method CodeGenerator.temporary_identifier() -> str
  • changed: method CodeGenerator.visit_Assign(node, frame) → method CodeGenerator.visit_Assign(node: nodes.Assign, frame: Frame) -> None
  • changed: method CodeGenerator.visit_AssignBlock(node, frame) → method CodeGenerator.visit_AssignBlock(node: nodes.AssignBlock, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Block(node, frame) → method CodeGenerator.visit_Block(node: nodes.Block, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Break(node, frame) → method CodeGenerator.visit_Break(node: nodes.Break, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Call(node, frame, forward_caller=…) → method CodeGenerator.visit_Call(node: nodes.Call, frame: Frame, forward_caller: bool=…) -> None
  • changed: method CodeGenerator.visit_CallBlock(node, frame) → method CodeGenerator.visit_CallBlock(node: nodes.CallBlock, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Compare(node, frame) → method CodeGenerator.visit_Compare(node: nodes.Compare, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Concat(node, frame) → method CodeGenerator.visit_Concat(node: nodes.Concat, frame: Frame) -> None
  • changed: method CodeGenerator.visit_CondExpr(node, frame) → method CodeGenerator.visit_CondExpr(node: nodes.CondExpr, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Const(node, frame) → method CodeGenerator.visit_Const(node: nodes.Const, frame: Frame) -> None
  • changed: method CodeGenerator.visit_ContextReference(node, frame) → method CodeGenerator.visit_ContextReference(node: nodes.ContextReference, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Continue(node, frame) → method CodeGenerator.visit_Continue(node: nodes.Continue, frame: Frame) -> None
  • changed: method CodeGenerator.visit_DerivedContextReference(node, frame) → method CodeGenerator.visit_DerivedContextReference(node: nodes.DerivedContextReference, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Dict(node, frame) → method CodeGenerator.visit_Dict(node: nodes.Dict, frame: Frame) -> None
  • changed: method CodeGenerator.visit_EnvironmentAttribute(node, frame) → method CodeGenerator.visit_EnvironmentAttribute(node: nodes.EnvironmentAttribute, frame: Frame) -> None
  • changed: method CodeGenerator.visit_EvalContextModifier(node, frame) → method CodeGenerator.visit_EvalContextModifier(node: nodes.EvalContextModifier, frame: Frame) -> None
  • changed: method CodeGenerator.visit_ExprStmt(node, frame) → method CodeGenerator.visit_ExprStmt(node: nodes.ExprStmt, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Extends(node, frame) → method CodeGenerator.visit_Extends(node: nodes.Extends, frame: Frame) -> None
  • changed: method CodeGenerator.visit_ExtensionAttribute(node, frame) → method CodeGenerator.visit_ExtensionAttribute(node: nodes.ExtensionAttribute, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Filter(node, frame) → method CodeGenerator.visit_Filter(node: nodes.Filter, frame: Frame) -> None
  • changed: method CodeGenerator.visit_FilterBlock(node, frame) → method CodeGenerator.visit_FilterBlock(node: nodes.FilterBlock, frame: Frame) -> None
  • changed: method CodeGenerator.visit_For(node, frame) → method CodeGenerator.visit_For(node: nodes.For, frame: Frame) -> None
  • changed: method CodeGenerator.visit_FromImport(node, frame) → method CodeGenerator.visit_FromImport(node: nodes.FromImport, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Getattr(node, frame) → method CodeGenerator.visit_Getattr(node: nodes.Getattr, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Getitem(node, frame) → method CodeGenerator.visit_Getitem(node: nodes.Getitem, frame: Frame) -> None
  • changed: method CodeGenerator.visit_If(node, frame) → method CodeGenerator.visit_If(node: nodes.If, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Import(node, frame) → method CodeGenerator.visit_Import(node: nodes.Import, frame: Frame) -> None
  • changed: method CodeGenerator.visit_ImportedName(node, frame) → method CodeGenerator.visit_ImportedName(node: nodes.ImportedName, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Include(node, frame) → method CodeGenerator.visit_Include(node: nodes.Include, frame: Frame) -> None
  • changed: method CodeGenerator.visit_InternalName(node, frame) → method CodeGenerator.visit_InternalName(node: nodes.InternalName, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Keyword(node, frame) → method CodeGenerator.visit_Keyword(node: nodes.Keyword, frame: Frame) -> None
  • changed: method CodeGenerator.visit_List(node, frame) → method CodeGenerator.visit_List(node: nodes.List, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Macro(node, frame) → method CodeGenerator.visit_Macro(node: nodes.Macro, frame: Frame) -> None
  • changed: method CodeGenerator.visit_MarkSafe(node, frame) → method CodeGenerator.visit_MarkSafe(node: nodes.MarkSafe, frame: Frame) -> None
  • changed: method CodeGenerator.visit_MarkSafeIfAutoescape(node, frame) → method CodeGenerator.visit_MarkSafeIfAutoescape(node: nodes.MarkSafeIfAutoescape, frame: Frame) -> None
  • changed: method CodeGenerator.visit_NSRef(node, frame) → method CodeGenerator.visit_NSRef(node: nodes.NSRef, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Name(node, frame) → method CodeGenerator.visit_Name(node: nodes.Name, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Operand(node, frame) → method CodeGenerator.visit_Operand(node: nodes.Operand, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Output(node, frame) → method CodeGenerator.visit_Output(node: nodes.Output, frame: Frame) -> None
  • changed: method CodeGenerator.visit_OverlayScope(node, frame) → method CodeGenerator.visit_OverlayScope(node: nodes.OverlayScope, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Scope(node, frame) → method CodeGenerator.visit_Scope(node: nodes.Scope, frame: Frame) -> None
  • changed: method CodeGenerator.visit_ScopedEvalContextModifier(node, frame) → method CodeGenerator.visit_ScopedEvalContextModifier(node: nodes.ScopedEvalContextModifier, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Slice(node, frame) → method CodeGenerator.visit_Slice(node: nodes.Slice, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Template(node, frame=…) → method CodeGenerator.visit_Template(node: nodes.Template, frame: t.Optional[Frame]=…) -> None
  • changed: method CodeGenerator.visit_TemplateData(node, frame) → method CodeGenerator.visit_TemplateData(node: nodes.TemplateData, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Test(node, frame) → method CodeGenerator.visit_Test(node: nodes.Test, frame: Frame) -> None
  • changed: method CodeGenerator.visit_Tuple(node, frame) → method CodeGenerator.visit_Tuple(node: nodes.Tuple, frame: Frame) -> None
  • changed: method CodeGenerator.visit_With(node, frame) → method CodeGenerator.visit_With(node: nodes.With, frame: Frame) -> None
  • changed: method CodeGenerator.write(x) → method CodeGenerator.write(x: str) -> None
  • changed: method CodeGenerator.write_commons() → method CodeGenerator.write_commons() -> None
  • changed: method CodeGenerator.writeline(x, node=…, extra=…) → method CodeGenerator.writeline(x: str, node: t.Optional[nodes.Node]=…, extra: int=…) -> None
  • changed: method DependencyFinderVisitor.visit_Block(node) → method DependencyFinderVisitor.visit_Block(node: nodes.Block) -> None
  • changed: method DependencyFinderVisitor.visit_Filter(node) → method DependencyFinderVisitor.visit_Filter(node: nodes.Filter) -> None
  • changed: method DependencyFinderVisitor.visit_Test(node) → method DependencyFinderVisitor.visit_Test(node: nodes.Test) -> None
  • changed: method Frame.copy() → method Frame.copy() -> te.Self
  • changed: method Frame.inner(isolated=…) → method Frame.inner(isolated: bool=…) -> Frame
  • changed: method Frame.soft() → method Frame.soft() -> te.Self
  • changed: method UndeclaredNameVisitor.visit_Block(node) → method UndeclaredNameVisitor.visit_Block(node: nodes.Block) -> None
  • changed: method UndeclaredNameVisitor.visit_Name(node) → method UndeclaredNameVisitor.visit_Name(node: nodes.Name) -> None
  • added: method CodeGenerator.choose_async(async_value: str=…, sync_value: str=…) -> str
  • added: property CodeGenerator.optimized -> bool
  • added: variable F
  • removed: function tb_set_next(tb, tb_next)
  • changed: function fake_traceback(exc_value, tb, filename, lineno) → function fake_traceback(exc_value: BaseException, tb: t.Optional[TracebackType], filename: str, lineno: int) -> TracebackType
  • changed: function get_template_locals(real_locals) → function get_template_locals(real_locals: t.Mapping[str, t.Any]) -> t.Dict[str, t.Any]
  • changed: function rewrite_traceback_stack(source=…) → function rewrite_traceback_stack(source: t.Optional[str]=…) -> BaseException
  • changed: variable DEFAULT_POLICIES → variable DEFAULT_POLICIES: t.Dict[str, t.Any]
  • changed: variable LINE_COMMENT_PREFIX → variable LINE_COMMENT_PREFIX: t.Optional[str]
  • changed: variable LINE_STATEMENT_PREFIX → variable LINE_STATEMENT_PREFIX: t.Optional[str]
  • changed: variable NEWLINE_SEQUENCE → variable NEWLINE_SEQUENCE: te.Literal['\n', '\r\n', '\r']
  • removed: field Environment.lexer
  • removed: function fail_for_missing_callable(string, name)
  • removed: property Template.debug_info
  • removed: property Template.is_up_to_date
  • removed: property Template.module
  • changed: class Environment(object) → class Environment
  • changed: class Template(object) → class Template
  • changed: class TemplateExpression(object) → class TemplateExpression
  • changed: class TemplateModule(object) → class TemplateModule
  • changed: class TemplateStream(object) → class TemplateStream
  • changed: constructor Environment(block_start_string=…, block_end_string=…, variable_start_string=…, variable_end_string=…, comment_start_string=…, comment_end_string=…, line_statement_prefix=…, line_comment_prefix=…, trim_blocks=…, lstrip_blocks=…, newline_sequence=…, keep_trailing_newline=…, extensions=…, optimized=…, undefined=…, finalize=…, autoescape=…, loader=…, cache_size=…, auto_reload=…, bytecode_… → constructor Environment(block_start_string: str=…, block_end_string: str=…, variable_start_string: str=…, variable_end_string: str=…, comment_start_string: str=…, comment_end_string: str=…, line_statement_prefix: t.Optional[str]=…, line_comment_prefix: t.Optional[str]=…, trim_blocks: bool=…, lstrip_blocks: bool=…, newline_sequence: te.Literal['\n', '\r\n', '\r']=…, keep_trailing_newline: bool=…,…
  • changed: constructor TemplateExpression(template, undefined_to_none) → constructor TemplateExpression(template: Template, undefined_to_none: bool) -> None
  • changed: constructor TemplateModule(template, context, body_stream=…) → constructor TemplateModule(template: Template, context: Context, body_stream: t.Optional[t.Iterable[str]]=…) -> None
  • changed: constructor TemplateStream(gen) → constructor TemplateStream(gen: t.Iterator[str]) -> None
  • changed: field Environment.code_generator_class → field Environment.code_generator_class: t.Type[CodeGenerator]
  • changed: field Environment.context_class → field Environment.context_class: t.Type[Context]
  • changed: field Environment.linked_to → field Environment.linked_to: t.Optional[Environment]
  • changed: field Template.environment_class → field Template.environment_class: t.Type[Environment]
  • changed: function copy_cache(cache) → function copy_cache(cache: t.Optional[t.MutableMapping[t.Any, t.Any]]) -> t.Optional[t.MutableMapping[t.Tuple[weakref.ref[t.Any], str], Template]]
  • changed: function create_cache(size) → function create_cache(size: int) -> t.Optional[t.MutableMapping[t.Tuple[weakref.ref[t.Any], str], Template]]
  • changed: function get_spontaneous_environment(cls, *args) → function get_spontaneous_environment(cls: t.Type[_env_bound], *args: t.Any) -> _env_bound
  • changed: function load_extensions(environment, extensions) → function load_extensions(environment: Environment, extensions: t.Sequence[t.Union[str, t.Type[Extension]]]) -> t.Dict[str, Extension]
  • changed: method Environment.add_extension(extension) → method Environment.add_extension(extension: t.Union[str, t.Type[Extension]]) -> None
  • changed: method Environment.call_filter(name, value, args=…, kwargs=…, context=…, eval_ctx=…) → method Environment.call_filter(name: str, value: t.Any, args: t.Optional[t.Sequence[t.Any]]=…, kwargs: t.Optional[t.Mapping[str, t.Any]]=…, context: t.Optional[Context]=…, eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method Environment.call_test(name, value, args=…, kwargs=…) → method Environment.call_test(name: str, value: t.Any, args: t.Optional[t.Sequence[t.Any]]=…, kwargs: t.Optional[t.Mapping[str, t.Any]]=…, context: t.Optional[Context]=…, eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method Environment.compile(source, name=…, filename=…, raw=…, defer_init=…) → method Environment.compile(source: t.Union[str, nodes.Template], name: t.Optional[str]=…, filename: t.Optional[str]=…, raw: te.Literal[False]=…, defer_init: bool=…) -> CodeType | (source: t.Union[str, nodes.Template], name: t.Optional[str]=…, filename: t.Optional[str]=…, raw: te.Literal[True]=…, defer_init: bool=…) -> str
  • changed: method Environment.compile_expression(source, undefined_to_none=…) → method Environment.compile_expression(source: str, undefined_to_none: bool=…) -> TemplateExpression
  • changed: method Environment.compile_templates(target, extensions=…, filter_func=…, zip=…, log_function=…, ignore_errors=…, py_compile=…) → method Environment.compile_templates(target: t.Union[str, os.PathLike[str]], extensions: t.Optional[t.Collection[str]]=…, filter_func: t.Optional[t.Callable[[str], bool]]=…, zip: t.Optional[str]=…, log_function: t.Optional[t.Callable[[str], None]]=…, ignore_errors: bool=…) -> None
  • changed: method Environment.extend(**attributes) → method Environment.extend(**attributes: t.Any) -> None
  • changed: method Environment.from_string(source, globals=…, template_class=…) → method Environment.from_string(source: t.Union[str, nodes.Template], globals: t.Optional[t.MutableMapping[str, t.Any]]=…, template_class: t.Optional[t.Type[Template]]=…) -> Template
  • changed: method Environment.get_or_select_template(template_name_or_list, parent=…, globals=…) → method Environment.get_or_select_template(template_name_or_list: t.Union[str, Template, t.List[t.Union[str, Template]]], parent: t.Optional[str]=…, globals: t.Optional[t.MutableMapping[str, t.Any]]=…) -> Template
  • changed: method Environment.get_template(name, parent=…, globals=…) → method Environment.get_template(name: t.Union[str, Template], parent: t.Optional[str]=…, globals: t.Optional[t.MutableMapping[str, t.Any]]=…) -> Template
  • changed: method Environment.getattr(obj, attribute) → method Environment.getattr(obj: t.Any, attribute: str) -> t.Any
  • changed: method Environment.getitem(obj, argument) → method Environment.getitem(obj: t.Any, argument: t.Union[str, t.Any]) -> t.Union[t.Any, Undefined]
  • changed: method Environment.handle_exception(source=…) → method Environment.handle_exception(source: t.Optional[str]=…) -> te.NoReturn
  • changed: method Environment.iter_extensions() → method Environment.iter_extensions() -> t.Iterator[Extension]
  • changed: method Environment.join_path(template, parent) → method Environment.join_path(template: str, parent: str) -> str
  • changed: method Environment.lex(source, name=…, filename=…) → method Environment.lex(source: str, name: t.Optional[str]=…, filename: t.Optional[str]=…) -> t.Iterator[t.Tuple[int, str, str]]
  • changed: method Environment.list_templates(extensions=…, filter_func=…) → method Environment.list_templates(extensions: t.Optional[t.Collection[str]]=…, filter_func: t.Optional[t.Callable[[str], bool]]=…) -> t.List[str]
  • changed: method Environment.make_globals(d) → method Environment.make_globals(d: t.Optional[t.MutableMapping[str, t.Any]]) -> t.MutableMapping[str, t.Any]
  • changed: method Environment.overlay(block_start_string=…, block_end_string=…, variable_start_string=…, variable_end_string=…, comment_start_string=…, comment_end_string=…, line_statement_prefix=…, line_comment_prefix=…, trim_blocks=…, lstrip_blocks=…, extensions=…, optimized=…, undefined=…, finalize=…, autoescape=…, loader=…, cache_size=…, auto_reload=…, bytecode_cache=…) → method Environment.overlay(block_start_string: str=…, block_end_string: str=…, variable_start_string: str=…, variable_end_string: str=…, comment_start_string: str=…, comment_end_string: str=…, line_statement_prefix: t.Optional[str]=…, line_comment_prefix: t.Optional[str]=…, trim_blocks: bool=…, lstrip_blocks: bool=…, newline_sequence: te.Literal['\n', '\r\n', '\r']=…, keep_trailing_newline: bool=…
  • changed: method Environment.parse(source, name=…, filename=…) → method Environment.parse(source: str, name: t.Optional[str]=…, filename: t.Optional[str]=…) -> nodes.Template
  • changed: method Environment.preprocess(source, name=…, filename=…) → method Environment.preprocess(source: str, name: t.Optional[str]=…, filename: t.Optional[str]=…) -> str
  • changed: method Environment.select_template(names, parent=…, globals=…) → method Environment.select_template(names: t.Iterable[t.Union[str, Template]], parent: t.Optional[str]=…, globals: t.Optional[t.MutableMapping[str, t.Any]]=…) -> Template
  • changed: method Template.generate(*args, **kwargs) → method Template.generate(*args: t.Any, **kwargs: t.Any) -> t.Iterator[str]
  • changed: method Template.generate_async(*args, **kwargs) → async method Template.generate_async(*args: t.Any, **kwargs: t.Any) -> t.AsyncGenerator[str, object]
  • changed: method Template.get_corresponding_lineno(lineno) → method Template.get_corresponding_lineno(lineno: int) -> int
  • changed: method Template.make_module(vars=…, shared=…, locals=…) → method Template.make_module(vars: t.Optional[t.Dict[str, t.Any]]=…, shared: bool=…, locals: t.Optional[t.Mapping[str, t.Any]]=…) -> TemplateModule
  • changed: method Template.make_module_async(vars=…, shared=…, locals=…) → async method Template.make_module_async(vars: t.Optional[t.Dict[str, t.Any]]=…, shared: bool=…, locals: t.Optional[t.Mapping[str, t.Any]]=…) -> TemplateModule
  • changed: method Template.new_context(vars=…, shared=…, locals=…) → method Template.new_context(vars: t.Optional[t.Dict[str, t.Any]]=…, shared: bool=…, locals: t.Optional[t.Mapping[str, t.Any]]=…) -> Context
  • changed: method Template.render(*args, **kwargs) → method Template.render(*args: t.Any, **kwargs: t.Any) -> str
  • changed: method Template.render_async(*args, **kwargs) → async method Template.render_async(*args: t.Any, **kwargs: t.Any) -> str
  • changed: method Template.stream(*args, **kwargs) → method Template.stream(*args: t.Any, **kwargs: t.Any) -> TemplateStream
  • changed: method TemplateStream.disable_buffering() → method TemplateStream.disable_buffering() -> None
  • changed: method TemplateStream.dump(fp, encoding=…, errors=…) → method TemplateStream.dump(fp: t.Union[str, t.IO[bytes]], encoding: t.Optional[str]=…, errors: t.Optional[str]=…) -> None
  • changed: method TemplateStream.enable_buffering(size=…) → method TemplateStream.enable_buffering(size: int=…) -> None
  • changed: static method Template.from_code(environment, code, globals, uptodate=…) → static method Template.from_code(environment: Environment, code: CodeType, globals: t.MutableMapping[str, t.Any], uptodate: t.Optional[t.Callable[[], bool]]=…) -> Template
  • changed: static method Template.from_module_dict(environment, module_dict, globals) → static method Template.from_module_dict(environment: Environment, module_dict: t.MutableMapping[str, t.Any], globals: t.MutableMapping[str, t.Any]) -> Template
  • added: field Environment.concat
  • added: field Environment.template_class: t.Type[Template]
  • added: field Template.blocks: t.Dict[str, t.Callable[[Context], t.Iterator[str]]]
  • added: field Template.environment: Environment
  • added: field Template.filename: t.Optional[str]
  • added: field Template.globals: t.MutableMapping[str, t.Any]
  • added: field Template.name: t.Optional[str]
  • added: field Template.root_render_func: t.Callable[[Context], t.Iterator[str]]
  • added: property Environment.lexer -> Lexer
  • added: property Template.debug_info -> t.List[t.Tuple[int, int]]
  • added: property Template.is_up_to_date -> bool
  • added: property Template.module -> TemplateModule
  • removed: property TemplateError.message
  • changed: constructor TemplateError(message=…) → constructor TemplateError(message: t.Optional[str]=…) -> None
  • changed: constructor TemplateNotFound(name, message=…) → constructor TemplateNotFound(name: t.Optional[t.Union[str, Undefined]], message: t.Optional[str]=…) -> None
  • changed: constructor TemplateSyntaxError(message, lineno, name=…, filename=…) → constructor TemplateSyntaxError(message: str, lineno: int, name: t.Optional[str]=…, filename: t.Optional[str]=…) -> None
  • changed: constructor TemplatesNotFound(names=…, message=…) → constructor TemplatesNotFound(names: t.Sequence[t.Union[str, Undefined]]=…, message: t.Optional[str]=…) -> None
  • changed: field TemplateNotFound.message → field TemplateNotFound.message: t.Optional[str]
  • added: property TemplateError.message -> t.Optional[str]
  • removed: class AutoEscapeExtension(Extension)
  • removed: class ExtensionRegistry(type)
  • removed: class WithExtension(Extension)
  • removed: variable autoescape
  • removed: variable with_
  • changed: class Extension(with_metaclass(ExtensionRegistry, object)) → class Extension
  • changed: constructor Extension(environment) → constructor Extension(environment: Environment) -> None
  • changed: constructor InternationalizationExtension(environment) → constructor InternationalizationExtension(environment: Environment) -> None
  • changed: field Extension.tags → field Extension.tags: t.Set[str]
  • changed: function babel_extract(fileobj, keywords, comment_tags, options) → function babel_extract(fileobj: t.BinaryIO, keywords: t.Sequence[str], comment_tags: t.Sequence[str], options: t.Dict[str, t.Any]) -> t.Iterator[t.Tuple[int, str, t.Union[t.Optional[str], t.Tuple[t.Optional[str], ...]], t.List[str]]]
  • changed: function extract_from_ast(node, gettext_functions=…, babel_style=…) → function extract_from_ast(ast: nodes.Template, gettext_functions: t.Sequence[str]=…, babel_style: bool=…) -> t.Iterator[t.Tuple[int, str, t.Union[t.Optional[str], t.Tuple[t.Optional[str], ...]]]]
  • changed: method DebugExtension.parse(parser) → method DebugExtension.parse(parser: Parser) -> nodes.Output
  • changed: method ExprStmtExtension.parse(parser) → method ExprStmtExtension.parse(parser: Parser) -> nodes.ExprStmt
  • changed: method Extension.attr(name, lineno=…) → method Extension.attr(name: str, lineno: t.Optional[int]=…) -> nodes.ExtensionAttribute
  • changed: method Extension.bind(environment) → method Extension.bind(environment: Environment) -> te.Self
  • changed: method Extension.call_method(name, args=…, kwargs=…, dyn_args=…, dyn_kwargs=…, lineno=…) → method Extension.call_method(name: str, args: t.Optional[t.List[nodes.Expr]]=…, kwargs: t.Optional[t.List[nodes.Keyword]]=…, dyn_args: t.Optional[nodes.Expr]=…, dyn_kwargs: t.Optional[nodes.Expr]=…, lineno: t.Optional[int]=…) -> nodes.Call
  • changed: method Extension.filter_stream(stream) → method Extension.filter_stream(stream: TokenStream) -> t.Union[TokenStream, t.Iterable[Token]]
  • changed: method Extension.parse(parser) → method Extension.parse(parser: Parser) -> t.Union[nodes.Node, t.List[nodes.Node]]
  • changed: method Extension.preprocess(source, name, filename=…) → method Extension.preprocess(source: str, name: t.Optional[str], filename: t.Optional[str]=…) -> str
  • changed: method InternationalizationExtension.parse(parser) → method InternationalizationExtension.parse(parser: Parser) -> t.Union[nodes.Node, t.List[nodes.Node]]
  • changed: method LoopControlExtension.parse(parser) → method LoopControlExtension.parse(parser: Parser) -> t.Union[nodes.Break, nodes.Continue]
  • changed: variable GETTEXT_FUNCTIONS → variable GETTEXT_FUNCTIONS: t.Tuple[str, ...]
  • added: field Extension.identifier: t.ClassVar[str]
  • removed: function contextfilter(f)
  • removed: function environmentfilter(f)
  • removed: function evalcontextfilter(f)
  • changed: function do_attr(environment, obj, name) → function do_attr(environment: Environment, obj: t.Any, name: str) -> t.Union[Undefined, t.Any]
  • changed: function do_batch(value, linecount, fill_with=…) → function do_batch(value: t.Iterable[V], linecount: int, fill_with: t.Optional[V]=…) -> t.Iterator[t.List[V]]
  • changed: function do_capitalize(s) → function do_capitalize(s: str) -> str
  • changed: function do_center(value, width=…) → function do_center(value: str, width: int=…) -> str
  • changed: function do_default(value, default_value=…, boolean=…) → function do_default(value: V, default_value: V=…, boolean: bool=…) -> V
  • changed: function do_dictsort(value, case_sensitive=…, by=…, reverse=…) → function do_dictsort(value: t.Mapping[K, V], case_sensitive: bool=…, by: te.Literal['key', 'value']=…, reverse: bool=…) -> t.List[t.Tuple[K, V]]
  • changed: function do_filesizeformat(value, binary=…) → function do_filesizeformat(value: t.Union[str, float, int], binary: bool=…) -> str
  • changed: function do_first(environment, seq) → async function do_first(environment: Environment, seq: t.Union[t.AsyncIterable[V], t.Iterable[V]]) -> t.Union[V, Undefined]
  • changed: function do_float(value, default=…) → function do_float(value: t.Any, default: float=…) -> float
  • changed: function do_forceescape(value) → function do_forceescape(value: t.Union[str, HasHTML]) -> Markup
  • changed: function do_format(value, *args, **kwargs) → function do_format(value: str, *args: t.Any, **kwargs: t.Any) -> str
  • changed: function do_groupby(environment, value, attribute) → async function do_groupby(environment: Environment, value: t.Union[t.AsyncIterable[V], t.Iterable[V]], attribute: t.Union[str, int], default: t.Optional[t.Any]=…, case_sensitive: bool=…) -> t.List[_GroupTuple]
  • changed: function do_indent(s, width=…, first=…, blank=…, indentfirst=…) → function do_indent(s: str, width: t.Union[int, str]=…, first: bool=…, blank: bool=…) -> str
  • changed: function do_int(value, default=…, base=…) → function do_int(value: t.Any, default: int=…, base: int=…) -> int
  • changed: function do_join(eval_ctx, value, d=…, attribute=…) → async function do_join(eval_ctx: EvalContext, value: t.Union[t.AsyncIterable[t.Any], t.Iterable[t.Any]], d: str=…, attribute: t.Optional[t.Union[str, int]]=…) -> str
  • changed: function do_last(environment, seq) → function do_last(environment: Environment, seq: t.Reversible[V]) -> t.Union[V, Undefined]
  • changed: function do_list(value) → async function do_list(value: t.Union[t.AsyncIterable[V], t.Iterable[V]]) -> t.List[V]
  • changed: function do_lower(s) → function do_lower(s: str) -> str
  • changed: function do_map(*args, **kwargs) → function do_map(context: Context, value: t.Union[t.AsyncIterable[t.Any], t.Iterable[t.Any]], name: str, *args: t.Any, **kwargs: t.Any) -> t.Iterable[t.Any] | (context: Context, value: t.Union[t.AsyncIterable[t.Any], t.Iterable[t.Any]], *, attribute: str=…, default: t.Optional[t.Any]=…) -> t.Iterable[t.Any]
  • changed: function do_mark_safe(value) → function do_mark_safe(value: str) -> Markup
  • changed: function do_mark_unsafe(value) → function do_mark_unsafe(value: str) -> str
  • changed: function do_max(environment, value, case_sensitive=…, attribute=…) → function do_max(environment: Environment, value: t.Iterable[V], case_sensitive: bool=…, attribute: t.Optional[t.Union[str, int]]=…) -> t.Union[V, Undefined]
  • changed: function do_min(environment, value, case_sensitive=…, attribute=…) → function do_min(environment: Environment, value: t.Iterable[V], case_sensitive: bool=…, attribute: t.Optional[t.Union[str, int]]=…) -> t.Union[V, Undefined]
  • changed: function do_pprint(value, verbose=…) → function do_pprint(value: t.Any) -> str
  • changed: function do_random(context, seq) → function do_random(context: Context, seq: t.Sequence[V]) -> t.Union[V, Undefined]
  • changed: function do_reject(*args, **kwargs) → async function do_reject(context: Context, value: t.Union[t.AsyncIterable[V], t.Iterable[V]], *args: t.Any, **kwargs: t.Any) -> t.AsyncIterator[V]
  • changed: function do_rejectattr(*args, **kwargs) → async function do_rejectattr(context: Context, value: t.Union[t.AsyncIterable[V], t.Iterable[V]], *args: t.Any, **kwargs: t.Any) -> t.AsyncIterator[V]
  • changed: function do_replace(eval_ctx, s, old, new, count=…) → function do_replace(eval_ctx: EvalContext, s: str, old: str, new: str, count: t.Optional[int]=…) -> str
  • changed: function do_reverse(value) → function do_reverse(value: str) -> str | (value: t.Iterable[V]) -> t.Iterable[V]
  • changed: function do_round(value, precision=…, method=…) → function do_round(value: float, precision: int=…, method: te.Literal['common', 'ceil', 'floor']=…) -> float
  • changed: function do_select(*args, **kwargs) → async function do_select(context: Context, value: t.Union[t.AsyncIterable[V], t.Iterable[V]], *args: t.Any, **kwargs: t.Any) -> t.AsyncIterator[V]
  • changed: function do_selectattr(*args, **kwargs) → async function do_selectattr(context: Context, value: t.Union[t.AsyncIterable[V], t.Iterable[V]], *args: t.Any, **kwargs: t.Any) -> t.AsyncIterator[V]
  • changed: function do_slice(value, slices, fill_with=…) → async function do_slice(value: t.Union[t.AsyncIterable[V], t.Iterable[V]], slices: int, fill_with: t.Optional[t.Any]=…) -> t.Iterator[t.List[V]]
  • changed: function do_sort(environment, value, reverse=…, case_sensitive=…, attribute=…) → function do_sort(environment: Environment, value: t.Iterable[V], reverse: bool=…, case_sensitive: bool=…, attribute: t.Optional[t.Union[str, int]]=…) -> t.List[V]
  • changed: function do_striptags(value) → function do_striptags(value: t.Union[str, HasHTML]) -> str
  • changed: function do_sum(environment, iterable, attribute=…, start=…) → async function do_sum(environment: Environment, iterable: t.Union[t.AsyncIterable[V], t.Iterable[V]], attribute: t.Optional[t.Union[str, int]]=…, start: V=…) -> V
  • changed: function do_title(s) → function do_title(s: str) -> str
  • changed: function do_tojson(eval_ctx, value, indent=…) → function do_tojson(eval_ctx: EvalContext, value: t.Any, indent: t.Optional[int]=…) -> Markup
  • changed: function do_trim(value, chars=…) → function do_trim(value: str, chars: t.Optional[str]=…) -> str
  • changed: function do_truncate(env, s, length=…, killwords=…, end=…, leeway=…) → function do_truncate(env: Environment, s: str, length: int=…, killwords: bool=…, end: str=…, leeway: t.Optional[int]=…) -> str
  • changed: function do_unique(environment, value, case_sensitive=…, attribute=…) → async function do_unique(environment: Environment, value: t.Union[t.AsyncIterable[V], t.Iterable[V]], case_sensitive: bool=…, attribute: t.Optional[t.Union[str, int]]=…) -> t.Iterator[V]
  • changed: function do_upper(s) → function do_upper(s: str) -> str
  • changed: function do_urlencode(value) → function do_urlencode(value: t.Union[str, t.Mapping[str, t.Any], t.Iterable[t.Tuple[str, t.Any]]]) -> str
  • changed: function do_urlize(eval_ctx, value, trim_url_limit=…, nofollow=…, target=…, rel=…) → function do_urlize(eval_ctx: EvalContext, value: str, trim_url_limit: t.Optional[int]=…, nofollow: bool=…, target: t.Optional[str]=…, rel: t.Optional[str]=…, extra_schemes: t.Optional[t.Iterable[str]]=…) -> str
  • changed: function do_wordcount(s) → function do_wordcount(s: str) -> int
  • changed: function do_wordwrap(environment, s, width=…, break_long_words=…, wrapstring=…, break_on_hyphens=…) → function do_wordwrap(environment: Environment, s: str, width: int=…, break_long_words: bool=…, wrapstring: t.Optional[str]=…, break_on_hyphens: bool=…) -> str
  • changed: function do_xmlattr(_eval_ctx, d, autospace=…) → function do_xmlattr(eval_ctx: EvalContext, d: t.Mapping[str, t.Any], autospace: bool=…) -> str
  • changed: function ignore_case(value) → function ignore_case(value: V) -> V
  • changed: function make_attrgetter(environment, attribute, postprocess=…, default=…) → function make_attrgetter(environment: Environment, attribute: t.Optional[t.Union[str, int]], postprocess: t.Optional[t.Callable[[t.Any], t.Any]]=…, default: t.Optional[t.Any]=…) -> t.Callable[[t.Any], t.Any]
  • changed: function make_multi_attrgetter(environment, attribute, postprocess=…) → function make_multi_attrgetter(environment: Environment, attribute: t.Optional[t.Union[str, int]], postprocess: t.Optional[t.Callable[[t.Any], t.Any]]=…) -> t.Callable[[t.Any], t.List[t.Any]]
  • changed: function prepare_map(args, kwargs) → function prepare_map(context: Context, args: t.Tuple[t.Any, ...], kwargs: t.Dict[str, t.Any]) -> t.Callable[[t.Any], t.Any]
  • changed: function prepare_select_or_reject(args, kwargs, modfunc, lookup_attr) → function prepare_select_or_reject(context: Context, args: t.Tuple[t.Any, ...], kwargs: t.Dict[str, t.Any], modfunc: t.Callable[[t.Any], t.Any], lookup_attr: bool) -> t.Callable[[t.Any], t.Any]
  • changed: function select_or_reject(args, kwargs, modfunc, lookup_attr) → function select_or_reject(context: Context, value: t.Iterable[V], args: t.Tuple[t.Any, ...], kwargs: t.Dict[str, t.Any], modfunc: t.Callable[[t.Any], t.Any], lookup_attr: bool) -> t.Iterator[V]
  • added: async function async_select_or_reject(context: Context, value: t.Union[t.AsyncIterable[V], t.Iterable[V]], args: t.Tuple[t.Any, ...], kwargs: t.Dict[str, t.Any], modfunc: t.Callable[[t.Any], t.Any], lookup_attr: bool) -> t.AsyncIterator[V]
  • added: class HasHTML(te.Protocol)
  • added: function do_items(value: t.Union[t.Mapping[K, V], Undefined]) -> t.Iterator[t.Tuple[K, V]]
  • added: function sync_do_first(environment: Environment, seq: t.Iterable[V]) -> t.Union[V, Undefined]
  • added: function sync_do_groupby(environment: Environment, value: t.Iterable[V], attribute: t.Union[str, int], default: t.Optional[t.Any]=…, case_sensitive: bool=…) -> t.List[_GroupTuple]
  • added: function sync_do_join(eval_ctx: EvalContext, value: t.Iterable[t.Any], d: str=…, attribute: t.Optional[t.Union[str, int]]=…) -> str
  • added: function sync_do_list(value: t.Iterable[V]) -> t.List[V]
  • added: function sync_do_map(context: Context, value: t.Iterable[t.Any], name: str, *args: t.Any, **kwargs: t.Any) -> t.Iterable[t.Any] | (context: Context, value: t.Iterable[t.Any], *, attribute: str=…, default: t.Optional[t.Any]=…) -> t.Iterable[t.Any]
  • added: function sync_do_reject(context: Context, value: t.Iterable[V], *args: t.Any, **kwargs: t.Any) -> t.Iterator[V]
  • added: function sync_do_rejectattr(context: Context, value: t.Iterable[V], *args: t.Any, **kwargs: t.Any) -> t.Iterator[V]
  • added: function sync_do_select(context: Context, value: t.Iterable[V], *args: t.Any, **kwargs: t.Any) -> t.Iterator[V]
  • added: function sync_do_selectattr(context: Context, value: t.Iterable[V], *args: t.Any, **kwargs: t.Any) -> t.Iterator[V]
  • added: function sync_do_slice(value: t.Collection[V], slices: int, fill_with: t.Optional[V]=…) -> t.Iterator[t.List[V]]
  • added: function sync_do_sum(environment: Environment, iterable: t.Iterable[V], attribute: t.Optional[t.Union[str, int]]=…, start: V=…) -> V
  • added: function sync_do_unique(environment: Environment, value: t.Iterable[V], case_sensitive: bool=…, attribute: t.Optional[t.Union[str, int]]=…) -> t.Iterator[V]
  • added: variable F
  • added: variable K
  • added: variable V
  • changed: class Symbols(object) → class Symbols
  • changed: constructor FrameSymbolVisitor(symbols) → constructor FrameSymbolVisitor(symbols: Symbols) -> None
  • changed: constructor RootVisitor(symbols) → constructor RootVisitor(symbols: Symbols) -> None
  • changed: constructor Symbols(parent=…, level=…) → constructor Symbols(parent: t.Optional[Symbols]=…, level: t.Optional[int]=…) -> None
  • changed: function find_symbols(nodes, parent_symbols=…) → function find_symbols(nodes: t.Iterable[nodes.Node], parent_symbols: t.Optional[Symbols]=…) -> Symbols
  • changed: function symbols_for_node(node, parent_symbols=…) → function symbols_for_node(node: nodes.Node, parent_symbols: t.Optional[Symbols]=…) -> Symbols
  • changed: method FrameSymbolVisitor.visit_Assign(node, **kwargs) → method FrameSymbolVisitor.visit_Assign(node: nodes.Assign, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_AssignBlock(node, **kwargs) → method FrameSymbolVisitor.visit_AssignBlock(node: nodes.AssignBlock, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_Block(node, **kwargs) → method FrameSymbolVisitor.visit_Block(node: nodes.Block, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_CallBlock(node, **kwargs) → method FrameSymbolVisitor.visit_CallBlock(node: nodes.CallBlock, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_FilterBlock(node, **kwargs) → method FrameSymbolVisitor.visit_FilterBlock(node: nodes.FilterBlock, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_For(node, **kwargs) → method FrameSymbolVisitor.visit_For(node: nodes.For, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_FromImport(node, **kwargs) → method FrameSymbolVisitor.visit_FromImport(node: nodes.FromImport, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_If(node, **kwargs) → method FrameSymbolVisitor.visit_If(node: nodes.If, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_Import(node, **kwargs) → method FrameSymbolVisitor.visit_Import(node: nodes.Import, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_Macro(node, **kwargs) → method FrameSymbolVisitor.visit_Macro(node: nodes.Macro, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_NSRef(node, **kwargs) → method FrameSymbolVisitor.visit_NSRef(node: nodes.NSRef, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_Name(node, store_as_param=…, **kwargs) → method FrameSymbolVisitor.visit_Name(node: nodes.Name, store_as_param: bool=…, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_OverlayScope(node, **kwargs) → method FrameSymbolVisitor.visit_OverlayScope(node: nodes.OverlayScope, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_Scope(node, **kwargs) → method FrameSymbolVisitor.visit_Scope(node: nodes.Scope, **kwargs: t.Any) -> None
  • changed: method FrameSymbolVisitor.visit_With(node, **kwargs) → method FrameSymbolVisitor.visit_With(node: nodes.With, **kwargs: t.Any) -> None
  • changed: method RootVisitor.generic_visit(node, *args, **kwargs) → method RootVisitor.generic_visit(node: nodes.Node, *args: t.Any, **kwargs: t.Any) -> None
  • changed: method RootVisitor.visit_AssignBlock(node, **kwargs) → method RootVisitor.visit_AssignBlock(node: nodes.AssignBlock, **kwargs: t.Any) -> None
  • changed: method RootVisitor.visit_CallBlock(node, **kwargs) → method RootVisitor.visit_CallBlock(node: nodes.CallBlock, **kwargs: t.Any) -> None
  • changed: method RootVisitor.visit_For(node, for_branch=…, **kwargs) → method RootVisitor.visit_For(node: nodes.For, for_branch: str=…, **kwargs: t.Any) -> None
  • changed: method RootVisitor.visit_OverlayScope(node, **kwargs) → method RootVisitor.visit_OverlayScope(node: nodes.OverlayScope, **kwargs: t.Any) -> None
  • changed: method RootVisitor.visit_With(node, **kwargs) → method RootVisitor.visit_With(node: nodes.With, **kwargs: t.Any) -> None
  • changed: method Symbols.analyze_node(node, **kwargs) → method Symbols.analyze_node(node: nodes.Node, **kwargs: t.Any) -> None
  • changed: method Symbols.branch_update(branch_symbols) → method Symbols.branch_update(branch_symbols: t.Sequence[Symbols]) -> None
  • changed: method Symbols.copy() → method Symbols.copy() -> te.Self
  • changed: method Symbols.declare_parameter(name) → method Symbols.declare_parameter(name: str) -> str
  • changed: method Symbols.dump_param_targets() → method Symbols.dump_param_targets() -> t.Set[str]
  • changed: method Symbols.dump_stores() → method Symbols.dump_stores() -> t.Dict[str, str]
  • changed: method Symbols.find_load(target) → method Symbols.find_load(target: str) -> t.Optional[t.Any]
  • changed: method Symbols.find_ref(name) → method Symbols.find_ref(name: str) -> t.Optional[str]
  • changed: method Symbols.load(name) → method Symbols.load(name: str) -> None
  • changed: method Symbols.ref(name) → method Symbols.ref(name: str) -> str
  • changed: method Symbols.store(name) → method Symbols.store(name: str) -> None
  • removed: property TokenStream.eos
  • removed: variable check_ident
  • removed: variable name_re
  • changed: class Failure(object) → class Failure
  • changed: class Lexer(object) → class Lexer
  • changed: class Token(tuple) → class Token(t.NamedTuple)
  • changed: class TokenStream(object) → class TokenStream
  • changed: class TokenStreamIterator(object) → class TokenStreamIterator
  • changed: constructor Failure(message, cls=…) → constructor Failure(message: str, cls: t.Type[TemplateSyntaxError]=…) -> None
  • changed: constructor Lexer(environment) → constructor Lexer(environment: Environment) -> None
  • changed: constructor TokenStream(generator, name, filename) → constructor TokenStream(generator: t.Iterable[Token], name: t.Optional[str], filename: t.Optional[str])
  • changed: constructor TokenStreamIterator(stream) → constructor TokenStreamIterator(stream: TokenStream) -> None
  • changed: field Token.lineno → field Token.lineno: int
  • changed: field Token.type → field Token.type: str
  • changed: field Token.value → field Token.value: str
  • changed: function compile_rules(environment) → function compile_rules(environment: Environment) -> t.List[t.Tuple[str, str]]
  • changed: function count_newlines(value) → function count_newlines(value: str) -> int
  • changed: function describe_token(token) → function describe_token(token: Token) -> str
  • changed: function describe_token_expr(expr) → function describe_token_expr(expr: str) -> str
  • changed: function get_lexer(environment) → function get_lexer(environment: Environment) -> Lexer
  • changed: method Lexer.tokeniter(source, name, filename=…, state=…) → method Lexer.tokeniter(source: str, name: t.Optional[str], filename: t.Optional[str]=…, state: t.Optional[str]=…) -> t.Iterator[t.Tuple[int, str, str]]
  • changed: method Lexer.tokenize(source, name=…, filename=…, state=…) → method Lexer.tokenize(source: str, name: t.Optional[str]=…, filename: t.Optional[str]=…, state: t.Optional[str]=…) -> TokenStream
  • changed: method Lexer.wrap(stream, name=…, filename=…) → method Lexer.wrap(stream: t.Iterable[t.Tuple[int, str, str]], name: t.Optional[str]=…, filename: t.Optional[str]=…) -> t.Iterator[Token]
  • changed: method Token.test(expr) → method Token.test(expr: str) -> bool
  • changed: method Token.test_any(*iterable) → method Token.test_any(*iterable: str) -> bool
  • changed: method TokenStream.close() → method TokenStream.close() -> None
  • changed: method TokenStream.expect(expr) → method TokenStream.expect(expr: str) -> Token
  • changed: method TokenStream.look() → method TokenStream.look() -> Token
  • changed: method TokenStream.next_if(expr) → method TokenStream.next_if(expr: str) -> t.Optional[Token]
  • changed: method TokenStream.push(token) → method TokenStream.push(token: Token) -> None
  • changed: method TokenStream.skip(n=…) → method TokenStream.skip(n: int=…) -> None
  • changed: method TokenStream.skip_if(expr) → method TokenStream.skip_if(expr: str) -> bool
  • added: property TokenStream.eos -> bool
  • changed: class BaseLoader(object) → class BaseLoader
  • changed: constructor ChoiceLoader(loaders) → constructor ChoiceLoader(loaders: t.Sequence[BaseLoader]) -> None
  • changed: constructor DictLoader(mapping) → constructor DictLoader(mapping: t.Mapping[str, str]) -> None
  • changed: constructor FileSystemLoader(searchpath, encoding=…, followlinks=…) → constructor FileSystemLoader(searchpath: t.Union[str, os.PathLike[str], t.Sequence[t.Union[str, os.PathLike[str]]]], encoding: str=…, followlinks: bool=…) -> None
  • changed: constructor FunctionLoader(load_func) → constructor FunctionLoader(load_func: t.Callable[[str], t.Optional[t.Union[str, t.Tuple[str, t.Optional[str], t.Optional[t.Callable[[], bool]]]]]]) -> None
  • changed: constructor ModuleLoader(path) → constructor ModuleLoader(path: t.Union[str, os.PathLike[str], t.Sequence[t.Union[str, os.PathLike[str]]]]) -> None
  • changed: constructor PackageLoader(package_name, package_path=…, encoding=…) → constructor PackageLoader(package_name: str, package_path: str=…, encoding: str=…) -> None
  • changed: constructor PrefixLoader(mapping, delimiter=…) → constructor PrefixLoader(mapping: t.Mapping[str, BaseLoader], delimiter: str=…) -> None
  • changed: function split_template_path(template) → function split_template_path(template: str) -> t.List[str]
  • changed: method BaseLoader.get_source(environment, template) → method BaseLoader.get_source(environment: Environment, template: str) -> t.Tuple[str, t.Optional[str], t.Optional[t.Callable[[], bool]]]
  • changed: method BaseLoader.list_templates() → method BaseLoader.list_templates() -> t.List[str]
  • changed: method BaseLoader.load(environment, name, globals=…) → method BaseLoader.load(environment: Environment, name: str, globals: t.Optional[t.MutableMapping[str, t.Any]]=…) -> Template
  • changed: method ChoiceLoader.get_source(environment, template) → method ChoiceLoader.get_source(environment: Environment, template: str) -> t.Tuple[str, t.Optional[str], t.Optional[t.Callable[[], bool]]]
  • changed: method ChoiceLoader.list_templates() → method ChoiceLoader.list_templates() -> t.List[str]
  • changed: method ChoiceLoader.load(environment, name, globals=…) → method ChoiceLoader.load(environment: Environment, name: str, globals: t.Optional[t.MutableMapping[str, t.Any]]=…) -> Template
  • changed: method DictLoader.get_source(environment, template) → method DictLoader.get_source(environment: Environment, template: str) -> t.Tuple[str, None, t.Callable[[], bool]]
  • changed: method DictLoader.list_templates() → method DictLoader.list_templates() -> t.List[str]
  • changed: method FileSystemLoader.get_source(environment, template) → method FileSystemLoader.get_source(environment: Environment, template: str) -> t.Tuple[str, str, t.Callable[[], bool]]
  • changed: method FileSystemLoader.list_templates() → method FileSystemLoader.list_templates() -> t.List[str]
  • changed: method FunctionLoader.get_source(environment, template) → method FunctionLoader.get_source(environment: Environment, template: str) -> t.Tuple[str, t.Optional[str], t.Optional[t.Callable[[], bool]]]
  • changed: method ModuleLoader.load(environment, name, globals=…) → method ModuleLoader.load(environment: Environment, name: str, globals: t.Optional[t.MutableMapping[str, t.Any]]=…) -> Template
  • changed: method PackageLoader.get_source(environment, template) → method PackageLoader.get_source(environment: Environment, template: str) -> t.Tuple[str, str, t.Optional[t.Callable[[], bool]]]
  • changed: method PackageLoader.list_templates() → method PackageLoader.list_templates() -> t.List[str]
  • changed: method PrefixLoader.get_loader(template) → method PrefixLoader.get_loader(template: str) -> t.Tuple[BaseLoader, str]
  • changed: method PrefixLoader.get_source(environment, template) → method PrefixLoader.get_source(environment: Environment, template: str) -> t.Tuple[str, t.Optional[str], t.Optional[t.Callable[[], bool]]]
  • changed: method PrefixLoader.list_templates() → method PrefixLoader.list_templates() -> t.List[str]
  • changed: method PrefixLoader.load(environment, name, globals=…) → method PrefixLoader.load(environment: Environment, name: str, globals: t.Optional[t.MutableMapping[str, t.Any]]=…) -> Template
  • changed: static method ModuleLoader.get_module_filename(name) → static method ModuleLoader.get_module_filename(name: str) -> str
  • changed: static method ModuleLoader.get_template_key(name) → static method ModuleLoader.get_template_key(name: str) -> str
  • changed: constructor TrackingCodeGenerator(environment) → constructor TrackingCodeGenerator(environment: Environment) -> None
  • changed: function find_referenced_templates(ast) → function find_referenced_templates(ast: nodes.Template) -> t.Iterator[t.Optional[str]]
  • changed: function find_undeclared_variables(ast) → function find_undeclared_variables(ast: nodes.Template) -> t.Set[str]
  • changed: method TrackingCodeGenerator.enter_frame(frame) → method TrackingCodeGenerator.enter_frame(frame: Frame) -> None
  • changed: method TrackingCodeGenerator.write(x) → method TrackingCodeGenerator.write(x: str) -> None
  • changed: function native_concat(nodes) → function native_concat(values: t.Iterable[t.Any]) -> t.Optional[t.Any]
  • changed: method NativeTemplate.render(*args, **kwargs) → method NativeTemplate.render(*args: t.Any, **kwargs: t.Any) -> t.Any
  • added: async method NativeTemplate.render_async(*args: t.Any, **kwargs: t.Any) -> t.Any
  • added: field NativeEnvironment.concat
  • removed: field Filter.fields
  • removed: field Test.fields
  • removed: method Getattr.can_assign()
  • removed: method Getitem.can_assign()
  • removed: method Test.as_const(eval_ctx=…)
  • changed: class EvalContext(object) → class EvalContext
  • changed: class Filter(Expr) → class Filter(_FilterTestCommon)
  • changed: class Node(with_metaclass(NodeType, object)) → class Node
  • changed: class Test(Expr) → class Test(_FilterTestCommon)
  • changed: constructor EvalContext(environment, template_name=…) → constructor EvalContext(environment: Environment, template_name: t.Optional[str]=…) -> None
  • changed: constructor InternalName() → constructor InternalName() -> None
  • changed: constructor Node(*fields, **attributes) → constructor Node(*fields: t.Any, **attributes: t.Any) -> None
  • changed: field BinExpr.operator → field BinExpr.operator: str
  • changed: field Node.attributes → field Node.attributes: t.Tuple[str, ...]
  • changed: field Node.fields → field Node.fields: t.Tuple[str, ...]
  • changed: field UnaryExpr.operator → field UnaryExpr.operator: str
  • changed: function args_as_const(node, eval_ctx) → function args_as_const(node: t.Union[_FilterTestCommon, Call], eval_ctx: t.Optional[EvalContext]) -> t.Tuple[t.List[t.Any], t.Dict[t.Any, t.Any]]
  • changed: function get_eval_context(node, ctx) → function get_eval_context(node: Node, ctx: t.Optional[EvalContext]) -> EvalContext
  • changed: method And.as_const(eval_ctx=…) → method And.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method BinExpr.as_const(eval_ctx=…) → method BinExpr.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method Compare.as_const(eval_ctx=…) → method Compare.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method Concat.as_const(eval_ctx=…) → method Concat.as_const(eval_ctx: t.Optional[EvalContext]=…) -> str
  • changed: method CondExpr.as_const(eval_ctx=…) → method CondExpr.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method Const.as_const(eval_ctx=…) → method Const.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method Dict.as_const(eval_ctx=…) → method Dict.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Dict[t.Any, t.Any]
  • changed: method EvalContext.revert(old) → method EvalContext.revert(old: t.Mapping[str, t.Any]) -> None
  • changed: method EvalContext.save() → method EvalContext.save() -> t.Mapping[str, t.Any]
  • changed: method Expr.as_const(eval_ctx=…) → method Expr.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method Expr.can_assign() → method Expr.can_assign() -> bool
  • changed: method Filter.as_const(eval_ctx=…) → method Filter.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method Getattr.as_const(eval_ctx=…) → method Getattr.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method Getitem.as_const(eval_ctx=…) → method Getitem.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method Keyword.as_const(eval_ctx=…) → method Keyword.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Tuple[str, t.Any]
  • changed: method List.as_const(eval_ctx=…) → method List.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.List[t.Any]
  • changed: method MarkSafe.as_const(eval_ctx=…) → method MarkSafe.as_const(eval_ctx: t.Optional[EvalContext]=…) -> Markup
  • changed: method MarkSafeIfAutoescape.as_const(eval_ctx=…) → method MarkSafeIfAutoescape.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Union[Markup, t.Any]
  • changed: method NSRef.can_assign() → method NSRef.can_assign() -> bool
  • changed: method Name.can_assign() → method Name.can_assign() -> bool
  • changed: method Node.dump() → method Node.dump() -> str
  • changed: method Node.find(node_type) → method Node.find(node_type: t.Type[_NodeBound]) -> t.Optional[_NodeBound]
  • changed: method Node.find_all(node_type) → method Node.find_all(node_type: t.Union[t.Type[_NodeBound], t.Tuple[t.Type[_NodeBound], ...]]) -> t.Iterator[_NodeBound]
  • changed: method Node.iter_child_nodes(exclude=…, only=…) → method Node.iter_child_nodes(exclude: t.Optional[t.Container[str]]=…, only: t.Optional[t.Container[str]]=…) -> t.Iterator[Node]
  • changed: method Node.iter_fields(exclude=…, only=…) → method Node.iter_fields(exclude: t.Optional[t.Container[str]]=…, only: t.Optional[t.Container[str]]=…) -> t.Iterator[t.Tuple[str, t.Any]]
  • changed: method Node.set_ctx(ctx) → method Node.set_ctx(ctx: str) -> Node
  • changed: method Node.set_environment(environment) → method Node.set_environment(environment: Environment) -> Node
  • changed: method Node.set_lineno(lineno, override=…) → method Node.set_lineno(lineno: int, override: bool=…) -> Node
  • changed: method Or.as_const(eval_ctx=…) → method Or.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: method Pair.as_const(eval_ctx=…) → method Pair.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Tuple[t.Any, t.Any]
  • changed: method Slice.as_const(eval_ctx=…) → method Slice.as_const(eval_ctx: t.Optional[EvalContext]=…) -> slice
  • changed: method TemplateData.as_const(eval_ctx=…) → method TemplateData.as_const(eval_ctx: t.Optional[EvalContext]=…) -> str
  • changed: method Tuple.as_const(eval_ctx=…) → method Tuple.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Tuple[t.Any, ...]
  • changed: method Tuple.can_assign() → method Tuple.can_assign() -> bool
  • changed: method UnaryExpr.as_const(eval_ctx=…) → method UnaryExpr.as_const(eval_ctx: t.Optional[EvalContext]=…) -> t.Any
  • changed: static method Const.from_untrusted(value, lineno=…, environment=…) → static method Const.from_untrusted(value: t.Any, lineno: t.Optional[int]=…, environment: t.Optional[Environment]=…) -> Const
  • added: field Assign.node: Node
  • added: field Assign.target: Expr
  • added: field AssignBlock.body: t.List[Node]
  • added: field AssignBlock.filter: t.Optional[Filter]
  • added: field AssignBlock.target: Expr
  • added: field BinExpr.left: Expr
  • added: field BinExpr.right: Expr
  • added: field Block.body: t.List[Node]
  • added: field Block.name: str
  • added: field Block.required: bool
  • added: field Block.scoped: bool
  • added: field Call.args: t.List[Expr]
  • added: field Call.dyn_args: t.Optional[Expr]
  • added: field Call.dyn_kwargs: t.Optional[Expr]
  • added: field Call.kwargs: t.List[Keyword]
  • added: field Call.node: Expr
  • added: field CallBlock.args: t.List[Name]
  • added: field CallBlock.body: t.List[Node]
  • added: field CallBlock.call: Call
  • added: field CallBlock.defaults: t.List[Expr]
  • added: field Compare.expr: Expr
  • added: field Compare.ops: t.List[Operand]
  • added: field Concat.nodes: t.List[Expr]
  • added: field CondExpr.expr1: Expr
  • added: field CondExpr.expr2: t.Optional[Expr]
  • added: field CondExpr.test: Expr
  • added: field Const.value: t.Any
  • added: field Dict.items: t.List[Pair]
  • added: field EnvironmentAttribute.name: str
  • added: field EvalContextModifier.options: t.List[Keyword]
  • added: field ExprStmt.node: Node
  • added: field Extends.template: Expr
  • added: field ExtensionAttribute.identifier: str
  • added: field ExtensionAttribute.name: str
  • added: field Filter.node: t.Optional[Expr]
  • added: field FilterBlock.body: t.List[Node]
  • added: field FilterBlock.filter: Filter
  • added: field For.body: t.List[Node]
  • added: field For.else_: t.List[Node]
  • added: field For.iter: Node
  • added: field For.recursive: bool
  • added: field For.target: Node
  • added: field For.test: t.Optional[Node]
  • added: field FromImport.names: t.List[t.Union[str, t.Tuple[str, str]]]
  • added: field FromImport.template: Expr
  • added: field FromImport.with_context: bool
  • added: field Getattr.attr: str
  • added: field Getattr.ctx: str
  • added: field Getattr.node: Expr
  • added: field Getitem.arg: Expr
  • added: field Getitem.ctx: str
  • added: field Getitem.node: Expr
  • added: field If.body: t.List[Node]
  • added: field If.elif_: t.List[If]
  • added: field If.else_: t.List[Node]
  • added: field If.test: Node
  • added: field Import.target: str
  • added: field Import.template: Expr
  • added: field Import.with_context: bool
  • added: field ImportedName.importname: str
  • added: field Include.ignore_missing: bool
  • added: field Include.template: Expr
  • added: field Include.with_context: bool
  • added: field InternalName.name: str
  • added: field Keyword.key: str
  • added: field Keyword.value: Expr
  • added: field List.items: t.List[Expr]
  • added: field Macro.args: t.List[Name]
  • added: field Macro.body: t.List[Node]
  • added: field Macro.defaults: t.List[Expr]
  • added: field Macro.name: str
  • added: field MarkSafe.expr: Expr
  • added: field MarkSafeIfAutoescape.expr: Expr
  • added: field NSRef.attr: str
  • added: field NSRef.name: str
  • added: field Name.ctx: str
  • added: field Name.name: str
  • added: field Node.environment: t.Optional[Environment]
  • added: field Node.lineno: int
  • added: field Operand.expr: Expr
  • added: field Operand.op: str
  • added: field Output.nodes: t.List[Expr]
  • added: field OverlayScope.body: t.List[Node]
  • added: field OverlayScope.context: Expr
  • added: field Pair.key: Expr
  • added: field Pair.value: Expr
  • added: field Scope.body: t.List[Node]
  • added: field ScopedEvalContextModifier.body: t.List[Node]
  • added: field Slice.start: t.Optional[Expr]
  • added: field Slice.step: t.Optional[Expr]
  • added: field Slice.stop: t.Optional[Expr]
  • added: field Template.body: t.List[Node]
  • added: field TemplateData.data: str
  • added: field Tuple.ctx: str
  • added: field Tuple.items: t.List[Expr]
  • added: field UnaryExpr.node: Expr
  • added: field With.body: t.List[Node]
  • added: field With.targets: t.List[Expr]
  • added: field With.values: t.List[Expr]
  • changed: constructor Optimizer(environment) → constructor Optimizer(environment: t.Optional[Environment]) -> None
  • changed: function optimize(node, environment) → function optimize(node: nodes.Node, environment: Environment) -> nodes.Node
  • changed: method Optimizer.generic_visit(node, *args, **kwargs) → method Optimizer.generic_visit(node: nodes.Node, *args: t.Any, **kwargs: t.Any) -> nodes.Node
  • changed: class Parser(object) → class Parser
  • changed: constructor Parser(environment, source, name=…, filename=…, state=…) → constructor Parser(environment: Environment, source: str, name: t.Optional[str]=…, filename: t.Optional[str]=…, state: t.Optional[str]=…) -> None
  • changed: method Parser.fail(msg, lineno=…, exc=…) → method Parser.fail(msg: str, lineno: t.Optional[int]=…, exc: t.Type[TemplateSyntaxError]=…) -> te.NoReturn
  • changed: method Parser.fail_eof(end_tokens=…, lineno=…) → method Parser.fail_eof(end_tokens: t.Optional[t.Tuple[str, ...]]=…, lineno: t.Optional[int]=…) -> te.NoReturn
  • changed: method Parser.fail_unknown_tag(name, lineno=…) → method Parser.fail_unknown_tag(name: str, lineno: t.Optional[int]=…) -> te.NoReturn
  • changed: method Parser.free_identifier(lineno=…) → method Parser.free_identifier(lineno: t.Optional[int]=…) -> nodes.InternalName
  • changed: method Parser.is_tuple_end(extra_end_rules=…) → method Parser.is_tuple_end(extra_end_rules: t.Optional[t.Tuple[str, ...]]=…) -> bool
  • changed: method Parser.parse() → method Parser.parse() -> nodes.Template
  • changed: method Parser.parse_and() → method Parser.parse_and() -> nodes.Expr
  • changed: method Parser.parse_assign_target(with_tuple=…, name_only=…, extra_end_rules=…, with_namespace=…) → method Parser.parse_assign_target(with_tuple: bool=…, name_only: te.Literal[True]=…) -> nodes.Name | (with_tuple: bool=…, name_only: bool=…, extra_end_rules: t.Optional[t.Tuple[str, ...]]=…, with_namespace: bool=…) -> t.Union[nodes.NSRef, nodes.Name, nodes.Tuple]
  • changed: method Parser.parse_autoescape() → method Parser.parse_autoescape() -> nodes.Scope
  • changed: method Parser.parse_block() → method Parser.parse_block() -> nodes.Block
  • changed: method Parser.parse_call(node) → method Parser.parse_call(node: nodes.Expr) -> nodes.Call
  • changed: method Parser.parse_call_block() → method Parser.parse_call_block() -> nodes.CallBlock
  • changed: method Parser.parse_compare() → method Parser.parse_compare() -> nodes.Expr
  • changed: method Parser.parse_concat() → method Parser.parse_concat() -> nodes.Expr
  • changed: method Parser.parse_condexpr() → method Parser.parse_condexpr() -> nodes.Expr
  • changed: method Parser.parse_dict() → method Parser.parse_dict() -> nodes.Dict
  • changed: method Parser.parse_expression(with_condexpr=…) → method Parser.parse_expression(with_condexpr: bool=…) -> nodes.Expr
  • changed: method Parser.parse_extends() → method Parser.parse_extends() -> nodes.Extends
  • changed: method Parser.parse_filter(node, start_inline=…) → method Parser.parse_filter(node: t.Optional[nodes.Expr], start_inline: bool=…) -> t.Optional[nodes.Expr]
  • changed: method Parser.parse_filter_block() → method Parser.parse_filter_block() -> nodes.FilterBlock
  • changed: method Parser.parse_filter_expr(node) → method Parser.parse_filter_expr(node: nodes.Expr) -> nodes.Expr
  • changed: method Parser.parse_for() → method Parser.parse_for() -> nodes.For
  • changed: method Parser.parse_from() → method Parser.parse_from() -> nodes.FromImport
  • changed: method Parser.parse_if() → method Parser.parse_if() -> nodes.If
  • changed: method Parser.parse_import() → method Parser.parse_import() -> nodes.Import
  • changed: method Parser.parse_import_context(node, default) → method Parser.parse_import_context(node: _ImportInclude, default: bool) -> _ImportInclude
  • changed: method Parser.parse_include() → method Parser.parse_include() -> nodes.Include
  • changed: method Parser.parse_list() → method Parser.parse_list() -> nodes.List
  • changed: method Parser.parse_macro() → method Parser.parse_macro() -> nodes.Macro
  • changed: method Parser.parse_math1() → method Parser.parse_math1() -> nodes.Expr
  • changed: method Parser.parse_math2() → method Parser.parse_math2() -> nodes.Expr
  • changed: method Parser.parse_not() → method Parser.parse_not() -> nodes.Expr
  • changed: method Parser.parse_or() → method Parser.parse_or() -> nodes.Expr
  • changed: method Parser.parse_postfix(node) → method Parser.parse_postfix(node: nodes.Expr) -> nodes.Expr
  • changed: method Parser.parse_pow() → method Parser.parse_pow() -> nodes.Expr
  • changed: method Parser.parse_primary() → method Parser.parse_primary(with_namespace: bool=…) -> nodes.Expr
  • changed: method Parser.parse_print() → method Parser.parse_print() -> nodes.Output
  • changed: method Parser.parse_set() → method Parser.parse_set() -> t.Union[nodes.Assign, nodes.AssignBlock]
  • changed: method Parser.parse_signature(node) → method Parser.parse_signature(node: _MacroCall) -> None
  • changed: method Parser.parse_statement() → method Parser.parse_statement() -> t.Union[nodes.Node, t.List[nodes.Node]]
  • changed: method Parser.parse_statements(end_tokens, drop_needle=…) → method Parser.parse_statements(end_tokens: t.Tuple[str, ...], drop_needle: bool=…) -> t.List[nodes.Node]
  • changed: method Parser.parse_subscribed() → method Parser.parse_subscribed() -> nodes.Expr
  • changed: method Parser.parse_subscript(node) → method Parser.parse_subscript(node: nodes.Expr) -> t.Union[nodes.Getattr, nodes.Getitem]
  • changed: method Parser.parse_test(node) → method Parser.parse_test(node: nodes.Expr) -> nodes.Expr
  • changed: method Parser.parse_tuple(simplified=…, with_condexpr=…, extra_end_rules=…, explicit_parentheses=…) → method Parser.parse_tuple(simplified: bool=…, with_condexpr: bool=…, extra_end_rules: t.Optional[t.Tuple[str, ...]]=…, explicit_parentheses: bool=…, with_namespace: bool=…) -> t.Union[nodes.Tuple, nodes.Expr]
  • changed: method Parser.parse_unary(with_filter=…) → method Parser.parse_unary(with_filter: bool=…) -> nodes.Expr
  • changed: method Parser.parse_with() → method Parser.parse_with() -> nodes.With
  • changed: method Parser.subparse(end_tokens=…) → method Parser.subparse(end_tokens: t.Optional[t.Tuple[str, ...]]=…) -> t.List[nodes.Node]
  • added: method Parser.parse_call_args() -> t.Tuple[t.List[nodes.Expr], t.List[nodes.Keyword], t.Optional[nodes.Expr], t.Optional[nodes.Expr]]
  • removed: class ContextMeta(type)
  • removed: field Context.iteritems
  • removed: field Context.iterkeys
  • removed: field Context.itervalues
  • removed: function resolve_or_missing(context, key, missing=…)
  • removed: function unicode_join(seq)
  • removed: property BlockReference.super
  • removed: property LoopContext.depth
  • removed: property LoopContext.first
  • removed: property LoopContext.index
  • removed: property LoopContext.last
  • removed: property LoopContext.length
  • removed: property LoopContext.nextitem
  • removed: property LoopContext.previtem
  • removed: property LoopContext.revindex
  • removed: property LoopContext.revindex0
  • removed: variable to_string
  • changed: class BlockReference(object) → class BlockReference
  • changed: class Context(with_metaclass(ContextMeta)) → class Context
  • changed: class Macro(object) → class Macro
  • changed: class TemplateReference(object) → class TemplateReference
  • changed: class Undefined(object) → class Undefined
  • changed: constructor BlockReference(name, context, stack, depth) → constructor BlockReference(name: str, context: Context, stack: t.List[t.Callable[[Context], t.Iterator[str]]], depth: int) -> None
  • changed: constructor Context(environment, parent, name, blocks) → constructor Context(environment: Environment, parent: t.Dict[str, t.Any], name: t.Optional[str], blocks: t.Dict[str, t.Callable[[Context], t.Iterator[str]]], globals: t.Optional[t.MutableMapping[str, t.Any]]=…)
  • changed: constructor LoopContext(iterable, undefined, recurse=…, depth0=…) → constructor LoopContext(iterable: t.Iterable[V], undefined: t.Type[Undefined], recurse: t.Optional[LoopRenderFunc]=…, depth0: int=…) -> None
  • changed: constructor Macro(environment, func, name, arguments, catch_kwargs, catch_varargs, caller, default_autoescape=…) → constructor Macro(environment: Environment, func: t.Callable[..., str], name: str, arguments: t.List[str], catch_kwargs: bool, catch_varargs: bool, caller: bool, default_autoescape: t.Optional[bool]=…)
  • changed: constructor TemplateReference(context) → constructor TemplateReference(context: Context) -> None
  • changed: constructor Undefined(hint=…, obj=…, name=…, exc=…) → constructor Undefined(hint: t.Optional[str]=…, obj: t.Any=…, name: t.Optional[str]=…, exc: t.Type[TemplateRuntimeError]=…) -> None
  • changed: function identity(x) → function identity(x: V) -> V
  • changed: function make_logging_undefined(logger=…, base=…) → function make_logging_undefined(logger: t.Optional[logging.Logger]=…, base: t.Type[Undefined]=…) -> t.Type[Undefined]
  • changed: function markup_join(seq) → function markup_join(seq: t.Iterable[t.Any]) -> str
  • changed: function new_context(environment, template_name, blocks, vars=…, shared=…, globals=…, locals=…) → function new_context(environment: Environment, template_name: t.Optional[str], blocks: t.Dict[str, t.Callable[[Context], t.Iterator[str]]], vars: t.Optional[t.Dict[str, t.Any]]=…, shared: bool=…, globals: t.Optional[t.MutableMapping[str, t.Any]]=…, locals: t.Optional[t.Mapping[str, t.Any]]=…) -> Context
  • changed: method Context.call(__obj, *args, **kwargs) → method Context.call(__obj: t.Callable[..., t.Any], *args: t.Any, **kwargs: t.Any) -> t.Union[t.Any, Undefined]
  • changed: method Context.derived(locals=…) → method Context.derived(locals: t.Optional[t.Dict[str, t.Any]]=…) -> Context
  • changed: method Context.get(key, default=…) → method Context.get(key: str, default: t.Any=…) -> t.Any
  • changed: method Context.get_all() → method Context.get_all() -> t.Dict[str, t.Any]
  • changed: method Context.get_exported() → method Context.get_exported() -> t.Dict[str, t.Any]
  • changed: method Context.resolve(key) → method Context.resolve(key: str) -> t.Union[t.Any, Undefined]
  • changed: method Context.resolve_or_missing(key) → method Context.resolve_or_missing(key: str) -> t.Any
  • changed: method Context.super(name, current) → method Context.super(name: str, current: t.Callable[[Context], t.Iterator[str]]) -> t.Union[BlockReference, Undefined]
  • changed: method LoopContext.changed(*value) → method LoopContext.changed(*value: t.Any) -> bool
  • changed: method LoopContext.cycle(*args) → method LoopContext.cycle(*args: V) -> V
  • added: class AsyncLoopContext(LoopContext)
  • added: class LoopRenderFunc(te.Protocol)
  • added: function str_join(seq: t.Iterable[t.Any]) -> str
  • added: property AsyncLoopContext.last -> bool
  • added: property AsyncLoopContext.length -> int
  • added: property AsyncLoopContext.nextitem -> t.Union[t.Any, Undefined]
  • added: property AsyncLoopContext.revindex -> int
  • added: property AsyncLoopContext.revindex0 -> int
  • added: property BlockReference.super -> t.Union[BlockReference, Undefined]
  • added: property LoopContext.depth -> int
  • added: property LoopContext.first -> bool
  • added: property LoopContext.index -> int
  • added: property LoopContext.last -> bool
  • added: property LoopContext.length -> int
  • added: property LoopContext.nextitem -> t.Union[t.Any, Undefined]
  • added: property LoopContext.previtem -> t.Union[t.Any, Undefined]
  • added: property LoopContext.revindex -> int
  • added: property LoopContext.revindex0 -> int
  • added: variable F
  • added: variable V
  • added: variable async_exported
  • removed: class SandboxedFormatterMixin(object)
  • removed: constructor SandboxedEscapeFormatter(env, escape)
  • removed: constructor SandboxedFormatterMixin(env)
  • removed: function formatter_field_name_split(field_name)
  • removed: function inspect_format_method(callable)
  • removed: method SandboxedEnvironment.format_string(s, args, kwargs, format_func=…)
  • removed: method SandboxedEnvironment.intercept_unop(operator)
  • removed: method SandboxedFormatterMixin.get_field(field_name, args, kwargs)
  • changed: class SandboxedEscapeFormatter(SandboxedFormatterMixin, EscapeFormatter) → class SandboxedEscapeFormatter(SandboxedFormatter, EscapeFormatter)
  • changed: class SandboxedFormatter(SandboxedFormatterMixin, Formatter) → class SandboxedFormatter(Formatter)
  • changed: constructor SandboxedEnvironment(*args, **kwargs) → constructor SandboxedEnvironment(*args: t.Any, **kwargs: t.Any) -> None
  • changed: constructor SandboxedFormatter(env) → constructor SandboxedFormatter(env: Environment, **kwargs: t.Any) -> None
  • changed: field SandboxedEnvironment.default_binop_table → field SandboxedEnvironment.default_binop_table: t.Dict[str, t.Callable[[t.Any, t.Any], t.Any]]
  • changed: field SandboxedEnvironment.default_unop_table → field SandboxedEnvironment.default_unop_table: t.Dict[str, t.Callable[[t.Any], t.Any]]
  • changed: field SandboxedEnvironment.intercepted_binops → field SandboxedEnvironment.intercepted_binops: t.FrozenSet[str]
  • changed: field SandboxedEnvironment.intercepted_unops → field SandboxedEnvironment.intercepted_unops: t.FrozenSet[str]
  • changed: function is_internal_attribute(obj, attr) → function is_internal_attribute(obj: t.Any, attr: str) -> bool
  • changed: function modifies_known_mutable(obj, attr) → function modifies_known_mutable(obj: t.Any, attr: str) -> bool
  • changed: function safe_range(*args) → function safe_range(*args: int) -> range
  • changed: function unsafe(f) → function unsafe(f: F) -> F
  • changed: method ImmutableSandboxedEnvironment.is_safe_attribute(obj, attr, value) → method ImmutableSandboxedEnvironment.is_safe_attribute(obj: t.Any, attr: str, value: t.Any) -> bool
  • changed: method SandboxedEnvironment.call(__context, __obj, *args, **kwargs) → method SandboxedEnvironment.call(__context: Context, __obj: t.Any, *args: t.Any, **kwargs: t.Any) -> t.Any
  • changed: method SandboxedEnvironment.call_binop(context, operator, left, right) → method SandboxedEnvironment.call_binop(context: Context, operator: str, left: t.Any, right: t.Any) -> t.Any
  • changed: method SandboxedEnvironment.call_unop(context, operator, arg) → method SandboxedEnvironment.call_unop(context: Context, operator: str, arg: t.Any) -> t.Any
  • changed: method SandboxedEnvironment.getattr(obj, attribute) → method SandboxedEnvironment.getattr(obj: t.Any, attribute: str) -> t.Union[t.Any, Undefined]
  • changed: method SandboxedEnvironment.getitem(obj, argument) → method SandboxedEnvironment.getitem(obj: t.Any, argument: t.Union[str, t.Any]) -> t.Union[t.Any, Undefined]
  • changed: method SandboxedEnvironment.is_safe_attribute(obj, attr, value) → method SandboxedEnvironment.is_safe_attribute(obj: t.Any, attr: str, value: t.Any) -> bool
  • changed: method SandboxedEnvironment.is_safe_callable(obj) → method SandboxedEnvironment.is_safe_callable(obj: t.Any) -> bool
  • changed: method SandboxedEnvironment.unsafe_undefined(obj, attribute) → method SandboxedEnvironment.unsafe_undefined(obj: t.Any, attribute: str) -> Undefined
  • changed: variable UNSAFE_FUNCTION_ATTRIBUTES → variable UNSAFE_FUNCTION_ATTRIBUTES: t.Set[str]
  • changed: variable UNSAFE_METHOD_ATTRIBUTES → variable UNSAFE_METHOD_ATTRIBUTES: t.Set[str]
  • added: method SandboxedEnvironment.wrap_str_format(value: t.Any) -> t.Optional[t.Callable[..., str]]
  • added: method SandboxedFormatter.get_field(field_name: str, args: t.Sequence[t.Any], kwargs: t.Mapping[str, t.Any]) -> t.Tuple[t.Any, str]
  • added: variable F
  • removed: function contextfunction(f)
  • removed: function environmentfunction(f)
  • removed: function evalcontextfunction(f)
  • removed: function soft_unicode(s)
  • removed: function unicode_urlencode(obj, charset=…, for_qs=…)
  • removed: method LRUCache.iteritems()
  • removed: method LRUCache.iterkeys()
  • removed: method LRUCache.itervalue()
  • removed: method LRUCache.itervalues()
  • removed: property Cycler.current
  • removed: variable have_async_gen
  • changed: class Cycler(object) → class Cycler
  • changed: class Joiner(object) → class Joiner
  • changed: class LRUCache(object) → class LRUCache
  • changed: class Namespace(object) → class Namespace
  • changed: constructor Cycler(*items) → constructor Cycler(*items: t.Any) -> None
  • changed: constructor Joiner(sep=…) → constructor Joiner(sep: str=…) -> None
  • changed: constructor LRUCache(capacity) → constructor LRUCache(capacity: int) -> None
  • changed: constructor Namespace(*args, **kwargs) → constructor Namespace(*args: t.Any, **kwargs: t.Any) -> None
  • changed: function clear_caches() → function clear_caches() -> None
  • changed: function consume(iterable) → function consume(iterable: t.Iterable[t.Any]) -> None
  • changed: function generate_lorem_ipsum(n=…, html=…, min=…, max=…) → function generate_lorem_ipsum(n: int=…, html: bool=…, min: int=…, max: int=…) -> str
  • changed: function htmlsafe_json_dumps(obj, dumper=…, **kwargs) → function htmlsafe_json_dumps(obj: t.Any, dumps: t.Optional[t.Callable[..., str]]=…, **kwargs: t.Any) -> markupsafe.Markup
  • changed: function import_string(import_name, silent=…) → function import_string(import_name: str, silent: bool=…) -> t.Any
  • changed: function internalcode(f) → function internalcode(f: F) -> F
  • changed: function is_undefined(obj) → function is_undefined(obj: t.Any) -> bool
  • changed: function object_type_repr(obj) → function object_type_repr(obj: t.Any) -> str
  • changed: function open_if_exists(filename, mode=…) → function open_if_exists(filename: str, mode: str=…) -> t.Optional[t.IO[t.Any]]
  • changed: function pformat(obj, verbose=…) → function pformat(obj: t.Any) -> str
  • changed: function select_autoescape(enabled_extensions=…, disabled_extensions=…, default_for_string=…, default=…) → function select_autoescape(enabled_extensions: t.Collection[str]=…, disabled_extensions: t.Collection[str]=…, default_for_string: bool=…, default: bool=…) -> t.Callable[[t.Optional[str]], bool]
  • changed: function urlize(text, trim_url_limit=…, rel=…, target=…) → function urlize(text: str, trim_url_limit: t.Optional[int]=…, rel: t.Optional[str]=…, target: t.Optional[str]=…, extra_schemes: t.Optional[t.Iterable[str]]=…) -> str
  • changed: method Cycler.next() → method Cycler.next() -> t.Any
  • changed: method Cycler.reset() → method Cycler.reset() -> None
  • changed: method LRUCache.clear() → method LRUCache.clear() -> None
  • changed: method LRUCache.copy() → method LRUCache.copy() -> te.Self
  • changed: method LRUCache.get(key, default=…) → method LRUCache.get(key: t.Any, default: t.Any=…) -> t.Any
  • changed: method LRUCache.items() → method LRUCache.items() -> t.Iterable[t.Tuple[t.Any, t.Any]]
  • changed: method LRUCache.keys() → method LRUCache.keys() -> t.Iterable[t.Any]
  • changed: method LRUCache.setdefault(key, default=…) → method LRUCache.setdefault(key: t.Any, default: t.Any=…) -> t.Any
  • changed: method LRUCache.values() → method LRUCache.values() -> t.Iterable[t.Any]
  • changed: variable internal_code → variable internal_code: t.MutableSet[CodeType]
  • changed: variable missing → variable missing: t.Any
  • added: function pass_context(f: F) -> F
  • added: function pass_environment(f: F) -> F
  • added: function pass_eval_context(f: F) -> F
  • added: function url_quote(obj: t.Any, charset: str=…, for_qs: bool=…) -> str
  • added: property Cycler.current -> t.Any
  • added: variable F
  • changed: class NodeVisitor(object) → class NodeVisitor
  • changed: method NodeTransformer.generic_visit(node, *args, **kwargs) → method NodeTransformer.generic_visit(node: Node, *args: t.Any, **kwargs: t.Any) -> Node
  • changed: method NodeTransformer.visit_list(node, *args, **kwargs) → method NodeTransformer.visit_list(node: Node, *args: t.Any, **kwargs: t.Any) -> t.List[Node]
  • changed: method NodeVisitor.generic_visit(node, *args, **kwargs) → method NodeVisitor.generic_visit(node: Node, *args: t.Any, **kwargs: t.Any) -> t.Any
  • changed: method NodeVisitor.get_visitor(node) → method NodeVisitor.get_visitor(node: Node) -> t.Optional[VisitCallable]
  • changed: method NodeVisitor.visit(node, *args, **kwargs) → method NodeVisitor.visit(node: Node, *args: t.Any, **kwargs: t.Any) -> t.Any
  • added: class VisitCallable(te.Protocol)