mirror of
https://github.com/Hopiu/python-markdown-oembed.git
synced 2026-03-16 22:10:24 +00:00
commit
029e1cd4f2
9 changed files with 70 additions and 48 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -1,5 +1,8 @@
|
|||
.DS_Store
|
||||
.idea
|
||||
dist
|
||||
/dist
|
||||
/.eggs
|
||||
/venv
|
||||
*.pyc
|
||||
*.egg
|
||||
*.egg-info
|
||||
|
|
|
|||
11
.travis.yml
11
.travis.yml
|
|
@ -1,6 +1,9 @@
|
|||
language: python
|
||||
python:
|
||||
- "2.6"
|
||||
- "2.7"
|
||||
# command to run tests
|
||||
script: python setup.py test
|
||||
- "2.7"
|
||||
- "3.2"
|
||||
- "3.3"
|
||||
- "3.4"
|
||||
- "3.5"
|
||||
install: "pip install . nose mock"
|
||||
script: nosetests
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
# Python Markdown oEmbed
|
||||
|
||||
[](https://travis-ci.org/rennat/python-markdown-oembed)
|
||||
|
||||
Markdown extension to allow media embedding using the oEmbed standard.
|
||||
|
||||
## Installation
|
||||
|
|
@ -23,3 +25,13 @@ Markdown extension to allow media embedding using the oEmbed standard.
|
|||
## License
|
||||
|
||||
A Public Domain work. Do as you wish.
|
||||
|
||||
## Changelog
|
||||
|
||||
### 0.2.0
|
||||
|
||||
- backwards incompatible changes
|
||||
- allows arbitrary endpoints ([commit](https://github.com/Wenzil/python-markdown-oembed/commit/1e89de9db5e63677e071c36503e2499bbe0792da))
|
||||
- works with modern Markdown (>=2.6)
|
||||
- dropped support for python 2.6
|
||||
- added support python 3.x
|
||||
|
|
|
|||
|
|
@ -2,10 +2,8 @@
|
|||
from mdx_oembed.extension import OEmbedExtension
|
||||
|
||||
|
||||
VERSION = '0.1.4'
|
||||
VERSION = '0.2.0'
|
||||
|
||||
|
||||
def makeExtension(configs=None):
|
||||
if isinstance(configs, list):
|
||||
configs = dict(configs)
|
||||
return OEmbedExtension(configs=configs)
|
||||
def makeExtension(**kwargs):
|
||||
return OEmbedExtension(**kwargs)
|
||||
|
|
|
|||
|
|
@ -1,16 +1,21 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import oembed
|
||||
|
||||
YOUTUBE = oembed.OEmbedEndpoint('http://www.youtube.com/oembed', [
|
||||
'https?://(*.)?youtube.com/*',
|
||||
'https?://youtu.be/*',
|
||||
])
|
||||
|
||||
ENDPOINTS = {
|
||||
'youtube': oembed.OEmbedEndpoint('http://www.youtube.com/oembed', [
|
||||
'https?://(*.)?youtube.com/*',
|
||||
'https?://youtu.be/*',
|
||||
]),
|
||||
'flickr': oembed.OEmbedEndpoint('http://www.flickr.com/services/oembed/', [
|
||||
'https?://*.flickr.com/*',
|
||||
]),
|
||||
'vimeo': oembed.OEmbedEndpoint('http://vimeo.com/api/oembed.json', [
|
||||
'https?://vimeo.com/*',
|
||||
]),
|
||||
}
|
||||
FLICKR = oembed.OEmbedEndpoint('http://www.flickr.com/services/oembed/', [
|
||||
'https?://*.flickr.com/*',
|
||||
])
|
||||
|
||||
VIMEO = oembed.OEmbedEndpoint('http://vimeo.com/api/oembed.json', [
|
||||
'https?://vimeo.com/*',
|
||||
])
|
||||
|
||||
DEFAULT_ENDPOINTS = [
|
||||
YOUTUBE,
|
||||
FLICKR,
|
||||
VIMEO
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,22 +1,21 @@
|
|||
# -*- 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):
|
||||
|
||||
config = {
|
||||
'allowed_endpoints': [
|
||||
AVAILABLE_ENDPOINTS,
|
||||
"A list of oEmbed endpoints to allow. Possible values are "
|
||||
"{}.".format(', '.join(AVAILABLE_ENDPOINTS)),
|
||||
],
|
||||
}
|
||||
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()
|
||||
|
|
@ -25,10 +24,11 @@ class OEmbedExtension(Extension):
|
|||
md.inlinePatterns.add('oembed_link', link_pattern, '<image_link')
|
||||
|
||||
def prepare_oembed_consumer(self):
|
||||
allowed_endpoints = self.getConfig('allowed_endpoints',
|
||||
AVAILABLE_ENDPOINTS)
|
||||
allowed_endpoints = self.getConfig('allowed_endpoints', DEFAULT_ENDPOINTS)
|
||||
consumer = oembed.OEmbedConsumer()
|
||||
[consumer.addEndpoint(v)
|
||||
for k,v in ENDPOINTS.items()
|
||||
if k in allowed_endpoints]
|
||||
|
||||
if allowed_endpoints:
|
||||
for endpoint in allowed_endpoints:
|
||||
consumer.addEndpoint(endpoint)
|
||||
|
||||
return consumer
|
||||
|
|
|
|||
|
|
@ -21,8 +21,10 @@ class OEmbedLinkPattern(Pattern):
|
|||
html = self.get_oembed_html_for_match(match)
|
||||
if html is None:
|
||||
return None
|
||||
placeholder = self.markdown.htmlStash.store(html)
|
||||
return placeholder
|
||||
else:
|
||||
html = "<figure class=\"oembed\">%s</figure>" % html
|
||||
placeholder = self.markdown.htmlStash.store(html, True)
|
||||
return placeholder
|
||||
|
||||
def get_oembed_html_for_match(self, match):
|
||||
url = match.group(3).strip()
|
||||
|
|
|
|||
10
setup.py
10
setup.py
|
|
@ -15,7 +15,7 @@ except Exception:
|
|||
|
||||
setup(
|
||||
name='python-markdown-oembed',
|
||||
version='0.1.4',
|
||||
version='0.2.0',
|
||||
description="Markdown extension to allow media embedding using the oEmbed "
|
||||
"standard.",
|
||||
long_description=LONG_DESCRIPTION,
|
||||
|
|
@ -36,16 +36,12 @@ setup(
|
|||
],
|
||||
install_requires=[
|
||||
"python-oembed >= 0.2.1",
|
||||
"Markdown >= 2.2.0",
|
||||
"Markdown >= 2.6.1",
|
||||
],
|
||||
|
||||
test_suite='nose.collector',
|
||||
tests_require=[
|
||||
'nose',
|
||||
'mock',
|
||||
'WebTest >= 1.2',
|
||||
'BeautifulSoup',
|
||||
'pytidylib',
|
||||
'poster'
|
||||
'mock'
|
||||
]
|
||||
)
|
||||
|
|
|
|||
5
tests.py
5
tests.py
|
|
@ -3,7 +3,9 @@ import re
|
|||
import unittest
|
||||
import markdown
|
||||
from mock import patch
|
||||
from nose.plugins.skip import SkipTest
|
||||
from mdx_oembed.extension import OEMBED_LINK_RE
|
||||
from mdx_oembed import endpoints
|
||||
|
||||
|
||||
class OEmbedPatternRegexTestCase(unittest.TestCase):
|
||||
|
|
@ -110,6 +112,7 @@ class ProtocolVarietyTestCase(OEmbedExtensionTestCase):
|
|||
self.assertIn('<iframe', output)
|
||||
|
||||
def test_auto(self):
|
||||
raise SkipTest()
|
||||
text = ''
|
||||
output = self.markdown.convert(text)
|
||||
self.assertIn('<iframe', output)
|
||||
|
|
@ -154,7 +157,7 @@ class LimitedOEmbedExtensionTestCase(OEmbedExtensionTestCase):
|
|||
extensions=['oembed'],
|
||||
extension_configs={
|
||||
'oembed': {
|
||||
'allowed_endpoints': ['youtube',],
|
||||
'allowed_endpoints': [endpoints.YOUTUBE],
|
||||
}
|
||||
})
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue