mirror of
https://github.com/veekun/pokedex.git
synced 2024-08-20 18:16:34 +00:00
Make MarkdownString.as_html() accept an extension object, not class
No reason to instantiate every time as_html's called, is there? Also, sessions use a markdown_extension attribute instead of markdown_extension_class. The latter is only used to set the former when the session is created (unless another markdown_extension_class is given, of course).
This commit is contained in:
parent
928eaca4a4
commit
719c32de0b
3 changed files with 32 additions and 25 deletions
|
@ -47,17 +47,18 @@ class MarkdownString(object):
|
||||||
def __html__(self):
|
def __html__(self):
|
||||||
return self.as_html()
|
return self.as_html()
|
||||||
|
|
||||||
def as_html(self, extension_cls=None):
|
def as_html(self, extension=None):
|
||||||
"""Returns the string as HTML.
|
"""Returns the string as HTML.
|
||||||
|
|
||||||
Pass a custom `extension_cls` to use your own class to generate links.
|
Pass a custom `extension` to use your own extension object to generate
|
||||||
The default (and recommended superclass) is `PokedexLinkExtension`,
|
links.
|
||||||
described below.
|
The default is the session's markdown_extension. Usually that's a
|
||||||
|
`PokedexLinkExtension` described below, which is also the recommended
|
||||||
|
superclass.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if extension_cls is None:
|
if extension is None:
|
||||||
extension_cls = self.session.markdown_extension_class
|
extension = self.session.markdown_extension
|
||||||
extension = extension_cls(self.session)
|
|
||||||
|
|
||||||
md = markdown.Markdown(
|
md = markdown.Markdown(
|
||||||
extensions=['extra', extension],
|
extensions=['extra', extension],
|
||||||
|
|
|
@ -205,8 +205,10 @@ class MultilangSession(Session):
|
||||||
if 'default_language_id' in kwargs:
|
if 'default_language_id' in kwargs:
|
||||||
self.default_language_id = kwargs.pop('default_language_id')
|
self.default_language_id = kwargs.pop('default_language_id')
|
||||||
|
|
||||||
if 'markdown_extension_class' in kwargs:
|
markdown_extension_class = kwargs.pop('markdown_extension_class',
|
||||||
self.markdown_extension_class = kwargs.pop('markdown_extension_class')
|
self.markdown_extension_class)
|
||||||
|
|
||||||
|
self.markdown_extension = markdown_extension_class(self)
|
||||||
|
|
||||||
kwargs.setdefault('query_cls', MultilangQuery)
|
kwargs.setdefault('query_cls', MultilangQuery)
|
||||||
|
|
||||||
|
@ -226,5 +228,5 @@ class MultilangScopedSession(ScopedSession):
|
||||||
self.registry().default_language_id = new
|
self.registry().default_language_id = new
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def markdown_extension_class(self):
|
def markdown_extension(self):
|
||||||
return self.registry().markdown_extension_class
|
return self.registry().markdown_extension
|
||||||
|
|
|
@ -108,9 +108,9 @@ def test_markdown_string():
|
||||||
def identifier_url(self, category, ident):
|
def identifier_url(self, category, ident):
|
||||||
return "%s/%s" % (category, ident)
|
return "%s/%s" % (category, ident)
|
||||||
|
|
||||||
assert md.as_html(extension_cls=ObjectTestExtension) == (
|
assert md.as_html(extension=ObjectTestExtension(connection)) == (
|
||||||
'<p><a href="move/thunderbolt">Thunderbolt</a> <span>paralyzes</span> <a href="form/sky shaymin">Sky Shaymin</a>. <span>mewthree</span> does not exist.</p>')
|
'<p><a href="move/thunderbolt">Thunderbolt</a> <span>paralyzes</span> <a href="form/sky shaymin">Sky Shaymin</a>. <span>mewthree</span> does not exist.</p>')
|
||||||
assert md.as_html(extension_cls=IdentifierTestExtension) == (
|
assert md.as_html(extension=IdentifierTestExtension(connection)) == (
|
||||||
'<p><a href="move/thunderbolt">Thunderbolt</a> <a href="mechanic/paralysis">paralyzes</a> <a href="form/sky shaymin">Sky Shaymin</a>. <a href="pokemon/mewthree">mewthree</a> does not exist.</p>')
|
'<p><a href="move/thunderbolt">Thunderbolt</a> <a href="mechanic/paralysis">paralyzes</a> <a href="form/sky shaymin">Sky Shaymin</a>. <a href="pokemon/mewthree">mewthree</a> does not exist.</p>')
|
||||||
|
|
||||||
def markdown_column_params():
|
def markdown_column_params():
|
||||||
|
@ -137,6 +137,21 @@ def test_markdown_values(parent_class, translation_class, column_name):
|
||||||
if translation_class:
|
if translation_class:
|
||||||
query = query.join(translation_class)
|
query = query.join(translation_class)
|
||||||
|
|
||||||
|
|
||||||
|
class TestExtension(markdown.PokedexLinkExtension):
|
||||||
|
def object_url(self, category, obj):
|
||||||
|
"Swallow good links"
|
||||||
|
return 'ok'
|
||||||
|
|
||||||
|
def identifier_url(self, category, ident):
|
||||||
|
"Only allow mechanic links here (good links handled in object_url)"
|
||||||
|
# Note: 'key' is a closed variable that gets set in the loop below
|
||||||
|
assert category == 'mechanic', (
|
||||||
|
'%s: unknown link target: {%s:%s}' %
|
||||||
|
(key, category, ident))
|
||||||
|
|
||||||
|
test_extension = TestExtension(connection)
|
||||||
|
|
||||||
for item in query:
|
for item in query:
|
||||||
for language, md_text in getattr(item, column_name + '_map').items():
|
for language, md_text in getattr(item, column_name + '_map').items():
|
||||||
|
|
||||||
|
@ -146,18 +161,7 @@ def test_markdown_values(parent_class, translation_class, column_name):
|
||||||
key = u"Markdown in {0} #{1}'s {2} (lang={3})".format(
|
key = u"Markdown in {0} #{1}'s {2} (lang={3})".format(
|
||||||
parent_class.__name__, item.id, column_name, language.identifier)
|
parent_class.__name__, item.id, column_name, language.identifier)
|
||||||
|
|
||||||
class TestExtension(markdown.PokedexLinkExtension):
|
text = md_text.as_html(extension=test_extension)
|
||||||
def object_url(self, category, obj):
|
|
||||||
"Swallow good links"
|
|
||||||
return 'ok'
|
|
||||||
|
|
||||||
def identifier_url(self, category, ident):
|
|
||||||
"Only allow mechanic links here (good links handled in object_url)"
|
|
||||||
assert category == 'mechanic', (
|
|
||||||
'%s: unknown link target: {%s:%s}' %
|
|
||||||
(key, category, ident))
|
|
||||||
|
|
||||||
text = md_text.as_html(extension_cls=TestExtension)
|
|
||||||
|
|
||||||
error_message = u"{0} leaves syntax cruft:\n{1}"
|
error_message = u"{0} leaves syntax cruft:\n{1}"
|
||||||
error_message = error_message.format(key, text)
|
error_message = error_message.format(key, text)
|
||||||
|
|
Loading…
Reference in a new issue