Source code for abstract_api.timezone.timezone_conversion_response
from functools import cached_property
from typing import Optional
import requests
from ..core.bases import JSONResponse
from ..core.mixins import NestedEntitiesMixin
from ._response_fields import CONVERSION_RESPONSE_FIELDS
[docs]
class Timezone:
"""Timezone entity in timezone conversion response.
Used to represent base and target location timezones.
"""
def __init__(
self,
datetime: str,
timezone_name: str,
timezone_location: str,
timezone_abbreviation: str,
gmt_offset: int,
is_dst: bool,
requested_location: str,
latitude: float,
longitude: float
) -> None:
"""Initializes a new Timezone."""
self._datetime = datetime
self._timezone_name = timezone_name
self._timezone_location = timezone_location
self._timezone_abbreviation = timezone_abbreviation
self._gmt_offset = gmt_offset
self._is_dst = is_dst
self._requested_location = requested_location
self._latitude = latitude
self._longitude = longitude
@property
def datetime(self) -> Optional[str]:
"""The current date and time."""
return self._datetime
@property
def timezone_name(self) -> Optional[str]:
"""Timezone's name from IANA Time Zone Database.
Read more: https://www.iana.org/time-zones
"""
return self._timezone_name
@property
def timezone_location(self) -> Optional[str]:
"""Timezone's location."""
return self._timezone_location
@property
def timezone_abbreviation(self) -> Optional[str]:
"""Timezone's abbreviation, also from IANA Time Zone Database."""
return self._timezone_abbreviation
@property
def gmt_offset(self) -> Optional[int]:
"""Timezone's offset from Greenwich Mean Time (GMT).
Read more: https://greenwichmeantime.com/what-is-gmt
"""
return self._gmt_offset
@property
def is_dst(self) -> Optional[bool]:
"""Whether the location is currently in Daylight Savings Time (DST).
Read more: https://wikipedia.org/wiki/Daylight_saving_time
"""
return self._is_dst
@property
def requested_location(self) -> Optional[str]:
"""The location from the request."""
return self._requested_location
@property
def latitude(self) -> Optional[float]:
"""Decimal of the longitude found for the requested_location."""
return self._latitude
@property
def longitude(self) -> Optional[float]:
"""Decimal of the longitude found for the requested_location."""
return self._longitude
[docs]
class TimezoneConversionResponse(NestedEntitiesMixin, JSONResponse):
"""Timezone conversion service response."""
_nested_entities = {
"base_location": Timezone,
"target_location": Timezone
}
def __init__(self, response: requests.models.Response) -> None:
"""Initializes a new TimezoneConversionResponse."""
super().__init__(response, CONVERSION_RESPONSE_FIELDS)
@cached_property
def base_location(self) -> Timezone:
"""The time and timezone details of base location from request."""
return self._get_response_field("base_location")
@cached_property
def target_location(self) -> Timezone:
"""The time and timezone details of target location from request."""
return self._get_response_field("target_location")