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,
    )
Exemple #3
0
    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)
Exemple #4
0
    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,

    )