Exemplo n.º 1
0
 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
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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"
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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']
            }))
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
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"'
Exemplo n.º 11
0
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 == "/"