Skip to main content

Python Markdown oEmbed

Markdown extension to allow media embedding using the oEmbed standard.

Requirements

  • Python >= 3.12
  • Markdown >= 3.2

Installation

pip install python-markdown-oembed-extension

Or with uv:

uv add python-markdown-oembed-extension

Usage

import markdown
md = markdown.Markdown(extensions=['oembed'])
md.convert('![video](http://www.youtube.com/watch?v=zqnh_YJBvOI)')

Output is wrapped in a <figure class="oembed"> element by default:

<figure class="oembed"><iframe width="459" height="344" ...></iframe></figure>

Configuration

Option Default Description
allowed_endpoints YouTube, Flickr, Vimeo, Slideshare List of oembed.OEmbedEndpoint objects
wrapper_class "oembed" CSS class(es) for the <figure> wrapper. Set to "" to disable wrapping

Example with custom configuration:

from mdx_oembed.endpoints import YOUTUBE, VIMEO

md = markdown.Markdown(
    extensions=['oembed'],
    extension_configs={
        'oembed': {
            'allowed_endpoints': [YOUTUBE, VIMEO],
            'wrapper_class': 'embed-responsive',
        }
    }
)

Security

oEmbed HTML responses are sanitized using nh3 to prevent XSS from compromised oEmbed providers. Only safe tags (iframe, video, audio, img, etc.) and attributes are allowed.

Links

License

A Public Domain work. Do as you wish.

Changelog

0.5.1

  • Fixed wrapper_class config being ignored — getConfig() was called with a hardcoded default that shadowed user-supplied extension_configs values

0.5.0

  • Breaking: requires Python >= 3.12
  • Replaced custom html.escape() for proper attribute escaping in photo <img> tags
  • HTTP status validation: non-2xx oEmbed API responses now raise OEmbedError
  • addEndpoint() is deprecated in favour of add_endpoint() (emits DeprecationWarning)
  • Added from __future__ import annotations to all modules
  • Added py.typed marker (PEP 561) for downstream type-checking support
  • Version is now sourced dynamically from mdx_oembed/version.py via hatch
  • Added ruff and pyright configuration in pyproject.toml
  • Tests converted to pure pytest (dropped unittest.TestCase)
  • New tests for HTTP status handling, deprecation warnings, and HTML escaping
  • Removed legacy src/ package tree

0.4.0

  • Breaking: requires Python >= 3.9 and Markdown >= 3.2
  • Migrated from deprecated Pattern to InlineProcessor (Markdown 3.2+ compatible)
  • Added HTML sanitization of oEmbed responses (XSS protection via nh3)
  • Added support for oEmbed photo type responses
  • Improved image URL detection (case-insensitive, handles query strings)
  • All oEmbed API endpoints now use HTTPS
  • Slideshare URL patterns now accept both HTTP and HTTPS
  • Configurable <figure> wrapper class (previously hardcoded Bootstrap classes)
  • Migrated to pyproject.toml with hatchling build backend
  • Tests modernized: uses pytest + unittest.mock, all HTTP calls mocked
  • Centralized version management in mdx_oembed/version.py

0.2.1

  • add Slideshare endpoint (thanks to anantshri)

0.2.0

  • backwards incompatible changes
    • allows arbitrary endpoints (commit)
    • works with modern Markdown (>=2.6)
    • dropped support for python 2.6
  • added support python 3.x

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_markdown_oembed_extension-0.5.1.tar.gz (9.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file python_markdown_oembed_extension-0.5.1.tar.gz.

File metadata

  • Download URL: python_markdown_oembed_extension-0.5.1.tar.gz
  • Upload date:
  • Size: 9.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for python_markdown_oembed_extension-0.5.1.tar.gz
Algorithm Hash digest
SHA256 ca845183ca701b0aca25b863153aad62e7661eba403de8bac0384a9a9b7279ea
MD5 b0a8cf1ab1ee600c7e9d017c0493c538
BLAKE2b-256 ddc1e1d18baac3685e8ac45da10cd6b7903c9e4a8759f67bcca216c7cae8a922

See more details on using hashes here.

File details

Details for the file python_markdown_oembed_extension-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: python_markdown_oembed_extension-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 9.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for python_markdown_oembed_extension-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e2280ee5c234579aae3d3ae0dcd1e9bbae91b2954d464a1ee609f757f8bf4fce
MD5 8c85417a5fdd2b37d51ecc65f1c93fd2
BLAKE2b-256 9fadfb0133cb41d9e0a3afda104d1dca663265be07cb8175bec4a5cbfe36a2ae

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.5.1 This release

2 files

0.5.0

2 files

0.4.0

2 files

0.3.1

2 files

0.3.0

2 files

0.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page