From e2e29489d7bed1085c788fbec7b1e475b45113d4 Mon Sep 17 00:00:00 2001 From: Sami Turcotte Date: Tue, 21 Apr 2015 05:18:42 -0400 Subject: [PATCH] Allow arbitrary oEmbed endpoints 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. --- mdx_oembed/endpoints.py | 13 +++++++++---- mdx_oembed/extension.py | 22 ++++++++++------------ 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/mdx_oembed/endpoints.py b/mdx_oembed/endpoints.py index ce0a0d6..0fd23ba 100644 --- a/mdx_oembed/endpoints.py +++ b/mdx_oembed/endpoints.py @@ -2,15 +2,20 @@ import oembed -ENDPOINTS = { - 'youtube': oembed.OEmbedEndpoint('http://www.youtube.com/oembed', [ +DEFAULT_ENDPOINTS = [ + # Youtube + oembed.OEmbedEndpoint('http://www.youtube.com/oembed', [ 'https?://(*.)?youtube.com/*', 'https?://youtu.be/*', ]), - 'flickr': oembed.OEmbedEndpoint('http://www.flickr.com/services/oembed/', [ + + # Flickr + oembed.OEmbedEndpoint('http://www.flickr.com/services/oembed/', [ 'https?://*.flickr.com/*', ]), - 'vimeo': oembed.OEmbedEndpoint('http://vimeo.com/api/oembed.json', [ + + # Vimeo + oembed.OEmbedEndpoint('http://vimeo.com/api/oembed.json', [ 'https?://vimeo.com/*', ]), } diff --git a/mdx_oembed/extension.py b/mdx_oembed/extension.py index 9ad8ee1..b3916fa 100644 --- a/mdx_oembed/extension.py +++ b/mdx_oembed/extension.py @@ -1,21 +1,18 @@ # -*- coding: utf-8 -*- from markdown import Extension import oembed -from mdx_oembed.endpoints import ENDPOINTS +from mdx_oembed.endpoints import DEFAULT_ENDPOINTS from mdx_oembed.inlinepatterns import OEmbedLinkPattern, OEMBED_LINK_RE -AVAILABLE_ENDPOINTS = ENDPOINTS.keys() - - class OEmbedExtension(Extension): def __init__(self, **kwargs): self.config = { 'allowed_endpoints': [ - AVAILABLE_ENDPOINTS, - "A list of oEmbed endpoints to allow. Possible values are " - "{}.".format(', '.join(AVAILABLE_ENDPOINTS)), + DEFAULT_ENDPOINTS, + "A list of oEmbed endpoints to allow. Defaults to " + "endpoints.DEFAULT_ENDPOINTS" ], } super(OEmbedExtension, self).__init__(**kwargs) @@ -27,10 +24,11 @@ class OEmbedExtension(Extension): md.inlinePatterns.add('oembed_link', link_pattern, '