Пример #1
0
    def _add_to_sitemap_node(self, node, language):
        """Add the given SitemapNode. This is a recursive method"""

        # if we have more than 10 of depth there is an infinite loop
        # in the hierarchy, e.g. A > B > C > A > B > C > ...
        if node.depth > 10:
            logging.error("Sitemap is corrupted: infinite loop")
            return

        # for each NavigationPages...
        for navigation_page in node.page.contents[language].navigation:
            child_node = SitemapNode.from_navigation_page(
                navigation_page=navigation_page, parent=node)

            if not navigation_page.page:
                logging.warning(
                    "Sitemap is corrupted: navigation_page has no page associated"
                )
                continue

            # if we have an internal NavigationPage, we add it's children
            if navigation_page.type == "internal" \
                    and language in navigation_page.page.contents \
                    and len(navigation_page.page.contents[language].navigation) > 0:

                # integrity check
                if child_node.page.pid == node.page.pid:
                    logging.warning(
                        "Sitemap is corrupted: parent and child are the same")
                    continue

                # recursive call
                self._add_to_sitemap_node(child_node, language)
Пример #2
0
    def build_sitemaps(self):
        """Build the sitemaps"""

        for language in self.languages:
            # the root node (the homepage)
            root_node = SitemapNode(
                name=self.homepage.contents[language].title,
                ref=self.homepage.uuid,
                page=self.homepage)

            self._add_to_sitemap_node(root_node, language)

            self.sitemaps[language] = root_node
Пример #3
0
    def _add_to_sitemap_node(self, node, language):
        """Add the given SitemapNode. This is a recursive method"""

        # for each NavigationPages...
        for navigation_page in node.page.contents[language].navigation:
            child_node = SitemapNode.from_navigation_page(navigation_page=navigation_page, parent=node)

            # if we have an internal NavigationPage, we add it's children
            if navigation_page.type == "internal" \
                    and language in navigation_page.page.contents \
                    and len(navigation_page.page.contents[language].navigation) > 0:

                # integrity check
                if child_node.page.pid == node.page.pid:
                    raise Exception("Invalid sitemap")

                # recursive call
                self._add_to_sitemap_node(child_node, language)