You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2012/11/27 14:46:06 UTC
[30/44] git commit: [#4667] updates for new version of Markdown
[#4667] updates for new version of Markdown
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/a890ee43
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/a890ee43
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/a890ee43
Branch: refs/heads/cj/4691
Commit: a890ee43bc09382ff005cdb5fffab2fc92e55ce1
Parents: 16a641f
Author: Dave Brondsema <db...@geek.net>
Authored: Sat Sep 22 03:29:31 2012 +0000
Committer: Dave Brondsema <db...@geek.net>
Committed: Wed Nov 7 20:30:55 2012 +0000
----------------------------------------------------------------------
Allura/allura/lib/app_globals.py | 4 +-
Allura/allura/lib/macro.py | 9 ++++---
Allura/allura/lib/markdown_extensions.py | 21 +++++++++++++--
Allura/allura/tests/test_globals.py | 33 ++++++++++++++----------
4 files changed, 44 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a890ee43/Allura/allura/lib/app_globals.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/app_globals.py b/Allura/allura/lib/app_globals.py
index 6cf7f14..3e278ad 100644
--- a/Allura/allura/lib/app_globals.py
+++ b/Allura/allura/lib/app_globals.py
@@ -47,7 +47,7 @@ class ForgeMarkdown(markdown.Markdown):
try:
return markdown.Markdown.convert(self, source)
except Exception as e:
- log.info('Invalid markdown: %s %s', e, source)
+ log.info('Invalid markdown: %s', source, exc_info=True)
escaped = h.really_unicode(source)
escaped = cgi.escape(escaped)
return h.html.literal(u"""<p><strong>ERROR!</strong> The markdown supplied could not be parsed correctly.
@@ -307,7 +307,7 @@ class Globals(object):
def forge_markdown(self, **kwargs):
'''return a markdown.Markdown object on which you can call convert'''
return ForgeMarkdown(
- extensions=['codehilite', ForgeExtension(**kwargs), 'tables', 'toc'],
+ extensions=['codehilite', ForgeExtension(**kwargs), 'tables', 'toc'], # 'nl2br', 'fenced_code'
output_format='html4')
@property
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a890ee43/Allura/allura/lib/macro.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/macro.py b/Allura/allura/lib/macro.py
index e43b467..7b921eb 100644
--- a/Allura/allura/lib/macro.py
+++ b/Allura/allura/lib/macro.py
@@ -42,15 +42,16 @@ class parse(object):
args = dict(t.split('=', 1) for t in parts[1:])
response = macro(**h.encode_keys(args))
return response
- except (ValueError, TypeError), ex:
+ except (ValueError, TypeError) as ex:
msg = cgi.escape(u'[[%s]] (%s)' % (s, repr(ex)))
+ log.warn('macro error', exc_info=True)
return '\n<div class="error"><pre><code>%s</code></pre></div>' % msg
except Exception, ex:
raise
return '[[Error parsing %s: %s]]' % (s, ex)
def _lookup_macro(self, s):
- macro, context = _macros.get(s, None)
+ macro, context = _macros.get(s, (None, None))
if context is None or context == self._context:
return macro
else:
@@ -240,7 +241,7 @@ def projects(category=None, display_mode='grid', sort='last_updated',
columns=1, show_proj_icon=True, show_download_button=True, show_awards_banner=True,
grid_view_tools=''):
initial_q = dict(neighborhood_id=c.project.neighborhood_id)
- return get_projects_for_macro(category=category, display_mode=display_mode, sort=sort,
+ return get_projects_for_macro(category=category, display_mode=display_mode, sort=sort,
show_total=show_total, limit=limit, labels=labels, award=award, private=private,
columns=columns, show_proj_icon=show_proj_icon, show_download_button=show_download_button,
show_awards_banner=show_awards_banner, grid_view_tools=grid_view_tools,
@@ -261,7 +262,7 @@ def my_projects(category=None, display_mode='grid', sort='last_updated',
ids.append(p._id)
initial_q = dict(_id={'$in': ids})
- return get_projects_for_macro(category=category, display_mode=display_mode, sort=sort,
+ return get_projects_for_macro(category=category, display_mode=display_mode, sort=sort,
show_total=show_total, limit=limit, labels=labels, award=award, private=private,
columns=columns, show_proj_icon=show_proj_icon, show_download_button=show_download_button,
show_awards_banner=show_awards_banner, grid_view_tools=grid_view_tools,
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a890ee43/Allura/allura/lib/markdown_extensions.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/markdown_extensions.py b/Allura/allura/lib/markdown_extensions.py
index 2f7b2f3..eac8b1c 100644
--- a/Allura/allura/lib/markdown_extensions.py
+++ b/Allura/allura/lib/markdown_extensions.py
@@ -128,8 +128,14 @@ class ForgeProcessor(object):
if self.macro_re.match(raw):
stash = 'macro'
raw = raw[1:-1] # strip off the enclosing []
- elif self.artifact_re.match(raw): stash = 'artifact'
- else: return raw
+ elif raw == 'TOC':
+ # pass this straight through and don't do an artifact lookup
+ return '[' + raw + ']'
+ elif self.artifact_re.match(raw):
+ stash = 'artifact'
+ else:
+ return raw
+ print 'store', stash, raw
return self._store(stash, raw)
def _store(self, stash_name, value):
@@ -139,7 +145,9 @@ class ForgeProcessor(object):
def lookup(self, stash, id):
stash = self.stash.get(stash, [])
- if id >= len(stash): return ''
+ if id >= len(stash):
+ return ''
+ print 'lookup returning', stash[id]
return stash[id]
def compile(self):
@@ -152,7 +160,9 @@ class ForgeProcessor(object):
self.alinks = {}
self.stash['artifact'] = map(self._expand_alink, self.stash['artifact'])
self.stash['link'] = map(self._expand_link, self.stash['link'])
+ print 'pre:', self.stash['macro']
self.stash['macro'] = map(macro.parse(self._macro_context), self.stash['macro'])
+ print 'post:', self.stash['macro']
def reset(self):
self.stash = dict(
@@ -200,7 +210,12 @@ class ForgePostprocessor(markdown.postprocessors.Postprocessor):
def run(self, text):
self.parent.compile()
+ print
+ print 1, text
def repl(mo):
+ print 2, mo.group(1)
+ print 3, mo.group(2)
+ print 4, self.parent.lookup(mo.group(1), int(mo.group(2)))
return self.parent.lookup(mo.group(1), int(mo.group(2)))
return self.parent.placeholder_re.sub(repl, text)
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/a890ee43/Allura/allura/tests/test_globals.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_globals.py b/Allura/allura/tests/test_globals.py
index 99f7923..b528cab 100644
--- a/Allura/allura/tests/test_globals.py
+++ b/Allura/allura/tests/test_globals.py
@@ -111,16 +111,6 @@ def test_macros():
assert '<img alt="test2 Logo"' in r, r
assert '<img alt="test Logo"' not in r, r
assert '<img alt="sub1 Logo"' not in r, r
- r = g.markdown_wiki.convert("""[TOC]
-
-# Header 1
-
-## Header 2""")
- assert '<a class="" href="#header-1">Header 1</a>' in r, r
-
- r = g.markdown_wiki.convert(""" <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="0"></project>""")
- assert 'The markdown supplied could not be parsed correctly.' in r, r
r = g.markdown_wiki.convert('[[projects show_proj_icon=True]]')
assert '<img alt="test Logo"' in r
@@ -128,8 +118,6 @@ def test_macros():
assert '<img alt="test Logo"' not in r
c.project = curr_project
- r = g.markdown_wiki.convert('[[project_admins]]')
- assert r == '<div class="markdown_content"><p><a href="/u/test-admin/">Test Admin</a><br /></p></div>'
r = g.markdown_wiki.convert('[[download_button]]')
assert_equal(r, '<div class="markdown_content"><p><span class="download-button-%s" style="margin-bottom: 1em; display: block;"></span></p></div>' % p_test._id)
h.set_context('--init--', 'wiki', neighborhood='Projects')
@@ -157,6 +145,23 @@ def test_macros():
r = g.markdown_wiki.convert('[[neighborhood_blog_posts]]')
assert 'test content' in r
+def test_macro_project_admins():
+ r = g.markdown_wiki.convert('[[project_admins]]')
+ assert_equal(r, '<div class="markdown_content"><p><a href="/u/test-admin/">Test Admin</a><br /></p></div>')
+
+def test_markdown_toc():
+ r = g.markdown_wiki.convert("""[TOC]
+
+# Header 1
+
+## Header 2""")
+ assert '<a class="" href="#header-1">Header 1</a>' in r, r
+
+def test_markdown_xml_error():
+ r = g.markdown_wiki.convert(""" <?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="0"></project>""")
+ assert 'The markdown supplied could not be parsed correctly.' in r, r
+
@with_setup(setUp)
def test_markdown():
'Just a test to get coverage in our markdown extension'
@@ -317,9 +322,9 @@ def test_hideawards_macro():
with h.push_context(p_nbhd.neighborhood_project._id):
r = g.markdown_wiki.convert('[[projects]]')
- assert '<div class="feature">Award short</div>' in r
+ assert '<div class="feature">Award short</div>' in r, r
r = g.markdown_wiki.convert('[[projects show_awards_banner=False]]')
- assert '<div class="feature">Award short</div>' not in r
+ assert '<div class="feature">Award short</div>' not in r, r
def get_project_names(r):
"""