regebro / tzlocal

A Python module that tries to figure out what your local timezone is

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Issue with pulling timezone in Centos 8.2 for Australia/Perth time

revansSZ opened this issue · comments

Hi Team,

Reporting an issue for pulling in localzone, is this known to the team on Centos 8?

timedatectl
Local time: Mon 2020-09-28 11:14:33 AWST
Universal time: Mon 2020-09-28 03:14:33 UTC
RTC time: Mon 2020-09-28 03:14:33
Time zone: Australia/Perth (AWST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

File "/root/xxx/env/lib64/python3.6/site-packages/tzlocal/unix.py", line 165, in get_localzone
_cache_tz = _get_localzone()
File "/root/xxx/env/lib64/python3.6/site-packages/tzlocal/unix.py", line 110, in _get_localzone
data = tzfile.readlines()
File "/usr/lib64/python3.6/codecs.py", line 321, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 44: invalid start byte

Skipping the below code block did the trick for me in tzlocal/unix.py

for filename in ('etc/sysconfig/clock', 'etc/conf.d/clock'):
tzpath = os.path.join(_root, filename)
try:
continue
with open(tzpath, 'rt') as tzfile:
data = tzfile.readlines()

Because there is an error decoding bytes in /etc/sysconfig/clock it dies. The exception is only looking for IOError and doesn't handle other error types, I added this.

    #except IOError:
    except Exception as e:
        print(e)
        # File doesn't exist or is a directory
        continue

I'll pull down the code in a bit and will submit a PR.

I have the pull request placed, here is some added detail for handling of format of /etc/sysconfig/clock in centos 8.

file -s clock
clock: symbolic link to /etc/localtime

Compare that to centos 6 which has:
file -s clock
clock: ASCII text

Hmm. Another case of a config file containing tz data instead of the timezone name. Maybe we need to handle that.