mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-10-30 23:47:53 +03:00 
			
		
		
		
	Fixes #94
Modified alazaro's commit sot that both markdown < 2.1 and >= 2.1 are supported The test checks if either matches the old or the new style.
This commit is contained in:
		
							parent
							
								
									1c8b40fb5f
								
							
						
					
					
						commit
						90ddec03b7
					
				|  | @ -375,6 +375,34 @@ else: | ||||||
| try: | try: | ||||||
|     import markdown |     import markdown | ||||||
|       |       | ||||||
|  |     class CustomSetextHeaderProcessor(markdown.blockprocessors.BlockProcessor): | ||||||
|  |         """ | ||||||
|  |         Class for markdown < 2.1 | ||||||
|  | 
 | ||||||
|  |         Override `markdown`'s :class:`SetextHeaderProcessor`, so that ==== headers are <h2> and ---- heade | ||||||
|  | 
 | ||||||
|  |         We use <h1> for the resource name. | ||||||
|  |         """ | ||||||
|  |         import re | ||||||
|  |         # Detect Setext-style header. Must be first 2 lines of block. | ||||||
|  |         RE = re.compile(r'^.*?\n[=-]{3,}', re.MULTILINE) | ||||||
|  | 
 | ||||||
|  |         def test(self, parent, block): | ||||||
|  |             return bool(self.RE.match(block)) | ||||||
|  | 
 | ||||||
|  |         def run(self, parent, blocks): | ||||||
|  |             lines = blocks.pop(0).split('\n') | ||||||
|  |             # Determine level. ``=`` is 1 and ``-`` is 2. | ||||||
|  |             if lines[1].startswith('='): | ||||||
|  |                 level = 2 | ||||||
|  |             else: | ||||||
|  |                 level = 3 | ||||||
|  |             h = markdown.etree.SubElement(parent, 'h%d' % level) | ||||||
|  |             h.text = lines[0].strip() | ||||||
|  |             if len(lines) > 2: | ||||||
|  |                 # Block contains additional lines. Add to  master blocks for later. | ||||||
|  |                 blocks.insert(0, '\n'.join(lines[2:])) | ||||||
|  | 
 | ||||||
|     def apply_markdown(text): |     def apply_markdown(text): | ||||||
|         """ |         """ | ||||||
|         Simple wrapper around :func:`markdown.markdown` to set the base level |         Simple wrapper around :func:`markdown.markdown` to set the base level | ||||||
|  | @ -384,7 +412,15 @@ try: | ||||||
|         extensions = ['headerid(level=2)'] |         extensions = ['headerid(level=2)'] | ||||||
|         safe_mode = False, |         safe_mode = False, | ||||||
| 
 | 
 | ||||||
|         md = markdown.Markdown(extensions=extensions, safe_mode=safe_mode) |         if markdown.version < (2, 1): | ||||||
|  |             output_format = markdown.DEFAULT_OUTPUT_FORMAT | ||||||
|  | 
 | ||||||
|  |             md = markdown.Markdown(extensions=markdown.load_extensions(extensions), | ||||||
|  |                                safe_mode=safe_mode, | ||||||
|  |                                output_format=output_format) | ||||||
|  |             md.parser.blockprocessors['setextheader'] = CustomSetextHeaderProcessor(md.parser) | ||||||
|  |         else: | ||||||
|  |             md = markdown.Markdown(extensions=extensions, safe_mode=safe_mode) | ||||||
|         return md.convert(text) |         return md.convert(text) | ||||||
| 
 | 
 | ||||||
| except ImportError: | except ImportError: | ||||||
|  | @ -395,3 +431,4 @@ try: | ||||||
|     import yaml |     import yaml | ||||||
| except ImportError: | except ImportError: | ||||||
|     yaml = None |     yaml = None | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | @ -19,8 +19,22 @@ indented | ||||||
| 
 | 
 | ||||||
| # hash style header #""" | # hash style header #""" | ||||||
| 
 | 
 | ||||||
| # If markdown is installed we also test it's working (and that our wrapped forces '=' to h2 and '-' to h3) | # If markdown is installed we also test it's working  | ||||||
| MARKED_DOWN = """<h2 id="an-example-docstring">an example docstring</h2> | # (and that our wrapped forces '=' to h2 and '-' to h3) | ||||||
|  | 
 | ||||||
|  | # We support markdown < 2.1 and markdown >= 2.1 | ||||||
|  | MARKED_DOWN_lt_21 = """<h2>an example docstring</h2> | ||||||
|  | <ul> | ||||||
|  | <li>list</li> | ||||||
|  | <li>list</li> | ||||||
|  | </ul> | ||||||
|  | <h3>another header</h3> | ||||||
|  | <pre><code>code block | ||||||
|  | </code></pre> | ||||||
|  | <p>indented</p> | ||||||
|  | <h2 id="hash_style_header">hash style header</h2>""" | ||||||
|  | 
 | ||||||
|  | MARKED_DOWN_gte_21 = """<h2 id="an-example-docstring">an example docstring</h2> | ||||||
| <ul> | <ul> | ||||||
| <li>list</li> | <li>list</li> | ||||||
| <li>list</li> | <li>list</li> | ||||||
|  | @ -92,4 +106,6 @@ class TestViewNamesAndDescriptions(TestCase): | ||||||
|     def test_markdown(self): |     def test_markdown(self): | ||||||
|         """Ensure markdown to HTML works as expected""" |         """Ensure markdown to HTML works as expected""" | ||||||
|         if apply_markdown: |         if apply_markdown: | ||||||
|             self.assertEquals(apply_markdown(DESCRIPTION), MARKED_DOWN) |             gte_21_match = apply_markdown(DESCRIPTION) == MARKED_DOWN_gte_21 | ||||||
|  |             lt_21_match = apply_markdown(DESCRIPTION) == MARKED_DOWN_lt_21 | ||||||
|  |             self.assertTrue(gte_21_match or lt_21_match) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user