[formatter] add 'D' conversion

This commit is contained in:
Mike Fährmann
2025-05-28 20:34:35 +02:00
parent 17b2910938
commit 539ed8fef4
3 changed files with 18 additions and 4 deletions

View File

@@ -140,6 +140,12 @@ Conversion specifiers allow to *convert* the value to a different form or type.
<td><code>{created!d}</code></td>
<td><code>2010-01-01 00:00:00</code></td>
</tr>
<tr>
<td align="center"><code>D</code></td>
<td>Convert a Unix timestamp or <a href="https://en.wikipedia.org/wiki/ISO_8601">ISO 8601</a> string to a <code>datetime</code> object</td>
<td><code>{created!D}</code></td>
<td><code>2010-01-01 00:00:00</code></td>
</tr>
<tr>
<td align="center"><code>U</code></td>
<td>Convert HTML entities</td>

View File

@@ -488,6 +488,7 @@ _CONVERSIONS = {
"L": len,
"T": util.datetime_to_timestamp_string,
"d": text.parse_timestamp,
"D": util.to_datetime,
"U": text.unescape,
"H": lambda s: text.unescape(text.remove_html(s)),
"g": text.slugify,

View File

@@ -32,7 +32,7 @@ class TestFormatter(unittest.TestCase):
"h": "<p>foo </p> &amp; bar <p> </p>",
"u": "&#x27;&lt; / &gt;&#x27;",
"t": 1262304000,
"ds": "2010-01-01T01:00:00+0100",
"ds": "2010-01-01T01:00:00+01:00",
"dt": datetime.datetime(2010, 1, 1),
"dt_dst": datetime.datetime(2010, 6, 1),
"i_str": "12345",
@@ -65,6 +65,13 @@ class TestFormatter(unittest.TestCase):
self._run_test("{n!S}", "")
self._run_test("{t!d}", datetime.datetime(2010, 1, 1))
self._run_test("{t!d:%Y-%m-%d}", "2010-01-01")
self._run_test("{t!D}" , datetime.datetime(2010, 1, 1))
if sys.hexversion >= 0x3070000:
self._run_test("{ds!D}", datetime.datetime(2010, 1, 1))
else:
self._run_test("{ds!D}", datetime.datetime(1970, 1, 1))
self._run_test("{dt!D}", datetime.datetime(2010, 1, 1))
self._run_test("{t!D:%Y-%m-%d}", "2010-01-01")
self._run_test("{dt!T}", "1262304000")
self._run_test("{l!j}", '["a","b","c"]')
self._run_test("{dt!j}", '"2010-01-01 00:00:00"')
@@ -232,7 +239,7 @@ class TestFormatter(unittest.TestCase):
def test_datetime(self):
self._run_test("{ds:D%Y-%m-%dT%H:%M:%S%z}", "2010-01-01 00:00:00")
self._run_test("{ds:D%Y}", "2010-01-01T01:00:00+0100")
self._run_test("{ds:D%Y}", "2010-01-01T01:00:00+01:00")
self._run_test("{l:D%Y}", "None")
def test_offset(self):
@@ -488,10 +495,10 @@ def noarg():
fmt4 = formatter.parse("\fM " + path + ":lengths")
self.assertEqual(fmt1.format_map(self.kwdict), "'Title' by Name")
self.assertEqual(fmt2.format_map(self.kwdict), "136")
self.assertEqual(fmt2.format_map(self.kwdict), "137")
self.assertEqual(fmt3.format_map(self.kwdict), "'Title' by Name")
self.assertEqual(fmt4.format_map(self.kwdict), "136")
self.assertEqual(fmt4.format_map(self.kwdict), "137")
with self.assertRaises(TypeError):
self.assertEqual(fmt0.format_map(self.kwdict), "")