From f714f27c787a61e488ce922777ae322de7746cf6 Mon Sep 17 00:00:00 2001 From: jonasborges Date: Sat, 2 Oct 2021 00:17:43 +0100 Subject: [PATCH 1/4] Ensure _DISCARDED is not being cached. Fix #2825 Filtration is now being applied before caching the metadata, solving the issue where _DISCARD objects from previous runs were being retrieved from cache. --- RELEASE.md | 3 ++ pelican/readers.py | 3 +- .../article_with_markdown_and_empty_tags.md | 4 +++ pelican/tests/test_generators.py | 3 ++ pelican/tests/test_readers.py | 32 +++++++++++++++++-- 5 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 RELEASE.md create mode 100644 pelican/tests/content/article_with_markdown_and_empty_tags.md diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 000000000..6d7e52c08 --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,3 @@ +Release type: patch + +Address an issue where metadata flagged to be discarded was being cached. diff --git a/pelican/readers.py b/pelican/readers.py index 15d09908f..b42fa4f85 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -571,8 +571,9 @@ def read_file(self, base_path, path, content_class=Page, fmt=None, content, reader_metadata = self.get_cached_data(path, (None, None)) if content is None: content, reader_metadata = reader.read(path) + reader_metadata = _filter_discardable_metadata(reader_metadata) self.cache_data(path, (content, reader_metadata)) - metadata.update(_filter_discardable_metadata(reader_metadata)) + metadata.update(reader_metadata) if content: # find images with empty alt diff --git a/pelican/tests/content/article_with_markdown_and_empty_tags.md b/pelican/tests/content/article_with_markdown_and_empty_tags.md new file mode 100644 index 000000000..ba013fe95 --- /dev/null +++ b/pelican/tests/content/article_with_markdown_and_empty_tags.md @@ -0,0 +1,4 @@ +Title: Article with markdown and empty tags +Tags: + +This is some content. diff --git a/pelican/tests/test_generators.py b/pelican/tests/test_generators.py index 0a4a8fdc9..1bc8aff0c 100644 --- a/pelican/tests/test_generators.py +++ b/pelican/tests/test_generators.py @@ -265,6 +265,8 @@ def test_generate_context(self): ['This is a super article !', 'published', 'yeah', 'article'], ['This is a super article !', 'published', 'Default', 'article'], ['Article with an inline SVG', 'published', 'Default', 'article'], + ['Article with markdown and empty tags', 'published', 'Default', + 'article'], ['This is an article with category !', 'published', 'yeah', 'article'], ['This is an article with multiple authors!', 'published', @@ -569,6 +571,7 @@ def test_article_order_by(self): 'Article title', 'Article with Nonconformant HTML meta tags', 'Article with an inline SVG', + 'Article with markdown and empty tags', 'Article with markdown and nested summary metadata', 'Article with markdown and summary metadata multi', 'Article with markdown and summary metadata single', diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py index ea5f3bdda..68c620b2e 100644 --- a/pelican/tests/test_readers.py +++ b/pelican/tests/test_readers.py @@ -16,10 +16,18 @@ def _path(*args): class ReaderTest(unittest.TestCase): - def read_file(self, path, **kwargs): + def setUp(self): + self._reader = None + + def tearDown(self): + self._reader = None + + def read_file(self, path, cache_name='', **kwargs): # Isolate from future API changes to readers.read_file - r = readers.Readers(settings=get_settings(**kwargs)) - return r.read_file(base_path=CONTENT_PATH, path=path) + + self._reader = readers.Readers( + cache_name=cache_name, settings=get_settings(**kwargs)) + return self._reader.read_file(base_path=CONTENT_PATH, path=path) def assertDictHasSubset(self, dictionary, subset): for key, value in subset.items(): @@ -795,6 +803,24 @@ def test_typogrify_dashes_config(self): self.assertEqual(page.content, expected) self.assertEqual(page.title, expected_title) + def test_metadata_has_no_discarded_data(self): + md_filename = 'article_with_markdown_and_empty_tags.md' + page = self.read_file( + path=md_filename, + cache_name='cache', + CACHE_CONTENT=True, + LOAD_CONTENT_CACHE=True) + + file_path = _path(md_filename) + cached_metadata = self._reader._cache[file_path][1][1] + + expected = { + 'title': 'Article with markdown and empty tags' + } + self.assertEqual(cached_metadata, expected) + self.assertNotIn('tags', page.metadata) + self.assertDictHasSubset(page.metadata, expected) + class HTMLReaderTest(ReaderTest): def test_article_with_comments(self): From 47628155684ff47294aa4d3ef43697010a211759 Mon Sep 17 00:00:00 2001 From: jonasborges Date: Sun, 3 Oct 2021 00:52:34 +0100 Subject: [PATCH 2/4] CR changes --- pelican/tests/test_readers.py | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py index 68c620b2e..d44e9c0a7 100644 --- a/pelican/tests/test_readers.py +++ b/pelican/tests/test_readers.py @@ -16,18 +16,12 @@ def _path(*args): class ReaderTest(unittest.TestCase): - def setUp(self): - self._reader = None - - def tearDown(self): - self._reader = None - def read_file(self, path, cache_name='', **kwargs): # Isolate from future API changes to readers.read_file - self._reader = readers.Readers( + r = readers.Readers( cache_name=cache_name, settings=get_settings(**kwargs)) - return self._reader.read_file(base_path=CONTENT_PATH, path=path) + return r.read_file(base_path=CONTENT_PATH, path=path) def assertDictHasSubset(self, dictionary, subset): for key, value in subset.items(): @@ -805,14 +799,13 @@ def test_typogrify_dashes_config(self): def test_metadata_has_no_discarded_data(self): md_filename = 'article_with_markdown_and_empty_tags.md' - page = self.read_file( - path=md_filename, - cache_name='cache', - CACHE_CONTENT=True, - LOAD_CONTENT_CACHE=True) - file_path = _path(md_filename) - cached_metadata = self._reader._cache[file_path][1][1] + r = readers.Readers(cache_name='cache', settings=get_settings( + CACHE_CONTENT=True)) + page = r.read_file(base_path=CONTENT_PATH, path=md_filename) + + __, cached_metadata = r.get_cached_data( + _path(md_filename), (None, None)) expected = { 'title': 'Article with markdown and empty tags' From 9e76ad9699098e95e94ade51ab5cec298a410c40 Mon Sep 17 00:00:00 2001 From: jonasborges Date: Sun, 3 Oct 2021 00:56:21 +0100 Subject: [PATCH 3/4] Rollback unneeded changes --- pelican/tests/test_readers.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py index d44e9c0a7..753a353d0 100644 --- a/pelican/tests/test_readers.py +++ b/pelican/tests/test_readers.py @@ -16,11 +16,10 @@ def _path(*args): class ReaderTest(unittest.TestCase): - def read_file(self, path, cache_name='', **kwargs): + def read_file(self, path, **kwargs): # Isolate from future API changes to readers.read_file - r = readers.Readers( - cache_name=cache_name, settings=get_settings(**kwargs)) + r = readers.Readers(settings=get_settings(**kwargs)) return r.read_file(base_path=CONTENT_PATH, path=path) def assertDictHasSubset(self, dictionary, subset): From 68cacd913fecf54d9fbeb6a0f36ba2a198195418 Mon Sep 17 00:00:00 2001 From: Justin Mayer Date: Wed, 6 Oct 2021 10:16:42 +0200 Subject: [PATCH 4/4] Delete RELEASE.md --- RELEASE.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 RELEASE.md diff --git a/RELEASE.md b/RELEASE.md deleted file mode 100644 index 6d7e52c08..000000000 --- a/RELEASE.md +++ /dev/null @@ -1,3 +0,0 @@ -Release type: patch - -Address an issue where metadata flagged to be discarded was being cached.