content_types = {
' css ' : ' text/css ' ,
' gif ' : ' image/gif ' ,
' html ' : ' text/html ' ,
' jpg ' : ' image/jpeg ' ,
' js ' : ' application/javascript ' ,
' json ' : ' application/json ' ,
' png ' : ' image/png ' ,
' txt ' : ' text/plain ' ,
}
def get_static_file ( path , static_files ) :
""" Return the local filename and content type for the requested static
file URL .
: param path : the path portion of the requested URL .
: param static_files : a static file configuration dictionary .
This function returns a dictionary with two keys , " filename " and
" content_type " . If the requested URL does not match any static file , the
return value is None .
"""
extra_path = ' '
if path in static_files :
f = static_files [ path ]
else :
f = None
while path != ' ' :
path , last = path . rsplit ( ' / ' , 1 )
extra_path = ' / ' + last + extra_path
if path in static_files :
f = static_files [ path ]
break
elif path + ' / ' in static_files :
f = static_files [ path + ' / ' ]
break
if f :
if isinstance ( f , str ) :
f = { ' filename ' : f }
else :
f = f . copy ( ) # in case it is mutated below
if f [ ' filename ' ] . endswith ( ' / ' ) and extra_path . startswith ( ' / ' ) :
extra_path = extra_path [ 1 : ]
f [ ' filename ' ] + = extra_path
if f [ ' filename ' ] . endswith ( ' / ' ) :
if ' ' in static_files :
if isinstance ( static_files [ ' ' ] , str ) :
f [ ' filename ' ] + = static_files [ ' ' ]
else :
f [ ' filename ' ] + = static_files [ ' ' ] [ ' filename ' ]
if ' content_type ' in static_files [ ' ' ] :
f [ ' content_type ' ] = static_files [ ' ' ] [ ' content_type ' ]
else :
f [ ' filename ' ] + = ' index.html '
if ' content_type ' not in f :
ext = f [ ' filename ' ] . rsplit ( ' . ' ) [ - 1 ]
f [ ' content_type ' ] = content_types . get (
ext , ' application/octet-stream ' )
return f