Skip to content

Meta: Allow adding date to Resolution header #4061

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Oct 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@
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

Check warning on line 124 in pep_sphinx_extensions/pep_processor/transforms/pep_headers.py

View check run for this annotation

Codecov / codecov/patch

pep_sphinx_extensions/pep_processor/transforms/pep_headers.py#L123-L124

Added lines #L123 - L124 were not covered by tests
# 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/[email protected]/message/abcXYZ123/#Anchor",
"https://mail.python.org/archives/list/[email protected]/message/abcXYZ123#Anchor123",
"https://mail.python.org/archives/list/[email protected]/message/abcXYZ123/#Anchor123",
"`16-Oct-2024 <https://mail.python.org/archives/list/[email protected]/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/[email protected]/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