Skip to content

Commit 12751e8

Browse files
committed
update
1 parent 4c03332 commit 12751e8

2 files changed

Lines changed: 29 additions & 29 deletions

File tree

src/sphinxnotes/data/data.py

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,7 @@ def _apply_modifier(self, mod: str):
359359
@dataclass(frozen=True)
360360
class Schema(object):
361361
name: Field | None
362-
attrs: dict[str, Field]
362+
attrs: dict[str, Field] | Field
363363
content: Field | None
364364

365365
@classmethod
@@ -414,34 +414,30 @@ def parse(self, data: RawData) -> Data:
414414

415415
return Data(name, attrs, content)
416416

417-
def fields(self, pred: Callable[[Field], bool] | None = None) -> Generator[tuple[str, Field]]:
418-
def ok(f: Field) -> bool:
419-
return not pred or pred(f)
420-
421-
if self.name and ok(self.name):
417+
def fields(self,) -> Generator[tuple[str, Field]]:
418+
if self.name:
422419
yield 'name', self.name
423420

424-
for name, field in self.attrs.items():
425-
if ok(field):
421+
if isinstance(self.attrs, Field):
422+
yield 'attrs', self.attrs # FIXME:
423+
else:
424+
for name, field in self.attrs.items():
426425
yield name, field
427426

428-
if self.content and ok(self.content):
427+
if self.content:
429428
yield 'content', self.content
430429

431430

432-
def items(
433-
self, data: Data, pred: Callable[[Field], bool] | None = None
434-
) -> Generator[tuple[str, Field, Value]]:
435-
def ok(f: Field) -> bool:
436-
return not pred or pred(f)
437-
438-
if self.name and ok(self.name):
431+
def items(self, data: Data) -> Generator[tuple[str, Field, Value]]:
432+
if self.name:
439433
yield 'name', self.name, data.name
440434

441-
for name, field in self.attrs.items():
442-
if not ok(field):
443-
continue
444-
yield name, field, data.attrs.get(name)
435+
if isinstance(self.attrs, Field):
436+
for name, val in data.attrs:
437+
yield name, self.attrs, val
438+
else:
439+
for name, field in self.attrs.items():
440+
yield name, field, data.attrs.get(name)
445441

446-
if self.content and ok(self.content):
442+
if self.content:
447443
yield 'content', self.content, data.content

src/sphinxnotes/data/render.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,17 @@
1515
from docutils.parsers.rst import directives
1616
from sphinx.util import logging
1717
from sphinx.util.docutils import SphinxDirective, SphinxRole
18-
from sphinx.application import Sphinx
1918
from sphinx.transforms import SphinxTransform
19+
from sphinx.transforms.post_transforms import ReferencesResolver
20+
2021

2122
from .data import Field, Schema, RawData, Data
2223
from .template import Template, Phase
2324
from . import extra_contexts
2425
from . import utils
2526

2627
if TYPE_CHECKING:
28+
from sphinx.application import Sphinx
2729
from sphinx.environment import BuildEnvironment
2830
from .template import MarkupParser
2931

@@ -85,9 +87,7 @@ def reporter(self, e: ValueError) -> Exception:
8587
# Nodes definitons
8688
# ===============
8789

88-
class BaseNode(nodes.Node):
89-
template: Template
90-
schema: Schema
90+
class BaseNode(nodes.Element): ...
9191

9292
class RenderedNode(BaseNode):
9393
data: Data
@@ -99,6 +99,9 @@ class rendered_inline_node(RenderedNode, nodes.inline): ...
9999

100100
class pending_node(BaseNode, nodes.Invisible, nodes.Element):
101101
data: RawData
102+
template: Template
103+
schema: Schema
104+
102105
inline: bool = False
103106
need_external_name: bool = False
104107
need_external_content: bool = False
@@ -164,7 +167,7 @@ def _resolve_external_content(self) -> list[nodes.Node]:
164167

165168
class BaseDataDefiner(ABC):
166169
"""
167-
A abstract class that can defines :cls:`RawData` and support
170+
A abstract class that owns :cls:`RawData` and support
168171
validating and rendering the data at the appropriate time.
169172
170173
The subclasses *MUST* be subclass of :cls:`SphinxDirective` or
@@ -210,7 +213,7 @@ def build_pending_node(self) -> pending_node:
210213

211214
@final
212215
def render_pending_node(self, pending: pending_node) -> RenderedNode:
213-
rendered = pending.render(self) # type: ignore
216+
rendered = pending.render(self) # FIXME: type hint
214217
self.process_paresd_data(rendered.data)
215218
self.process_rendered_node(rendered)
216219

@@ -278,7 +281,7 @@ def current_schema(self) -> Schema:
278281

279282
@classmethod
280283
def derive(
281-
cls, name: str, tmpl: Template, schema: Schema
284+
cls, name: str, schema: Schema, tmpl: Template
282285
) -> type[StrictDataDefineDirective]:
283286
"""Generate an AnyDirective child class for describing object."""
284287
if not schema.name:
@@ -354,7 +357,8 @@ def _insert_parsed_hook(app, docname, content):
354357

355358

356359
class _ResolvingHook(SphinxTransform):
357-
default_priority = 210 # TODO: before xref
360+
# After resolving pending_xref.
361+
default_priority = (ReferencesResolver.default_priority or 10) + 1
358362

359363
def apply(self, **kwargs):
360364
logger.warning(f'running resolving hook for doc {self.env.docname}...')

0 commit comments

Comments
 (0)