Beispiel #1
0
 def list_docs(self,
               order_by=None,
               locale=utils.SENTINEL,
               reverse=None,
               include_hidden=False,
               recursive=True,
               inject=False):
     reverse = False if reverse is None else reverse
     if order_by is None:
         order_by = ('order', 'pod_path')
     elif isinstance(order_by, basestring):
         order_by = (order_by, 'pod_path')
     key = operator.attrgetter(*order_by)
     sorted_docs = structures.SortedCollection(key=key)
     if inject:
         injected_docs = self.pod.inject_preprocessors(collection=self)
         if injected_docs is not None:
             sorted_docs = injected_docs
             self.pod.logger.info('Injected collection -> {}'.format(
                 self.pod_path))
         return reversed(sorted_docs) if reverse else sorted_docs
     for path in self.pod.list_dir(self.pod_path, recursive=recursive):
         pod_path = os.path.join(self.pod_path, path.lstrip('/'))
         # Document is owned by a different collection, skip it.
         if not self._owns_doc_at_path(pod_path):
             continue
         slug, ext = os.path.splitext(os.path.basename(pod_path))
         if (slug.startswith(self.IGNORE_INITIAL)
                 or ext not in messages.extensions_to_formats
                 or not pod_path):
             continue
         try:
             _, locale_from_path = \
                 document.Document.parse_localized_path(pod_path)
             if locale_from_path:
                 if (locale is not None
                         and locale in [utils.SENTINEL, locale_from_path]):
                     new_doc = self.get_doc(pod_path,
                                            locale=locale_from_path)
                     if not include_hidden and new_doc.hidden:
                         continue
                     sorted_docs.insert(new_doc)
                 continue
             doc = self.get_doc(pod_path)
             if not include_hidden and doc.hidden:
                 continue
             if locale in [utils.SENTINEL, None]:
                 sorted_docs.insert(doc)
             if locale is None:
                 continue
             if locale == doc.default_locale:
                 sorted_docs.insert(doc)
             else:
                 self._add_localized_docs(sorted_docs, pod_path, locale,
                                          doc)
         except Exception as e:
             logging.error('Error loading doc: {}'.format(pod_path))
             raise
     return reversed(sorted_docs) if reverse else sorted_docs
Beispiel #2
0
 def list_servable_document_locales(self, pod_path, include_hidden=False,
                                    locales=None):
     sorted_docs = structures.SortedCollection(key=None)
     doc = self.get_doc(pod_path)
     sorted_docs.insert(doc)
     self._add_localized_docs(sorted_docs, pod_path, utils.SENTINEL, doc)
     return self.list_servable_documents(
         include_hidden=include_hidden, locales=locales, doc_list=sorted_docs)
Beispiel #3
0
 def test_sorting_default(self):
     """Collection is sorted using a default for the value."""
     self.key = itemgetter(2)
     self.coll = structures.SortedCollection(key=self.key, default=100)
     for record in [('roger', 'young', None), ('angela', 'jones', 28),
                    ('bill', 'smith', 22), ('david', 'thomas', 32)]:
         self.coll.insert(record)
     self.assertEqual([
         ('bill', 'smith', 22),
         ('angela', 'jones', 28),
         ('david', 'thomas', 32),
         ('roger', 'young', None),
     ], list(self.coll))
Beispiel #4
0
    def list_servable_document_locales(self, pod_path, include_hidden=False,
                                       locales=None):
        sorted_docs = structures.SortedCollection(key=None)
        doc = self.get_doc(pod_path)

        try:
            doc.has_serving_path()  # Using doc fields forces file read.
        except document_front_matter.BadFormatError:
            # Skip adding invalid documents.
            return []

        sorted_docs.insert(doc)
        self._add_localized_docs(sorted_docs, pod_path, utils.SENTINEL, doc)
        return self.list_servable_documents(
            include_hidden=include_hidden, locales=locales, doc_list=sorted_docs)
Beispiel #5
0
 def search_docs(self, order_by=None, locale=None):
     order_by = 'order' if order_by is None else order_by
     sorted_docs = structures.SortedCollection(
         key=operator.attrgetter(order_by))
     for path in self.pod.list_dir(self.pod_path):
         pod_path = os.path.join(self.pod_path, path.lstrip('/'))
         slug, ext = os.path.splitext(os.path.basename(pod_path))
         if slug.startswith(
                 '_') or ext not in messages.extensions_to_formats:
             continue
         doc = self.get_doc(pod_path)
         if locale is None:
             sorted_docs.insert(doc)
             continue
         for each_locale in doc.list_locales():
             if each_locale == locale:
                 sorted_docs.insert(self.get_doc(pod_path, locale=locale))
     return sorted_docs
Beispiel #6
0
    def list_documents(self,
                       order_by=None,
                       reverse=None,
                       include_hidden=False,
                       locale=_all):
        if order_by is None:
            order_by = 'order'
        if reverse is None:
            reverse = False

        paths = self.pod.list_dir(self.pod_path)
        sorted_docs = structures.SortedCollection(
            key=operator.attrgetter(order_by))

        def process(path):
            pod_path = os.path.join(self.pod_path, path.lstrip('/'))
            slug, ext = os.path.splitext(os.path.basename(pod_path))
            if (slug.startswith('_')
                    or ext not in messages.extensions_to_formats
                    or not pod_path):
                return
            doc = self.get_doc(pod_path)

            if locale in [_all, None]:
                sorted_docs.insert(doc)

            if locale is None:
                return

            for each_locale in doc.list_locales():
                if each_locale == self._default_locale:
                    continue
                if each_locale == locale or locale == _all:
                    doc = self.get_doc(pod_path, locale=each_locale)
                    sorted_docs.insert(doc)

        for path in paths:
            process(path)

        return reversed(sorted_docs) if reverse else sorted_docs
Beispiel #7
0
 def setUp(self):
     self.key = itemgetter(2)
     self.coll = structures.SortedCollection(key=self.key)
     for record in [('roger', 'young', 30), ('angela', 'jones', 28),
                    ('bill', 'smith', 22), ('david', 'thomas', 32)]:
         self.coll.insert(record)