Source code for PyU4V.utils.time_handler
# Copyright (c) 2020 Dell Inc. or its subsidiaries.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""time_handler.py"""
import logging
import time
from PyU4V.utils import exception
ONE_YEAR = 365 * 24 * 2600
LOG = logging.getLogger(__name__)
[docs]
def format_time_input(time_in, return_seconds=False,
return_milliseconds=False):
"""Format timestamp as seconds/milliseconds for use in REST requests.
:param time_in: timestamp -- int/float
:param return_seconds: return time in seconds -- bool
:param return_milliseconds: return time in milliseconds -- bool
:returns: timestamp -- int
"""
# Validate input params
if not isinstance(time_in, (int, float)):
msg = ('Invalid input: {i}, input must be of type int or float, input '
'is {f}.'.format(i=time_in, f=type(time_in)))
LOG.error(msg)
raise exception.InvalidInputException(msg)
if not any([return_seconds, return_milliseconds]) or (
all([return_seconds, return_milliseconds])):
msg = ('Invalid input param selection, one of return_seconds or '
'return_milliseconds must be True.')
LOG.error(msg)
raise exception.InvalidInputException(msg)
# Determine if the time_in is in format seconds or milliseconds since
# epoch. We can deduce that it is milliseconds if the time input is greater
# than the current time in seconds since epoch. There are edge cases,
# especially if date was derived from a string representation without
# timezone info, or the clocks are being changed. This is mitigated by
# applying an offset of one year to the calculation. Millisecond times are
# an order of magnitude greater so this is safe.
time_sec, time_milli = False, False
if time_in > time.time() + ONE_YEAR:
time_milli = True
else:
time_sec = True
if time_sec and return_milliseconds:
return int(time_in) * 1000
elif time_milli and return_seconds:
return int(time_in) // 1000
else:
return int(time_in)