def build_stub_environ(self, app): kw = {'base_url': 'http://localhost'} builder = EnvironBuilder(self.app, **kw) try: environ = builder.get_environ() finally: builder.close() return environ
def test_bad_environ_raises_bad_request(): app = flask.Flask(__name__) from flask.testing import EnvironBuilder builder = EnvironBuilder(app) environ = builder.get_environ() # use a non-printable character in the Host - this is key to this test environ["HTTP_HOST"] = "\x8a" with app.request_context(environ): response = app.full_dispatch_request() assert response.status_code == 400
def test_client_open_environ(app, client, request): @app.route("/index") def index(): return flask.request.remote_addr builder = EnvironBuilder(app, path="/index", method="GET") request.addfinalizer(builder.close) rv = client.open(builder) assert rv.data == b"127.0.0.1" environ = builder.get_environ() client.environ_base["REMOTE_ADDR"] = "127.0.0.2" rv = client.open(environ) assert rv.data == b"127.0.0.2"
def send(self, request, **kwargs): kw = { 'environ_base': self.environ_base, 'method': request.method, 'data': request.body, 'headers': request.headers.items() } builder = EnvironBuilder(app=self.app, path=request.path_url, **kw) try: environ = builder.get_environ() finally: builder.close() rv = run_wsgi_app(self.app, environ, buffered=True) return self.build_response(request, rv)
def test_bad_environ_raises_bad_request(): app = flask.Flask(__name__) # We cannot use app.test_client() for the Unicode-rich Host header, # because werkzeug enforces latin1 on Python 2. # However it works when actually passed to the server. from flask.testing import EnvironBuilder builder = EnvironBuilder(app) environ = builder.get_environ() # use a non-printable character in the Host - this is key to this test environ["HTTP_HOST"] = u"\x8a" with app.request_context(environ): response = app.full_dispatch_request() assert response.status_code == 400
def test_environ_for_valid_idna_completes(): app = flask.Flask(__name__) @app.route("/") def index(): return "Hello World!" from flask.testing import EnvironBuilder builder = EnvironBuilder(app) environ = builder.get_environ() # these characters are all IDNA-compatible environ["HTTP_HOST"] = "ąśźäüжŠßя.com" with app.request_context(environ): response = app.full_dispatch_request() assert response.status_code == 200
def test_environ_for_valid_idna_completes(): app = flask.Flask(__name__) @app.route("/") def index(): return "Hello World!" # We cannot use app.test_client() for the Unicode-rich Host header, # because werkzeug enforces latin1 on Python 2. # However it works when actually passed to the server. from flask.testing import EnvironBuilder builder = EnvironBuilder(app) environ = builder.get_environ() # these characters are all IDNA-compatible environ["HTTP_HOST"] = u"ąśźäüжŠßя.com" with app.request_context(environ): response = app.full_dispatch_request() assert response.status_code == 200
def req_get(request): try: uri = request['request'] except KeyError: Logger.warning('Missing request uri in ws request.') request['ws'].send(json.dumps({ 'error': 'Missing request uri.' })) else: urls = current_app.url_map.bind('localhost') match = urls.match(request['request']) with current_app.request_context(EnvironBuilder().get_environ()): result = current_app.view_functions[match[0]](**match[1]) request['ws'].send(json.dumps({ 'response': result.data, 'session': request['session'] }))
def _create_wsgi_request(self, request_args: List, request_info: dict) -> Request: # Same logic as super.open, which we use to build the # werkzeug Request. # https://github.com/pallets/flask/blob/master/src/flask/testing.py#L164 request = None def copy_environ(other): return { **self.environ_base, **other, "flask._preserve_context": self.preserve_context, } if not request_info and len(request_args) == 1: arg = request_args[0] if isinstance(arg, werkzeug.test.EnvironBuilder): builder = copy(arg) builder.environ_base = copy_environ(builder.environ_base or {}) request = builder.get_request() elif isinstance(arg, dict): request = EnvironBuilder.from_environ( arg, app=self.application, environ_base=copy_environ({})).get_request() elif isinstance(arg, Request): request = copy(arg) request.environ = copy_environ(request.environ) if request is None: request_info["environ_base"] = copy_environ( request_info.get("environ_base", {})) builder = EnvironBuilder(self.application, *request_args, **request_info) try: request = builder.get_request() finally: builder.close() return request
def test_environbuilder_json_dumps(app): """EnvironBuilder.json_dumps() takes settings from the app.""" app.config["JSON_AS_ASCII"] = False eb = EnvironBuilder(app, json=u"\u20ac") assert eb.input_stream.read().decode("utf8") == u'"\u20ac"'
def test_path_is_url(app): eb = EnvironBuilder(app, "https://example.com/") assert eb.url_scheme == "https" assert eb.host == "example.com" assert eb.script_root == "" assert eb.path == "/"