Skip to content

Commit ff2feff

Browse files
authored
dateutil.tz.tz: Replace IO with protocols (#7717)
1 parent 7576c5e commit ff2feff

File tree

1 file changed

+16
-8
lines changed
  • stubs/python-dateutil/dateutil/tz

1 file changed

+16
-8
lines changed

stubs/python-dateutil/dateutil/tz/tz.pyi

+16-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
import datetime
2-
from typing import IO, Any, TypeVar
3-
from typing_extensions import TypeAlias
2+
from typing import Any, Protocol, TypeVar
3+
from typing_extensions import Literal
44

55
from ..relativedelta import relativedelta
66
from ._common import _tzinfo as _tzinfo, enfold as enfold, tzname_in_python2 as tzname_in_python2, tzrangebase as tzrangebase
77

8-
# TODO: _FileObj is used differently in classes below. Some need a byte stream,
9-
# some a str stream.
10-
_FileObj: TypeAlias = str | IO[Any]
118
_DT = TypeVar("_DT", bound=datetime.datetime)
129

1310
ZERO: datetime.timedelta
@@ -56,8 +53,14 @@ class _ttinfo:
5653
__hash__: Any
5754
def __ne__(self, other): ...
5855

56+
class _TZFileReader(Protocol):
57+
# optional attribute:
58+
# name: str
59+
def read(self, __size: int) -> bytes: ...
60+
def seek(self, __target: int, __whence: Literal[1]) -> object: ...
61+
5962
class tzfile(_tzinfo):
60-
def __init__(self, fileobj: _FileObj, filename: str | None = ...) -> None: ...
63+
def __init__(self, fileobj: str | _TZFileReader, filename: str | None = ...) -> None: ...
6164
def is_ambiguous(self, dt: datetime.datetime | None, idx: int | None = ...) -> bool: ...
6265
def utcoffset(self, dt: datetime.datetime | None) -> datetime.timedelta | None: ...
6366
def dst(self, dt: datetime.datetime | None) -> datetime.timedelta | None: ...
@@ -84,12 +87,17 @@ class tzrange(tzrangebase):
8487

8588
class tzstr(tzrange):
8689
hasdst: bool
87-
def __init__(self, s: bytes | _FileObj, posix_offset: bool = ...) -> None: ...
90+
def __init__(self, s: str, posix_offset: bool = ...) -> None: ...
8891
@classmethod
8992
def instance(cls, name, offset) -> tzoffset: ...
9093

94+
class _ICalReader(Protocol):
95+
# optional attribute:
96+
# name: str
97+
def read(self) -> str: ...
98+
9199
class tzical:
92-
def __init__(self, fileobj: _FileObj) -> None: ...
100+
def __init__(self, fileobj: str | _ICalReader) -> None: ...
93101
def keys(self): ...
94102
def get(self, tzid: Any | None = ...): ...
95103

0 commit comments

Comments
 (0)