本文整理汇总了Python中werkzeug.wrappers.Response.set_etag方法的典型用法代码示例。如果您正苦于以下问题:Python Response.set_etag方法的具体用法?Python Response.set_etag怎么用?Python Response.set_etag使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类werkzeug.wrappers.Response
的用法示例。
在下文中一共展示了Response.set_etag方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_if_none_match
# 需要导入模块: from werkzeug.wrappers import Response [as 别名]
# 或者: from werkzeug.wrappers.Response import set_etag [as 别名]
def test_if_none_match(self):
r = Response()
with a.test_request_context(headers=[("if-none-match", '"foo"')]):
r.set_etag('foo')
self.assertTrue(v.if_none_match(r))
r.status_code = 400
self.assertFalse(v.if_none_match(r))
r = Response()
r.set_etag('bar')
self.assertFalse(v.if_none_match(r))
示例2: serve_full_file_request
# 需要导入模块: from werkzeug.wrappers import Response [as 别名]
# 或者: from werkzeug.wrappers.Response import set_etag [as 别名]
def serve_full_file_request(request, headers, file, callbacks=[]):
headers.update({
'Content-Length': file.length,
'Accept-Ranges': 'bytes',
})
file_iterator = wrap_file(request.environ, file)
response = Response(ClosingIterator(file_iterator, callbacks=callbacks),
direct_passthrough=True, mimetype=file.content_type,
headers=headers)
response.last_modified = file.uploadDate
response.set_etag(file.md5)
return response
示例3: wsgi_app
# 需要导入模块: from werkzeug.wrappers import Response [as 别名]
# 或者: from werkzeug.wrappers.Response import set_etag [as 别名]
def wsgi_app(self, environ, start_response):
"""Execute this instance as a WSGI application.
See the PEP for the meaning of parameters. The separation of
__call__ and wsgi_app eases the insertion of middlewares.
"""
original_response = Response.from_app(self.wrapped_app, environ)
# We send relative locations to play nice with reverse proxies
# but Werkzeug by default turns them into absolute ones.
original_response.autocorrect_location_header = False
if self.DIGEST_HEADER not in original_response.headers:
return original_response
digest = original_response.headers.pop(self.DIGEST_HEADER)
filename = original_response.headers.pop(self.FILENAME_HEADER, None)
mimetype = original_response.mimetype
try:
fobj = self.file_cacher.get_file(digest)
size = self.file_cacher.get_size(digest)
except KeyError:
return NotFound()
except TombstoneError:
return ServiceUnavailable()
request = Request(environ)
request.encoding_errors = "strict"
response = Response()
response.status_code = 200
response.mimetype = mimetype
if filename is not None:
response.headers.add(
"Content-Disposition", "attachment", filename=filename)
response.set_etag(digest)
response.cache_control.max_age = SECONDS_IN_A_YEAR
response.cache_control.private = True
response.response = \
wrap_file(environ, fobj, buffer_size=FileCacher.CHUNK_SIZE)
response.direct_passthrough = True
try:
# This takes care of conditional and partial requests.
response.make_conditional(
request, accept_ranges=True, complete_length=size)
except HTTPException as exc:
return exc
return response
示例4: send_file
# 需要导入模块: from werkzeug.wrappers import Response [as 别名]
# 或者: from werkzeug.wrappers.Response import set_etag [as 别名]
def send_file(request, filename):
mimetype = mimetypes.guess_type(filename)[0]
if mimetype is None:
mimetype = 'application/octet-stream'
headers = Headers()
try:
file = open(filename, 'rb')
mtime = os.path.getmtime(filename)
headers['Content-Length'] = os.path.getsize(filename)
except (IOError, OSError):
raise NotFound()
rewritten = False
if mimetype == 'text/html':
rewritten = True
file = rewrite_html_for_editing(file,
edit_url=posixpath.join('/', request.script_root, 'admin/edit'))
del headers['Content-Length']
headers['Cache-Control'] = 'no-cache, no-store'
data = wrap_file(request.environ, file)
rv = Response(data, mimetype=mimetype, headers=headers,
direct_passthrough=True)
if not rewritten:
# if we know the file modification date, we can store it as
# the time of the last modification.
if mtime is not None:
rv.last_modified = int(mtime)
rv.cache_control.public = True
try:
rv.set_etag('lektor-%s-%s-%s' % (
os.path.getmtime(filename),
os.path.getsize(filename),
adler32(
filename.encode('utf-8') if isinstance(filename, basestring)
else filename
) & 0xffffffff,
))
except OSError:
pass
return rv
示例5: _make_wrapped_file_response
# 需要导入模块: from werkzeug.wrappers import Response [as 别名]
# 或者: from werkzeug.wrappers.Response import set_etag [as 别名]
def _make_wrapped_file_response(self, environ, request, path):
logger.debug("Serving %s" % path)
# Check if we can return a 304 status code.
mtime = os.path.getmtime(path)
etag_str = '%s$$%s' % (path, mtime)
etag = hashlib.md5(etag_str.encode('utf8')).hexdigest()
if etag in request.if_none_match:
response = Response()
response.status_code = 304
return response
wrapper = wrap_file(environ, open(path, 'rb'))
response = Response(wrapper)
_, ext = os.path.splitext(path)
response.set_etag(etag)
response.last_modified = datetime.datetime.fromtimestamp(mtime)
response.mimetype = self._mimetype_map.get(
ext.lstrip('.'), 'text/plain')
return response
示例6: make_wrapped_file_response
# 需要导入模块: from werkzeug.wrappers import Response [as 别名]
# 或者: from werkzeug.wrappers.Response import set_etag [as 别名]
def make_wrapped_file_response(environ, request, path):
# Check if we can return a 304 status code.
mtime = os.path.getmtime(path)
etag_str = '%s$$%s' % (path, mtime)
etag = hashlib.md5(etag_str.encode('utf8')).hexdigest()
if etag in request.if_none_match:
logger.debug("Serving %s [no download, E-Tag matches]" % path)
response = Response()
response.status_code = 304
return response
logger.debug("Serving %s [full download]" % path)
wrapper = wrap_file(environ, open(path, 'rb'))
response = Response(wrapper)
_, ext = os.path.splitext(path)
response.set_etag(etag)
response.last_modified = datetime.datetime.fromtimestamp(mtime)
response.mimetype = mimetype_map.get(
ext.lstrip('.'), 'text/plain')
response.direct_passthrough = True
return response
示例7: _try_serve_page
# 需要导入模块: from werkzeug.wrappers import Response [as 别名]
# 或者: from werkzeug.wrappers.Response import set_etag [as 别名]
def _try_serve_page(self, app, environ, request):
# Try to find what matches the requested URL.
req_path, page_num = split_sub_uri(app, request.path)
routes = find_routes(app.routes, req_path)
if len(routes) == 0:
raise RouteNotFoundError("Can't find route for: %s" % req_path)
rendered_page = None
first_not_found = None
for route, route_metadata in routes:
try:
logger.debug("Trying to render match from source '%s'." %
route.source_name)
rendered_page = self._try_render_page(
app, route, route_metadata, page_num, req_path)
if rendered_page is not None:
break
except NotFound as nfe:
if first_not_found is None:
first_not_found = nfe
else:
raise SourceNotFoundError(
"Can't find path for: %s (looked in: %s)" %
(req_path, [r.source_name for r, _ in routes]))
# If we haven't found any good match, raise whatever exception we
# first got. Otherwise, raise a generic exception.
if rendered_page is None:
first_not_found = first_not_found or NotFound(
"This page couldn't be found.")
raise first_not_found
# Start doing stuff.
page = rendered_page.page
rp_content = rendered_page.content
# Profiling.
if app.config.get('site/show_debug_info'):
now_time = time.clock()
timing_info = (
'%8.1f ms' %
((now_time - app.env.start_time) * 1000.0))
rp_content = rp_content.replace(
'__PIECRUST_TIMING_INFORMATION__', timing_info)
# Build the response.
response = Response()
etag = hashlib.md5(rp_content.encode('utf8')).hexdigest()
if not app.debug and etag in request.if_none_match:
response.status_code = 304
return response
response.set_etag(etag)
response.content_md5 = etag
cache_control = response.cache_control
if app.debug:
cache_control.no_cache = True
cache_control.must_revalidate = True
else:
cache_time = (page.config.get('cache_time') or
app.config.get('site/cache_time'))
if cache_time:
cache_control.public = True
cache_control.max_age = cache_time
content_type = page.config.get('content_type')
if content_type and '/' not in content_type:
mimetype = content_type_map.get(content_type, content_type)
else:
mimetype = content_type
if mimetype:
response.mimetype = mimetype
if ('gzip' in request.accept_encodings and
app.config.get('site/enable_gzip')):
try:
with io.BytesIO() as gzip_buffer:
with gzip.open(gzip_buffer, mode='wt',
encoding='utf8') as gzip_file:
gzip_file.write(rp_content)
rp_content = gzip_buffer.getvalue()
response.content_encoding = 'gzip'
except Exception:
logger.exception("Error compressing response, "
"falling back to uncompressed.")
response.set_data(rp_content)
return response
示例8: _try_serve_page
# 需要导入模块: from werkzeug.wrappers import Response [as 别名]
# 或者: from werkzeug.wrappers.Response import set_etag [as 别名]
def _try_serve_page(self, app, environ, request):
# Find a matching page.
req_page = get_requested_page(app, request.path)
# If we haven't found any good match, report all the places we didn't
# find it at.
qp = req_page.qualified_page
if qp is None:
msg = "Can't find path for '%s':" % request.path
raise MultipleNotFound(msg, req_page.not_found_errors)
# We have a page, let's try to render it.
render_ctx = PageRenderingContext(qp,
page_num=req_page.page_num,
force_render=True,
is_from_request=True)
if qp.route.is_generator_route:
qp.route.generator.prepareRenderContext(render_ctx)
# See if this page is known to use sources. If that's the case,
# just don't use cached rendered segments for that page (but still
# use them for pages that are included in it).
uri = qp.getUri()
entry = self._page_record.getEntry(uri, req_page.page_num)
if (qp.route.is_generator_route or entry is None or
entry.used_source_names):
cache_key = '%s:%s' % (uri, req_page.page_num)
app.env.rendered_segments_repository.invalidate(cache_key)
# Render the page.
rendered_page = render_page(render_ctx)
# Remember stuff for next time.
if entry is None:
entry = ServeRecordPageEntry(req_page.req_path, req_page.page_num)
self._page_record.addEntry(entry)
for pinfo in render_ctx.render_passes:
entry.used_source_names |= pinfo.used_source_names
# Start doing stuff.
page = rendered_page.page
rp_content = rendered_page.content
# Profiling.
if app.config.get('site/show_debug_info'):
now_time = time.perf_counter()
timing_info = (
'%8.1f ms' %
((now_time - app.env.start_time) * 1000.0))
rp_content = rp_content.replace(
'__PIECRUST_TIMING_INFORMATION__', timing_info)
# Build the response.
response = Response()
etag = hashlib.md5(rp_content.encode('utf8')).hexdigest()
if not app.debug and etag in request.if_none_match:
response.status_code = 304
return response
response.set_etag(etag)
response.content_md5 = etag
cache_control = response.cache_control
if app.debug:
cache_control.no_cache = True
cache_control.must_revalidate = True
else:
cache_time = (page.config.get('cache_time') or
app.config.get('site/cache_time'))
if cache_time:
cache_control.public = True
cache_control.max_age = cache_time
content_type = page.config.get('content_type')
if content_type and '/' not in content_type:
mimetype = content_type_map.get(content_type, content_type)
else:
mimetype = content_type
if mimetype:
response.mimetype = mimetype
if ('gzip' in request.accept_encodings and
app.config.get('site/enable_gzip')):
try:
with io.BytesIO() as gzip_buffer:
with gzip.open(gzip_buffer, mode='wt',
encoding='utf8') as gzip_file:
gzip_file.write(rp_content)
rp_content = gzip_buffer.getvalue()
response.content_encoding = 'gzip'
except Exception:
logger.error("Error compressing response, "
"falling back to uncompressed.")
response.set_data(rp_content)
return response
示例9: images
# 需要导入模块: from werkzeug.wrappers import Response [as 别名]
# 或者: from werkzeug.wrappers.Response import set_etag [as 别名]
def images(self, slug, max_width=None, max_height=None, *args, **kwargs):
cr, context = request.cr, request.context
# buscamos imagen por slug
img, model = self._get_image_gallery(slug)
if not img:
return request.not_found()
# leemos imagen
[record] = model.read(
cr, SUPERUSER_ID, [img[0]],
['name', 'last_update_img'], context=context)
path_file = os.path.join(_filestorage(cr), record.get('name'))
if not path_file:
return request.not_found()
# generamos respuesta
server_format = misc.DEFAULT_SERVER_DATETIME_FORMAT
response = Response(mimetype='image/jpg')
response.last_modified = datetime.datetime.strptime(
record.get('last_update_img'), server_format)
response.make_conditional(request.httprequest)
if response.status_code == 304:
return response
# si no hay tamaño la original
if (not max_width) and (not max_height):
data = self._read_image_data(path_file)
response.set_etag(hashlib.sha1(data).hexdigest())
response.data = data
return response
# creamos thumb si no existe
path, file_name = os.path.split(path_file)
path_file_thumb = os.path.join(path,
'{}x{}'.format(max_width, max_height))
if not os.path.exists(path_file_thumb):
try:
os.makedirs(path_file_thumb)
except:
_log.error(u"ERROR creando directorio para galerias <{}>"
.format(slug))
return response
path_file_thumb = os.path.join(path_file_thumb, file_name)
if os.path.exists(path_file_thumb):
data = self._read_image_data(path_file_thumb)
response.set_etag(hashlib.sha1(data).hexdigest())
response.data = data
return response
# creamos thumb
data = self._read_image_data(path_file)
response.set_etag(hashlib.sha1(data).hexdigest())
image = Image.open(cStringIO.StringIO(data))
response.mimetype = Image.MIME[image.format]
w, h = image.size
max_w = int(max_width) if max_width else maxint
max_h = int(max_height) if max_height else maxint
# guardamos en disco
image.thumbnail((max_w, max_h), Image.ANTIALIAS)
image.save(path_file_thumb, image.format)
response.data = self._read_image_data(path_file_thumb)
return response
示例10: _try_serve_page
# 需要导入模块: from werkzeug.wrappers import Response [as 别名]
# 或者: from werkzeug.wrappers.Response import set_etag [as 别名]
def _try_serve_page(self, app, environ, request):
# Find a matching page.
req_pages, not_founds = get_requested_pages(app, request.path)
rendered_page = None
for req_page in req_pages:
# We have a page, let's try to render it.
render_ctx = RenderingContext(req_page.page,
sub_num=req_page.sub_num,
force_render=True)
req_page.page.source.prepareRenderContext(render_ctx)
# Render the page.
this_rendered_page = render_page(render_ctx)
# We might have rendered a page that technically exists, but
# has no interesting content, like a tag page for a tag that
# isn't used by any page. To eliminate these false positives,
# we check if there was pagination used, and if so, if it had
# anything in it.
# TODO: we might need a more generic system for other cases.
render_info = this_rendered_page.render_info
if (render_info['used_pagination'] and
not render_info['pagination_has_items']):
not_founds.append(PageNotFoundError(
("Rendered '%s' (page %d) in source '%s' "
"but got empty content:\n\n%s\n\n") %
(req_page.req_path, req_page.sub_num,
req_page.page.source.name, this_rendered_page.content)))
continue
rendered_page = this_rendered_page
break
# If we haven't found any good match, report all the places we didn't
# find it at.
if rendered_page is None:
msg = "Can't find path for '%s':" % request.path
raise MultipleNotFound(msg, not_founds)
# Start doing stuff.
page = rendered_page.page
rp_content = rendered_page.content
# Profiling.
if app.config.get('site/show_debug_info'):
now_time = time.perf_counter()
timing_info = (
'%8.1f ms' %
((now_time - app.env.start_time) * 1000.0))
rp_content = rp_content.replace(
'__PIECRUST_TIMING_INFORMATION__', timing_info)
# Build the response.
response = Response()
etag = hashlib.md5(rp_content.encode('utf8')).hexdigest()
if not app.debug and etag in request.if_none_match:
response.status_code = 304
return response
response.set_etag(etag)
response.content_md5 = etag
cache_control = response.cache_control
if app.debug:
cache_control.no_cache = True
cache_control.must_revalidate = True
else:
cache_time = (page.config.get('cache_time') or
app.config.get('site/cache_time'))
if cache_time:
cache_control.public = True
cache_control.max_age = cache_time
content_type = page.config.get('content_type')
if content_type and '/' not in content_type:
mimetype = content_type_map.get(content_type, content_type)
else:
mimetype = content_type
if mimetype:
response.mimetype = mimetype
if ('gzip' in request.accept_encodings and
app.config.get('site/enable_gzip')):
try:
with io.BytesIO() as gzip_buffer:
with gzip.open(gzip_buffer, mode='wt',
encoding='utf8') as gzip_file:
gzip_file.write(rp_content)
rp_content = gzip_buffer.getvalue()
response.content_encoding = 'gzip'
except Exception:
logger.error("Error compressing response, "
"falling back to uncompressed.")
response.set_data(rp_content)
return response