Skip to content

Commit

Permalink
fix(statics): handle 404 errors for static files (#1006)
Browse files Browse the repository at this point in the history
(cherry picked from commit a77ee01)
  • Loading branch information
frascuchon committed Jan 20, 2022
1 parent a890e17 commit f4b656a
Showing 1 changed file with 16 additions and 4 deletions.
20 changes: 16 additions & 4 deletions src/rubrix/server/commons/static_rewrite.py
Expand Up @@ -12,8 +12,10 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import Union

from fastapi.staticfiles import StaticFiles
from starlette.exceptions import HTTPException
from starlette.responses import Response
from starlette.types import Scope

Expand All @@ -22,7 +24,17 @@ class RewriteStaticFiles(StaticFiles):
"""Simple server rewrite implementation for SPI apps"""

async def get_response(self, path: str, scope: Scope) -> Response:
response = await super().get_response(path, scope)
if self.html and response.status_code == 404:
response = await super().get_response(path="", scope=scope)
return response
try:
response = await super().get_response(path, scope)
return await self._handle_response(response, scope)
except HTTPException as ex:
return await self._handle_response(ex, scope)

async def _handle_response(
self, response_or_error: Union[Response, HTTPException], scope
):
if self.html and (response_or_error.status_code == 404):
return await super().get_response(path="", scope=scope)
if isinstance(response_or_error, HTTPException):
raise response_or_error
return response_or_error

0 comments on commit f4b656a

Please sign in to comment.