Upgrading Jinja2 2 to 3
Unknown2.11.3 → 3.1.6Security6Changed2Fixed17Other1
SecurityThe |attr filter no longer bypasses the environment's attribute lookup, so the sandbox can apply its checks.GHSA-cpwx-vrp4-4pq7 · CVE-2025-27516 ↗
UnknownUpgrade verdict
DepDelta hasn't looked for the notes of 1 of 14 releases yet, so breaking changes can't be ruled out.
In plain terms
- DepDelta hasn't finished looking for the notes in this range, so it can't rule out breaking changes yet.
Must act 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.
What you must change
Security6
The |attr filter no longer bypasses the environment's attribute lookup, so the sandbox can apply its checks.
|attrThe 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.8Escape template name before formatting it into error messages, to avoid issues with names that contain f-string syntax.
High · CVSS 8.8Sandbox does not allow
clear and pop on known mutable sequence types.clearpopThe xmlattr filter now rejects keys containing /, >, or = in addition to spaces.
xmlattrMedium · CVSS 5.4Fixes GHSA-h5c8-rqwp-cp95, affecting users of xmlattr who pass user input as attribute keys.
xmlattrMedium · CVSS 5.4API changes
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)