def _apply_patches(app):
"""
Apply special fixes and/or monkey patches. These fixes will hopefully
become obsolete with proper fixes made to these libraries in the future.
"""
# "X-Forwarded-For" remote_ip fixup when running behind a load balancer.
# Assuming we are running behind two proxies (or load balancers), the API
# router, and the auto-scaling group.
num_proxies = 1
import socket
if socket.gethostname().startswith("ip-10-60-"):
num_proxies = 2
app.wsgi_app = ProxyFix(app.wsgi_app, num_proxies=num_proxies)
# Fixing SCRIPT_NAME/url_scheme when behind reverse proxy (i.e. the
# API router).
app.wsgi_app = ReverseProxied(app.wsgi_app)
# Datetime fix
app.json_encoder = CustomJSONEncoder
# Euthanize Flask Restful exception handlers. This may get fixed
# soon in "Error handling re-worked #544"
# https://github.com/flask-restful/flask-restful/pull/544
def patched_init_app(self, app):
if len(self.resources) > 0:
for resource, urls, kwargs in self.resources:
self._register_view(app, resource, *urls, **kwargs)
Api._init_app = patched_init_app
# Install proper json dumper for Flask Restful library.
# This is needed because we need to use Flask's JSON converter which can
# handle more variety of Python types than the standard converter.
def output_json(obj, code, headers=None):
resp = make_response(dumps(obj, indent=4), code)
resp.headers.extend(headers or {})
return resp
if isinstance(flask_restful.DEFAULT_REPRESENTATIONS, dict):
flask_restful.DEFAULT_REPRESENTATIONS['application/json'] = output_json
else:
flask_restful.DEFAULT_REPRESENTATIONS = [('application/json', output_json)]
def tenant_not_found(message):
status_code = httplib.NOT_FOUND
response = jsonify({"error": message, "status_code": status_code})
response.status_code = status_code
return response
@app.errorhandler(TenantNotFoundError)
def bad_request_handler(error):
return tenant_not_found(error.message)
评论列表
文章目录