def __init__(self, build_mode, external_spec): self.build_mode = build_mode print("Detected external: ", external_spec) self.external_base: str = external_spec['base'] self.external_path: str = external_spec['path'] self.external_nav: str = external_spec['nav'] self.external_repo: str = external_spec['repo'] self.external_branch: str = external_spec['branch'] assert_valid_git_hub_url(self.external_repo, 'EXTERNAL MODULE: %s' % self.external_path) self.target_external_path = path.join(root_folder, 'pages', self.external_base.lstrip("/")) self.source_external_path = path.join(root_folder, 'external', self.external_path.lstrip("/")) # assuming external folder contains only sub repositories self.source_checkout_root = path.join(root_folder, 'external', self.external_path.split("/")[0]) self.nav_file = path.join(self.source_external_path, self.external_nav.lstrip("/")) print("External repo: ", self.external_repo) print("External nav file: ", self.nav_file) print("External source dir: ", self.source_external_path) print("External target dir: ", self.target_external_path)
def process_page(page_path): # get_nav() has side effect to copy and patch files from the `external` folder # under site folder. We need it for dev mode to make sure file is up-to-date # TODO: extract get_nav and implement the explicit way to avoid side-effects get_nav() page = pages.get_or_404(page_path) if 'date' in page.meta and page['date'] is not None: page.meta['formatted_date'] = page.meta['date'].strftime('%d %B %Y') if page.meta['formatted_date'].startswith('0'): page.meta['formatted_date'] = page.meta['formatted_date'][1:] if 'github_edit_url' in page.meta: edit_on_github_url = page.meta['github_edit_url'] else: edit_on_github_url = app.config['EDIT_ON_GITHUB_URL'] + app.config['FLATPAGES_ROOT'] + "/" + page_path + \ app.config['FLATPAGES_EXTENSION'] assert_valid_git_hub_url(edit_on_github_url, page_path) template = page.meta["layout"] if 'layout' in page.meta else 'default.html' if not template.endswith(".html"): template += ".html" if build_check_links: validate_links_weak(page, page_path) return render_template( template, page=page, baseurl="", edit_on_github_url=edit_on_github_url, )
def __init__(self, build_mode, external_spec): self.build_mode = build_mode print("Detected external: ", external_spec) self.external_base: str = external_spec['base'] self.external_path: str = external_spec['path'] self.external_nav: str = external_spec['nav'] self.external_repo: str = external_spec['repo'] self.external_branch: str = external_spec['branch'] self.inline: bool = bool( external_spec['inline'] or 'False') if 'inline' in external_spec else False self.wrap_code_snippets: bool = bool( external_spec['wrap_code_snippets'] or 'False') if 'wrap_code_snippets' in external_spec else False if self.external_base.startswith("/docs/reference/"): self.page_type: str = 'doc' self.page_layout: str = 'reference' elif self.external_base.startswith("/docs/tutorials/"): self.page_type: str = 'tutorial' self.page_layout: str = 'tutorial' else: raise Exception("Unknown external path %s in %s" % (self.external_path, self.external_base)) assert_valid_git_hub_url(self.external_repo, 'EXTERNAL MODULE: %s' % self.external_path) self.target_external_path = path.join(root_folder, 'pages', self.external_base.lstrip("/")) self.source_external_path = path.join(root_folder, 'external', self.external_path.lstrip("/")) # assuming external folder contains only sub repositories self.source_checkout_root = path.join(root_folder, 'external', self.external_path.split("/")[0]) self.nav_file = path.join(self.source_external_path, self.external_nav.lstrip("/")) self.replacements = _parse_replacements(external_spec, self.external_nav) self.explicit_github_edit_page = external_spec[ 'github_edit_page'] if 'github_edit_page' in external_spec else None print("External repo: ", self.external_repo) print("External nav file: ", self.nav_file) print("External source dir: ", self.source_external_path) print("External target dir: ", self.target_external_path)
def __init__(self, build_mode, external_spec): self.build_mode = build_mode print("Detected external: ", external_spec) self.external_base: str = external_spec['base'] self.external_path: str = external_spec['path'] self.external_nav: str = external_spec['nav'] self.external_repo: str = external_spec['repo'] self.external_branch: str = external_spec['branch'] assert_valid_git_hub_url(self.external_repo, 'EXTERNAL MODULE: %s' % self.external_path) self.target_external_path = path.join(root_folder, 'pages', self.external_base.lstrip("/")) self.source_external_path = path.join(root_folder, 'external', self.external_path.lstrip("/")) # assuming external folder contains only sub repositories self.source_checkout_root = path.join(root_folder, 'external', self.external_path.split("/")[0]) self.nav_file = path.join(self.source_external_path, self.external_nav.lstrip("/")) print("External repo: ", self.external_repo) print("External nav file: ", self.nav_file) print("External source dir: ", self.source_external_path) print("External target dir: ", self.target_external_path)
def process_page(page_path): # get_nav() has side effect to copy and patch files from the `external` folder # under site folder. We need it for dev mode to make sure file is up-to-date # TODO: extract get_nav and implement the explicit way to avoid side-effects get_nav() page = pages.get_or_404(page_path) if 'redirect_path' in page.meta and page.meta['redirect_path'] is not None: return render_template('redirect.html', url=url_for('page', page_path=page.meta['redirect_path'])) if 'date' in page.meta and page['date'] is not None: page.meta['formatted_date'] = page.meta['date'].strftime('%d %B %Y') if page.meta['formatted_date'].startswith('0'): page.meta['formatted_date'] = page.meta['formatted_date'][1:] if 'github_edit_url' in page.meta: edit_on_github_url = page.meta['github_edit_url'] else: edit_on_github_url = app.config['EDIT_ON_GITHUB_URL'] + app.config['FLATPAGES_ROOT'] + "/" + page_path + \ app.config['FLATPAGES_EXTENSION'] assert_valid_git_hub_url(edit_on_github_url, page_path) template = page.meta["layout"] if 'layout' in page.meta else 'default.html' if not template.endswith(".html"): template += ".html" if build_check_links: validate_links_weak(page, page_path) return render_template( template, page=page, baseurl="", edit_on_github_url=edit_on_github_url, )
def __init__(self, build_mode, external_spec): self.build_mode = build_mode print("Detected external: ", external_spec) self.external_base: str = external_spec['base'] self.external_path: str = external_spec['path'] self.external_nav: str = external_spec['nav'] self.external_repo: str = external_spec['repo'] self.external_branch: str = external_spec['branch'] self.inline: bool = bool(external_spec['inline'] or 'False') if 'inline' in external_spec else False self.wrap_code_snippets: bool = bool(external_spec['wrap_code_snippets'] or 'False') if 'wrap_code_snippets' in external_spec else False if self.external_base.startswith("/docs/reference/"): self.page_type: str = 'doc' self.page_layout: str = 'reference' elif self.external_base.startswith("/docs/tutorials/"): self.page_type: str = 'tutorial' self.page_layout: str = 'tutorial' else: raise Exception("Unknown external path %s in %s" % (self.external_path, self.external_base)) assert_valid_git_hub_url(self.external_repo, 'EXTERNAL MODULE: %s' % self.external_path) self.target_external_path = path.join(root_folder, 'pages', self.external_base.lstrip("/")) self.source_external_path = path.join(root_folder, 'external', self.external_path.lstrip("/")) # assuming external folder contains only sub repositories self.source_checkout_root = path.join(root_folder, 'external', self.external_path.split("/")[0]) self.nav_file = path.join(self.source_external_path, self.external_nav.lstrip("/")) self.replacements = _parse_replacements(external_spec, self.external_nav) self.explicit_github_edit_page = external_spec['github_edit_page'] if 'github_edit_page' in external_spec else None print("External repo: ", self.external_repo) print("External nav file: ", self.nav_file) print("External source dir: ", self.source_external_path) print("External target dir: ", self.target_external_path)
def process_page(page_path): # get_nav() has side effect to copy and patch files from the `external` folder # under site folder. We need it for dev mode to make sure file is up-to-date # TODO: extract get_nav and implement the explicit way to avoid side-effects get_nav() page = pages.get_or_404(page_path) if 'date' in page.meta and page['date'] is not None: page.meta['formatted_date'] = page.meta['date'].strftime('%d %B %Y') if page.meta['formatted_date'].startswith('0'): page.meta['formatted_date'] = page.meta['formatted_date'][1:] if 'github_edit_url' in page.meta: edit_on_github_url = page.meta['github_edit_url'] else: edit_on_github_url = app.config['EDIT_ON_GITHUB_URL'] + app.config['FLATPAGES_ROOT'] + "/" + page_path + \ app.config['FLATPAGES_EXTENSION'] assert_valid_git_hub_url(edit_on_github_url, page_path) template = page.meta["layout"] if 'layout' in page.meta else 'default.html' if not template.endswith(".html"): template += ".html" for link in page.parsed_html.select('a'): if 'href' not in link.attrs: continue href = urlparse(urljoin('/' + page_path, link['href'])) if href.scheme != '': continue endpoint, params = url_adapter.match(href.path, 'GET', query_args={}) if endpoint != 'page' and endpoint != 'get_index_page': response = app.test_client().get(href.path) if response.status_code == 404: build_errors.append("Broken link: " + str(href.path) + " on page " + page_path) continue referenced_page = pages.get(params['page_path']) if referenced_page is None: build_errors.append("Broken link: " + str(href.path) + " on page " + page_path) continue if href.fragment == '': continue ids = [] for x in referenced_page.parsed_html.select('h1,h2,h3,h4'): try: ids.append(x['id']) except KeyError: pass for x in referenced_page.parsed_html.select('a'): try: ids.append(x['name']) except KeyError: pass if href.fragment not in ids: build_errors.append("Bad anchor: " + href.fragment + " on page " + page_path) if not build_mode and len(build_errors) > 0: errors_copy = [] for item in build_errors: errors_copy.append(item) build_errors.clear() raise Exception("Validation errors " + str(len(errors_copy)) + ":\n\n" + "\n".join(str(item) for item in errors_copy)) return render_template( template, page=page, baseurl="", edit_on_github_url=edit_on_github_url, )
def process_page(page_path): # get_nav() has side effect to copy and patch files from the `external` folder # under site folder. We need it for dev mode to make sure file is up-to-date # TODO: extract get_nav and implement the explicit way to avoid side-effects get_nav() page = pages.get_or_404(page_path) if 'date' in page.meta and page['date'] is not None: page.meta['formatted_date'] = page.meta['date'].strftime('%d %B %Y') if page.meta['formatted_date'].startswith('0'): page.meta['formatted_date'] = page.meta['formatted_date'][1:] if 'github_edit_url' in page.meta: edit_on_github_url = page.meta['github_edit_url'] else: edit_on_github_url = app.config['EDIT_ON_GITHUB_URL'] + app.config['FLATPAGES_ROOT'] + "/" + page_path + \ app.config['FLATPAGES_EXTENSION'] assert_valid_git_hub_url(edit_on_github_url, page_path) template = page.meta["layout"] if 'layout' in page.meta else 'default.html' if not template.endswith(".html"): template += ".html" for link in page.parsed_html.select('a'): if 'href' not in link.attrs: continue href = urlparse(urljoin('/' + page_path, link['href'])) if href.scheme != '': continue endpoint, params = url_adapter.match(href.path, 'GET', query_args={}) if endpoint != 'page' and endpoint != 'get_index_page': response = app.test_client().get(href.path) if response.status_code == 404: build_errors.append("Broken link: " + str(href.path) + " on page " + page_path) continue referenced_page = pages.get(params['page_path']) if referenced_page is None: build_errors.append("Broken link: " + str(href.path) + " on page " + page_path) continue if href.fragment == '': continue ids = [] for x in referenced_page.parsed_html.select('h1,h2,h3,h4'): try: ids.append(x['id']) except KeyError: pass for x in referenced_page.parsed_html.select('a'): try: ids.append(x['name']) except KeyError: pass if href.fragment not in ids: build_errors.append("Bad anchor: " + str(href.fragment) + " on page " + page_path) if not build_mode and len(build_errors) > 0: errors_copy = [] for item in build_errors: errors_copy.append(item) build_errors.clear() raise Exception("Validation errors " + str(len(errors_copy)) + ":\n\n" + "\n".join(str(item) for item in errors_copy)) return render_template( template, page=page, baseurl="", edit_on_github_url=edit_on_github_url, )