diff --git a/arrow/__init__.py b/arrow/__init__.py index bc597097..3bda87eb 100644 --- a/arrow/__init__.py +++ b/arrow/__init__.py @@ -1,5 +1,5 @@ from ._version import __version__ -from .api import get, now, utcnow +from .api import get, now, timezone, utcnow from .arrow import Arrow from .factory import ArrowFactory from .formatter import ( @@ -23,6 +23,7 @@ "get", "now", "utcnow", + "timezone", "Arrow", "ArrowFactory", "FORMAT_ATOM", diff --git a/arrow/api.py b/arrow/api.py index d8ed24b9..07e12cd8 100644 --- a/arrow/api.py +++ b/arrow/api.py @@ -112,6 +112,10 @@ def now(tz: Optional[TZ_EXPR] = None) -> Arrow: now.__doc__ = _factory.now.__doc__ +def timezone(zone_name: str) -> dt_tzinfo: + return _factory.timezone(zone_name) + + def factory(type: Type[Arrow]) -> ArrowFactory: """Returns an :class:`.ArrowFactory` for the specified :class:`Arrow ` or derived type. @@ -123,4 +127,4 @@ def factory(type: Type[Arrow]) -> ArrowFactory: return ArrowFactory(type) -__all__ = ["get", "utcnow", "now", "factory"] +__all__ = ["get", "utcnow", "now", "factory", "timezone"] diff --git a/arrow/factory.py b/arrow/factory.py index aad4af8b..0727850d 100644 --- a/arrow/factory.py +++ b/arrow/factory.py @@ -346,3 +346,10 @@ def now(self, tz: Optional[TZ_EXPR] = None) -> Arrow: tz = parser.TzinfoParser.parse(tz) return self.type.now(tz) + + @staticmethod + def timezone(zone_name: str) -> dt_tzinfo: + """docstring here""" + zone = parser.TzinfoParser.parse(zone_name) + + return zone diff --git a/tests/test_api.py b/tests/test_api.py index 5576aaf8..bc0ea107 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -25,3 +25,12 @@ class MockCustomArrowClass(arrow.Arrow): assert isinstance(result, arrow.factory.ArrowFactory) assert isinstance(result.utcnow(), MockCustomArrowClass) + + def test_timezone(self, mocker): + mocker.patch( + "arrow.api._factory.timezone", + zone_name="zone_name", + return_value="timezone", + ) + + assert arrow.api.timezone("zone_name") == "timezone" diff --git a/tests/test_factory.py b/tests/test_factory.py index 53bba20d..d1cd86e7 100644 --- a/tests/test_factory.py +++ b/tests/test_factory.py @@ -434,3 +434,15 @@ def test_tzinfo(self): def test_tz_str(self): assert_datetime_equality(self.factory.now("EST"), datetime.now(tz.gettz("EST"))) + + +@pytest.mark.usefixtures("arrow_factory") +class TestTimezone: + def test_timezone(self): + + assert self.factory.timezone("Australia/Darwin") == tz.gettz("Australia/Darwin") + + def test_bad_input(self): + + with pytest.raises(ParserError): + self.factory.timezone("absolute garbage#!?")