def run_validation(self, value): if not isinstance(value, (list, tuple, dict)): raise ValidationError('Invalid Markdown Extensions configuration') extensions = [] if isinstance(value, dict): for ext, cfg in value.items(): self.validate_ext_cfg(ext, cfg) extensions.append(ext) else: for item in value: if isinstance(item, dict): if len(item) > 1: raise ValidationError( 'Invalid Markdown Extensions configuration') ext, cfg = item.popitem() self.validate_ext_cfg(ext, cfg) extensions.append(ext) elif isinstance(item, str): extensions.append(item) else: raise ValidationError( 'Invalid Markdown Extensions configuration') extensions = utils.reduce_list(self.builtins + extensions) # Confirm that Markdown considers extensions to be valid try: markdown.Markdown(extensions=extensions, extension_configs=self.configdata) except Exception as e: raise ValidationError(e.args[0]) return extensions
def run_validation(self, value): if not isinstance(value, (list, tuple)): raise ValidationError('Invalid Markdown Extensions configuration') extensions = [] for item in value: if isinstance(item, dict): if len(item) > 1: raise ValidationError( 'Invalid Markdown Extensions configuration') ext, cfg = item.popitem() extensions.append(ext) if cfg is None: continue if not isinstance(cfg, dict): raise ValidationError( 'Invalid config options for Markdown ' "Extension '{}'.".format(ext)) self.configdata[ext] = cfg elif isinstance(item, str): extensions.append(item) else: raise ValidationError( 'Invalid Markdown Extensions configuration') extensions = utils.reduce_list(self.builtins + extensions) # Confirm that Markdown considers extensions to be valid try: markdown.Markdown(extensions=extensions, extension_configs=self.configdata) except Exception as e: raise ValidationError(e.args[0]) return extensions
def run_validation(self, value): if not isinstance(value, (list, tuple)): raise ValidationError('Invalid Markdown Extensions configuration') extensions = [] for item in value: if isinstance(item, dict): if len(item) > 1: raise ValidationError('Invalid Markdown Extensions configuration') ext, cfg = item.popitem() extensions.append(ext) if cfg is None: continue if not isinstance(cfg, dict): raise ValidationError('Invalid config options for Markdown ' "Extension '{0}'.".format(ext)) self.configdata[ext] = cfg elif isinstance(item, utils.string_types): extensions.append(item) else: raise ValidationError('Invalid Markdown Extensions configuration') extensions = utils.reduce_list(self.builtins + extensions) # Confirm that Markdown considers extensions to be valid try: markdown.Markdown(extensions=extensions, extension_configs=self.configdata) except Exception as e: raise ValidationError(e.args[0]) return extensions
def convert_markdown(markdown_source, site_navigation=None, extensions=(), strict=False): """ Convert the Markdown source file to HTML content, and additionally return the parsed table of contents, and a dictionary of any metadata that was specified in the Markdown file. `extensions` is an optional sequence of Python Markdown extensions to add to the default set. """ # Generate the HTML from the markdown source if isinstance(extensions, dict): user_extensions = list(extensions.keys()) extension_configs = dict([(k, v) for k, v in extensions.items() if isinstance(v, dict)]) else: user_extensions = list(extensions) extension_configs = {} builtin_extensions = ['meta', 'toc', 'tables', 'fenced_code'] mkdocs_extensions = [ RelativePathExtension(site_navigation, strict), ] extensions = utils.reduce_list(builtin_extensions + mkdocs_extensions + user_extensions) html_content, table_of_contents, meta = utils.convert_markdown( markdown_source, extensions, extension_configs) return (html_content, table_of_contents, meta)
def convert_markdown(markdown_source, site_navigation=None, extensions=(), strict=False): """ Convert the Markdown source file to HTML content, and additionally return the parsed table of contents, and a dictionary of any metadata that was specified in the Markdown file. `extensions` is an optional sequence of Python Markdown extensions to add to the default set. """ # Generate the HTML from the markdown source if isinstance(extensions, dict): user_extensions = list(extensions.keys()) extension_configs = dict([(k, v) for k, v in extensions.items() if isinstance(v, dict)]) else: user_extensions = list(extensions) extension_configs = {} builtin_extensions = ['meta', 'toc', 'tables', 'fenced_code'] mkdocs_extensions = [RelativePathExtension(site_navigation, strict), ] extensions = utils.reduce_list(builtin_extensions + mkdocs_extensions + user_extensions) md = markdown.Markdown( extensions=extensions, extension_configs=extension_configs ) html_content = md.convert(markdown_source) # On completely blank markdown files, no Meta or tox properties are added # to the generated document. meta = getattr(md, 'Meta', {}) toc_html = getattr(md, 'toc', '') # Post process the generated table of contents into a data structure table_of_contents = toc.TableOfContents(toc_html) return (html_content, table_of_contents, meta)
def run_validation(self, value): if not isinstance(value, (list, tuple)): raise ValidationError('Invalid Markdown Extensions configuration') extensions = [] for item in value: if isinstance(item, dict): if len(item) > 1: raise ValidationError('Invalid Markdown Extensions configuration') ext, cfg = item.popitem() extensions.append(ext) if cfg is None: continue if not isinstance(cfg, dict): raise ValidationError('Invalid config options for Markdown ' "Extension '{0}'.".format(ext)) self.configdata[ext] = cfg elif isinstance(item, six.string_types): extensions.append(item) else: raise ValidationError('Invalid Markdown Extensions configuration') return utils.reduce_list(self.builtins + extensions)
def run_validation(self, value): if not isinstance(value, (list, tuple)): raise ValidationError('Invalid Markdown Extensions configuration') extensions = [] for item in value: if isinstance(item, dict): if len(item) > 1: raise ValidationError('Invalid Markdown Extensions configuration') ext, cfg = item.popitem() extensions.append(ext) if cfg is None: continue if not isinstance(cfg, dict): raise ValidationError('Invalid config options for Markdown ' "Extension '{0}'.".format(ext)) self.configdata[ext] = cfg elif isinstance(item, utils.string_types): extensions.append(item) else: raise ValidationError('Invalid Markdown Extensions configuration') return utils.reduce_list(self.builtins + extensions)
def convert_markdown(markdown_source, site_navigation=None, extensions=(), strict=False): """ Convert the Markdown source file to HTML content, and additionally return the parsed table of contents, and a dictionary of any metadata that was specified in the Markdown file. `extensions` is an optional sequence of Python Markdown extensions to add to the default set. """ # Generate the HTML from the markdown source if isinstance(extensions, dict): user_extensions = list(extensions.keys()) extension_configs = dict([(k, v) for k, v in extensions.items() if isinstance(v, dict)]) else: user_extensions = list(extensions) extension_configs = {} builtin_extensions = ['meta', 'toc', 'tables', 'fenced_code'] mkdocs_extensions = [RelativePathExtension(site_navigation, strict), ] extensions = utils.reduce_list(builtin_extensions + mkdocs_extensions + user_extensions) html_content, table_of_contents, meta = utils.convert_markdown(markdown_source, extensions, extension_configs) return (html_content, table_of_contents, meta)
def test_reduce_list(self): self.assertEqual(utils.reduce_list([1, 2, 3, 4, 5, 5, 2, 4, 6, 7, 8]), [1, 2, 3, 4, 5, 6, 7, 8])
def test_reduce_list(self): self.assertEqual( utils.reduce_list([1, 2, 3, 4, 5, 5, 2, 4, 6, 7, 8]), [1, 2, 3, 4, 5, 6, 7, 8] )