From 3f2d89c9d6c07b551a206252413dacb8c7283c46 Mon Sep 17 00:00:00 2001 From: Robert Utter Date: Mon, 22 Sep 2014 13:22:36 -0700 Subject: [PATCH] Makes DEFAULT_DATE accept string dates; fixes #1464 --- docs/settings.rst | 2 ++ pelican/readers.py | 5 ++++- pelican/tests/test_readers.py | 9 +++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/settings.rst b/docs/settings.rst index 1de28c1248..a0a4b1b2ce 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -61,6 +61,8 @@ Setting name (followed by default value, if any) If ``'fs'``, Pelican will use the file system timestamp information (mtime) if it can't get date information from the metadata. + If given any other string, it will be parsed by the same method + as article metadata. If set to a tuple object, the default datetime object will instead be generated by passing the tuple to the ``datetime.datetime`` constructor. diff --git a/pelican/readers.py b/pelican/readers.py index e3b1012a7a..585a6e7969 100644 --- a/pelican/readers.py +++ b/pelican/readers.py @@ -607,7 +607,10 @@ def default_metadata(settings=None, process=None): metadata['category'] = value if settings.get('DEFAULT_DATE', None) and \ settings['DEFAULT_DATE'] != 'fs': - metadata['date'] = SafeDatetime(*settings['DEFAULT_DATE']) + if isinstance(settings['DEFAULT_DATE'], six.string_types): + metadata['date'] = get_date(settings['DEFAULT_DATE']) + else: + metadata['date'] = SafeDatetime(*settings['DEFAULT_DATE']) return metadata diff --git a/pelican/tests/test_readers.py b/pelican/tests/test_readers.py index 3bfca33a66..e910024161 100644 --- a/pelican/tests/test_readers.py +++ b/pelican/tests/test_readers.py @@ -359,6 +359,15 @@ def test_article_with_multiple_authors_list(self): self.assertDictHasSubset(page.metadata, expected) + def test_default_date_formats(self): + tuple_date = self.read_file(path='article.rst', + DEFAULT_DATE=(2012, 5, 1)) + string_date = self.read_file(path='article.rst', + DEFAULT_DATE='2012-05-01') + + self.assertEqual(tuple_date.metadata['date'], + string_date.metadata['date']) + @unittest.skipUnless(readers.Markdown, "markdown isn't installed") class MdReaderTest(ReaderTest):