Module

directives

Directive system for Patitas.

Provides extensible block-level markup through the directive syntax:

optional title

Content goes here.

Key components:

  • DirectiveHandler: Protocol for custom directive implementations
  • DirectiveOptions: Base class for typed option parsing
  • DirectiveContract: Nesting validation rules
  • DirectiveRegistry: Handler lookup and registration

Thread Safety:

All components are designed for thread-safety:

  • Options are frozen dataclasses
  • Contracts are frozen dataclasses
  • Registry is immutable after creation
  • Handlers must be stateless

Example:

>>> from patitas.directives import DirectiveHandler, DirectiveOptions
>>>
>>> @dataclass(frozen=True, slots=True)
... class VideoOptions(DirectiveOptions):
...     width: int | None = None
...     autoplay: bool = False
...
>>> class VideoDirective:
...     names = ("video",)
...     token_type = "video"
...     options_class = VideoOptions
...
...     def parse(self, name, title, options, content, children, location):
...         return Directive(location, name, title, options, children)
...
...     def render(self, node, rendered_children, sb):
...         sb.append(f'<video src="{node.title}"></video>')