From c95be4a1055f4b36a8852715eb80318c81fc00ca Mon Sep 17 00:00:00 2001
From: Mike Fiedler
Date: Sun, 7 Aug 2022 23:17:50 -0400
Subject: [PATCH] chore: update URLs (#12007)
* chore: rename pypa/warehouse to pypi/warehouse
Once the repo was moved to `pypi` org, saves a redirect on every lookup.
Signed-off-by: Mike Fiedler
* chore: update default branch to `main`
Signed-off-by: Mike Fiedler
* chore: inform sphinx to ignore local links
When running `make linkcheck`, ignore any links that won't work.
Signed-off-by: Mike Fiedler
* chore: fix broken links
As identified with `make linkcheck`.
Signed-off-by: Mike Fiedler
* chore: update warehouse readthedocs url
Signed-off-by: Mike Fiedler
* chore: convert to sphinx references
Signed-off-by: Mike Fiedler
* lint: docs line too long
Signed-off-by: Mike Fiedler
* chore: update test urls
to match the migrated repo
---
.github/ISSUE_TEMPLATE/config.yml | 2 +-
.github/ISSUE_TEMPLATE/~good-first-issue.md | 2 +-
CONTRIBUTING.rst | 2 +-
README.rst | 14 ++--
docs/api-reference/integration-guide.rst | 13 ++--
docs/api-reference/json.rst | 2 +-
docs/api-reference/legacy.rst | 2 +-
docs/api-reference/xml-rpc.rst | 2 +-
docs/application.rst | 76 ++++++++++-----------
docs/conf.py | 7 ++
docs/development/frontend.rst | 4 +-
docs/development/getting-started.rst | 26 +++----
docs/development/index.rst | 4 +-
docs/development/malware-checks.rst | 39 +++++------
docs/development/patterns.rst | 2 +-
docs/development/reviewing-patches.rst | 4 +-
docs/development/submitting-patches.rst | 17 +++--
docs/development/token-scanning.rst | 6 +-
docs/index.rst | 2 +-
docs/roadmap.rst | 16 ++---
docs/translations.rst | 6 +-
docs/ui-principles.rst | 8 +--
requirements/main.in | 2 +-
tests/functional/test_templates.py | 4 +-
tests/unit/packaging/test_models.py | 18 ++---
warehouse/cache/origin/__init__.py | 2 +-
warehouse/forklift/legacy.py | 10 +--
warehouse/locale/messages.pot | 2 +-
warehouse/macaroons/caveats.py | 2 +-
warehouse/packaging/tasks.py | 4 +-
warehouse/templates/500.html | 2 +-
warehouse/templates/base.html | 4 +-
warehouse/templates/index.html | 2 +-
warehouse/templates/pages/help.html | 24 +++----
warehouse/utils/db/windowed_query.py | 2 +-
35 files changed, 169 insertions(+), 165 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 9c60e82e4862..2b5b4ee3ec35 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,5 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: "(Maintainers Only) Blank issue"
- url: https://github.com/pypa/warehouse/issues/new
+ url: https://github.com/pypi/warehouse/issues/new
about: For maintainers only.
diff --git a/.github/ISSUE_TEMPLATE/~good-first-issue.md b/.github/ISSUE_TEMPLATE/~good-first-issue.md
index 1ffbd98097cd..cbf363005f61 100644
--- a/.github/ISSUE_TEMPLATE/~good-first-issue.md
+++ b/.github/ISSUE_TEMPLATE/~good-first-issue.md
@@ -9,7 +9,7 @@ about: For maintainers to create an issue that is good for new contributors
---
-**Good First Issue**: This issue is good for first time contributors. If you've already contributed to Warehouse, work on [another issue without this label](https://github.com/pypa/warehouse/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+-label%3A%22good+first+issue%22) instead. If there is not a corresponding pull request for this issue, it is up for grabs. For directions for getting set up, see our [Getting Started Guide](https://warehouse.pypa.io/development/getting-started/).
+**Good First Issue**: This issue is good for first time contributors. If you've already contributed to Warehouse, work on [another issue without this label](https://github.com/pypi/warehouse/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+-label%3A%22good+first+issue%22) instead. If there is not a corresponding pull request for this issue, it is up for grabs. For directions for getting set up, see our [Getting Started Guide](https://warehouse.pypa.io/development/getting-started/).
If you are working on this issue and have questions, feel free to ask them here, in the [`#pypa-dev` chat channel on Libera](https://web.libera.chat/#pypa-dev), the [PyPA Discord](https://discord.gg/pypa) or on the [Discourse](https://discuss.python.org/c/packaging/14).
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index 748dcdec5dce..732d43261a24 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -12,4 +12,4 @@ Examples of contributions include:
Extensive contribution guidelines are available in the repository at
``docs/development/index.rst`` or
-`online `_.
+`online `_.
diff --git a/README.rst b/README.rst
index f76393e548ac..c9a1e6aaec35 100644
--- a/README.rst
+++ b/README.rst
@@ -48,15 +48,15 @@ Everyone interacting in the Warehouse project's codebases, issue trackers, chat
rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
.. _`PyPI`: https://pypi.org/
-.. _`our development roadmap`: https://warehouse.readthedocs.io/roadmap/
-.. _`architectural overview`: https://warehouse.readthedocs.io/application/
-.. _`documentation`: https://warehouse.readthedocs.io
-.. _`Getting started`: https://warehouse.readthedocs.io/development/getting-started/
-.. _`Github issue tracker`: https://github.com/pypa/warehouse/issues
+.. _`our development roadmap`: https://warehouse.pypa.io/roadmap/
+.. _`architectural overview`: https://warehouse.pypa.io/application/
+.. _`documentation`: https://warehouse.pypa.io
+.. _`Getting started`: https://warehouse.pypa.io/development/getting-started/
+.. _`Github issue tracker`: https://github.com/pypi/warehouse/issues
.. _`pypi.org`: https://pypi.org/
-.. _`Running tests and linters section`: https://warehouse.readthedocs.io/development/getting-started/#running-tests-and-linters
+.. _`Running tests and linters section`: https://warehouse.pypa.io/development/getting-started/#running-tests-and-linters
.. _BrowserStack: https://browserstack.com/
-.. _`supported browsers`: https://warehouse.readthedocs.io/development/frontend/#browser-support
+.. _`supported browsers`: https://warehouse.pypa.io/development/frontend/#browser-support
.. |BrowserStackImg| image:: docs/_static/browserstack-logo.png
.. _BrowserStackImg: https://browserstack.com/
.. _`PSF Code of Conduct`: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
diff --git a/docs/api-reference/integration-guide.rst b/docs/api-reference/integration-guide.rst
index c9ff5d83d6ad..d30ca7fa6013 100644
--- a/docs/api-reference/integration-guide.rst
+++ b/docs/api-reference/integration-guide.rst
@@ -20,7 +20,7 @@ to redirects, but you should use pypi.org instead.
You should also watch `our status page `__
and subscribe to `the PyPI announcement list (low-traffic)
-`_
+`_
to find out about future changes.
Here are some tips.
@@ -58,12 +58,12 @@ Here are some tips.
``https://pypi.org/rss/packages.xml``. See :doc:`feeds` for
descriptions. `The data differs from the legacy feed data because
the new feeds are standards-compliant and fix inaccuracies in the
- publication date `_.
+ publication date `_.
* Documentation upload: Users can no longer use ``doc_upload`` in the
API to upload documentation ZIP files, separate from packages, to be
hosted at pythonhosted.org (`discussion
- `_).
+ `_).
* ``User-Agent`` Filtering: Some client user agents were filtered to
always use ``legacy.pypi.org``, a temporary deployment of the legacy
@@ -73,7 +73,7 @@ Here are some tips.
regardless of their ``User-Agent``.
* Subscribe to `the PyPI announcement list (low-traffic)
- `_.
+ `_.
If you're a PyPI end user or packager looking to migrate to the new
PyPI, see `the official Python Packaging User Guide on migrating to PyPI
@@ -93,7 +93,7 @@ Official guidance
-----------------
Query PyPI’s `JSON
-API `__ to
+API `__ to
determine where to download files from.
If you so choose
@@ -126,5 +126,4 @@ where ``project_l`` is the first letter of the project name.
structure PyPI used to hold on disk. In general this is only a good idea
for ``source`` as a ``python_version`` to fetch tar and zip files.
Otherwise, you will want to match the format of the ``python_version``
-field of the releases in the `JSON
-API `__.
+field of the releases in the :doc:`json`.
diff --git a/docs/api-reference/json.rst b/docs/api-reference/json.rst
index f1aeab4a5e80..cd216591551d 100644
--- a/docs/api-reference/json.rst
+++ b/docs/api-reference/json.rst
@@ -291,7 +291,7 @@ Known vulnerabilities
~~~~~~~~~~~~~~~~~~~~~
In the example above, the combination of the requested project and version
-had no `known vulnerabilities `_.
+had no `known vulnerabilities `_.
An example of a response for a project with known vulnerabilities is
provided below, with unrelated fields collapsed for readability.
diff --git a/docs/api-reference/legacy.rst b/docs/api-reference/legacy.rst
index d383c4ab39c9..58f827c0cb88 100644
--- a/docs/api-reference/legacy.rst
+++ b/docs/api-reference/legacy.rst
@@ -109,7 +109,7 @@ The Simple API implements the HTML-based package index API as specified in `PEP
.. _`pypi-legacy`: https://pypi.python.org/
-.. _`PEP 503`: https://www.python.org/dev/peps/pep-0503/
+.. _`PEP 503`: https://peps.python.org/pep-0503/
.. _upload-api-forklift:
diff --git a/docs/api-reference/xml-rpc.rst b/docs/api-reference/xml-rpc.rst
index 5be3da3b41b7..10fa8b57f017 100644
--- a/docs/api-reference/xml-rpc.rst
+++ b/docs/api-reference/xml-rpc.rst
@@ -203,4 +203,4 @@ Mirroring Support
Retrieve a dictionary mapping package names to the last serial for each
package.
-.. _pypi-announce: https://mail.python.org/mm3/mailman3/lists/pypi-announce.python.org/
+.. _pypi-announce: https://mail.python.org/mailman3/lists/pypi-announce.python.org/
diff --git a/docs/application.rst b/docs/application.rst
index 544855205b33..e85953354c43 100644
--- a/docs/application.rst
+++ b/docs/application.rst
@@ -5,7 +5,7 @@ Warehouse uses the
`Pyramid`_ web framework, the
`SQLAlchemy `__ ORM, and
`Postgres `__ for its database.
-Warehouse's front end uses `Jinja2 `__ templates.
+Warehouse's front end uses `Jinja2 `__ templates.
The production deployment for Warehouse is deployed using
`Cabotage `__, which manages
@@ -13,7 +13,7 @@ The production deployment for Warehouse is deployed using
In the development environment, we use several `Docker`_ containers
orchestrated by `Docker Compose `__
-to `manage `__
+to `manage `__
running the containers and the connections between them.
Since Warehouse was built on top of an existing database (for legacy
@@ -84,39 +84,39 @@ The top-level directory of the Warehouse repo contains files including:
Directories within the repository:
-- `bin/ `_ - high-level scripts for Docker, Continuous Integration, and Makefile commands
-- `dev/ `_ - assets for developer environment
-- `tests/ `_ - tests
-- `warehouse/ `_ - code in modules
-
- - `accounts/ `_ - user accounts
- - `admin/ `_ - application-administrator-specific
- - `banners/ `_ - notification banners
- - `cache/ `_ - caching
- - `classifiers/ `_ - frame trove classifiers
- - `cli/ `_ - entry scripts and
- `the interactive shell `_
- - `email/ `_ - services for sending emails
- - `forklift/ `_ - :ref:`upload-api-forklift`
- - `i18n/ `_ - internationalization
- - `integrations/ `_ - integrations with other services
- - `legacy/ `_ - most of the read-only APIs implemented here
- - `locale/ `_ - internationalization
- - `macaroons/ `_ - API token support
- - `malware/ `_ - automated malware checks
- - `manage/ `_ - logged-in user functionality (i.e., manage account &
+- `bin/ `_ - high-level scripts for Docker, Continuous Integration, and Makefile commands
+- `dev/ `_ - assets for developer environment
+- `tests/ `_ - tests
+- `warehouse/ `_ - code in modules
+
+ - `accounts/ `_ - user accounts
+ - `admin/ `_ - application-administrator-specific
+ - `banners/ `_ - notification banners
+ - `cache/ `_ - caching
+ - `classifiers/ `_ - frame trove classifiers
+ - `cli/ `_ - entry scripts and
+ :ref:`the interactive shell `
+ - `email/ `_ - services for sending emails
+ - `forklift/ `_ - :ref:`upload-api-forklift`
+ - `i18n/ `_ - internationalization
+ - `integrations/ `_ - integrations with other services
+ - `legacy/ `_ - most of the read-only APIs implemented here
+ - `locale/ `_ - internationalization
+ - `macaroons/ `_ - API token support
+ - `malware/ `_ - automated malware checks
+ - `manage/ `_ - logged-in user functionality (i.e., manage account &
owned/maintained projects)
- - `metrics/ `_ - services for recording metrics
- - `migrations/ `_ - changes to the database schema
- - `packaging/ `_ - models
- - `rate_limiting/ `_ - rate limiting to prevent abuse
- - `rss/ `_ - RSS feeds: :doc:`api-reference/feeds`
- - `search/ `_ - utilities for building and querying the search index
- - `sitemap/ `_ - site maps
- - `sponsors/ `_ - sponsors management
- - `static/ `_ - static site assets
- - `templates/ `_ - Jinja templates for web pages, emails, etc.
- - `utils/ `_ - various utilities Warehouse uses
+ - `metrics/ `_ - services for recording metrics
+ - `migrations/ `_ - changes to the database schema
+ - `packaging/ `_ - models
+ - `rate_limiting/ `_ - rate limiting to prevent abuse
+ - `rss/ `_ - RSS feeds: :doc:`api-reference/feeds`
+ - `search/ `_ - utilities for building and querying the search index
+ - `sitemap/ `_ - site maps
+ - `sponsors/ `_ - sponsors management
+ - `static/ `_ - static site assets
+ - `templates/ `_ - Jinja templates for web pages, emails, etc.
+ - `utils/ `_ - various utilities Warehouse uses
.. _Pyramid: https://docs.pylonsproject.org/projects/pyramid/en/latest/index.html
.. _Docker: https://docs.docker.com/
@@ -137,16 +137,16 @@ may be used to from the legacy site, such as:
- "hidden releases"
- uploading to pythonhosted.com documentation hosting (`discussion and
- plans `_)
+ plans `_)
-- `download counts visible in the API `_
+- :ref:`download counts visible in the API `
(instead, use `the Google BigQuery service `_)
- key management: PyPI no longer has a UI for users to manage GPG or
SSH public keys
- uploading new releases via the web UI: instead, maintainers should
- use the command-line tool `Twine `_
+ use the command-line tool `Twine `_
- updating release descriptions via the web UI: instead, to update
release metadata, you need to upload a new release (`discussion
@@ -157,7 +157,7 @@ may be used to from the legacy site, such as:
- `HTTP access to APIs; now it's HTTPS-only `_
- GPG/PGP signatures for packages (still visible in the :doc:`../api-reference/legacy/`
- per `PEP 503 `_, but no
+ per `PEP 503 `_, but no
longer visible in the web UI)
- `OpenID and Google auth login `_
diff --git a/docs/conf.py b/docs/conf.py
index 24c760c89f59..8628bb197662 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -54,6 +54,13 @@
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = "sphinx"
+# Patterns to during `make linkcheck`
+linkcheck_ignore = [
+ r'http://localhost.*',
+ 'http://134.122.111.11', # example IP
+ 'https://web.libera.chat/#pypa,#pypa-dev', # can't visit anchors
+]
+
# -- Options for HTML output ----------------------------------------------
diff --git a/docs/development/frontend.rst b/docs/development/frontend.rst
index 77422176d1a6..357119c708bb 100644
--- a/docs/development/frontend.rst
+++ b/docs/development/frontend.rst
@@ -34,7 +34,7 @@ JavaScript tests use the `Jest testing framework `_
along with `jest-dom `_
for assertion helpers. We can invoke Jest directly specify a particular
test suite via ``node_modules/.bin/jest tests/frontend/.js`` or
-add any of the `Jest CLI options `_ .
+add any of the `Jest CLI options `_ .
All tests are located in the ``tests/frontend``.
`Stimulus `_ controller tests leverage on Jest
@@ -98,7 +98,7 @@ Exceptions to these rules include:
We also allow both dashes and underscores in our class names, as we
follow the `Nicholas Gallagher variation
-`_
+`_
of the `BEM naming methodology `_.
More information on how BEM works can be found in `this article from
diff --git a/docs/development/getting-started.rst b/docs/development/getting-started.rst
index 763c80dbfeee..7b3a59ff91f9 100644
--- a/docs/development/getting-started.rst
+++ b/docs/development/getting-started.rst
@@ -32,9 +32,9 @@ Detailed installation instructions
Getting the Warehouse source code
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-`Fork `_ the repository
+`Fork `_ the repository
on `GitHub`_ and
-`clone `_ it to
+`clone `_ it to
your local machine:
.. code-block:: console
@@ -42,13 +42,13 @@ your local machine:
git clone git@github.com:YOUR-USERNAME/warehouse.git
Add a `remote
-`_ and
-regularly `sync `_ to make sure
+`_ and
+regularly `sync `_ to make sure
you stay up-to-date with our repository:
.. code-block:: console
- git remote add upstream https://github.com/pypa/warehouse.git
+ git remote add upstream https://github.com/pypi/warehouse.git
git checkout main
git fetch upstream
git merge upstream/main
@@ -398,7 +398,7 @@ migrations. Try modifying your Docker configuration to allow more RAM for each
container, temporarily stop ``make_serve`` and run ``make initdb`` again.
This may also be due to enabling Compose V2 (see
-https://github.com/pypa/warehouse/issues/10772 for more details).
+https://github.com/pypi/warehouse/issues/10772 for more details).
``make initdb`` complains about PostgreSQL Version
@@ -421,12 +421,12 @@ compilation errors due to your system not including libraries
or binaries required by some of Warehouse's dependencies.
An example of such dependency is
-`psycopg2 `_
+`psycopg2 `_
which requires PostgreSQL binaries and will fail if not present.
If there's a specific use case you think requires development outside
Docker please raise an issue in
-`Warehouse's issue tracker `_.
+`Warehouse's issue tracker `_.
Disabling services locally
@@ -489,6 +489,8 @@ Styles are written in the scss variant of Sass and compiled using
``make serve`` is running.
+.. _running-the-interactive-shell:
+
Running the Interactive Shell
-----------------------------
@@ -568,7 +570,7 @@ You can run linters, programs that check the code, with:
make lint
-Warehouse uses `black `_ for opinionated
+Warehouse uses `black `_ for opinionated
formatting and linting. You can reformat with:
.. code-block:: console
@@ -654,9 +656,9 @@ Resources to help you learn Warehouse's context:
.. _`pip`: https://pypi.org/project/pip
.. _`sphinx`: https://pypi.org/project/Sphinx
-.. _`reStructured Text`: http://sphinx-doc.org/rest.html
-.. _`open issues that are labelled "good first issue"`: https://github.com/pypa/warehouse/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22
-.. _`GitHub`: https://github.com/pypa/warehouse
+.. _`reStructured Text`: https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html
+.. _`open issues that are labelled "good first issue"`: https://github.com/pypi/warehouse/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22
+.. _`GitHub`: https://github.com/pypi/warehouse
.. _`on Libera`: https://web.libera.chat/#pypa,#pypa-dev
.. _`Discourse` : https://discuss.python.org/c/packaging/14
.. _`PyPA Discord` : https://discord.gg/pypa
diff --git a/docs/development/index.rst b/docs/development/index.rst
index 9d04ba5be08b..a6c19d14117d 100644
--- a/docs/development/index.rst
+++ b/docs/development/index.rst
@@ -40,8 +40,8 @@ Get involved or find help using:
malware-checks
token-scanning
-.. _`GitHub`: https://github.com/pypa/warehouse
-.. _`"What to put in your bug report"`: http://www.contribution-guide.org/#what-to-put-in-your-bug-report
+.. _`GitHub`: https://github.com/pypi/warehouse
+.. _`"What to put in your bug report"`: https://www.contribution-guide.org/#what-to-put-in-your-bug-report
.. _`Libera`: https://web.libera.chat/#pypa,#pypa-dev
.. _`PyPA Discord`: https://discord.gg/pypa
.. _`Discourse`: https://discuss.python.org/c/packaging/14
diff --git a/docs/development/malware-checks.rst b/docs/development/malware-checks.rst
index 75c0136fddef..c247f250ce91 100644
--- a/docs/development/malware-checks.rst
+++ b/docs/development/malware-checks.rst
@@ -30,7 +30,7 @@ Check Lifecycle
Ideas for new malware checks should first be shared by `opening an issue`_.
This will initiate a discussion with PyPI administrators and among the broader
Python community about the impact of the proposed check. After soliciting
-feedback, `open a pull request to main`_ containing the code for the new check,
+feedback, :doc:`open a pull request to main ` containing the code for the new check,
unit tests, and accompanying documentation. Once the code is reviewed and merged,
it will automatically be deployed to production. PyPI administrators can begin
evaluating the malware check by moving it into the `evaluation` state in the check
@@ -101,8 +101,8 @@ Workflow and Testing
There are a few steps for executing new malware checks in a development
environment:
-#. Complete the `Getting Started`_ instructions to setup a Warehouse
- development environment
+#. Complete the :ref:`Getting Started ` instructions to setup
+ a Warehouse development environment
#. Open `dev/environment`_ and set the ``MALWARE_CHECK_BACKEND`` variable
.. code-block:: bash
@@ -141,7 +141,7 @@ environment:
twine upload --repository-url http://localhost/legacy/ dist/*
Once you've manually validated the basic functioning of your check, add tests
-to the `tests directory`_. See `Submitting Patches`_ for more information about
+to the `tests directory`_. See :doc:`submitting-patches` for more information about
how to contribute.
Existing Checks
@@ -169,23 +169,20 @@ uploads. This system was initially rolled out in February 2020 by
.. |VerdictLifecycle| image:: ../_static/verdict-lifecycle.png
-.. _IMalwareCheckService: https://github.com/pypa/warehouse/blob/master/warehouse/malware/interfaces.py
-.. _DatabaseMalwareCheckService: https://github.com/pypa/warehouse/blob/master/warehouse/malware/services.py
-.. _celery crontab: http://docs.celeryproject.org/en/latest/reference/celery.schedules.html#celery.schedules.crontab
-.. _prepare classmethod: https://github.com/pypa/warehouse/blob/master/warehouse/malware/checks/base.py
-.. _MalwareVerdict model: https://github.com/pypa/warehouse/blob/master/warehouse/malware/models.py
+.. _IMalwareCheckService: https://github.com/pypi/warehouse/blob/main/warehouse/malware/interfaces.py
+.. _DatabaseMalwareCheckService: https://github.com/pypi/warehouse/blob/main/warehouse/malware/services.py
+.. _celery crontab: https://docs.celeryq.dev/en/latest/reference/celery.schedules.html#celery.schedules.crontab
+.. _prepare classmethod: https://github.com/pypi/warehouse/blob/main/warehouse/malware/checks/base.py
+.. _MalwareVerdict model: https://github.com/pypi/warehouse/blob/main/warehouse/malware/models.py
.. |CheckLifecycle| image:: ../_static/check-lifecycle.png
-.. _opening an issue: https://github.com/pypa/warehouse/issues/new?template=malware-check.md
-.. _open a pull request to main: submitting-patches/
-.. _tests/common/checks/: https://github.com/pypa/warehouse/tree/master/tests/common/checks/
-.. _warehouse/malware/checks/: https://github.com/pypa/warehouse/tree/master/warehouse/malware/checks
-.. _dunder init file: https://github.com/pypa/warehouse/tree/master/warehouse/malware/checks/__init__.py
-.. _Getting Started: ../getting-started/#detailed-installation-instructions
-.. _dev/environment: https://github.com/pypa/warehouse/tree/master/dev/environment
+.. _opening an issue: https://github.com/pypi/warehouse/issues/new?template=malware-check.md
+.. _tests/common/checks/: https://github.com/pypi/warehouse/tree/main/tests/common/checks/
+.. _warehouse/malware/checks/: https://github.com/pypi/warehouse/tree/main/warehouse/malware/checks
+.. _dunder init file: https://github.com/pypi/warehouse/blob/main/warehouse/malware/checks/__init__.py
+.. _dev/environment: https://github.com/pypi/warehouse/blob/main/dev/environment
.. _twine: https://twine.readthedocs.io/en/latest/
-.. _tests directory: https://github.com/pypa/warehouse/blob/master/tests/unit/malware/checks
-.. _Submitting Patches: submitting-patches/
-.. _SetupPatternCheck: https://github.com/pypa/warehouse/blob/master/warehouse/malware/checks/setup_patterns/check.py
-.. _PackageTurnoverCheck: https://github.com/pypa/warehouse/blob/master/warehouse/malware/checks/package_turnover/check.py
+.. _tests directory: https://github.com/pypi/warehouse/tree/main/tests/unit/malware/checks
+.. _SetupPatternCheck: https://github.com/pypi/warehouse/blob/main/warehouse/malware/checks/setup_patterns/check.py
+.. _PackageTurnoverCheck: https://github.com/pypi/warehouse/blob/main/warehouse/malware/checks/package_turnover/check.py
.. _Request for Proposal: https://github.com/python/request-for/blob/master/2019-Q4-PyPI/RFP.md#milestone-2---systems-for-automated-detection-of-malicious-uploads
-.. _pull request 7377: https://github.com/pypa/warehouse/pull/7377
+.. _pull request 7377: https://github.com/pypi/warehouse/pull/7377
diff --git a/docs/development/patterns.rst b/docs/development/patterns.rst
index e6bb193a4548..0fa5419e9c2f 100644
--- a/docs/development/patterns.rst
+++ b/docs/development/patterns.rst
@@ -109,4 +109,4 @@ Class Method
.. |pip-tools| replace:: ``pip-tools``
.. _pip-tools: https://pypi.org/project/pip-tools/
-.. _Dependabot pull requests: https://github.com/pypa/warehouse/pulls?q=is%3Apr+is%3Aopen+label%3Adependencies
+.. _Dependabot pull requests: https://github.com/pypi/warehouse/pulls?q=is%3Apr+is%3Aopen+label%3Adependencies
diff --git a/docs/development/reviewing-patches.rst b/docs/development/reviewing-patches.rst
index a268d9ba763b..46ca9a715fc5 100644
--- a/docs/development/reviewing-patches.rst
+++ b/docs/development/reviewing-patches.rst
@@ -58,8 +58,8 @@ Has this output:
origin https://github.com//warehouse.git (fetch)
origin https://github.com//warehouse.git (push)
- upstream https://github.com/pypa/warehouse.git (fetch)
- upstream https://github.com/pypa/warehouse.git (push)
+ upstream https://github.com/pypi/warehouse.git (fetch)
+ upstream https://github.com/pypi/warehouse.git (push)
In this output, ```` is your GitHub username. If you do not have an
``upstream`` branch configured, you can add one by running the following
diff --git a/docs/development/submitting-patches.rst b/docs/development/submitting-patches.rst
index 7ab72a10a8d2..e15042345029 100644
--- a/docs/development/submitting-patches.rst
+++ b/docs/development/submitting-patches.rst
@@ -73,7 +73,7 @@ necessary to update references to these files any time source strings are change
line numbers of the source strings in the source files. This can be done by running ``make translations``.
For instructions on how to mark strings and views for translation,
-see the `Translation Docs`_.
+see the :doc:`../translations` docs.
Keeping your local branch updated
@@ -97,8 +97,8 @@ Your output looks like this:
origin https://github.com/username/warehouse.git (fetch)
origin https://github.com/username/warehouse.git (push)
- upstream https://github.com/pypa/warehouse.git (fetch)
- upstream https://github.com/pypa/warehouse.git (push)
+ upstream https://github.com/pypi/warehouse.git (fetch)
+ upstream https://github.com/pypi/warehouse.git (push)
In the example above, ```` is your username on GitHub.
@@ -184,10 +184,9 @@ as dependency upgrades are merged, so you will probably have to update your
feature branch at least once while you are working on it.
-.. _`Write comments as complete sentences.`: http://nedbatchelder.com/blog/201401/comments_should_be_sentences.html
-.. _`syntax`: http://sphinx-doc.org/domains.html#info-field-lists
-.. _`Studies have shown`: https://smartbear.com/smartbear/media/pdfs/wp-cc-11-best-practices-of-peer-code-review.pdf
-.. _`doc8`: https://github.com/stackforge/doc8
+.. _`Write comments as complete sentences.`: https://nedbatchelder.com/blog/201401/comments_should_be_sentences.html
+.. _`syntax`: https://sphinx-doc.org/domains.html#info-field-lists
+.. _`Studies have shown`: https://static1.smartbear.co/support/media/resources/cc/book/code-review-cisco-case-study.pdf
+.. _`doc8`: https://github.com/PyCQA/doc8
.. _`coverage.py`: https://pypi.org/project/coverage
-.. _`the Black Code Style`: https://github.com/ambv/black#the-black-code-style
-.. _`Translation Docs`: https://warehouse.readthedocs.io/translations/
+.. _`the Black Code Style`: https://github.com/psf/black#the-black-code-style
diff --git a/docs/development/token-scanning.rst b/docs/development/token-scanning.rst
index ee1a4ef7a961..52a1e7f539d6 100644
--- a/docs/development/token-scanning.rst
+++ b/docs/development/token-scanning.rst
@@ -32,9 +32,9 @@ GitHub's Token scanning feature used to be called "Token Scanning" and is now
the regex above (actually the limit to at least 130 characters long). For all
tokens identified within a "push" event, they send us reports in bulk. The
format is explained thouroughly in `their doc
-`_ as well as
+`_ as well as
in the `warehouse implementation ticket
-`_.
+`_.
In short: they send us a cryptographically signed payload describing each
leaked token alongside with a public URL pointing to it.
@@ -74,7 +74,7 @@ GitLab Secret Detection
GitLab also has an equivalent mechanism, named "Secret Detection", not
implemented in Warehouse yet (see `#9280
-`_).
+`_).
PyPI token disclosure infrastructure
------------------------------------
diff --git a/docs/index.rst b/docs/index.rst
index 7db0ccb80288..33a4528b6fbc 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -35,5 +35,5 @@ Indices and tables
* :ref:`search`
.. _`Python package index (repository)`: https://packaging.python.org/glossary/#term-package-index
-.. _`web application`: https://github.com/pypa/warehouse
+.. _`web application`: https://github.com/pypi/warehouse
.. _PyPI: https://pypi.org
diff --git a/docs/roadmap.rst b/docs/roadmap.rst
index ff18c60b619f..64e74298bce1 100644
--- a/docs/roadmap.rst
+++ b/docs/roadmap.rst
@@ -77,14 +77,14 @@ Sprint planners should consider the following checklist for organising events:
useful for large issues, or for newer developers.
.. _`security, accessibility, and localization work funded by the Open Technology Fund`: https://pyfound.blogspot.com/2019/03/commencing-security-accessibility-and.html
-.. _`two-factor authentication for PyPI`: https://github.com/pypa/warehouse/issues/996
-.. _`Security milestone`: https://github.com/pypa/warehouse/milestone/13
-.. _`accessibility milestone`: https://github.com/pypa/warehouse/milestone/15
-.. _`localisation milestone`: https://github.com/pypa/warehouse/milestone/14
-.. _`package signing & detection/verification milestone`: https://github.com/pypa/warehouse/milestone/16
+.. _`two-factor authentication for PyPI`: https://github.com/pypi/warehouse/issues/996
+.. _`Security milestone`: https://github.com/pypi/warehouse/milestone/13
+.. _`accessibility milestone`: https://github.com/pypi/warehouse/milestone/15
+.. _`localisation milestone`: https://github.com/pypi/warehouse/milestone/14
+.. _`package signing & detection/verification milestone`: https://github.com/pypi/warehouse/milestone/16
.. _`This work is funded by a gift from Facebook.`: https://pyfound.blogspot.com/2018/12/upcoming-pypi-improvements-for-2019.html
-.. _`issues marked with the post-legacy shutdown milestone`: https://github.com/pypa/warehouse/milestone/12
-.. _`issues marked with the cool-but-not-urgent milestone`: https://github.com/pypa/warehouse/milestone/11
-.. _`contact us`: https://github.com/pypa/warehouse/blob/master/README.rst#discussion
+.. _`issues marked with the post-legacy shutdown milestone`: https://github.com/pypi/warehouse/milestone/12
+.. _`issues marked with the cool-but-not-urgent milestone`: https://github.com/pypi/warehouse/milestone/11
+.. _`contact us`: https://github.com/pypi/warehouse/blob/master/README.rst#discussion
.. _`our past roadmap`: https://wiki.python.org/psf/WarehouseRoadmap
.. _`sprints`: https://wiki.python.org/psf/PackagingSprints
diff --git a/docs/translations.rst b/docs/translations.rst
index 4e5f097a53a0..f306fcff23b2 100644
--- a/docs/translations.rst
+++ b/docs/translations.rst
@@ -6,7 +6,7 @@ We use `Weblate `_ to manage PyPI translations across seve
to contribute.
If you are experiencing issues as a translator, please let us know by opening a
-`translation issue on the Warehouse issue tracker `_.
+`translation issue on the Warehouse issue tracker `_.
Adding a newly completed translation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -20,7 +20,7 @@ it's MO file (Machine Object file) compiled.
To add a new known locale:
1. Check for `outstanding Weblate pull requests
- `_ and merge them if so.
+ `_ and merge them if so.
2. In a new branch, add a key/value to the ``KNOWN_LOCALES`` mapping in
|warehouse/i18n/__init__.py|_.
The key is the locale code, and corresponds to a directory in
@@ -28,7 +28,7 @@ To add a new known locale:
3. Commit these changes and make a new pull request.
.. |warehouse/i18n/__init__.py| replace:: ``warehouse/i18n/__init__.py``
-.. _warehouse/i18n/__init__.py: https://github.com/pypa/warehouse/blob/master/warehouse/i18n/__init__.py
+.. _warehouse/i18n/__init__.py: https://github.com/pypi/warehouse/blob/main/warehouse/i18n/__init__.py
Marking new strings for translation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/docs/ui-principles.rst b/docs/ui-principles.rst
index 52ba5d953529..f87f88e1440c 100644
--- a/docs/ui-principles.rst
+++ b/docs/ui-principles.rst
@@ -28,12 +28,12 @@ When working on the UI:
- Ensure contrast is high, particularly on text. This can be checked:
- On Chrome by installing `Accessibility Developer Tools
- `_
+ `_
- On Firefox by installing the `WCAG Contrast Checker
- `_
+ `_
- Write `semantic HTML `_
- Ensure image `alt tags are present and meaningful
- `_
+ `_
- Add labels to all form fields (if you want to hide a label visually but leave
it readable to screen readers, apply ``.sr-only``)
- Where possible add `ARIA roles
@@ -69,7 +69,7 @@ Warehouse follows the `Material design writing style guide
When writing interfaces use direct, clear and simple language. This is
especially important as Warehouse caters to an international audience with
varying proficiency in English. If you're unsure, `check the readability of
-your text `_.
+your text `_.
For consistency, we prefer using American English spellings over British
English.
diff --git a/requirements/main.in b/requirements/main.in
index 73f8dda6eb16..dba1f954d51b 100644
--- a/requirements/main.in
+++ b/requirements/main.in
@@ -53,7 +53,7 @@ redis>=2.8.0,<5.0.0
rfc3986
sentry-sdk
setuptools
-sqlalchemy[asyncio]>=0.9,<1.5.0 # https://github.com/pypa/warehouse/pull/9228
+sqlalchemy[asyncio]>=0.9,<1.5.0 # https://github.com/pypi/warehouse/pull/9228
sqlalchemy-citext
sqlalchemy-utils
stdlib-list
diff --git a/tests/functional/test_templates.py b/tests/functional/test_templates.py
index fdd0c7b21e9a..931fcd5376d4 100644
--- a/tests/functional/test_templates.py
+++ b/tests/functional/test_templates.py
@@ -39,7 +39,7 @@
def test_templates_for_empty_titles():
"""
Test if all HTML templates have defined the title block. See
- https://github.com/pypa/warehouse/issues/784
+ https://github.com/pypi/warehouse/issues/784
"""
dir_name = os.path.join(os.path.dirname(warehouse.__file__), "templates")
@@ -76,7 +76,7 @@ def test_templates_for_empty_titles():
def test_render_templates():
"""
Test if all HTML templates are rendered without Jinja exceptions.
- see https://github.com/pypa/warehouse/issues/6634
+ see https://github.com/pypi/warehouse/issues/6634
"""
dir_name = os.path.join(os.path.dirname(warehouse.__file__), "templates")
diff --git a/tests/unit/packaging/test_models.py b/tests/unit/packaging/test_models.py
index 2ee6729ba832..52d0bb7c45de 100644
--- a/tests/unit/packaging/test_models.py
+++ b/tests/unit/packaging/test_models.py
@@ -371,23 +371,23 @@ def test_acl(self, db_session):
[
(None, None),
(
- "https://github.com/pypa/warehouse",
- "https://api.github.com/repos/pypa/warehouse",
+ "https://github.com/pypi/warehouse",
+ "https://api.github.com/repos/pypi/warehouse",
),
(
- "https://github.com/pypa/warehouse/",
- "https://api.github.com/repos/pypa/warehouse",
+ "https://github.com/pypi/warehouse/",
+ "https://api.github.com/repos/pypi/warehouse",
),
(
- "https://github.com/pypa/warehouse/tree/master",
- "https://api.github.com/repos/pypa/warehouse",
+ "https://github.com/pypi/warehouse/tree/main",
+ "https://api.github.com/repos/pypi/warehouse",
),
(
- "https://www.github.com/pypa/warehouse",
- "https://api.github.com/repos/pypa/warehouse",
+ "https://www.github.com/pypi/warehouse",
+ "https://api.github.com/repos/pypi/warehouse",
),
("https://github.com/pypa/", None),
- ("https://google.com/pypa/warehouse/tree/master", None),
+ ("https://google.com/pypi/warehouse/tree/main", None),
("https://google.com", None),
("incorrect url", None),
],
diff --git a/warehouse/cache/origin/__init__.py b/warehouse/cache/origin/__init__.py
index 7416c2947c57..26f1b5a6ce1e 100644
--- a/warehouse/cache/origin/__init__.py
+++ b/warehouse/cache/origin/__init__.py
@@ -118,7 +118,7 @@ def key_maker(obj):
# a limit to how many surrogate keys we can attach to a single HTTP
# response, and being able to use use `iterate_on` would allow this
# size to be unbounded.
- # ref: https://github.com/pypa/warehouse/pull/3189
+ # ref: https://github.com/pypi/warehouse/pull/3189
cache=[k.format(obj=obj) for k in cache_keys],
purge=chain.from_iterable(key(obj) for key in purge_keys),
)
diff --git a/warehouse/forklift/legacy.py b/warehouse/forklift/legacy.py
index 1959be1bac56..088e8557a22c 100644
--- a/warehouse/forklift/legacy.py
+++ b/warehouse/forklift/legacy.py
@@ -793,8 +793,8 @@ def file_upload(request):
# Ensure that user has a verified, primary email address. This should both
# reduce the ease of spam account creation and activity, as well as act as
- # a forcing function for https://github.com/pypa/warehouse/issues/3632.
- # TODO: Once https://github.com/pypa/warehouse/issues/3632 has been solved,
+ # a forcing function for https://github.com/pypi/warehouse/issues/3632.
+ # TODO: Once https://github.com/pypi/warehouse/issues/3632 has been solved,
# we might consider a different condition, possibly looking at
# User.is_active instead.
if not (request.user.primary_email and request.user.primary_email.verified):
@@ -833,8 +833,8 @@ def file_upload(request):
# Check if any fields were supplied as a tuple and have become a
# FieldStorage. The 'content' and 'gpg_signature' fields _should_ be a
# FieldStorage, however.
- # ref: https://github.com/pypa/warehouse/issues/2185
- # ref: https://github.com/pypa/warehouse/issues/2491
+ # ref: https://github.com/pypi/warehouse/issues/2185
+ # ref: https://github.com/pypi/warehouse/issues/2491
for field in set(request.POST) - {"content", "gpg_signature"}:
values = request.POST.getall(field)
if any(isinstance(value, FieldStorage) for value in values):
@@ -1224,7 +1224,7 @@ def file_upload(request):
# Note: Changing this error message to something that doesn't
# start with "File already exists" will break the
# --skip-existing functionality in twine
- # ref: https://github.com/pypa/warehouse/issues/3482
+ # ref: https://github.com/pypi/warehouse/issues/3482
# ref: https://github.com/pypa/twine/issues/332
"File already exists. See "
+ request.help_url(_anchor="file-name-reuse")
diff --git a/warehouse/locale/messages.pot b/warehouse/locale/messages.pot
index ca7dd6d376fc..04525c9cca90 100644
--- a/warehouse/locale/messages.pot
+++ b/warehouse/locale/messages.pot
@@ -621,7 +621,7 @@ msgstr ""
#: warehouse/templates/500.html:37
msgid ""
-"Consider contributing or donating to help us build a more"
diff --git a/warehouse/macaroons/caveats.py b/warehouse/macaroons/caveats.py
index 79040c100de8..59c428ae7294 100644
--- a/warehouse/macaroons/caveats.py
+++ b/warehouse/macaroons/caveats.py
@@ -29,7 +29,7 @@ class Caveat:
def __init__(self, verifier):
self.verifier = verifier
# TODO: Surface this failure reason to the user.
- # See: https://github.com/pypa/warehouse/issues/9018
+ # See: https://github.com/pypi/warehouse/issues/9018
self.failure_reason = None
def verify(self, predicate) -> bool:
diff --git a/warehouse/packaging/tasks.py b/warehouse/packaging/tasks.py
index 63c63ef1111a..64c0885dedaf 100644
--- a/warehouse/packaging/tasks.py
+++ b/warehouse/packaging/tasks.py
@@ -331,7 +331,7 @@ def update_bigquery_release_files(task, request, dist_metadata):
# str instead of a list, hence, this workaround to comply
# with PEP 345 and the Core Metadata specifications.
# This extra check can be removed once
- # https://github.com/pypa/warehouse/issues/8257 is fixed
+ # https://github.com/pypi/warehouse/issues/8257 is fixed
if isinstance(field_data, str):
json_rows[sch.name] = [field_data]
else:
@@ -392,7 +392,7 @@ def populate_data_using_schema(file):
# str instead of a list, hence, this workaround to comply
# with PEP 345 and the Core Metadata specifications.
# This extra check can be removed once
- # https://github.com/pypa/warehouse/issues/8257 is fixed
+ # https://github.com/pypi/warehouse/issues/8257 is fixed
if isinstance(field_data, str):
row_data[sch.name] = [field_data]
else:
diff --git a/warehouse/templates/500.html b/warehouse/templates/500.html
index cd497f5ead67..2fff9a76e338 100644
--- a/warehouse/templates/500.html
+++ b/warehouse/templates/500.html
@@ -36,7 +36,7 @@
{% trans %}Rely on PyPI to get your job done?{% endtrans %}
{% trans trimmed %}
Consider
-
+
contributing
or
diff --git a/warehouse/templates/base.html b/warehouse/templates/base.html
index 1836f993bc36..120dba917fcd 100644
--- a/warehouse/templates/base.html
+++ b/warehouse/templates/base.html
@@ -281,9 +281,9 @@
- {% trans trimmed href='https://github.com/pypa/warehouse/issues', title=gettext('External link') %}
+ {% trans trimmed href='https://github.com/pypi/warehouse/issues', title=gettext('External link') %}
If you are experiencing an accessibility problem, report it to us on GitHub, so we can try to fix the problem, for you and others.
{% endtrans %}
@@ -760,7 +760,7 @@
{{ new_classifier() }}
{{ feedback() }}
- {% trans trimmed href='https://github.com/pypa/warehouse/issues', title=gettext('External link') %}
+ {% trans trimmed href='https://github.com/pypi/warehouse/issues', title=gettext('External link') %}
If you're experiencing an issue with PyPI itself, we welcome constructive feedback and bug reports
via our issue tracker.
Please note that this tracker is only for issues with the software that runs PyPI.
@@ -776,7 +776,7 @@
{% trans %}About{% endtrans %}
{{ maintainers() }}
- {% trans trimmed href='https://warehouse.readthedocs.io/', title=gettext('External link') %}
+ {% trans trimmed href='https://warehouse.pypa.io/', title=gettext('External link') %}
PyPI is powered by the Warehouse project; Warehouse is an open source project developed under the umbrella of the Python Packaging Authority (PyPA) and supported by the Python Packaging Working Group (PackagingWG).
{% endtrans %}
@@ -796,7 +796,7 @@
{{ maintainers() }}
{{ sponsors() }}
- {% trans trimmed warehouse_href='https://warehouse.readthedocs.io/', sponsors_href=request.route_path('sponsors'), title=gettext('External link') %}
+ {% trans trimmed warehouse_href='https://warehouse.pypa.io/', sponsors_href=request.route_path('sponsors'), title=gettext('External link') %}
PyPI is powered by Warehouse
and by a variety of tools and services provided by our generous sponsors.
{% endtrans %}
@@ -819,7 +819,7 @@
{{ availability() }}
{{ contributing() }}
- {% trans trimmed href='https://warehouse.readthedocs.io/', title=gettext('External link') %}
+ {% trans trimmed href='https://warehouse.pypa.io/', title=gettext('External link') %}
We have a huge amount of work to do to continue to maintain and improve PyPI
(also known as the Warehouse project).
{% endtrans %}
@@ -827,7 +827,7 @@
{% trans %}Development:{% endtrans %} {% trans %}Warehouse is open source, and we would love to see some new faces working on the project. You do not need to be an experienced open-source developer to make a contribution – in fact, we'd love to help you make your first open source pull request!{% endtrans %}
- {% trans trimmed getting_started_href='https://warehouse.readthedocs.io/development/getting-started/', issue_tracker_href='https://github.com/pypa/warehouse/issues', good_first_issue_href='https://github.com/pypa/warehouse/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22', title=gettext('External link') %}
+ {% trans trimmed getting_started_href='https://warehouse.pypa.io/development/getting-started/', issue_tracker_href='https://github.com/pypi/warehouse/issues', good_first_issue_href='https://github.com/pypi/warehouse/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22', title=gettext('External link') %}
If you have skills in Python, ElasticSearch, HTML, SCSS, JavaScript, or SQLAlchemy then skim our
"Getting started" guide,
then take a look at the issue tracker.
@@ -835,7 +835,7 @@
{{ contributing() }}
{% endtrans %}
- {% trans trimmed href='https://github.com/pypa/warehouse/milestones', title=gettext('External link') %}
+ {% trans trimmed href='https://github.com/pypi/warehouse/milestones', title=gettext('External link') %}
Issues are grouped into milestones;
working on issues in the current milestone is a great way to help push the project forward.
If you're interested in working on a particular issue, leave a comment and we can guide you through the contribution process.
@@ -852,7 +852,7 @@
{{ contributing() }}
{{ upcoming_changes() }}
- {% trans trimmed mailing_list_href='https://mail.python.org/mm3/mailman3/lists/pypi-announce.python.org/', blog_href='https://pyfound.blogspot.com/search/label/pypi', atom_href='https://pyfound.blogspot.com/feeds/posts/default/-/pypi', rss_href='https://pyfound.blogspot.com/feeds/posts/default/-/pypi?alt=rss', title=gettext('External link') %}
+ {% trans trimmed mailing_list_href='https://mail.python.org/mailman3/lists/pypi-announce.python.org/', blog_href='https://pyfound.blogspot.com/search/label/pypi', atom_href='https://pyfound.blogspot.com/feeds/posts/default/-/pypi', rss_href='https://pyfound.blogspot.com/feeds/posts/default/-/pypi?alt=rss', title=gettext('External link') %}
Changes to PyPI are generally announced on both the
pypi-announce mailing list
and the PSF blog under the label "pypi".
diff --git a/warehouse/utils/db/windowed_query.py b/warehouse/utils/db/windowed_query.py
index 6f644b360b98..7559ceda6a06 100644
--- a/warehouse/utils/db/windowed_query.py
+++ b/warehouse/utils/db/windowed_query.py
@@ -11,7 +11,7 @@
# limitations under the License.
# Taken from "Theatrum Chemicum" at
-# https://bitbucket.org/zzzeek/sqlalchemy/wiki/UsageRecipes/WindowedRangeQuery
+# https://github.com/sqlalchemy/sqlalchemy/wiki/RangeQuery-and-WindowedRangeQuery
from sqlalchemy import and_, func, text