diff --git a/tests/functional/legacy_api/test_removed.py b/tests/functional/legacy_api/test_removed.py index a8140efdda87..15a6a13aa7d0 100644 --- a/tests/functional/legacy_api/test_removed.py +++ b/tests/functional/legacy_api/test_removed.py @@ -18,3 +18,11 @@ def test_removed_upload_apis(webtest, action): resp = webtest.post("/pypi?:action={}".format(action), status=410) assert resp.status == \ "410 This API is no longer supported, instead simply upload the file." + + +def test_remove_doc_upload(webtest): + resp = webtest.post("/pypi?:action=doc_upload", status=410) + assert resp.status == ( + "410 Uploading documentation is no longer supported, we recommend " + "using https://readthedocs.org/." + ) diff --git a/tests/unit/legacy/api/test_pypi.py b/tests/unit/legacy/api/test_pypi.py index 64d8399ad43d..2111cccf679e 100644 --- a/tests/unit/legacy/api/test_pypi.py +++ b/tests/unit/legacy/api/test_pypi.py @@ -1151,6 +1151,16 @@ def test_submit(pyramid_request): "410 This API is no longer supported, instead simply upload the file." +def test_doc_upload(pyramid_request): + resp = pypi.doc_upload(pyramid_request) + + assert resp.status_code == 410 + assert resp.status == ( + "410 Uploading documentation is no longer supported, we recommend " + "using https://readthedocs.org/." + ) + + def test_forbidden_legacy(): exc, request = pretend.stub(), pretend.stub() resp = pypi.forbidden_legacy(exc, request) diff --git a/tests/unit/test_routes.py b/tests/unit/test_routes.py index 078c93b2463f..f671309c3ab5 100644 --- a/tests/unit/test_routes.py +++ b/tests/unit/test_routes.py @@ -95,4 +95,5 @@ def add_pypi_action_route(name, action, **kwargs): pretend.call("legacy.api.pypi.file_upload", "file_upload"), pretend.call("legacy.api.pypi.submit", "submit"), pretend.call("legacy.api.pypi.submit_pkg_info", "submit_pkg_info"), + pretend.call("legacy.api.pypi.doc_upload", "doc_upload"), ] diff --git a/warehouse/legacy/api/pypi.py b/warehouse/legacy/api/pypi.py index a981cc6b9ffa..a69c0789979c 100644 --- a/warehouse/legacy/api/pypi.py +++ b/warehouse/legacy/api/pypi.py @@ -696,6 +696,18 @@ def submit(request): ) +@view_config( + route_name="legacy.api.pypi.doc_upload", + decorator=[require_POST, csrf_exempt], +) +def doc_upload(request): + return _exc_with_message( + HTTPGone, + "Uploading documentation is no longer supported, we recommend using " + "https://readthedocs.org/.", + ) + + @forbidden_view_config(request_param=":action") def forbidden_legacy(exc, request): # We're not going to do anything amazing here, this just exists to override diff --git a/warehouse/routes.py b/warehouse/routes.py index 76422b6c6f82..070809e922bd 100644 --- a/warehouse/routes.py +++ b/warehouse/routes.py @@ -67,6 +67,7 @@ def includeme(config): "legacy.api.pypi.submit_pkg_info", "submit_pkg_info", ) + config.add_pypi_action_route("legacy.api.pypi.doc_upload", "doc_upload") # Legacy Documentation config.add_route("legacy.docs", config.registry.settings["docs.url"])