Skip to content

Commit

Permalink
Deprecate "stream" helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
gi0baro committed Oct 9, 2024
1 parent c16034d commit 984115a
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 30 deletions.
33 changes: 5 additions & 28 deletions emmett/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,50 +9,27 @@
:license: BSD-3-Clause
"""

import os
import re
from typing import Any, List, Optional, Tuple, Union

from emmett_core._internal import deprecated
from emmett_core.http.helpers import abort as _abort
from emmett_core.http.response import HTTPFileResponse, HTTPIOResponse
from pydal.exceptions import NotAuthorizedException, NotFoundException

from .ctx import current
from .html import HtmlTag, tag


_re_dbstream = re.compile(r"(?P<table>.*?)\.(?P<field>.*?)\..*")


def abort(code: int, body: str = ""):
_abort(current, code, body)


@deprecated("stream_file", "Response.wrap_file")
def stream_file(path: str):
full_path = os.path.join(current.app.root_path, path)
raise HTTPFileResponse(full_path, headers=current.response.headers, cookies=current.response.cookies)
raise current.response.wrap_file(path)


@deprecated("stream_dbfile", "Response.wrap_dbfile")
def stream_dbfile(db: Any, name: str):
items = _re_dbstream.match(name)
if not items:
abort(404)
table_name, field_name = items.group("table"), items.group("field")
try:
field = db[table_name][field_name]
except AttributeError:
abort(404)
try:
filename, path_or_stream = field.retrieve(name, nameonly=True)
except NotAuthorizedException:
abort(403)
except NotFoundException:
abort(404)
except IOError:
abort(404)
if isinstance(path_or_stream, str):
raise HTTPFileResponse(path_or_stream, headers=current.response.headers, cookies=current.response.cookies)
raise HTTPIOResponse(path_or_stream, headers=current.response.headers, cookies=current.response.cookies)
raise current.response.wrap_dbfile(db, name)


def flash(message: str, category: str = "message"):
Expand Down
35 changes: 34 additions & 1 deletion emmett/wrappers/response.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,24 @@
:license: BSD-3-Clause
"""

import os
import re
from typing import Any

from emmett_core.http.response import HTTPFileResponse, HTTPResponse
from emmett_core.http.wrappers.response import Response as _Response
from emmett_core.utils import cachedprop
from pydal.exceptions import NotAuthorizedException, NotFoundException

from ..ctx import current
from ..datastructures import sdict
from ..helpers import get_flashed_messages
from ..helpers import abort, get_flashed_messages
from ..html import htmlescape


_re_dbstream = re.compile(r"(?P<table>.*?)\.(?P<field>.*?)\..*")


class Response(_Response):
__slots__ = ()

Expand All @@ -38,3 +46,28 @@ def _meta_tmpl(self):

def _meta_tmpl_prop(self):
return [(key, htmlescape(val)) for key, val in self.meta_prop.items()]

def wrap_file(self, path) -> HTTPFileResponse:
path = os.path.join(current.app.root_path, path)
return super().wrap_file(path)

def wrap_dbfile(self, db, name: str) -> HTTPResponse:
items = _re_dbstream.match(name)
if not items:
abort(404)
table_name, field_name = items.group("table"), items.group("field")
try:
field = db[table_name][field_name]
except AttributeError:
abort(404)
try:
filename, path_or_stream = field.retrieve(name, nameonly=True)
except NotAuthorizedException:
abort(403)
except NotFoundException:
abort(404)
except IOError:
abort(404)
if isinstance(path_or_stream, str):
return self.wrap_file(path_or_stream)
return self.wrap_io(path_or_stream)
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -149,4 +149,4 @@ dev-dependencies = [
]

[tool.uv.sources]
emmett-core = { git = "https://github.com/emmett-framework/core", rev = "ab79ed4" }
emmett-core = { git = "https://github.com/emmett-framework/core", rev = "a0f8ec8" }

0 comments on commit 984115a

Please sign in to comment.