def load_handler(
    endpoint: str,
    path: str,
    proxy: Optional[str] = None,
    names: Optional[List] = None,
    dtype: Optional[dict] = None,
    parse_dates: Optional[List] = None,
    default_df: Optional[pd.DataFrame] = None,
) -> pd.DataFrame:
    """
    Load a single CSV file into a DataFrame
    """

    try:
        handlers = []

        # Set a proxy
        if proxy:
            handlers.append(ProxyHandler({"http": proxy, "https": proxy}))

        # Read CSV file from Meteostat endpoint
        with build_opener(*handlers).open(Request(endpoint + path)) as response:
            # Decompress the content
            with GzipFile(fileobj=BytesIO(response.read()), mode="rb") as file:
                df = pd.read_csv(
                    file,
                    names=names,
                    dtype=dtype,
                    parse_dates=parse_dates,
                )

    except (FileNotFoundError, HTTPError):
        df = default_df if default_df is not None else pd.DataFrame(columns=names)

        # Display warning
        warn(f"Cannot load {path} from {endpoint}")

    # Return DataFrame
    return df

    Load a single CSV file into a DataFrame
    
meteostat/core/loader.py