usse/scrape/venv/lib/python3.10/site-packages/geopy/timezone.py

99 lines
2.4 KiB
Python
Raw Normal View History

2023-12-22 14:26:01 +00:00
from geopy.exc import GeocoderParseError
try:
import pytz
pytz_available = True
except ImportError:
pytz_available = False
__all__ = (
"Timezone",
)
def ensure_pytz_is_installed():
if not pytz_available:
raise ImportError(
'pytz must be installed in order to locate timezones. '
'If geopy has been installed with `pip`, then pytz can be '
'installed with `pip install "geopy[timezone]"`.'
)
def from_timezone_name(timezone_name, raw):
ensure_pytz_is_installed()
try:
pytz_timezone = pytz.timezone(timezone_name)
except pytz.UnknownTimeZoneError:
raise GeocoderParseError(
"pytz could not parse the timezone identifier (%s) "
"returned by the service." % timezone_name
)
except KeyError:
raise GeocoderParseError(
"geopy could not find a timezone in this response: %s" %
raw
)
return Timezone(pytz_timezone, raw)
def from_fixed_gmt_offset(gmt_offset_hours, raw):
ensure_pytz_is_installed()
pytz_timezone = pytz.FixedOffset(gmt_offset_hours * 60)
return Timezone(pytz_timezone, raw)
class Timezone:
"""
Contains a parsed response for a timezone request, which is
implemented in few geocoders which provide such lookups.
"""
__slots__ = ("_pytz_timezone", "_raw")
def __init__(self, pytz_timezone, raw):
self._pytz_timezone = pytz_timezone
self._raw = raw
@property
def pytz_timezone(self):
"""
pytz timezone instance.
:rtype: :class:`pytz.tzinfo.BaseTzInfo`
"""
return self._pytz_timezone
@property
def raw(self):
"""
Timezone's raw, unparsed geocoder response. For details on this,
consult the service's documentation.
:rtype: dict
"""
return self._raw
def __str__(self):
return str(self._pytz_timezone)
def __repr__(self):
return "Timezone(%s)" % repr(self.pytz_timezone)
def __getstate__(self):
return self._pytz_timezone, self._raw
def __setstate__(self, state):
self._pytz_timezone, self._raw = state
def __eq__(self, other):
return (
isinstance(other, Timezone) and
self._pytz_timezone == other._pytz_timezone and
self.raw == other.raw
)
def __ne__(self, other):
return not (self == other)