Exemple #1
0
Fichier : page.py Projet : Greh/wok
    def paginate(self, templ_vars):
        extra_pages = []
        logging.debug('called pagination for {0}'.format(self.meta['slug']))
        if 'page_items' not in self.meta['pagination']:
            logging.debug('doing pagination for {0}'.format(self.meta['slug']))
            # This is the first page of a set of pages. Set up the rest. Other
            # wise don't do anything.

            source_spec = self.meta['pagination']['list'].split('.')
            logging.debug('pagination source is: ' + repr(source_spec))

            if source_spec[0] == 'page':
                source = self.meta
                source_spec.pop(0)
            elif source_spec[0] == 'site':
                source = templ_vars['site']
                source_spec.pop(0)
            else:
                logging.error('Unknown pagination source! Not paginating')
                return

            for k in source_spec:
                source = source[k]

            sort_key = self.meta['pagination'].get('sort_key', None)
            sort_reverse = self.meta['pagination'].get('sort_reverse', False)

            logging.debug('sort_key: {0}, sort_reverse: {1}'.format(
                sort_key, sort_reverse))

            if not source:
                return extra_pages
            if isinstance(source[0], Page):
                source = [p.meta for p in source]

            if sort_key is not None:
                if isinstance(source[0], dict):
                    source.sort(key=lambda x: x[sort_key],
                            reverse=sort_reverse)
                else:
                    source.sort(key=lambda x: x.__getattribute__(sort_key),
                            reverse=sort_reverse)

            chunks = list(util.chunk(source, self.meta['pagination']['limit']))
            if not chunks:
                return extra_pages

            # Make a page for each chunk
            for idx, chunk in enumerate(chunks[1:], 2):
                new_meta = copy.deepcopy(self.meta)
                new_meta.update({
                    'url': self.url_pattern,
                    'pagination': {
                        'page_items': chunk,
                        'num_pages': len(chunks),
                        'cur_page': idx,
                    }
                })
                new_page = self.from_meta(new_meta, self.options, self.engine,
                    renderer=self.renderer)
                logging.debug('page {0} is {1}'.format(idx, new_page))
                if new_page:
                    extra_pages.append(new_page)

            # Set up the next/previous page links
            for idx, page in enumerate(extra_pages):
                if idx == 0:
                    page.meta['pagination']['prev_page'] = self.meta
                else:
                    page.meta['pagination']['prev_page'] = extra_pages[idx-1].meta

                if idx < len(extra_pages) - 1:
                    page.meta['pagination']['next_page'] = extra_pages[idx+1].meta
                else:
                    page.meta['pagination']['next_page'] = None

            # Pagination date for this page
            self.meta['pagination'].update({
                'page_items': chunks[0],
                'num_pages': len(chunks),
                'cur_page': 1,
            })
            # Extra pages doesn't include the first page, so if there is at
            # least one, then make a link to the next page.
            if len(extra_pages) > 0:
                self.meta['pagination']['next_page'] = extra_pages[0].meta

        return extra_pages
Exemple #2
0
    def paginate(self):
        extra_pages = []
        logging.debug('called pagination for {0}'.format(self.meta['slug']))
        if 'page_items' not in self.meta['pagination']:
            logging.debug('doing pagination for {0}'.format(self.meta['slug']))
            # This is the first page of a set of pages. Set up the rest. Other
            # wise don't do anything.

            source_spec = self.meta['pagination']['list'].split('.')
            logging.debug('pagination source is: ' + repr(source_spec))

            if source_spec[0] == 'page':
                source = self.meta
                source_spec.pop(0)
            elif source_spec[0] == 'site':
                source = templ_vars['site']
                source_spec.pop(0)
            else:
                logging.error('Unknown pagination source! Not paginating')
                return

            for k in source_spec:
                source = source[k]

            sort_key = self.meta['pagination'].get('sort_key', None)
            sort_reverse = self.meta['pagination'].get('sort_reverse', False)

            logging.debug('sort_key: {0}, sort_reverse: {1}'.format(
                sort_key, sort_reverse))

            if not source:
                return extra_pages
            if isinstance(source[0], Page):
                source = [p.meta for p in source]

            if sort_key is not None:
                if isinstance(source[0], dict):
                    source.sort(key=lambda x: x[sort_key],
                                reverse=sort_reverse)
                else:
                    source.sort(key=lambda x: x.__getattribute__(sort_key),
                                reverse=sort_reverse)

            chunks = list(util.chunk(source, self.meta['pagination']['limit']))
            if not chunks:
                return extra_pages

            # Make a page for each chunk
            for idx, chunk in enumerate(chunks[1:], 2):
                new_meta = copy.deepcopy(self.meta)
                new_meta.update({
                    'url': self.url_pattern,
                    'pagination': {
                        'page_items': chunk,
                        'num_pages': len(chunks),
                        'cur_page': idx,
                    }
                })
                new_page = self.from_meta(new_meta,
                                          self.options,
                                          self.engine,
                                          renderer=self.renderer)
                logging.debug('page {0} is {1}'.format(idx, new_page))
                if new_page:
                    extra_pages.append(new_page)

            # Set up the next/previous page links
            for idx, page in enumerate(extra_pages):
                if idx == 0:
                    page.meta['pagination']['prev_page'] = self.meta
                else:
                    page.meta['pagination']['prev_page'] = extra_pages[idx -
                                                                       1].meta

                if idx < len(extra_pages) - 1:
                    page.meta['pagination']['next_page'] = extra_pages[idx +
                                                                       1].meta
                else:
                    page.meta['pagination']['next_page'] = None

            # Pagination date for this page
            self.meta['pagination'].update({
                'page_items': chunks[0],
                'num_pages': len(chunks),
                'cur_page': 1,
            })
            # Extra pages doesn't include the first page, so if there is at
            # least one, then make a link to the next page.
            if len(extra_pages) > 0:
                self.meta['pagination']['next_page'] = extra_pages[0].meta

        return extra_pages
