Skip to main content
`Ctrl`+`K`

# Source code for astropy.io.typing

    # Licensed under a 3-clause BSD style license - see LICENSE.rst
    """Type annotations for ``astropy.io``.

    These are type annotations for I/O-related functions and classes. Some of the type
    objects can also be used as runtime-checkable :class:`~typing.Protocol` objects.
    """

    __all__ = ["PathLike", "ReadableFileLike", "WriteableFileLike"]

    import os
    from typing import Protocol, TypeAlias, TypeVar, runtime_checkable

    _T_co = TypeVar("_T_co", covariant=True)
    _T_contra = TypeVar("_T_contra", contravariant=True)

    PathLike: TypeAlias = str | bytes | os.PathLike
    """Type alias for a path-like object.

    This is a union of :class:`str`, :class:`bytes`, and :class:`~os.PathLike`.
    """

    @runtime_checkable
    class ReadableFileLike(Protocol[_T_co]):
        """A file-like object that supports reading with a method ``read``.

        This is a :class:`~typing.Protocol` that can be used to annotate file-like
        objects. It is also runtime-checkable and can be used with :func:`isinstance`.
        See :func:`~typing.runtime_checkable` for more information about how runtime
        checking with Protocols works.
        """

        def read(self) -> _T_co: ...

    @runtime_checkable
    class WriteableFileLike(Protocol[_T_contra]):
        """A file-like object that supports writing with a method ``write``.

        This is a :class:`~typing.Protocol` that can be used to annotate file-like
        objects. It is also runtime-checkable and can be used with :func:`isinstance`.
        See :func:`~typing.runtime_checkable` for more information about how runtime
        checking with Protocols works.
        """

        def write(self, data: _T_contra) -> None: ...