Evaluate an unevaluated page into a mutable page context.
| 161 | |
| 162 | @dataclasses.dataclass(frozen=True, slots=True) |
| 163 | class DefaultPagePlugin(Plugin): |
| 164 | """Evaluate an unevaluated page into a mutable page context.""" |
| 165 | |
| 166 | def eval_page( |
| 167 | self, |
| 168 | page_fn: Any, |
| 169 | /, |
| 170 | *, |
| 171 | page: PageDefinition, |
| 172 | **kwargs: Any, |
| 173 | ) -> PageContext: |
| 174 | """Evaluate the page function and attach legacy page metadata. |
| 175 | |
| 176 | Returns: |
| 177 | The evaluated page context. |
| 178 | """ |
| 179 | from reflex.compiler import compiler |
| 180 | |
| 181 | try: |
| 182 | component = compiler.into_component(page_fn) |
| 183 | component = Fragment.create(component) |
| 184 | |
| 185 | title = getattr(page, "title", None) |
| 186 | meta_args = { |
| 187 | "title": ( |
| 188 | title |
| 189 | if title is not None |
| 190 | else make_default_page_title(get_config().app_name, page.route) |
| 191 | ), |
| 192 | "image": getattr(page, "image", ""), |
| 193 | "meta": getattr(page, "meta", ()), |
| 194 | } |
| 195 | if (description := getattr(page, "description", None)) is not None: |
| 196 | meta_args["description"] = description |
| 197 | |
| 198 | utils.add_meta(component, **meta_args) |
| 199 | except Exception as err: |
| 200 | if hasattr(err, "add_note"): |
| 201 | err.add_note(f"Happened while evaluating page {page.route!r}") |
| 202 | raise |
| 203 | |
| 204 | return PageContext( |
| 205 | name=getattr(page_fn, "__name__", page.route), |
| 206 | route=page.route, |
| 207 | root_component=component, |
| 208 | source_module=getattr(page, "_source_module", None), |
| 209 | ) |
| 210 | |
| 211 | |
| 212 | @dataclasses.dataclass(frozen=True, slots=True) |
no outgoing calls