Skip to content

Commit

Permalink
Meta: Allow adding date to Resolution header (#4061)
Browse files Browse the repository at this point in the history
Fixes #4054

Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
  • Loading branch information
JelleZijlstra and hugovk authored Oct 16, 2024
1 parent 6fd5759 commit c56c5c5
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 10 deletions.
4 changes: 2 additions & 2 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -211,9 +211,9 @@ repos:
files: '^peps/pep-\d+\.rst$'

- id: validate-resolution
name: "'Resolution' must be a direct thread/message URL"
name: "'Resolution' must be a direct thread/message URL or '`DD-mmm-YYYY <URL>`__'"
language: pygrep
entry: '(?<!\n\n)(?<=\n)Resolution: (?:(?!https://((discuss\.python\.org/t/([\w\-]+/)?\d+(/\d+)?/?)|(mail\.python\.org/pipermail/[\w\-]+/\d{4}-[A-Za-z]+/[A-Za-z0-9]+\.html)|(mail\.python\.org/archives/list/[\w\-]+@python\.org/(message|thread)/[A-Za-z0-9]+/?(#[A-Za-z0-9]+)?))\n))'
entry: '(?<!\n\n)(?<=\n)Resolution: (?:(?!https://((discuss\.python\.org/t/([\w\-]+/)?\d+(/\d+)?/?)|(mail\.python\.org/pipermail/[\w\-]+/\d{4}-[A-Za-z]+/[A-Za-z0-9]+\.html)|(mail\.python\.org/archives/list/[\w\-]+@python\.org/(message|thread)/[A-Za-z0-9]+/?(#[A-Za-z0-9]+)?)))|`([0-2][0-9]|(3[01]))-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(199[0-9]|20[0-9][0-9]) <(?:(?!https://((discuss\.python\.org/t/([\w\-]+/)?\d+(/\d+)?/?)|(mail\.python\.org/pipermail/[\w\-]+/\d{4}-[A-Za-z]+/[A-Za-z0-9]+\.html)|(mail\.python\.org/archives/list/[\w\-]+@python\.org/(message|thread)/[A-Za-z0-9]+/?(#[A-Za-z0-9]+)?)))>`__))\n'
args: ['--multiline']
files: '^peps/pep-\d+\.rst$'

Expand Down
19 changes: 14 additions & 5 deletions check-peps.py
Original file line number Diff line number Diff line change
Expand Up @@ -407,7 +407,7 @@ def _validate_python_version(line_num: int, line: str) -> MessageIterator:


def _validate_post_history(line_num: int, body: str) -> MessageIterator:
"""'Post-History' must be '`DD-mmm-YYYY <Thread URL>`__, …'"""
"""'Post-History' must be '`DD-mmm-YYYY <Thread URL>`__, …' or `DD-mmm-YYYY`"""

if body == "":
return
Expand All @@ -422,19 +422,28 @@ def _validate_post_history(line_num: int, body: str) -> MessageIterator:
yield from _date(offset, post_date, "Post-History")
yield from _thread(offset, post_url, "Post-History")
else:
yield offset, f"post line must be a date or both start with “`” and end with “>`__”"
yield offset, "post line must be a date or both start with “`” and end with “>`__”"


def _validate_resolution(line_num: int, line: str) -> MessageIterator:
"""'Resolution' must be a direct thread/message URL"""

yield from _thread(line_num, line, "Resolution", allow_message=True)
"""'Resolution' must be a direct thread/message URL or a link with a date."""

prefix, postfix = (line.startswith("`"), line.endswith(">`__"))
if not prefix and not postfix:
yield from _thread(line_num, line, "Resolution", allow_message=True)
elif prefix and postfix:
post_date, post_url = line[1:-4].split(" <")
yield from _date(line_num, post_date, "Resolution")
yield from _thread(line_num, post_url, "Resolution", allow_message=True)
else:
yield line_num, "Resolution line must be a link or both start with “`” and end with “>`__”"


########################
# Validation Helpers #
########################


def _pep_num(line_num: int, pep_number: str, prefix: str) -> MessageIterator:
if pep_number == "":
yield line_num, f"{prefix} must not be blank: {pep_number!r}"
Expand Down
3 changes: 3 additions & 0 deletions pep_sphinx_extensions/pep_processor/transforms/pep_headers.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ def apply(self) -> None:
if (not isinstance(node, nodes.reference)
or not node["refuri"]):
continue
# If the Resolution header is already a link, don't prettify it
if name == "resolution" and node["refuri"] != node[0]:
continue
# Have known mailto links link to their main list pages
if node["refuri"].lower().startswith("mailto:"):
node["refuri"] = _generate_list_url(node["refuri"])
Expand Down
9 changes: 9 additions & 0 deletions pep_sphinx_extensions/tests/pep_lint/test_pep_lint.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import check_peps # NoQA: inserted into sys.modules in conftest.py

from ..conftest import PEP_ROOT

PEP_9002 = Path(__file__).parent.parent / "peps" / "pep-9002.rst"


Expand Down Expand Up @@ -46,3 +48,10 @@ def test_with_fake_pep():
(20, "Resolution must be a valid thread URL"),
(23, "Use the :pep:`NNN` role to refer to PEPs"),
]


