示例#1
0
    def get_or_create_root(self):
        """
        Creates the root node used to store all page types
        for the current site if it doesn't exist.
        """
        root_page = PageType.get_root_page(site=self._site)

        if not root_page:
            root_page = Page(
                publisher_is_draft=True,
                in_navigation=False,
                is_page_type=True,
            )
            root_page.set_tree_node(self._site)
            root_page.save()

        if not root_page.has_translation(self._language):
            api.create_title(
                language=self._language,
                title=ugettext('Page Types'),
                page=root_page,
                slug=PAGE_TYPES_ID,
                path=PAGE_TYPES_ID,
            )
        return root_page.node
    def add_tree(self, count, root=None, depth=1):
        CMS_GTE_35 = hasattr(Page, 'node')

        for node in range(0, count):
            new_page = Page(
                created_by='script',
                changed_by='script',
                in_navigation=True,
                template='INHERIT',
            )

            if CMS_GTE_35:
                parent_node = root.node if root else None
                new_page.set_tree_node(site=self.site,
                                       target=parent_node,
                                       position='last-child')
                new_page.save()
            else:
                new_page.site = self.site
                new_page.parent_id = getattr(root, 'pk', None)
                # This saves the page
                new_page = Page.add_root(instance=new_page)

                if root:
                    new_page = new_page.move(target=root.reload(),
                                             pos='last-child')

            try:
                node_path = new_page.node.path
            except AttributeError:
                node_path = new_page.path

            for language in self.languages:
                new_page.title_set.create(
                    language=language,
                    title=node_path,
                    slug=node_path,
                    path='/'.join(self.path_regex.findall(node_path)),
                )
            new_page.update_languages(self.languages)

            if self.base_page:
                for ph in self.base_page.placeholders.all():
                    new_ph = new_page.placeholders.create(slot=ph.slot)

                    for language in self.languages:
                        plugins = ph.get_plugins_list(language)

                        if plugins:
                            ph.copy_plugins(new_ph, language)
            else:
                new_page.rescan_placeholders()

            self.stdout.write("Created page %s" % node_path)

            if depth <= self.max_depth and bool(random.getrandbits(1)):
                self.add_tree(count=self.max_count_children,
                              root=new_page,
                              depth=depth + 1)