diff --git a/mkdocs/structure/files.py b/mkdocs/structure/files.py index cc2d25b9..dbef68a5 100644 --- a/mkdocs/structure/files.py +++ b/mkdocs/structure/files.py @@ -38,6 +38,7 @@ class Files: def __init__(self, files: List[File]) -> None: self._files = files self._src_uris: Optional[Dict[str, File]] = None + self._documentation_pages: Optional[Sequence[File]] = None def __iter__(self) -> Iterator[File]: """Iterate over the files within.""" @@ -70,12 +71,12 @@ class Files: def append(self, file: File) -> None: """Append file to Files collection.""" - self._src_uris = None + self._src_uris = self._documentation_pages = None self._files.append(file) def remove(self, file: File) -> None: """Remove file from Files collection.""" - self._src_uris = None + self._src_uris = self._documentation_pages = None self._files.remove(file) def copy_static_files(self, dirty: bool = False) -> None: @@ -86,7 +87,9 @@ class Files: def documentation_pages(self) -> Sequence[File]: """Return iterable of all Markdown page file objects.""" - return [file for file in self if file.is_documentation_page()] + if self._documentation_pages is None: + self._documentation_pages = [file for file in self if file.is_documentation_page()] + return self._documentation_pages def static_pages(self) -> Sequence[File]: """Return iterable of all static page file objects.""" diff --git a/mkdocs/tests/structure/file_tests.py b/mkdocs/tests/structure/file_tests.py index 51030e1f..fb13bd06 100644 --- a/mkdocs/tests/structure/file_tests.py +++ b/mkdocs/tests/structure/file_tests.py @@ -380,13 +380,14 @@ class TestFiles(PathAssertionMixin, unittest.TestCase): self.assertEqual(files.get_file_from_path('foo/bar.jpg'), fs[3]) self.assertEqual(files.get_file_from_path('missing.jpg'), None) self.assertTrue(fs[2].src_uri in files.src_uris) - self.assertTrue(fs[2].src_uri in files.src_uris) extra_file = File('extra.md', '/path/to/docs', '/path/to/site', use_directory_urls=True) self.assertFalse(extra_file.src_uri in files.src_uris) files.append(extra_file) self.assertEqual(len(files), 7) self.assertTrue(extra_file.src_uri in files.src_uris) self.assertEqual(files.documentation_pages(), [fs[0], fs[1], extra_file]) + files.remove(fs[1]) + self.assertEqual(files.documentation_pages(), [fs[0], extra_file]) @tempdir( files=[