aio-libs / aio-libs/aiohttp

Override Last-Modified header in web.FileResponse

Abierto
#5,545 0 comentarios 3 reacciones 0 asignados Ver en GitHub
enhancement
Lenguaje dominante
Python
Estrellas
16.5k
Forks
2.4k
Merge medio
17 h 22 min
PR fusionados (30 d)
212

Descripción

🐣 **Is your feature request related to a problem? Please describe.**
`web.FileResponse` currently does not allow overriding "Last-Modified" header via `last_modified` attribute (while parent `web.StreamResponse` allows it).
`FileResponse` instead always sets actual file mtime even if last_modified attribute has been set before.

💡 **Describe the solution you'd like**
Change line: https://github.com/aio-libs/aiohttp/blob/master/aiohttp/web_fileresponse.py#L148 to:
```
if self.last_modified is None:
self.last_modified = st.st_mtime
```
So that `self.last_modified` does not get reset by `prepare()` method if it has been set explicitly.

❓ **Describe alternatives you've considered**
Also considered setting header directly via `headers={"Last-Modified": ...}` but it doesn't work (obviously it is not the correct way).

📋 **Additional context**
--
In order to also mimic "Last-Modified" removal (like in web.StreamResponse) extra steps are required:
* Insert empty last_modified header in init: `self._headers[hdrs.LAST_MODIFIED] = None`
* Extend check to see if it has been explicitly removed (same line 148):
```
if self.last_modified is None and hdrs.LAST_MODIFIED in self._headers:
self.last_modified = st.st_mtime
```

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.