76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
|
from ._common import pytz_imported
|
||
|
|
||
|
|
||
|
class PytzUsageWarning(RuntimeWarning):
|
||
|
"""Warning raised when accessing features specific to ``pytz``'s interface.
|
||
|
|
||
|
This warning is used to direct users of ``pytz``-specific features like the
|
||
|
``localize`` and ``normalize`` methods towards using the standard
|
||
|
``tzinfo`` interface, so that these shims can be replaced with one of the
|
||
|
underlying libraries they are wrapping.
|
||
|
"""
|
||
|
|
||
|
|
||
|
class UnknownTimeZoneError(KeyError):
|
||
|
"""Raised when no time zone is found for a specified key."""
|
||
|
|
||
|
|
||
|
class InvalidTimeError(Exception):
|
||
|
"""The base class for exceptions related to folds and gaps."""
|
||
|
|
||
|
|
||
|
class AmbiguousTimeError(InvalidTimeError):
|
||
|
"""Exception raised when ``is_dst=None`` for an ambiguous time (fold)."""
|
||
|
|
||
|
|
||
|
class NonExistentTimeError(InvalidTimeError):
|
||
|
"""Exception raised when ``is_dst=None`` for a non-existent time (gap)."""
|
||
|
|
||
|
|
||
|
PYTZ_BASE_ERROR_MAPPING = {}
|
||
|
|
||
|
|
||
|
def _make_pytz_derived_errors(
|
||
|
InvalidTimeError_=InvalidTimeError,
|
||
|
AmbiguousTimeError_=AmbiguousTimeError,
|
||
|
NonExistentTimeError_=NonExistentTimeError,
|
||
|
UnknownTimeZoneError_=UnknownTimeZoneError,
|
||
|
):
|
||
|
if PYTZ_BASE_ERROR_MAPPING or not pytz_imported():
|
||
|
return
|
||
|
|
||
|
import pytz
|
||
|
|
||
|
class InvalidTimeError(InvalidTimeError_, pytz.InvalidTimeError):
|
||
|
pass
|
||
|
|
||
|
class AmbiguousTimeError(AmbiguousTimeError_, pytz.AmbiguousTimeError):
|
||
|
pass
|
||
|
|
||
|
class NonExistentTimeError(
|
||
|
NonExistentTimeError_, pytz.NonExistentTimeError
|
||
|
):
|
||
|
pass
|
||
|
|
||
|
class UnknownTimeZoneError(
|
||
|
UnknownTimeZoneError_, pytz.UnknownTimeZoneError
|
||
|
):
|
||
|
pass
|
||
|
|
||
|
PYTZ_BASE_ERROR_MAPPING.update(
|
||
|
{
|
||
|
InvalidTimeError_: InvalidTimeError,
|
||
|
AmbiguousTimeError_: AmbiguousTimeError,
|
||
|
NonExistentTimeError_: NonExistentTimeError,
|
||
|
UnknownTimeZoneError_: UnknownTimeZoneError,
|
||
|
}
|
||
|
)
|
||
|
|
||
|
|
||
|
def get_exception(exc_type, msg):
|
||
|
_make_pytz_derived_errors()
|
||
|
|
||
|
out_exc_type = PYTZ_BASE_ERROR_MAPPING.get(exc_type, exc_type)
|
||
|
|
||
|
return out_exc_type(msg)
|