Exemple #3
0
    def paginate(self):
        extra_pages = []
        if 'page_items' not in self.meta['pagination']:
            # This is the first page of a set of pages. Set up the rest. Other
            # wise don't do anything.

            source_spec = self.meta['pagination']['list'].split('.')
            logging.debug('source spec is: ' + repr(source_spec))
            if source_spec[0] == 'page':
                source = self.meta
                source_spec.pop(0)
            elif source_spec[0] == 'site':
                source = templ_vars['site']
                source_spec.pop(0)

            for k in source_spec:
                logging.debug(k)
                source = source[k]

            logging.debug('source is: ' + repr(source))

            sort_key = self.meta['pagination'].get('sort_key', 'slug')
            sort_reverse = self.meta['pagination'].get('sort_reverse', False)
            logging.debug('sort_key: {0}, sort_reverse: {1}'.format(
                sort_key, sort_reverse))

            if isinstance(source[0], Page):
                source = [p.meta for p in source]

            if isinstance(source[0], dict):
                source.sort(key=lambda x: x[sort_key], reverse=sort_reverse)
            else:
                source.sort(key=lambda x: x.__getattribute__(sort_key), reverse=sort_reverse)

            chunks = list(util.chunk(source, self.meta['pagination']['limit']))

            # Make a page for each chunk
            for idx, chunk in enumerate(chunks[1:]):
                extra_meta = {
                    'pagination': {
                        'page_items': chunk,
                        'num_pages': len(chunks),
                        'cur_page': idx + 2,
                    }
                }
                new_page = Page(self.path, self.options,
                    renderer=self.renderer, extra_meta=extra_meta)
                extra_pages.append(new_page)

            # Set up the next/previous page links
            for idx, page in enumerate(extra_pages):
                if idx == 0:
                    page.meta['pagination']['prev_page'] = self.meta
                else:
                    page.meta['pagination']['prev_page'] = extra_pages[idx-1].meta

                if idx < len(extra_pages) - 1:
                    page.meta['pagination']['next_page'] = extra_pages[idx+1].meta
                else:
                    page.meta['pagination']['next_page'] = None

            # Pagination date for this page
            self.meta['pagination'].update({
                'page_items': chunks[0],
                'num_pages': len(chunks),
                'cur_page': 1,
            })
            if len(extra_pages) > 1:
                self.meta['pagination']['next_page'] = extra_pages[0].meta

        return extra_pages
