1212 UnresolvedContext ,
1313 ResolvedContext ,
1414)
15+ from .extractx import ExtraContextRequest , extra_context_loader , extra_context_names
1516from .markup import MarkupRenderer
1617from .jinja import TemplateRenderer
1718from .utils import (
2122)
2223
2324if TYPE_CHECKING :
24- from typing import Any , Callable
25+ from typing import Callable , Any
2526 from .markup import Host
2627 from .ctx import ResolvedContext
2728
@@ -31,8 +32,6 @@ class pending_node(nodes.Element):
3132
3233 # The context to be rendered by Jinja template.
3334 ctx : UnresolvedContext | ResolvedContext
34- # The extra context as supplement to ctx.
35- extra : dict [str , Any ]
3635 #: Jinja template for rendering the context.
3736 template : Template
3837 #: Whether rendering to inline nodes.
@@ -59,14 +58,13 @@ def __init__(
5958 except Exception as exc :
6059 self ._ctx_pickle_error = exc
6160 self .ctx = ctx
62- self .extra = {}
6361 self .template = tmpl
6462 self .inline = inline
6563 self .rendered = False
6664
6765 # Init hook lists.
6866 self ._unresolved_context_hooks = []
69- self ._resolved_data_hooks = []
67+ self ._resolved_context_hooks = []
7068 self ._markup_text_hooks = []
7169 self ._rendered_nodes_hooks = []
7270
@@ -126,19 +124,25 @@ def err_report() -> Report:
126124 else :
127125 ctx = self .ctx
128126
129- for hook in self ._resolved_data_hooks :
127+ for hook in self ._resolved_context_hooks :
130128 hook (self , ctx )
131129
132130 report .text (f'Resolved context (type: { type (ctx )} ):' )
133131 report .code (pformat (ctx ), lang = 'python' )
134- report .text ('Extra context (only keys):' )
135- report .code (pformat (list (self .extra .keys ())), lang = 'python' )
136132 report .text (f'Template (phase: { self .template .phase } ):' )
137133 report .code (self .template .text , lang = 'jinja' )
138134
135+ extractx_req = ExtraContextRequest (self .template .phase , self , host .env , host )
136+ report .text ('Available extra context names:' )
137+ report .code (pformat (sorted (extra_context_names ())), lang = 'python' )
138+
139139 # 2. Render the template and context to markup text.
140140 try :
141- markup = TemplateRenderer (self .template .text ).render (ctx , extra = self .extra )
141+ markup = TemplateRenderer (self .template .text ).render (
142+ ctx ,
143+ globals = {'load_extra' : extra_context_loader (extractx_req )},
144+ debug = self .template .debug ,
145+ )
142146 except Exception as e :
143147 report = err_report ()
144148 report .text ('Failed to render Jinja template:' )
@@ -227,15 +231,15 @@ def unwrap_and_replace_self_inline(self, inliner: Report.Inliner) -> None:
227231 type RenderedNodesHook = Callable [[pending_node , list [nodes .Node ]], None ]
228232
229233 _unresolved_context_hooks : list [UnresolvedContextHook ]
230- _resolved_data_hooks : list [ResolvedContextHook ]
234+ _resolved_context_hooks : list [ResolvedContextHook ]
231235 _markup_text_hooks : list [MarkupTextHook ]
232236 _rendered_nodes_hooks : list [RenderedNodesHook ]
233237
234238 def hook_unresolved_context (self , hook : UnresolvedContextHook ) -> None :
235239 self ._unresolved_context_hooks .append (hook )
236240
237241 def hook_resolved_context (self , hook : ResolvedContextHook ) -> None :
238- self ._resolved_data_hooks .append (hook )
242+ self ._resolved_context_hooks .append (hook )
239243
240244 def hook_markup_text (self , hook : MarkupTextHook ) -> None :
241245 self ._markup_text_hooks .append (hook )
0 commit comments