forked from github/pelican
Set "modified:" from "date:" when the latter was set from the filesystem (#2748)
Sets the `modified:` metadata from `date:` if the user asked us to use the filesystem for determining timestamps. Fixes #2497 * Added tests (ab)using the HTML reader a bit There seems to be no way to test this generically since we need to produce a valid document with meta information to be able to compare, hence I used the lightest reader out there to do the parsing of the samples. * Fixed tests for generators since there were 4 more articles introduced to the test content directory.
This commit is contained in:
parent
c8639fe547
commit
e6df353302
7 changed files with 113 additions and 0 deletions
|
|
@ -685,6 +685,7 @@ def path_metadata(full_path, source_path, settings=None):
|
||||||
if settings.get('DEFAULT_DATE', None) == 'fs':
|
if settings.get('DEFAULT_DATE', None) == 'fs':
|
||||||
metadata['date'] = datetime.datetime.fromtimestamp(
|
metadata['date'] = datetime.datetime.fromtimestamp(
|
||||||
os.stat(full_path).st_mtime)
|
os.stat(full_path).st_mtime)
|
||||||
|
metadata['modified'] = metadata['date']
|
||||||
|
|
||||||
# Apply EXTRA_PATH_METADATA for the source path and the paths of any
|
# Apply EXTRA_PATH_METADATA for the source path and the paths of any
|
||||||
# parent directories. Sorting EPM first ensures that the most specific
|
# parent directories. Sorting EPM first ensures that the most specific
|
||||||
|
|
|
||||||
15
pelican/tests/content/article_with_metadata_explicit_date_implicit_modified.html
vendored
Normal file
15
pelican/tests/content/article_with_metadata_explicit_date_implicit_modified.html
vendored
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>This is a super article !</title>
|
||||||
|
<meta name="tags" content="foo, bar, foobar" />
|
||||||
|
<meta name="date" content="2010-12-02 10:14" />
|
||||||
|
<meta name="category" content="yeah" />
|
||||||
|
<meta name="author" content="Alexis Métaireau" />
|
||||||
|
<meta name="summary" content="Summary and stuff" />
|
||||||
|
<meta name="custom_field" content="http://notmyidea.org" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Multi-line metadata should be supported
|
||||||
|
as well as <strong>inline markup</strong>.
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
16
pelican/tests/content/article_with_metadata_explicit_dates.html
vendored
Normal file
16
pelican/tests/content/article_with_metadata_explicit_dates.html
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>This is a super article !</title>
|
||||||
|
<meta name="tags" content="foo, bar, foobar" />
|
||||||
|
<meta name="date" content="2010-12-02 10:14" />
|
||||||
|
<meta name="modified" content="2010-12-31 23:59" />
|
||||||
|
<meta name="category" content="yeah" />
|
||||||
|
<meta name="author" content="Alexis Métaireau" />
|
||||||
|
<meta name="summary" content="Summary and stuff" />
|
||||||
|
<meta name="custom_field" content="http://notmyidea.org" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Multi-line metadata should be supported
|
||||||
|
as well as <strong>inline markup</strong>.
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
15
pelican/tests/content/article_with_metadata_implicit_date_explicit_modified.html
vendored
Normal file
15
pelican/tests/content/article_with_metadata_implicit_date_explicit_modified.html
vendored
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>This is a super article !</title>
|
||||||
|
<meta name="tags" content="foo, bar, foobar" />
|
||||||
|
<meta name="modified" content="2010-12-02 10:14" />
|
||||||
|
<meta name="category" content="yeah" />
|
||||||
|
<meta name="author" content="Alexis Métaireau" />
|
||||||
|
<meta name="summary" content="Summary and stuff" />
|
||||||
|
<meta name="custom_field" content="http://notmyidea.org" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Multi-line metadata should be supported
|
||||||
|
as well as <strong>inline markup</strong>.
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
14
pelican/tests/content/article_with_metadata_implicit_dates.html
vendored
Normal file
14
pelican/tests/content/article_with_metadata_implicit_dates.html
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>This is a super article !</title>
|
||||||
|
<meta name="tags" content="foo, bar, foobar" />
|
||||||
|
<meta name="category" content="yeah" />
|
||||||
|
<meta name="author" content="Alexis Métaireau" />
|
||||||
|
<meta name="summary" content="Summary and stuff" />
|
||||||
|
<meta name="custom_field" content="http://notmyidea.org" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Multi-line metadata should be supported
|
||||||
|
as well as <strong>inline markup</strong>.
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -263,6 +263,10 @@ class TestArticlesGenerator(unittest.TestCase):
|
||||||
['This is a super article !', 'published', 'yeah', 'article'],
|
['This is a super article !', 'published', 'yeah', 'article'],
|
||||||
['This is a super article !', 'published', 'yeah', 'article'],
|
['This is a super article !', 'published', 'yeah', 'article'],
|
||||||
['This is a super article !', 'published', 'yeah', 'article'],
|
['This is a super article !', 'published', 'yeah', 'article'],
|
||||||
|
['This is a super article !', 'published', 'yeah', 'article'],
|
||||||
|
['This is a super article !', 'published', 'yeah', 'article'],
|
||||||
|
['This is a super article !', 'published', 'yeah', 'article'],
|
||||||
|
['This is a super article !', 'published', 'yeah', 'article'],
|
||||||
['This is a super article !', 'published', 'Default', 'article'],
|
['This is a super article !', 'published', 'Default', 'article'],
|
||||||
['Article with an inline SVG', 'published', 'Default', 'article'],
|
['Article with an inline SVG', 'published', 'Default', 'article'],
|
||||||
['This is an article with category !', 'published', 'yeah',
|
['This is an article with category !', 'published', 'yeah',
|
||||||
|
|
@ -579,6 +583,10 @@ class TestArticlesGenerator(unittest.TestCase):
|
||||||
'This is a super article !',
|
'This is a super article !',
|
||||||
'This is a super article !',
|
'This is a super article !',
|
||||||
'This is a super article !',
|
'This is a super article !',
|
||||||
|
'This is a super article !',
|
||||||
|
'This is a super article !',
|
||||||
|
'This is a super article !',
|
||||||
|
'This is a super article !',
|
||||||
'This is an article with category !',
|
'This is an article with category !',
|
||||||
('This is an article with multiple authors in lastname, '
|
('This is an article with multiple authors in lastname, '
|
||||||
'firstname format!'),
|
'firstname format!'),
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,50 @@ class DefaultReaderTest(ReaderTest):
|
||||||
with self.assertRaises(TypeError):
|
with self.assertRaises(TypeError):
|
||||||
self.read_file(path='article_with_metadata.unknownextension')
|
self.read_file(path='article_with_metadata.unknownextension')
|
||||||
|
|
||||||
|
def test_readfile_path_metadata_implicit_dates(self):
|
||||||
|
test_file = 'article_with_metadata_implicit_dates.html'
|
||||||
|
page = self.read_file(path=test_file, DEFAULT_DATE='fs')
|
||||||
|
expected = {
|
||||||
|
'date': SafeDatetime.fromtimestamp(
|
||||||
|
os.stat(_path(test_file)).st_mtime),
|
||||||
|
'modified': SafeDatetime.fromtimestamp(
|
||||||
|
os.stat(_path(test_file)).st_mtime)
|
||||||
|
}
|
||||||
|
|
||||||
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
|
|
||||||
|
def test_readfile_path_metadata_explicit_dates(self):
|
||||||
|
test_file = 'article_with_metadata_explicit_dates.html'
|
||||||
|
page = self.read_file(path=test_file, DEFAULT_DATE='fs')
|
||||||
|
expected = {
|
||||||
|
'date': SafeDatetime(2010, 12, 2, 10, 14),
|
||||||
|
'modified': SafeDatetime(2010, 12, 31, 23, 59)
|
||||||
|
}
|
||||||
|
|
||||||
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
|
|
||||||
|
def test_readfile_path_metadata_implicit_date_explicit_modified(self):
|
||||||
|
test_file = 'article_with_metadata_implicit_date_explicit_modified.html'
|
||||||
|
page = self.read_file(path=test_file, DEFAULT_DATE='fs')
|
||||||
|
expected = {
|
||||||
|
'date': SafeDatetime.fromtimestamp(
|
||||||
|
os.stat(_path(test_file)).st_mtime),
|
||||||
|
'modified': SafeDatetime(2010, 12, 2, 10, 14),
|
||||||
|
}
|
||||||
|
|
||||||
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
|
|
||||||
|
def test_readfile_path_metadata_explicit_date_implicit_modified(self):
|
||||||
|
test_file = 'article_with_metadata_explicit_date_implicit_modified.html'
|
||||||
|
page = self.read_file(path=test_file, DEFAULT_DATE='fs')
|
||||||
|
expected = {
|
||||||
|
'date': SafeDatetime(2010, 12, 2, 10, 14),
|
||||||
|
'modified': SafeDatetime.fromtimestamp(
|
||||||
|
os.stat(_path(test_file)).st_mtime)
|
||||||
|
}
|
||||||
|
|
||||||
|
self.assertDictHasSubset(page.metadata, expected)
|
||||||
|
|
||||||
@unittest.skipUnless(patch, 'Needs Mock module')
|
@unittest.skipUnless(patch, 'Needs Mock module')
|
||||||
def test_find_empty_alt(self):
|
def test_find_empty_alt(self):
|
||||||
with patch('pelican.readers.logger') as log_mock:
|
with patch('pelican.readers.logger') as log_mock:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue