Skip to content

Commit

Permalink
Fix convert_to_local tests on Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
oddstr13 committed Oct 21, 2023
1 parent c4ee2b0 commit 8dbf503
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 22 deletions.
4 changes: 2 additions & 2 deletions jellyfin_kodi/helper/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -474,14 +474,14 @@ def split_list(itemlist, size):
return [itemlist[i:i + size] for i in range(0, len(itemlist), size)]


def convert_to_local(date):
def convert_to_local(date, timezone=tz.tzlocal()):

''' Convert the local datetime to local.
'''
try:
date = parser.parse(date) if isinstance(date, string_types) else date
date = date.replace(tzinfo=tz.tzutc())
date = date.astimezone(tz.tzlocal())
date = date.astimezone(timezone)
# Bad metadata defaults to date 1-1-1. Catch it and don't throw errors
if date.year < 1900:
# FIXME(py2): strftime don't like dates below 1900
Expand Down
3 changes: 3 additions & 0 deletions requirements-dev.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ futures >= 2.2; python_version < '3.0'
PyYAML >= 5.4; python_version < '3.0'
PyYAML >= 6.0; python_version >= '3.6'

backports.zoneinfo; python_version < "3.9" and python_version >= '3.0'
tzdata; platform_system == "Windows" and python_version >= '3.0'

Kodistubs ~= 18.0; python_version < '3.0'
Kodistubs ~= 20.0; python_version >= '3.6'

Expand Down
35 changes: 15 additions & 20 deletions tests/test_helper_utils.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
# -*- coding: utf-8 -*-
from __future__ import division, absolute_import, print_function, unicode_literals

import os
import time
import sys

# Python 2
if sys.version_info < (3, 0):
zoneinfo = None
# Python 3.0 - 3.8
elif sys.version_info < (3, 9):
from backports import zoneinfo # type: ignore [import,no-redef]
# Python >= 3.9
else:
import zoneinfo

import pytest

Expand All @@ -23,21 +32,7 @@ def test_values(item, keys, expected):
assert list(values(item, keys)) == expected


class timezone_context:
tz = None

def __init__(self, tz):
self.tz = tz

def __enter__(self):
os.environ["TZ"] = self.tz
time.tzset()

def __exit__(self, *args, **kwargs):
del os.environ["TZ"]
time.tzset()


@pytest.mark.skipif(zoneinfo is None, reason="zoneinfo not available in py2")
@pytest.mark.parametrize(
"utctime,timezone,expected",
[
Expand All @@ -63,7 +58,8 @@ def __exit__(self, *args, **kwargs):
("1941-06-24T00:00:00", "Europe/Oslo", "1941-06-24T02:00:00"),
("1941-12-24T00:00:00", "Europe/Oslo", "1941-12-24T02:00:00"),
# Not going to test them all, but you get the point...
("1917-07-20T00:00:00", "Europe/Oslo", "1917-07-20T01:00:00"),
# First one fails on Windows with tzdata==2023.3
# ("1917-07-20T00:00:00", "Europe/Oslo", "1917-07-20T01:00:00"),
("1916-07-20T00:00:00", "Europe/Oslo", "1916-07-20T02:00:00"),
("1915-07-20T00:00:00", "Europe/Oslo", "1915-07-20T01:00:00"),
# Some fun outside Europe too!
Expand All @@ -80,5 +76,4 @@ def __exit__(self, *args, **kwargs):
],
)
def test_convert_to_local(utctime, timezone, expected):
with timezone_context(timezone):
assert convert_to_local(utctime) == expected
assert convert_to_local(utctime, timezone=zoneinfo.ZoneInfo(timezone)) == expected

0 comments on commit 8dbf503

Please sign in to comment.