From 027b3525b1e69a8b15f2dd7e7b6360618835e272 Mon Sep 17 00:00:00 2001 From: Kyle Robbertze Date: Fri, 4 Jun 2021 10:54:47 +0200 Subject: [PATCH] fix python 3.6 support in api_client v2 Closes: #1228 --- python_apps/api_clients/api_clients/utils.py | 9 +++++++++ python_apps/api_clients/api_clients/version2.py | 10 +++++----- python_apps/api_clients/tests/test_utils.py | 9 +++++++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/python_apps/api_clients/api_clients/utils.py b/python_apps/api_clients/api_clients/utils.py index c87063959..a2f62686b 100644 --- a/python_apps/api_clients/api_clients/utils.py +++ b/python_apps/api_clients/api_clients/utils.py @@ -1,4 +1,5 @@ import json +import datetime import logging import socket import requests @@ -164,3 +165,11 @@ def time_in_seconds(time): def time_in_milliseconds(time): return time_in_seconds(time) * 1000 +def fromisoformat(time_string): + """ + This is required for Python 3.6 support. datetime.time.fromisoformat was + only added in Python 3.7. Until LibreTime drops Python 3.6 support, this + wrapper uses the old way of doing it. + """ + datetime_obj = datetime.datetime.strptime(time_string, "%H:%M:%S.%f") + return datetime_obj.time() diff --git a/python_apps/api_clients/api_clients/version2.py b/python_apps/api_clients/api_clients/version2.py index 553d96fb0..5e066b69e 100644 --- a/python_apps/api_clients/api_clients/version2.py +++ b/python_apps/api_clients/api_clients/version2.py @@ -10,7 +10,7 @@ import datetime from dateutil.parser import isoparse import logging from configobj import ConfigObj -from .utils import RequestProvider, time_in_seconds, time_in_milliseconds +from .utils import RequestProvider, time_in_seconds, time_in_milliseconds, fromisoformat LIBRETIME_API_VERSION = "2.0" @@ -70,11 +70,11 @@ class AirtimeApiClient: current['type'] = 'file' current['id'] = item['file_id'] - fade_in = time_in_milliseconds(datetime.time.fromisoformat(item['fade_in'])) - fade_out = time_in_milliseconds(datetime.time.fromisoformat(item['fade_out'])) + fade_in = time_in_milliseconds(fromisoformat(item['fade_in'])) + fade_out = time_in_milliseconds(fromisoformat(item['fade_out'])) - cue_in = time_in_seconds(datetime.time.fromisoformat(item['cue_in'])) - cue_out = time_in_seconds(datetime.time.fromisoformat(item['cue_out'])) + cue_in = time_in_seconds(fromisoformat(item['cue_in'])) + cue_out = time_in_seconds(fromisoformat(item['cue_out'])) current['fade_in'] = fade_in current['fade_out'] = fade_out diff --git a/python_apps/api_clients/tests/test_utils.py b/python_apps/api_clients/tests/test_utils.py index 07f8322ff..6808a172c 100644 --- a/python_apps/api_clients/tests/test_utils.py +++ b/python_apps/api_clients/tests/test_utils.py @@ -86,4 +86,13 @@ class TestGetProtocol(unittest.TestCase): for value in negative_values: self.assertEqual(get_force_ssl(value, True), 'http') + def test_fromisoformat(self): + time = { + "00:00:00.500000": datetime.time(microsecond=500000), + "00:04:30.092540": datetime.time(minute=4, second=30, microsecond=92540), + } + for time_string, expected in time.items(): + result = utils.fromisoformat(time_string) + self.assertEqual(result, expected) + if __name__ == '__main__': unittest.main()