From d670de034488760e8c311267f88fc99cc30c58d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Sun, 21 Apr 2019 15:28:27 +0200 Subject: [PATCH] implement 'text.parse_timestamp()' --- gallery_dl/text.py | 9 +++++++++ test/test_text.py | 14 ++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/gallery_dl/text.py b/gallery_dl/text.py index 2487210c..bccdbf0e 100644 --- a/gallery_dl/text.py +++ b/gallery_dl/text.py @@ -11,6 +11,7 @@ import re import html import os.path +import datetime import urllib.parse @@ -214,6 +215,14 @@ def parse_query(qs): return result +def parse_timestamp(ts, default=None): + """Create a datetime object from a unix timestamp""" + try: + return datetime.datetime.fromtimestamp(int(ts)) + except (TypeError, ValueError, OverflowError): + return default + + if os.name == "nt": clean_path = clean_path_windows else: diff --git a/test/test_text.py b/test/test_text.py index ec35c4d2..1ff890e1 100644 --- a/test/test_text.py +++ b/test/test_text.py @@ -8,6 +8,7 @@ # published by the Free Software Foundation. import unittest +import datetime from gallery_dl import text @@ -336,6 +337,19 @@ class TestText(unittest.TestCase): for value in INVALID: self.assertEqual(f(value), {}) + def test_parse_timestamp(self, f=text.parse_timestamp): + null = datetime.datetime.fromtimestamp(0) + value = datetime.datetime.fromtimestamp(1555816235) + + self.assertEqual(f(0) , null) + self.assertEqual(f("0") , null) + self.assertEqual(f(1555816235) , value) + self.assertEqual(f("1555816235"), value) + + for value in INVALID_ALT: + self.assertEqual(f(value), None) + self.assertEqual(f(value, "foo"), "foo") + if __name__ == '__main__': unittest.main()