def test_skip_direct_pep_link_check():
filename = PEP_ROOT / "pep-0009.rst" # in SKIP_DIRECT_PEP_LINK_CHECK
content = filename.read_text(encoding="utf-8").splitlines()
warnings = list(check_peps.check_peps(filename, content))
assert warnings == []
29 changes: 29 additions & 0 deletions pep_sphinx_extensions/tests/pep_lint/test_post_url.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,20 @@ def test_validate_post_history_valid(body: str):
assert warnings == [], warnings


@pytest.mark.parametrize(
"body",
[
"31-Jul-2015 <https://discuss.python.org/t/123456>`__,",
"`31-Jul-2015 <https://discuss.python.org/t/123456>",
],
)
def test_validate_post_history_unbalanced_link(body: str):
warnings = [warning for (_, warning) in check_peps._validate_post_history(1, body)]
assert warnings == [
"post line must be a date or both start with “`” and end with “>`__”"
], warnings


@pytest.mark.parametrize(
"line",
[
Expand All @@ -90,6 +104,7 @@ def test_validate_post_history_valid(body: str):
"https://mail.python.org/archives/list/list-name@python.org/message/abcXYZ123/#Anchor",
"https://mail.python.org/archives/list/list-name@python.org/message/abcXYZ123#Anchor123",
"https://mail.python.org/archives/list/list-name@python.org/message/abcXYZ123/#Anchor123",
"`16-Oct-2024 <https://mail.python.org/archives/list/list-name@python.org/thread/abcXYZ123>`__",
],
)
def test_validate_resolution_valid(line: str):
Expand Down Expand Up @@ -117,6 +132,20 @@ def test_validate_resolution_invalid(line: str):
assert warnings == ["Resolution must be a valid thread URL"], warnings


@pytest.mark.parametrize(
"line",
[
"01-Jan-2000 <https://mail.python.org/pipermail/list-name/0000-Month/0123456.html>`__",
"`01-Jan-2000 <https://mail.python.org/pipermail/list-name/0000-Month/0123456.html>",
],
)
def test_validate_resolution_unbalanced_link(line: str):
warnings = [warning for (_, warning) in check_peps._validate_resolution(1, line)]
assert warnings == [
"Resolution line must be a link or both start with “`” and end with “>`__”"
], warnings


@pytest.mark.parametrize(
"thread_url",
[
Expand Down
2 changes: 1 addition & 1 deletion peps/pep-0001.rst
Original file line number Diff line number Diff line change
Expand Up @@ -621,7 +621,7 @@ optional and are described below. All other headers are required.
inline-linked to PEP discussion threads>
* Replaces: <pep number>
* Superseded-By: <pep number>
* Resolution: <url>
* Resolution: <date in dd-mmm-yyyy format, linked to the acceptance/rejection post>
The Author header lists the names, and optionally the email addresses
of all the authors/owners of the PEP. The format of the Author header
Expand Down
2 changes: 1 addition & 1 deletion peps/pep-0702.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Created: 30-Dec-2022
Python-Version: 3.13
Post-History: `01-Jan-2023 <https://mail.python.org/archives/list/typing-sig@python.org/thread/AKTFUYW3WDT7R7PGRIJQZMYHMDJNE4QH/>`__,
`22-Jan-2023 <https://discuss.python.org/t/pep-702-marking-deprecations-using-the-type-system/23036>`__
Resolution: https://discuss.python.org/t/pep-702-marking-deprecations-using-the-type-system/23036/61
Resolution: `07-Nov-2023 <https://discuss.python.org/t/pep-702-marking-deprecations-using-the-type-system/23036/61>`__

.. canonical-typing-spec:: :ref:`typing:deprecated` and
:external+py3.13:func:`@warnings.deprecated<warnings.deprecated>`
Expand Down
2 changes: 1 addition & 1 deletion peps/pep-0735.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Type: Standards Track
Topic: Packaging
Created: 20-Nov-2023
Post-History: `14-Nov-2023 <https://discuss.python.org/t/29684>`__, `20-Nov-2023 <https://discuss.python.org/t/39233>`__
Resolution: https://discuss.python.org/t/39233/312
Resolution: `10-Oct-2024 <https://discuss.python.org/t/39233/312>`__


Abstract
Expand Down

0 comments on commit c56c5c5

Please sign in to comment.