Source code for pooch.typing
# Copyright (c) 2018 The Pooch Developers.
# Distributed under the terms of the BSD 3-Clause License.
# SPDX-License-Identifier: BSD-3-Clause
#
# This code is part of the Fatiando a Terra project (https://www.fatiando.org)
#
"""
Custom classes for type annotations
This module provides additional `PEP 484 <https://peps.python.org/pep-0484/>`_
type aliases used in ``pooch``'s codebase.
"""
import os
from typing import (
TYPE_CHECKING,
Any,
Callable,
Literal,
Optional,
Protocol,
TypedDict,
Union,
)
# Import Pooch only if TYPE_CHECKING is true to avoid circular loops at runtime
if TYPE_CHECKING:
from .. import Pooch
__all__ = [
"Action",
"Downloader",
"PathType",
"PathInputType",
"ParsedURL",
"Processor",
]
Action = Literal["download", "fetch", "update"]
PathType = Union[str, os.PathLike]
PathInputType = Union[PathType, list[PathType], tuple[PathType]]
Processor = Callable[[str, Action, Optional["Pooch"]], Any]
[docs]
class Downloader(Protocol):
"""
Class used to define the type definition for the downloader function.
"""
# pylint: disable=too-few-public-methods
[docs]
def __call__( # noqa: E704
self,
fname: str,
action: Optional[PathType],
pooch: Optional["Pooch"],
*,
check_only: Optional[bool] = None,
) -> Any: ...
[docs]
class ParsedURL(TypedDict):
"""
Type for a dictionary generated after parsing a URL.
The dictionary contains three keys: protocol, netloc and path.
"""
protocol: str
netloc: str
path: str