collective.html2blocks.registry#

Registry for block, element, and iframe converters in collective.html2blocks.

This module provides decorators and accessors for registering and retrieving converter functions that transform HTML elements into Volto blocks or Slate items.

Converters are registered using decorators and stored in a global registry. This enables extensible and dynamic HTML-to-block conversion for Plone/Volto.

Example

from collective.html2blocks.registry import block_converter

@block_converter('p')
def convert_paragraph(element):
class collective.html2blocks.registry.block_converter[source]#

Decorator to register a block converter function for one or more tag names.

Parameters:

*tag_names (str) -- One or more HTML tag names to register the converter for.

Example

@block_converter('p', 'div')
def convert_paragraph(element):
__init__(*tag_names: str)[source]#
collective.html2blocks.registry.default_converter(func: BlockConverter) BlockConverter[source]#

Register the default block converter.

Parameters:

func (BlockConverter) -- The converter function to use as default.

Returns:

The registered default converter.

Return type:

BlockConverter

Example

@default_converter
def convert_default(element):
class collective.html2blocks.registry.element_converter[source]#

Decorator to register an element converter function for one or more tag names.

Parameters:
  • tag_names (list[str]) -- List of HTML tag names to register the converter for.

  • type_name (str, optional) -- Type name to use for the converter. Defaults to "".

Example

@element_converter(['span'], 'strong')
def convert_span(element, type_name):
__init__(tag_names: list[str], type_name: str = '')[source]#
collective.html2blocks.registry.get_block_converter(element: Tag | None = None, tag_name: str = '', strict: bool = True) Callable | None[source]#

Return a registered block converter for a given element or tag name.

Parameters:
  • element (Tag, optional) -- The HTML element to get the converter for.

  • tag_name (str, optional) -- The tag name to get the converter for.

  • strict (bool, optional) -- If True, only return if registered. If False, fallback to default.

Returns:

The registered converter function, or None if not found.

Return type:

Callable | None

Example

>>> get_block_converter(tag_name='p')
<function convert_paragraph ...>
collective.html2blocks.registry.get_element_converter(element: Tag | None = None, tag_name: str = '') ElementConverter | None[source]#

Return a registered element converter for a given element or tag name.

Parameters:
  • element (Tag, optional) -- The HTML element to get the converter for.

  • tag_name (str, optional) -- The tag name to get the converter for.

Returns:

The registered converter function,

or None if not found.

Return type:

ElementConverter | None

Example

>>> get_element_converter(tag_name='span')
<function convert_span ...>
collective.html2blocks.registry.get_iframe_converter(src: str) EmbedInfo[source]#

Return a registered iframe converter for a given src URL.

Parameters:

src (str) -- The iframe src URL to match against registered patterns.

Returns:

Information about the matched provider and converter.

Return type:

EmbedInfo

Example

>>> get_iframe_converter('https://youtube.com/embed/abc123')
EmbedInfo(url='...', provider_id='abc123', converter=<function ...>)
class collective.html2blocks.registry.iframe_converter[source]#

Decorator to register an iframe converter function for a provider and pattern.

Parameters:
  • provider (str) -- The provider name (e.g., "youtube").

  • src_pattern (re.Pattern | str, optional) -- Regex pattern for matching src URLs.

  • url_pattern (str, optional) -- Replacement pattern for URLs.

Example

@iframe_converter("youtube", r"https://youtube.com/embed/(?P<provider_id>[^/]+)")
def convert_youtube_iframe(element):
__init__(provider: str, src_pattern: Pattern | str = '', url_pattern: str = '')[source]#
collective.html2blocks.registry.report_registrations() ReportRegistrations[source]#

Return information about current converter registrations.

Returns:

Dictionary with block, element, and iframe registrations.

Return type:

ReportRegistrations

Example

>>> report_registrations()
{'block': {...}, 'element': {...}, 'iframe': {...}}