本文整理汇总了Python中wsgiref.headers.Headers.setdefault方法的典型用法代码示例。如果您正苦于以下问题:Python Headers.setdefault方法的具体用法?Python Headers.setdefault怎么用?Python Headers.setdefault使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类wsgiref.headers.Headers
的用法示例。
在下文中一共展示了Headers.setdefault方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: getTileResponse
# 需要导入模块: from wsgiref.headers import Headers [as 别名]
# 或者: from wsgiref.headers.Headers import setdefault [as 别名]
def getTileResponse(self, coord, extension, ignore_cached=False):
""" Get status code, headers, and a tile binary for a given request layer tile.
Arguments:
- coord: one ModestMaps.Core.Coordinate corresponding to a single tile.
- extension: filename extension to choose response type, e.g. "png" or "jpg".
- ignore_cached: always re-render the tile, whether it's in the cache or not.
This is the main entry point, after site configuration has been loaded
and individual tiles need to be rendered.
"""
start_time = time()
mimetype, format = self.getTypeByExtension(extension)
# default response values
status_code = 200
headers = Headers([('Content-Type', mimetype)])
body = None
cache = self.config.cache
if not ignore_cached:
# Start by checking for a tile in the cache.
try:
body = cache.read(self, coord, format)
except TheTileLeftANote, e:
headers = e.headers
status_code = e.status_code
body = e.content
if e.emit_content_type:
headers.setdefault('Content-Type', mimetype)
tile_from = 'cache'
示例2: signal_land_or_sea
# 需要导入模块: from wsgiref.headers import Headers [as 别名]
# 或者: from wsgiref.headers.Headers import setdefault [as 别名]
def signal_land_or_sea(self, body, layer, coord, format):
if body:
md5sum = self.md5sum(body)
second_md5sum = self.md5sum(Disk.read(self, self.second, coord, format))
headers = Headers([('Access-Control-Expose-Headers', 'X-Land-Or-Sea')])
headers.setdefault('X-Land-Or-Sea', '0')
if second_md5sum and md5sum == second_md5sum:
if md5sum == self.land_md5:
headers['X-Land-Or-Sea'] = '1'
elif md5sum == self.sea_md5:
headers['X-Land-Or-Sea'] = '2'
raise TheTileLeftANote(content=body, headers=headers)
示例3: testMappingInterface
# 需要导入模块: from wsgiref.headers import Headers [as 别名]
# 或者: from wsgiref.headers.Headers import setdefault [as 别名]
def testMappingInterface(self):
test = [('x','y')]
self.assertEqual(len(Headers([])),0)
self.assertEqual(len(Headers(test[:])),1)
self.assertEqual(Headers(test[:]).keys(), ['x'])
self.assertEqual(Headers(test[:]).values(), ['y'])
self.assertEqual(Headers(test[:]).items(), test)
self.assertFalse(Headers(test).items() is test) # must be copy!
h=Headers([])
del h['foo'] # should not raise an error
h['Foo'] = 'bar'
for m in h.__contains__, h.get, h.get_all, h.__getitem__:
self.assertTrue(m('foo'))
self.assertTrue(m('Foo'))
self.assertTrue(m('FOO'))
self.assertFalse(m('bar'))
self.assertEqual(h['foo'],'bar')
h['foo'] = 'baz'
self.assertEqual(h['FOO'],'baz')
self.assertEqual(h.get_all('foo'),['baz'])
self.assertEqual(h.get("foo","whee"), "baz")
self.assertEqual(h.get("zoo","whee"), "whee")
self.assertEqual(h.setdefault("foo","whee"), "baz")
self.assertEqual(h.setdefault("zoo","whee"), "whee")
self.assertEqual(h["foo"],"baz")
self.assertEqual(h["zoo"],"whee")
示例4: testMappingInterface
# 需要导入模块: from wsgiref.headers import Headers [as 别名]
# 或者: from wsgiref.headers.Headers import setdefault [as 别名]
def testMappingInterface(self):
test = [("x", "y")]
self.assertEqual(len(Headers([])), 0)
self.assertEqual(len(Headers(test[:])), 1)
self.assertEqual(Headers(test[:]).keys(), ["x"])
self.assertEqual(Headers(test[:]).values(), ["y"])
self.assertEqual(Headers(test[:]).items(), test)
self.assertIsNot(Headers(test).items(), test) # must be copy!
h = Headers([])
del h["foo"] # should not raise an error
h["Foo"] = "bar"
for m in h.has_key, h.__contains__, h.get, h.get_all, h.__getitem__:
self.assertTrue(m("foo"))
self.assertTrue(m("Foo"))
self.assertTrue(m("FOO"))
self.assertFalse(m("bar"))
self.assertEqual(h["foo"], "bar")
h["foo"] = "baz"
self.assertEqual(h["FOO"], "baz")
self.assertEqual(h.get_all("foo"), ["baz"])
self.assertEqual(h.get("foo", "whee"), "baz")
self.assertEqual(h.get("zoo", "whee"), "whee")
self.assertEqual(h.setdefault("foo", "whee"), "baz")
self.assertEqual(h.setdefault("zoo", "whee"), "whee")
self.assertEqual(h["foo"], "baz")
self.assertEqual(h["zoo"], "whee")
示例5: testBytes
# 需要导入模块: from wsgiref.headers import Headers [as 别名]
# 或者: from wsgiref.headers.Headers import setdefault [as 别名]
def testBytes(self):
h = Headers([(b"Content-Type", b"text/plain; charset=utf-8")])
self.assertEqual("text/plain; charset=utf-8", h.get("Content-Type"))
h[b"Foo"] = bytes(b"bar")
self.assertEqual("bar", h.get("Foo"))
self.assertEqual("bar", h.get(b"Foo"))
h.setdefault(b"Bar", b"foo")
self.assertEqual("foo", h.get("Bar"))
self.assertEqual("foo", h.get(b"Bar"))
h.add_header(b"content-disposition", b"attachment", filename=b"bud.gif")
self.assertEqual('attachment; filename="bud.gif"', h.get("content-disposition"))
del h["content-disposition"]
self.assertTrue(b"content-disposition" not in h)
示例6: requestHandler2
# 需要导入模块: from wsgiref.headers import Headers [as 别名]
# 或者: from wsgiref.headers.Headers import setdefault [as 别名]
def requestHandler2(config_hint, path_info, query_string=None, script_name=''):
""" Generate a set of headers and response body for a given request.
TODO: Replace requestHandler() with this function in TileStache 2.0.0.
Requires a configuration and PATH_INFO (e.g. "/example/0/0/0.png").
Config_hint parameter can be a path string for a JSON configuration file
or a configuration object with 'cache', 'layers', and 'dirpath' properties.
Query string is optional, currently used for JSON callbacks.
Calls Layer.getTileResponse() to render actual tiles, and getPreview() to render preview.html.
"""
headers = Headers([])
try:
# ensure that path_info is at least a single "/"
path_info = '/' + (path_info or '').lstrip('/')
layer = requestLayer(config_hint, path_info)
query = parse_qs(query_string or '')
try:
callback = query['callback'][0]
except KeyError:
callback = None
#
# Special case for index page.
#
if path_info == '/':
mimetype, content = getattr(layer.config, 'index', ('text/plain', 'TileStache says hello.'))
return 200, Headers([('Content-Type', mimetype)]), content
coord, extension = splitPathInfo(path_info)[1:]
if extension == 'html' and coord is None:
status_code, headers, content = getPreview(layer)
elif extension.lower() in layer.redirects:
other_extension = layer.redirects[extension.lower()]
redirect_uri = script_name
redirect_uri += mergePathInfo(layer.name(), coord, other_extension)
if query_string:
redirect_uri += '?' + query_string
headers['Location'] = redirect_uri
headers['Content-Type'] = 'text/plain'
return 302, headers, 'You are being redirected to %s\n' % redirect_uri
else:
status_code, headers, content = layer.getTileResponse(coord, extension)
if layer.allowed_origin:
headers.setdefault('Access-Control-Allow-Origin', layer.allowed_origin)
if callback and 'json' in headers['Content-Type']:
headers['Content-Type'] = 'application/javascript; charset=utf-8'
content = '%s(%s)' % (callback, content)
if layer.max_cache_age is not None:
expires = datetime.utcnow() + timedelta(seconds=layer.max_cache_age)
headers.setdefault('Expires', expires.strftime('%a %d %b %Y %H:%M:%S GMT'))
headers.setdefault('Cache-Control', 'public, max-age=%d' % layer.max_cache_age)
except Core.KnownUnknown, e:
out = StringIO()
print >> out, 'Known unknown!'
print >> out, e
print >> out, ''
print >> out, '\n'.join(Core._rummy())
headers['Content-Type'] = 'text/plain'
status_code, content = 500, out.getvalue()
示例7: getTileResponse
# 需要导入模块: from wsgiref.headers import Headers [as 别名]
# 或者: from wsgiref.headers.Headers import setdefault [as 别名]
def getTileResponse(self, coord, extension, ignore_cached=False):
""" Get status code, headers, and a tile binary for a given request layer tile.
Arguments:
- coord: one ModestMaps.Core.Coordinate corresponding to a single tile.
- extension: filename extension to choose response type, e.g. "png" or "jpg".
- ignore_cached: always re-render the tile, whether it's in the cache or not.
This is the main entry point, after site configuration has been loaded
and individual tiles need to be rendered.
"""
start_time = time()
mimetype, format = self.getTypeByExtension(extension)
# default response values
status_code = 200
headers = Headers([('Content-Type', mimetype)])
body = None
cache = self.config.cache
if not ignore_cached:
# Start by checking for a tile in the cache.
try:
body = cache.read(self, coord, format)
except TheTileLeftANote as e:
headers = e.headers
status_code = e.status_code
body = e.content
if e.emit_content_type:
headers.setdefault('Content-Type', mimetype)
tile_from = 'cache'
else:
# Then look in the bag of recent tiles.
body = _getRecentTile(self, coord, format)
tile_from = 'recent tiles'
# If no tile was found, dig deeper
if body is None:
try:
lockCoord = None
if self.write_cache:
# this is the coordinate that actually gets locked.
lockCoord = self.metatile.firstCoord(coord)
# We may need to write a new tile, so acquire a lock.
cache.lock(self, lockCoord, format)
if not ignore_cached:
# There's a chance that some other process has
# written the tile while the lock was being acquired.
body = cache.read(self, coord, format)
tile_from = 'cache after all'
if body is None:
# No one else wrote the tile, do it here.
buff = BytesIO()
try:
tile = self.render(coord, format)
save = True
except NoTileLeftBehind as e:
tile = e.tile
save = False
status_code = 404
if not self.write_cache:
save = False
if format.lower() == 'jpeg':
save_kwargs = self.jpeg_options
elif format.lower() == 'png':
save_kwargs = self.png_options
else:
save_kwargs = {}
tile.save(buff, format, **save_kwargs)
body = buff.getvalue()
if save:
cache.save(body, self, coord, format)
tile_from = 'layer.render()'
except TheTileLeftANote as e:
headers = e.headers
status_code = e.status_code
body = e.content
if e.emit_content_type:
headers.setdefault('Content-Type', mimetype)
finally:
if lockCoord:
# Always clean up a lock when it's no longer being used.
#.........这里部分代码省略.........
示例8: requestHandler2
# 需要导入模块: from wsgiref.headers import Headers [as 别名]
# 或者: from wsgiref.headers.Headers import setdefault [as 别名]
def requestHandler2(config_hint, path_info, query_string=None, script_name=""):
""" Generate a set of headers and response body for a given request.
TODO: Replace requestHandler() with this function in TileStache 2.0.0.
Requires a configuration and PATH_INFO (e.g. "/example/0/0/0.png").
Config_hint parameter can be a path string for a JSON configuration file
or a configuration object with 'cache', 'layers', and 'dirpath' properties.
Query string is optional, currently used for JSON callbacks.
Calls Layer.getTileResponse() to render actual tiles, and getPreview() to render preview.html.
"""
headers = Headers([])
try:
# ensure that path_info is at least a single "/"
path_info = "/" + (path_info or "").lstrip("/")
layer = requestLayer(config_hint, path_info)
query = parse_qs(query_string or "")
try:
callback = query["callback"][0]
except KeyError:
callback = None
#
# Special case for index page.
#
if path_info == "/":
mimetype, content = getattr(layer.config, "index", ("text/plain", "TileStache says hello."))
return 200, Headers([("Content-Type", mimetype)]), content
coord, extension = splitPathInfo(path_info)[1:]
if extension == "html" and coord is None:
status_code, headers, content = getPreview(layer)
elif extension.lower() in layer.redirects:
other_extension = layer.redirects[extension.lower()]
redirect_uri = script_name
redirect_uri += mergePathInfo(layer.name(), coord, other_extension)
if query_string:
redirect_uri += "?" + query_string
headers["Location"] = redirect_uri
headers["Content-Type"] = "text/plain"
return 302, headers, "You are being redirected to %s\n" % redirect_uri
else:
status_code, headers, content = layer.getTileResponse(coord, extension)
if layer.allowed_origin:
headers.setdefault("Access-Control-Allow-Origin", layer.allowed_origin)
if callback and "json" in headers["Content-Type"]:
headers["Content-Type"] = "application/javascript; charset=utf-8"
content = "%s(%s)" % (callback, content)
if layer.max_cache_age is not None:
expires = datetime.utcnow() + timedelta(seconds=layer.max_cache_age)
headers.setdefault("Expires", expires.strftime("%a, %d %b %Y %H:%M:%S GMT"))
headers.setdefault("Cache-Control", "public, max-age=%d" % layer.max_cache_age)
except Core.KnownUnknown, e:
out = StringIO()
print >> out, "Known unknown!"
print >> out, e
print >> out, ""
print >> out, "\n".join(Core._rummy())
headers["Content-Type"] = "text/plain"
status_code, content = 500, out.getvalue()
示例9: newapp
# 需要导入模块: from wsgiref.headers import Headers [as 别名]
# 或者: from wsgiref.headers.Headers import setdefault [as 别名]
def newapp(environ, start_response):
raw = app(environ, capture)
status = resp['status']
headers = Headers(resp['headers'])
headers.setdefault('Accept-Range', 'bytes')
range = environ.get('HTTP_RANGE')
if (range is None
or ',' in range # not deal with multi-part range
or not status.startswith('2')): # not success status
start_response(status, list(headers.items()))
return raw
def error_416():
start_response('416 Requested Range Not Satisfiable',
list(headers.items()))
if hasattr(raw, 'close'):
raw.close()
return [b'']
m = re.match(r'bytes=([0-9]+)?-([0-9]+)?', range)
if not m or (not m.group(1) and not m.group(2)):
return error_416()
content = b''.join(raw)
begin = int(m.group(1)) if m.group(1) else None
end = int(m.group(2)) if m.group(2) else None
# because 0 is False
has_begin = begin is not None
has_end = end is not None
if (has_begin and has_end) and end < begin:
return error_416()
if has_end and len(content) <= end:
return error_416()
if has_begin and len(content) <= begin :
return error_416()
if has_begin and has_end:
# bytes=begin-end
c_range = 'bytes {}-{}/{}'.format(begin, end, len(content))
body = content[begin:end+1]
elif has_begin:
# bytes=begin-
c_range = 'bytes {}-{}/{}'.format(begin, len(content)-1,
len(content))
body = content[begin:]
else:
# bytes=-end
c_range = 'bytes {}-{}/{}'.format(len(content)-end,
len(content)-1, len(content))
body = content[len(content)-end:]
headers['Content-Range'] = c_range
start_response('206 Partial Content', list(headers.items()))
if hasattr(raw, 'close'):
raw.close()
return [body]
示例10: application
# 需要导入模块: from wsgiref.headers import Headers [as 别名]
# 或者: from wsgiref.headers.Headers import setdefault [as 别名]
class application(object):
# don't serve static by default
static_serve = False
static_alias = { '' : 'ketcher.html' }
static_root = None
indigo = None
indigo_inchi = None
def __init__(self, environ, start_response):
self.path = environ['PATH_INFO'].strip('/')
self.method = environ['REQUEST_METHOD']
self.content_type = environ.get('CONTENT_TYPE', '')
self.fields = FieldStorage(fp=environ['wsgi.input'],
environ=environ, keep_blank_values=True)
self.FileWrapper = environ.get('wsgi.file_wrapper', FileWrapper)
self.headers = Headers([])
route = getattr(self, 'on_' + self.path, None)
if route is None:
route = self.serve_static if self.method == 'GET' and \
self.static_serve else self.notsupported
status = "200 OK"
try:
self.response = route()
except self.HttpException as e:
status = e.args[0]
self.response = [e.args[1]]
self.headers.setdefault('Content-Type', 'text/plain')
start_response(status, self.headers.items())
def __iter__(self):
for chunk in self.response:
yield chunk if sys.version_info[0] < 3 or \
not hasattr(chunk, 'encode') else chunk.encode()
def notsupported(self):
raise self.HttpException("405 Method Not Allowed",
"Request not supported")
def indigo_required(method):
def wrapper(self, **args):
if not self.indigo:
raise self.HttpException("501 Not Implemented",
"Indigo libraries are not found")
try:
return method(self, **args)
except indigo.IndigoException as e:
message = str(sys.exc_info()[1])
if 'indigoLoad' in message: # error on load
message = "Cannot load the specified " + \
"structure: %s " % str(e)
raise self.HttpException("400 Bad Request",
message)
return wrapper
@indigo_required
def on_knocknock(self):
return ["You are welcome!"]
@indigo_required
def on_layout(self):
moldata = None
if self.method == 'GET' and 'smiles' in self.fields:
moldata = self.fields.getfirst('smiles')
elif self.is_form_request() and 'moldata' in self.fields:
moldata = self.fields.getfirst('moldata')
selective = 'selective' in self.fields
if moldata:
if '>>' in moldata or moldata.startswith('$RXN'):
rxn = self.indigo.loadQueryReaction(moldata)
if selective:
for mol in rxn.iterateMolecules():
self.selective_layout(mol)
else:
rxn.layout()
return ["Ok.\n",
rxn.rxnfile()]
elif moldata.startswith('InChI'):
mol = self.indigo_inchi.loadMolecule(moldata)
mol.layout()
return ["Ok.\n",
mol.molfile()]
else:
mol = self.indigo.loadQueryMolecule(moldata)
if selective:
for rg in mol.iterateRGroups():
for frag in rg.iterateRGroupFragments():
self.selective_layout(frag)
self.selective_layout(mol)
else:
mol.layout()
return ["Ok.\n",
mol.molfile()]
self.notsupported()
@indigo_required
def on_automap(self):
#.........这里部分代码省略.........