From c61f2ca609ae0164627456220f23e72d3be6e2dd Mon Sep 17 00:00:00 2001 From: Eugene Molotov Date: Fri, 11 Sep 2020 11:02:55 +0500 Subject: [PATCH] Revert "Use os.PathLike in StaticFiles for directory (#1007)" This reverts commit 93878323e57e0bab92b4622849c67f5a7c96b24e. --- docs/staticfiles.md | 4 +--- starlette/responses.py | 14 ++------------ starlette/staticfiles.py | 10 ++++------ tests/test_staticfiles.py | 14 -------------- 4 files changed, 7 insertions(+), 35 deletions(-) diff --git a/docs/staticfiles.md b/docs/staticfiles.md index d8786af4d..aabc67d90 100644 --- a/docs/staticfiles.md +++ b/docs/staticfiles.md @@ -5,7 +5,7 @@ Starlette also includes a `StaticFiles` class for serving files in a given direc Signature: `StaticFiles(directory=None, packages=None, check_dir=True)` -* `directory` - A string or [os.Pathlike][pathlike] denoting a directory path. +* `directory` - A string denoting a directory path. * `packages` - A list of strings of python packages. * `html` - Run in HTML mode. Automatically loads `index.html` for directories if such file exist. * `check_dir` - Ensure that the directory exists upon instantiation. Defaults to `True`. @@ -51,5 +51,3 @@ app = Starlette(routes=routes) You may prefer to include static files directly inside the "static" directory rather than using Python packaging to include static files, but it can be useful for bundling up reusable components. - -[pathlike]: https://docs.python.org/3/library/os.html#os.PathLike diff --git a/starlette/responses.py b/starlette/responses.py index 4772f6ec6..bef3bc593 100644 --- a/starlette/responses.py +++ b/starlette/responses.py @@ -3,10 +3,9 @@ import json import os import stat -import sys import typing from email.utils import formatdate -from mimetypes import guess_type as mimetypes_guess_type +from mimetypes import guess_type from urllib.parse import quote, quote_plus from async_generator import isasyncgen @@ -32,15 +31,6 @@ ujson = None # type: ignore -# Compatibility wrapper for `mimetypes.guess_type` to support `os.PathLike` on typing.Tuple[typing.Optional[str], typing.Optional[str]]: - if sys.version_info < (3, 8): # pragma: no cover - url = os.fspath(url) - return mimetypes_guess_type(url, strict) - - class Response: media_type = None charset = "utf-8" @@ -250,7 +240,7 @@ class FileResponse(Response): def __init__( self, - path: typing.Union[str, "os.PathLike[str]"], + path: str, status_code: int = 200, headers: dict = None, media_type: str = None, diff --git a/starlette/staticfiles.py b/starlette/staticfiles.py index 467b01b6e..99e42d946 100644 --- a/starlette/staticfiles.py +++ b/starlette/staticfiles.py @@ -15,8 +15,6 @@ ) from starlette.types import Receive, Scope, Send -PathLike = typing.Union[str, "os.PathLike[str]"] - class NotModifiedResponse(Response): NOT_MODIFIED_HEADERS = ( @@ -43,7 +41,7 @@ class StaticFiles: def __init__( self, *, - directory: PathLike = None, + directory: str = None, packages: typing.List[str] = None, html: bool = False, check_dir: bool = True @@ -57,8 +55,8 @@ def __init__( raise RuntimeError("Directory '{}' does not exist".format(directory)) def get_directories( - self, directory: PathLike = None, packages: typing.List[str] = None - ) -> typing.List[PathLike]: + self, directory: str = None, packages: typing.List[str] = None + ) -> typing.List[str]: """ Given `directory` and `packages` arguments, return a list of all the directories that should be used for serving static files from. @@ -164,7 +162,7 @@ async def lookup_path( def file_response( self, - full_path: PathLike, + full_path: str, stat_result: os.stat_result, scope: Scope, status_code: int = 200, diff --git a/tests/test_staticfiles.py b/tests/test_staticfiles.py index e2cae08f1..9e8101bc8 100644 --- a/tests/test_staticfiles.py +++ b/tests/test_staticfiles.py @@ -1,6 +1,5 @@ import asyncio import os -import pathlib import time import pytest @@ -24,19 +23,6 @@ def test_staticfiles(tmpdir): assert response.text == "" -def test_staticfiles_with_pathlib(tmpdir): - base_dir = pathlib.Path(tmpdir) - path = base_dir / "example.txt" - with open(path, "w") as file: - file.write("") - - app = StaticFiles(directory=base_dir) - client = TestClient(app) - response = client.get("/example.txt") - assert response.status_code == 200 - assert response.text == "" - - def test_staticfiles_head_with_middleware(tmpdir): """ see https://github.com/encode/starlette/pull/935