mirror of
https://github.com/Hopiu/python-markdown-oembed.git
synced 2026-03-17 14:30:25 +00:00
Before this change, only three hardcoded oEmbed endpoints were available for users of the extension; youtube, flickr and vimeo. In the configuration, it was only possible to pass a subset of those 3 oEmbed endpoints. It was done by passing the names of the allowed endpoints. With this change, the API has changed. The allowed_endpoints kwarg now expects to be passed a list of OEmbedEndpoint objects (as opposed to names). This means the responsibility of creating OEmbedEndpoint objects has been shifted to the user of the extension. If the allowed_endpoints kwarg is omitted, the default oEmbed endpoints used will be the same as before; youtube, flickr and vimeo. The motivation is to allow arbitrary oEmbed endpoints, without necessitating anyone to maintain the list of all possible oEmbed endpoints out there.
34 lines
1.1 KiB
Python
34 lines
1.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
from markdown import Extension
|
|
import oembed
|
|
from mdx_oembed.endpoints import DEFAULT_ENDPOINTS
|
|
from mdx_oembed.inlinepatterns import OEmbedLinkPattern, OEMBED_LINK_RE
|
|
|
|
|
|
class OEmbedExtension(Extension):
|
|
|
|
def __init__(self, **kwargs):
|
|
self.config = {
|
|
'allowed_endpoints': [
|
|
DEFAULT_ENDPOINTS,
|
|
"A list of oEmbed endpoints to allow. Defaults to "
|
|
"endpoints.DEFAULT_ENDPOINTS"
|
|
],
|
|
}
|
|
super(OEmbedExtension, self).__init__(**kwargs)
|
|
|
|
def extendMarkdown(self, md, md_globals):
|
|
self.oembed_consumer = self.prepare_oembed_consumer()
|
|
link_pattern = OEmbedLinkPattern(OEMBED_LINK_RE, md,
|
|
self.oembed_consumer)
|
|
md.inlinePatterns.add('oembed_link', link_pattern, '<image_link')
|
|
|
|
def prepare_oembed_consumer(self):
|
|
allowed_endpoints = self.getConfig('allowed_endpoints', DEFAULT_ENDPOINTS)
|
|
consumer = oembed.OEmbedConsumer()
|
|
|
|
if allowed_endpoints:
|
|
for endpoint in allowed_endpoints:
|
|
consumer.addEndpoint(endpoint)
|
|
|
|
return consumer
|