Exemple #4
0
    def paginate(self):
        extra_pages = []
        if 'page_items' not in self.meta['pagination']:
            # This is the first page of a set of pages. Set up the rest. Other
            # wise don't do anything.

            source_spec = self.meta['pagination']['list'].split('.')
            logging.debug('pagination source is: ' + repr(source_spec))

            if source_spec[0] == 'page':
                source = self.meta
                source_spec.pop(0)
            elif source_spec[0] == 'site':
                source = templ_vars['site']
                source_spec.pop(0)
            else:
                logging.error('Unknown pagination source! Not paginating')
                return

            for k in source_spec:
                logging.debug(k)
                source = source[k]

            sort_key = self.meta['pagination'].get('sort_key', None)
            sort_reverse = self.meta['pagination'].get('sort_reverse', False)

            logging.debug('sort_key: {0}, sort_reverse: {1}'.format(
                sort_key, sort_reverse))

            if not source:
                return extra_pages
            if isinstance(source[0], Page):
                source = [p.meta for p in source]

            if sort_key is not None:
                if isinstance(source[0], dict):
                    source.sort(key=lambda x: x[sort_key],
                            reverse=sort_reverse)
                else:
                    source.sort(key=lambda x: x.__getattribute__(sort_key),
                            reverse=sort_reverse)

            chunks = list(util.chunk(source, self.meta['pagination']['limit']))
            if not chunks:
                return extra_pages

            # Make a page for each chunk
            for idx, chunk in enumerate(chunks[1:]):
                extra_meta = {
                    'pagination': {
                        'page_items': chunk,
                        'num_pages': len(chunks),
                        'cur_page': idx + 2,
                    }
                }
                new_page = Page(self.path, self.options,
                    renderer=self.renderer, extra_meta=extra_meta)
                extra_pages.append(new_page)

            # Set up the next/previous page links
            for idx, page in enumerate(extra_pages):
                if idx == 0:
                    page.meta['pagination']['prev_page'] = self.meta
                else:
                    page.meta['pagination']['prev_page'] = extra_pages[idx-1].meta

                if idx < len(extra_pages) - 1:
                    page.meta['pagination']['next_page'] = extra_pages[idx+1].meta
                else:
                    page.meta['pagination']['next_page'] = None

            # Pagination date for this page
            self.meta['pagination'].update({
                'page_items': chunks[0],
                'num_pages': len(chunks),
                'cur_page': 1,
            })
            if len(extra_pages) > 1:
                self.meta['pagination']['next_page'] = extra_pages[0].meta

        return extra_pages
Exemple #5
0
    def paginate(self, templ_vars):
        extra_pages = []
        logging.debug("called pagination for {0}".format(self.meta["slug"]))
        if "page_items" not in self.meta["pagination"]:
            logging.debug("doing pagination for {0}".format(self.meta["slug"]))
            # This is the first page of a set of pages. Set up the rest. Other
            # wise don't do anything.

            source_spec = self.meta["pagination"]["list"].split(".")
            logging.debug("pagination source is: " + repr(source_spec))

            if source_spec[0] == "page":
                source = self.meta
                source_spec.pop(0)
            elif source_spec[0] == "site":
                source = templ_vars["site"]
                source_spec.pop(0)
            else:
                logging.error("Unknown pagination source! Not paginating")
                return

            for k in source_spec:
                source = source[k]

            sort_key = self.meta["pagination"].get("sort_key", None)
            sort_reverse = self.meta["pagination"].get("sort_reverse", False)

            logging.debug("sort_key: {0}, sort_reverse: {1}".format(sort_key, sort_reverse))

            if not source:
                return extra_pages
            if isinstance(source[0], Page):
                source = [p.meta for p in source]

            if sort_key is not None:
                if isinstance(source[0], dict):
                    source.sort(key=lambda x: x[sort_key], reverse=sort_reverse)
                else:
                    source.sort(key=lambda x: x.__getattribute__(sort_key), reverse=sort_reverse)

            chunks = list(util.chunk(source, self.meta["pagination"]["limit"]))
            if not chunks:
                return extra_pages

            # Make a page for each chunk
            for idx, chunk in enumerate(chunks[1:], 2):
                new_meta = copy.deepcopy(self.meta)
                new_meta.update(
                    {
                        "url": self.url_pattern,
                        "pagination": {"page_items": chunk, "num_pages": len(chunks), "cur_page": idx},
                    }
                )
                new_page = self.from_meta(new_meta, self.options, self.engine, renderer=self.renderer)
                logging.debug("page {0} is {1}".format(idx, new_page))
                if new_page:
                    extra_pages.append(new_page)

            # Set up the next/previous page links
            for idx, page in enumerate(extra_pages):
                if idx == 0:
                    page.meta["pagination"]["prev_page"] = self.meta
                else:
                    page.meta["pagination"]["prev_page"] = extra_pages[idx - 1].meta

                if idx < len(extra_pages) - 1:
                    page.meta["pagination"]["next_page"] = extra_pages[idx + 1].meta
                else:
                    page.meta["pagination"]["next_page"] = None

            # Pagination date for this page
            self.meta["pagination"].update({"page_items": chunks[0], "num_pages": len(chunks), "cur_page": 1})
            # Extra pages doesn't include the first page, so if there is at
            # least one, then make a link to the next page.
            if len(extra_pages) > 0:
                self.meta["pagination"]["next_page"] = extra_pages[0].meta

        return extra_pages