Cache the value of documentation_pages

This commit is contained in:
Oleh Prypin
2023-05-02 23:48:40 +02:00
parent d5af6426c5
commit 4e0429e8f5
2 changed files with 8 additions and 4 deletions

View File

@@ -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."""

View File

@@ -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=[