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
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)
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))
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)
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
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
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)