Merge pull request #5 from rennat/0.2.0

0.2.0
This commit is contained in:
Tanner Netterville 2016-02-16 05:08:49 -06:00
commit 029e1cd4f2
9 changed files with 70 additions and 48 deletions

5
.gitignore vendored
View file

@ -1,5 +1,8 @@
.DS_Store
.idea
dist
/dist
/.eggs
/venv
*.pyc
*.egg
*.egg-info

View file

@ -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

View file

@ -1,5 +1,7 @@
# Python Markdown oEmbed
[![Build Status](https://travis-ci.org/rennat/python-markdown-oembed.svg?branch=master)](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

View file

@ -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)

View file

@ -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
]

View file

@ -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

View file

@ -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()

View file

@ -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'
]
)

View file

@ -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 = '![video](//www.youtube.com/watch?v=7XzdZ4KcI8Y)'
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],
}
})