diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml index 243f8783..717b588e 100644 --- a/.azure-pipelines.yml +++ b/.azure-pipelines.yml @@ -10,7 +10,6 @@ jobs: python.architecture: 'x64' TOXENV: 'py,coverage-ci' publish.test.results: 'true' - CODECOV_TOKEN: '$(codecov.token)' strategy: matrix: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index eb797309..6d2a2f1f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/asottile/reorder_python_imports - rev: v1.4.0 + rev: v1.5.0 hooks: - id: reorder-python-imports name: Reorder Python imports (src, tests) diff --git a/src/flask/_compat.py b/src/flask/_compat.py index b3876055..dfbb0cda 100644 --- a/src/flask/_compat.py +++ b/src/flask/_compat.py @@ -63,7 +63,7 @@ def with_metaclass(meta, *bases): # dummy metaclass for one level of class instantiation that replaces # itself with the actual metaclass. class metaclass(type): - def __new__(mcs, name, this_bases, d): + def __new__(metacls, name, this_bases, d): return meta(name, bases, d) return type.__new__(metaclass, "temporary_class", (), {}) diff --git a/tests/conftest.py b/tests/conftest.py index 56688bb3..0ba687d5 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -6,7 +6,6 @@ :copyright: © 2010 by the Pallets team. :license: BSD, see LICENSE for more details. """ -import gc import os import pkgutil import sys @@ -201,10 +200,3 @@ def purge_module(request): request.addfinalizer(lambda: sys.modules.pop(name, None)) return inner - - -@pytest.fixture(autouse=True) -def catch_deprecation_warnings(recwarn): - yield - gc.collect() - assert not recwarn.list, "\n".join(str(w.message) for w in recwarn.list) diff --git a/tests/test_basic.py b/tests/test_basic.py index 92214272..63f23a8d 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -1475,60 +1475,46 @@ def test_request_locals(): assert not flask.g -def test_test_app_proper_environ(): +def test_server_name_subdomain(): app = flask.Flask(__name__, subdomain_matching=True) - app.config.update(SERVER_NAME="localhost.localdomain:5000") client = app.test_client() @app.route("/") def index(): - return "Foo" + return "default" @app.route("/", subdomain="foo") def subdomain(): - return "Foo SubDomain" + return "subdomain" + app.config["SERVER_NAME"] = "dev.local:5000" rv = client.get("/") - assert rv.data == b"Foo" + assert rv.data == b"default" - rv = client.get("/", "http://localhost.localdomain:5000") - assert rv.data == b"Foo" + rv = client.get("/", "http://dev.local:5000") + assert rv.data == b"default" - rv = client.get("/", "https://localhost.localdomain:5000") - assert rv.data == b"Foo" + rv = client.get("/", "https://dev.local:5000") + assert rv.data == b"default" - app.config.update(SERVER_NAME="localhost.localdomain") - rv = client.get("/", "https://localhost.localdomain") - assert rv.data == b"Foo" + app.config["SERVER_NAME"] = "dev.local:443" + rv = client.get("/", "https://dev.local") - try: - app.config.update(SERVER_NAME="localhost.localdomain:443") - rv = client.get("/", "https://localhost.localdomain") - # Werkzeug 0.8 - assert rv.status_code == 404 - except ValueError as e: - # Werkzeug 0.7 - assert str(e) == ( - "the server name provided " - "('localhost.localdomain:443') does not match the " - "server name from the WSGI environment ('localhost.localdomain')" - ) + # Werkzeug 1.0 fixes matching https scheme with 443 port + if rv.status_code != 404: + assert rv.data == b"default" - try: - app.config.update(SERVER_NAME="localhost.localdomain") + app.config["SERVER_NAME"] = "dev.local" + rv = client.get("/", "https://dev.local") + assert rv.data == b"default" + + # suppress Werkzeug 1.0 warning about name mismatch + with pytest.warns(None): rv = client.get("/", "http://foo.localhost") - # Werkzeug 0.8 assert rv.status_code == 404 - except ValueError as e: - # Werkzeug 0.7 - assert str(e) == ( - "the server name provided " - "('localhost.localdomain') does not match the " - "server name from the WSGI environment ('foo.localhost')" - ) - rv = client.get("/", "http://foo.localhost.localdomain") - assert rv.data == b"Foo SubDomain" + rv = client.get("/", "http://foo.dev.local") + assert rv.data == b"subdomain" def test_exception_propagation(app, client): @@ -1885,9 +1871,11 @@ def test_subdomain_matching_other_name(matching): def index(): return "", 204 - # ip address can't match name - rv = client.get("/", "http://127.0.0.1:3000/") - assert rv.status_code == 404 if matching else 204 + # suppress Werkzeug 0.15 warning about name mismatch + with pytest.warns(None): + # ip address can't match name + rv = client.get("/", "http://127.0.0.1:3000/") + assert rv.status_code == 404 if matching else 204 # allow all subdomains if matching is disabled rv = client.get("/", "http://www.localhost.localdomain:3000/") diff --git a/tests/test_helpers.py b/tests/test_helpers.py index cacbca2e..2b7c776f 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -455,7 +455,7 @@ class TestSendfile(object): assert rv.data == f.read() rv.close() - def test_send_file_xsendfile(self, app, req_ctx, catch_deprecation_warnings): + def test_send_file_xsendfile(self, app, req_ctx): app.use_x_sendfile = True rv = flask.send_file("static/index.html") assert rv.direct_passthrough diff --git a/tests/test_reqctx.py b/tests/test_reqctx.py index 20ae2b28..4013528c 100644 --- a/tests/test_reqctx.py +++ b/tests/test_reqctx.py @@ -89,17 +89,12 @@ def test_proper_test_request_context(app): == "http://foo.localhost.localdomain:5000/" ) - try: + # suppress Werkzeug 0.15 warning about name mismatch + with pytest.warns(None): with app.test_request_context( "/", environ_overrides={"HTTP_HOST": "localhost"} ): pass - except ValueError as e: - assert str(e) == ( - "the server name provided " - "('localhost.localdomain:5000') does not match the " - "server name from the WSGI environment ('localhost')" - ) app.config.update(SERVER_NAME="localhost") with app.test_request_context("/", environ_overrides={"SERVER_NAME": "localhost"}): diff --git a/tox.ini b/tox.ini index 2be290a1..63dda527 100644 --- a/tox.ini +++ b/tox.ini @@ -33,7 +33,7 @@ commands = pip install -q -e examples/javascript[test] # pytest-cov doesn't seem to play nice with -p - coverage run -p -m pytest --tb=short {posargs:tests examples} + coverage run -p -m pytest --tb=short -Werror {posargs:tests examples} [testenv:nightly] # courtesy Python nightly test, don't fail the build in CI @@ -41,7 +41,7 @@ ignore_outcome = true commands = pip install -q -e examples/tutorial[test] pip install -q -e examples/javascript[test] - coverage run -p -m pytest --tb=short --junitxml=test-results.xml {posargs:tests examples} + coverage run -p -m pytest --tb=short -Werror --junitxml=test-results.xml {posargs:tests examples} [testenv:stylecheck] deps = pre-commit @@ -62,13 +62,9 @@ commands = coverage report [testenv:coverage-ci] -passenv = CODECOV_TOKEN -deps = - coverage - codecov +deps = coverage skip_install = true commands = coverage combine - codecov coverage xml coverage report