Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/sphinxnotes/render/ctx.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@
"""

from __future__ import annotations
from typing import Any
from typing import TYPE_CHECKING, Any
from abc import ABC, abstractmethod
from collections.abc import Hashable
from .data import ParsedData

if TYPE_CHECKING:
from sphinx.environment import BuildEnvironment

type ResolvedContext = ParsedData | dict[str, Any]
"""Resolved context types used by template rendering."""

Expand All @@ -17,7 +20,7 @@ class UnresolvedContext(ABC, Hashable):
"""An abstract representation of context that will be resolved later."""

@abstractmethod
def resolve(self) -> ResolvedContext:
def resolve(self, env: BuildEnvironment) -> ResolvedContext:
"""This method will be called when rendering to get the available
:py:type:`ResolvedContext`."""
...
2 changes: 1 addition & 1 deletion src/sphinxnotes/render/ctxnodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def err_report() -> Report:
hook(self, pdata)

try:
ctx = self.ctx = pdata.resolve()
ctx = self.ctx = pdata.resolve(host.env)
except Exception as e:
report = err_report()
report.text('Failed to resolve unresolved context:')
Expand Down
7 changes: 5 additions & 2 deletions src/sphinxnotes/render/sources.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"""

from __future__ import annotations
from typing import final, override
from typing import TYPE_CHECKING, final, override
from abc import abstractmethod
from dataclasses import dataclass

Expand All @@ -20,6 +20,9 @@
from .template import Template
from .pipeline import BaseContextSource, BaseContextDirective, BaseContextRole

if TYPE_CHECKING:
from sphinx.environment import BuildEnvironment


@dataclass
class UnparsedData(UnresolvedContext):
Expand All @@ -32,7 +35,7 @@ class UnparsedData(UnresolvedContext):
schema: Schema

@override
def resolve(self) -> ResolvedContext:
def resolve(self, env: BuildEnvironment) -> ResolvedContext:
return self.schema.parse(self.raw)

@override
Expand Down
8 changes: 5 additions & 3 deletions tests/test_ctx.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import pickle
from unittest.mock import MagicMock

from sphinxnotes.render.data import RawData, Schema
from sphinxnotes.render.sources import UnparsedData
Expand All @@ -17,6 +18,7 @@ def test_schema_and_unparsed_data_are_picklable():

restored = pickle.loads(pickle.dumps(pending))

assert restored.resolve().name == 'mimi'
assert restored.resolve().attrs == {'age': 2, 'tags': ['cat', 'cute']}
assert restored.resolve().content == 'hello'
mock_env = MagicMock()
assert restored.resolve(mock_env).name == 'mimi'
assert restored.resolve(mock_env).attrs == {'age': 2, 'tags': ['cat', 'cute']}
assert restored.resolve(mock_env).content == 'hello'
Loading