From 47348ee42bccb97b5e059fe315162c78fd44a1f2 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sun, 12 Jun 2011 23:36:15 -0400 Subject: [PATCH] much cleaner --- httpbin/core.py | 56 +++++++++++++--------------------------------- httpbin/helpers.py | 29 +++++++++++++++++++++++- 2 files changed, 43 insertions(+), 42 deletions(-) diff --git a/httpbin/core.py b/httpbin/core.py index 1dce34c..059a729 100644 --- a/httpbin/core.py +++ b/httpbin/core.py @@ -18,7 +18,7 @@ from time import time as now from decorator import decorator from flask import Flask, Response, request, render_template, redirect, g -from .helpers import get_files, get_headers, status_code +from .helpers import get_files, get_headers, status_code, get_dict app = Flask(__name__) @@ -78,6 +78,8 @@ def gzip_response(f, *args, **kwargs): + + # ------ # Routes # ------ @@ -102,9 +104,7 @@ def view_origin(): def view_headers(): """Returns HTTP HEADERS.""" - headers = get_headers() - - return dict(headers=headers) + return get_dict('headers') @app.route('/user-agent') @@ -114,7 +114,7 @@ def view_user_agent(): headers = get_headers() - return dict(useragent=headers['user-agent']) + return {'user-agent': headers['user-agent']} @app.route('/get', methods=('GET',)) @@ -122,12 +122,7 @@ def view_user_agent(): def view_get(): """Returns GET Data.""" - return dict( - url=request.url, - args=request.args, - headers=get_headers(), - origin=request.remote_addr - ) + return get_dict('url', 'args', 'headers', 'origin') @@ -136,14 +131,8 @@ def view_get(): def view_post(): """Returns POST Data.""" - return dict( - url=request.url, - args=request.args, - form=request.form, - data=request.data, - origin=request.remote_addr, - headers=get_headers(), - files=get_files() + return get_dict( + 'url', 'args', 'form', 'data', 'origin', 'headers', 'files' ) @@ -152,14 +141,8 @@ def view_post(): def view_post(): """Returns PUT Data.""" - return dict( - url=request.url, - args=request.args, - form=request.form, - data=request.data, - origin=request.remote_addr, - headers=get_headers(), - files=get_files() + return get_dict( + 'url', 'args', 'form', 'data', 'origin', 'headers', 'files' ) @@ -168,14 +151,8 @@ def view_post(): def view_post(): """Returns DETLETE Data.""" - return dict( - url=request.url, - args=request.args, - form=request.form, - data=request.data, - origin=request.remote_addr, - headers=get_headers(), - files=get_files() + return get_dict( + 'url', 'args', 'form', 'data', 'origin', 'headers', 'files' ) @@ -185,18 +162,15 @@ def view_post(): def view_gzip_encoded_content(): """Returns GZip-Encoded Data.""" - return dict( - origin=request.remote_addr, - headers=get_headers(), - method=request.method, - gzipped=True - ) + return get_dict('origin', 'headers', method=request.method, gzipped=True) @app.route('/redirect/') def redirect_n_times(n): """301 Redirects n times.""" + assert n > 0 + n += -1 if (n == 0): diff --git a/httpbin/helpers.py b/httpbin/helpers.py index a85cc53..7906bb6 100644 --- a/httpbin/helpers.py +++ b/httpbin/helpers.py @@ -46,6 +46,33 @@ def get_headers(): return CaseInsensitiveDict(request.headers.items()) +def get_dict(*keys, **extras): + """Returns request dict of given keys.""" + + _keys = ('url', 'args', 'form', 'data', 'origin', 'headers', 'files') + + assert all(map(_keys.__contains__, keys)) + + d = dict( + url=request.url, + args=request.args, + form=request.form, + data=request.data, + origin=request.remote_addr, + headers=get_headers(), + files=get_files() + ) + + out_d = dict() + + for key in keys: + out_d[key] = d.get(key) + + out_d.update(extras) + + return out_d + + def status_code(code): """Returns response object of given status code.""" @@ -60,7 +87,7 @@ def status_code(code): 307: redirect, 401: dict(headers={'WWW-Authenticate': 'Basic realm="Fake Realm"'}), 407: dict(headers={'Proxy-Authenticate': 'Basic realm="Fake Realm"'}), - 418: dict( + 418: dict( # I'm a teapot! data=ASCII_ART, headers={ 'x-more-info': 'http://tools.ietf.org/html/rfc2324'