Skip to main content

Markdown extension to allow media embedding using the oEmbed standard.

Project description

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

Project details


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.

Supported by

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