Add content_type flag to Sanic.static (#1267)
* Add content_type flag to Sanic.static Fixes #1266 * Fix flake8 error in travis Add line to document `content_type` arg * Fix content_type for file streams Update tests herp derp * Remove content_type as an arg to HTTPResponse `response.HTTPResponse` will default to `headers['Content-Type']` instead of `content_type` https://github.com/channelcat/sanic/pull/1267#discussion_r204190913
This commit is contained in:
committed by
Raphael Deem
parent
377c9890a3
commit
b238be54a4
@@ -386,13 +386,14 @@ class Sanic:
|
||||
def static(self, uri, file_or_directory, pattern=r'/?.+',
|
||||
use_modified_since=True, use_content_range=False,
|
||||
stream_large_files=False, name='static', host=None,
|
||||
strict_slashes=None):
|
||||
strict_slashes=None, content_type=None):
|
||||
"""Register a root to serve files from. The input can either be a
|
||||
file or a directory. See
|
||||
"""
|
||||
static_register(self, uri, file_or_directory, pattern,
|
||||
use_modified_since, use_content_range,
|
||||
stream_large_files, name, host, strict_slashes)
|
||||
stream_large_files, name, host, strict_slashes,
|
||||
content_type)
|
||||
|
||||
def blueprint(self, blueprint, **options):
|
||||
"""Register a blueprint on the application.
|
||||
|
||||
@@ -19,7 +19,7 @@ from sanic.response import file, file_stream, HTTPResponse
|
||||
def register(app, uri, file_or_directory, pattern,
|
||||
use_modified_since, use_content_range,
|
||||
stream_large_files, name='static', host=None,
|
||||
strict_slashes=None):
|
||||
strict_slashes=None, content_type=None):
|
||||
# TODO: Though sanic is not a file server, I feel like we should at least
|
||||
# make a good effort here. Modified-since is nice, but we could
|
||||
# also look into etags, expires, and caching
|
||||
@@ -41,6 +41,7 @@ def register(app, uri, file_or_directory, pattern,
|
||||
If this is an integer, this represents the
|
||||
threshold size to switch to file_stream()
|
||||
:param name: user defined name used for url_for
|
||||
:param content_type: user defined content type for header
|
||||
"""
|
||||
# If we're not trying to match a file directly,
|
||||
# serve from the folder
|
||||
@@ -95,10 +96,10 @@ def register(app, uri, file_or_directory, pattern,
|
||||
del headers['Content-Length']
|
||||
for key, value in _range.headers.items():
|
||||
headers[key] = value
|
||||
headers['Content-Type'] = content_type \
|
||||
or guess_type(file_path)[0] or 'text/plain'
|
||||
if request.method == 'HEAD':
|
||||
return HTTPResponse(
|
||||
headers=headers,
|
||||
content_type=guess_type(file_path)[0] or 'text/plain')
|
||||
return HTTPResponse(headers=headers)
|
||||
else:
|
||||
if stream_large_files:
|
||||
if isinstance(stream_large_files, int):
|
||||
|
||||
Reference in New Issue
Block a user