Fix and improve file cache control header calculation (#2486)
This commit is contained in:
parent
0e1bf89fad
commit
70382f21ba
|
@ -3,6 +3,8 @@ import os
|
||||||
import signal
|
import signal
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from typing import Awaitable
|
||||||
|
|
||||||
from multidict import CIMultiDict # type: ignore
|
from multidict import CIMultiDict # type: ignore
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,7 +53,7 @@ use_trio = sys.argv[0].endswith("hypercorn") and "trio" in sys.argv
|
||||||
if use_trio: # pragma: no cover
|
if use_trio: # pragma: no cover
|
||||||
import trio # type: ignore
|
import trio # type: ignore
|
||||||
|
|
||||||
def stat_async(path):
|
def stat_async(path) -> Awaitable[os.stat_result]:
|
||||||
return trio.Path(path).stat()
|
return trio.Path(path).stat()
|
||||||
|
|
||||||
open_async = trio.open_file
|
open_async = trio.open_file
|
||||||
|
|
|
@ -5,7 +5,7 @@ from email.utils import formatdate
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from mimetypes import guess_type
|
from mimetypes import guess_type
|
||||||
from os import path
|
from os import path
|
||||||
from pathlib import Path, PurePath
|
from pathlib import PurePath
|
||||||
from time import time
|
from time import time
|
||||||
from typing import (
|
from typing import (
|
||||||
TYPE_CHECKING,
|
TYPE_CHECKING,
|
||||||
|
@ -22,7 +22,7 @@ from typing import (
|
||||||
)
|
)
|
||||||
from urllib.parse import quote_plus
|
from urllib.parse import quote_plus
|
||||||
|
|
||||||
from sanic.compat import Header, open_async
|
from sanic.compat import Header, open_async, stat_async
|
||||||
from sanic.constants import DEFAULT_HTTP_CONTENT_TYPE
|
from sanic.constants import DEFAULT_HTTP_CONTENT_TYPE
|
||||||
from sanic.cookies import CookieJar
|
from sanic.cookies import CookieJar
|
||||||
from sanic.exceptions import SanicException, ServerError
|
from sanic.exceptions import SanicException, ServerError
|
||||||
|
@ -340,9 +340,10 @@ async def file(
|
||||||
)
|
)
|
||||||
|
|
||||||
if isinstance(last_modified, datetime):
|
if isinstance(last_modified, datetime):
|
||||||
last_modified = last_modified.timestamp()
|
last_modified = last_modified.replace(microsecond=0).timestamp()
|
||||||
elif isinstance(last_modified, Default):
|
elif isinstance(last_modified, Default):
|
||||||
last_modified = Path(location).stat().st_mtime
|
stat = await stat_async(location)
|
||||||
|
last_modified = stat.st_mtime
|
||||||
|
|
||||||
if last_modified:
|
if last_modified:
|
||||||
headers.setdefault(
|
headers.setdefault(
|
||||||
|
|
Loading…
Reference in New Issue
Block a user