Fix formatting timezone offset

Displaying the offset in seconds makes very little sense. We should
adhere to ISO 8601 format of `+HH:MM` which is much easier to
understand.

Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
Lubomír Sedlář 2017-09-11 10:23:07 +02:00
parent 87884b6412
commit 6a425ee891
3 changed files with 41 additions and 3 deletions

View File

@ -252,6 +252,7 @@ def main():
def run_compose(compose, create_latest_link=True, latest_link_status=None):
import pungi.phases
import pungi.metadata
import pungi.util
errors = []
@ -262,9 +263,7 @@ def run_compose(compose, create_latest_link=True, latest_link_status=None):
compose.log_info("Working directory: %s" % os.getcwd())
compose.log_info("Command line: %s" % " ".join([pipes.quote(arg) for arg in sys.argv]))
compose.log_info("Compose top directory: %s" % compose.topdir)
is_dst = time.daylight and time.localtime().tm_isdst > 0
compose.log_info("Current timezone offset: %s"
% time.altzone if is_dst else time.timezone)
compose.log_info("Current timezone offset: %s" % pungi.util.get_tz_offset())
compose.read_variants()
# dump the config file

View File

@ -802,3 +802,12 @@ def retry(timeout=120, interval=30, wait_on=Exception):
@retry(wait_on=RuntimeError)
def git_ls_remote(baseurl, ref):
return run(['git', 'ls-remote', baseurl, ref])
def get_tz_offset():
"""Return a string describing current local timezone offset."""
is_dst = time.daylight and time.localtime().tm_isdst > 0
offset = time.altzone if is_dst else time.timezone
hours = offset / 3600
minutes = (offset / 60) % 60
return "%+03d:%02d" % (hours, minutes)

View File

@ -591,5 +591,35 @@ class TestVersionGenerator(unittest.TestCase):
self.assertEqual(util.version_generator(compose, None), None)
class TestTZOffset(unittest.TestCase):
@mock.patch('time.daylight', new=False)
@mock.patch('time.altzone', new=7200)
@mock.patch('time.timezone', new=3600)
@mock.patch('time.localtime', new=lambda: mock.Mock(tm_isdst=0))
def test_zone_without_dst(self):
self.assertEqual(util.get_tz_offset(), "+01:00")
@mock.patch('time.daylight', new=True)
@mock.patch('time.altzone', new=7200)
@mock.patch('time.timezone', new=3600)
@mock.patch('time.localtime', new=lambda: mock.Mock(tm_isdst=0))
def test_with_active_dst(self):
self.assertEqual(util.get_tz_offset(), "+01:00")
@mock.patch('time.daylight', new=True)
@mock.patch('time.altzone', new=9000)
@mock.patch('time.timezone', new=3600)
@mock.patch('time.localtime', new=lambda: mock.Mock(tm_isdst=1))
def test_with_inactive_dst(self):
self.assertEqual(util.get_tz_offset(), "+02:30")
@mock.patch('time.daylight', new=False)
@mock.patch('time.altzone', new=0)
@mock.patch('time.timezone', new=0)
@mock.patch('time.localtime', new=lambda: mock.Mock(tm_isdst=0))
def test_utc(self):
self.assertEqual(util.get_tz_offset(), "+00:00")
if __name__ == "__main__":
unittest.main()