def on_moved(self, event): src_path = event.src_path dst_path = event.dest_path if not is_markdown_file(src_path) or not is_markdown_file(dst_path): return logger.info("Move: %s, %s" % (src_path, dst_path)) self._work(src_path, "delete") self._work(dst_path, "update")
def __call__(self, match): url = match.groups()[0] scheme, netloc, path, query, query, fragment = urlparse.urlparse(url) if (scheme or netloc or not utils.is_markdown_file(path)): # Ignore URLs unless they are a relative link to a markdown file. return 'a href="%s"' % url if self.nav: # If the site navigation has been provided, then validate # the internal hyperlink, making sure the target actually exists. target_file = self.nav.file_context.make_absolute(path) if target_file not in self.nav.source_files: source_file = self.nav.file_context.current_file msg = ('The page "%s" contained a hyperlink to "%s" which ' 'is not listed in the "pages" configuration.') assert False, msg % (source_file, target_file) path = utils.get_url_path(target_file) path = self.nav.url_context.make_relative(path) else: path = utils.get_url_path(path).lstrip('/') # Convert the .md hyperlink to a relative hyperlink to the HTML page. url = urlparse.urlunparse( (scheme, netloc, path, query, query, fragment)) return 'a href="%s"' % url
def __call__(self, match): url = match.groups()[0] scheme, netloc, path, query, query, fragment = urlparse.urlparse(url) if (scheme or netloc or not utils.is_markdown_file(path)): # Ignore URLs unless they are a relative link to a markdown file. return 'a href="%s"' % url if self.nav: # If the site navigation has been provided, then validate # the internal hyperlink, making sure the target actually exists. target_file = self.nav.file_context.make_absolute(path) if target_file not in self.nav.source_files: source_file = self.nav.file_context.current_file msg = ( 'The page "%s" contained a hyperlink to "%s" which ' 'is not listed in the "pages" configuration.' ) assert False, msg % (source_file, target_file) path = utils.get_url_path(target_file) path = self.nav.url_context.make_relative(path) else: path = utils.get_url_path(path).lstrip('/') # Convert the .md hyperlink to a relative hyperlink to the HTML page. url = urlparse.urlunparse((scheme, netloc, path, query, query, fragment)) return 'a href="%s"' % url
def test_is_markdown_file(self): expected_results = { 'index.md': True, 'index.MARKDOWN': True, 'index.txt': False, 'indexmd': False } for path, expected_result in expected_results.items(): is_markdown = utils.is_markdown_file(path) self.assertEqual(is_markdown, expected_result)
def validate_config(user_config): config = DEFAULT_CONFIG.copy() config.update(user_config) assert config['site_name'], "Config must contain 'site_name' setting." # If not specified, then the 'pages' config simply includes all # markdown files in the docs dir, without generating any header items # for them. pages = [] extra_css = [] extra_javascript = [] extra_others = [] for (dirpath, dirnames, filenames) in os.walk(config['docs_dir']): for filename in sorted(filenames): fullpath = os.path.join(dirpath, filename) relpath = os.path.relpath(fullpath, config['docs_dir']) if utils.is_markdown_file(filename): # index pages should always be the first listed page. if os.path.splitext(relpath)[0] == 'index': pages.insert(0, relpath) else: pages.append(relpath) elif utils.is_css_file(filename): extra_css.append(relpath) elif utils.is_javascript_file(filename): if 'res/flappybird/src/' not in relpath: extra_javascript.append(relpath) else: extra_others.append(relpath) if config['pages'] is None: config['pages'] = pages if config['extra_css'] is None: config['extra_css'] = extra_css if config['extra_javascript'] is None: config['extra_javascript'] = extra_javascript config['extra_others'] = extra_others if config['theme_dir'] is None: package_dir = os.path.dirname(__file__) config['theme_dir'] = os.path.join(package_dir, 'themes', config['theme']) if config['repo_url'] is not None and config['repo_name'] is None: repo_host = urlparse.urlparse(config['repo_url']).netloc.lower() if repo_host == 'github.com': config['repo_name'] = 'GitHub' elif repo_host == 'bitbucket.com': config['repo_name'] = 'Bitbucket' else: config['repo_name'] = repo_host.split('.')[0].title() if config['include_next_prev'] is None: config['include_next_prev'] = len(config['pages']) > 1 if config['include_nav'] is None: config['include_nav'] = len(config['pages']) > 1 # To Do: # The docs dir must exist. # The theme dir must exist. # Ensure 'theme' is one of 'mkdocs', 'readthedocs', 'custom' # A homepage 'index' must exist. # The theme 'base.html' file must exist. # Cannot set repo_name without setting repo_url. # Cannot set 'include_next_prev: true' when only one page exists. # Cannot set 'include_nav: true' when only one page exists. return config
def validate_config(user_config): config = DEFAULT_CONFIG.copy() config.update(user_config) assert config['site_name'], "Config must contain 'site_name' setting." # If not specified, then the 'pages' config simply includes all # markdown files in the docs dir, without generating any header items # for them. pages = [] extra_css = [] extra_javascript = [] extra_others = [] for (dirpath, dirnames, filenames) in os.walk(config['docs_dir']): for filename in sorted(filenames): fullpath = os.path.join(dirpath, filename) relpath = os.path.relpath(fullpath, config['docs_dir']) if utils.is_markdown_file(filename): # index pages should always be the first listed page. if os.path.splitext(relpath)[0] == 'index': pages.insert(0, relpath) else: pages.append(relpath) elif utils.is_css_file(filename): extra_css.append(relpath) elif utils.is_javascript_file(filename): extra_javascript.append(relpath) else: extra_others.append(relpath) if config['pages'] is None: config['pages'] = pages if config['extra_css'] is None: config['extra_css'] = extra_css if config['extra_javascript'] is None: config['extra_javascript'] = extra_javascript config['extra_others'] = extra_others if config['theme_dir'] is None: package_dir = os.path.dirname(__file__) config['theme_dir'] = os.path.join(package_dir, 'themes', config['theme']) if config['repo_url'] is not None and config['repo_name'] is None: repo_host = urlparse.urlparse(config['repo_url']).netloc.lower() if repo_host == 'github.com': config['repo_name'] = 'GitHub' elif repo_host == 'bitbucket.com': config['repo_name'] = 'Bitbucket' else: config['repo_name'] = repo_host.split('.')[0].title() if config['include_next_prev'] is None: config['include_next_prev'] = len(config['pages']) > 1 if config['include_nav'] is None: config['include_nav'] = len(config['pages']) > 1 # To Do: # The docs dir must exist. # The theme dir must exist. # Ensure 'theme' is one of 'mkdocs', 'readthedocs', 'custom' # A homepage 'index' must exist. # The theme 'base.html' file must exist. # Cannot set repo_name without setting repo_url. # Cannot set 'include_next_prev: true' when only one page exists. # Cannot set 'include_nav: true' when only one page exists. return config
def on_created(self, event): path = event.src_path if not is_markdown_file(path): return logger.info("Create: %s" % path) self._work(path, "update")
def on_deleted(self, event): path = event.src_path if not is_markdown_file(path): return logger.info("Delete: %s" % path) self._work(path, "delete")