Skip to content

Commit 5bd158c

Browse files
authored
feat: add schema and validate-pyproject support (#130)
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
1 parent 13f862c commit 5bd158c

File tree

8 files changed

+113
-12
lines changed

8 files changed

+113
-12
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ repos:
88
hooks:
99
- id: black-jupyter
1010

11-
- repo: https://github.com/asottile/blacken-docs
11+
- repo: https://github.com/adamchainz/blacken-docs
1212
rev: 1.16.0
1313
hooks:
1414
- id: blacken-docs

docs/api/repo_review.resources.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
repo\_review.resources package
2+
==============================
3+
4+
.. automodule:: repo_review.resources
5+
:members:
6+
:undoc-members:
7+
:show-inheritance:

docs/api/repo_review.rst

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ repo\_review package
66
:undoc-members:
77
:show-inheritance:
88

9+
Subpackages
10+
-----------
11+
12+
.. toctree::
13+
:maxdepth: 4
14+
15+
repo_review.resources
16+
917
Submodules
1018
----------
1119

@@ -56,3 +64,11 @@ repo\_review.processor module
5664
:members:
5765
:undoc-members:
5866
:show-inheritance:
67+
68+
repo\_review.schema module
69+
--------------------------
70+
71+
.. automodule:: repo_review.schema
72+
:members:
73+
:undoc-members:
74+
:show-inheritance:

pyproject.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ cli = [
4444
]
4545
test = [
4646
"pytest >=7",
47-
"sp-repo-review",
47+
"sp-repo-review >=2023.8.3",
48+
"validate-pyproject >=0.14",
4849
]
4950
dev = [
5051
"repo-review[test,cli]",
@@ -75,6 +76,9 @@ repo-review = "repo_review.__main__:main"
7576
pyproject = "repo_review.fixtures:pyproject"
7677
list_all = "repo_review.fixtures:list_all"
7778

79+
[project.entry-points."validate_pyproject.tool_schema"]
80+
repo-review = "repo_review.schema:get_schema"
81+
7882

7983
[tool.hatch]
8084
version.source = "vcs"

src/repo_review/resources/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from __future__ import annotations
2+
3+
import importlib.resources
4+
5+
__all__ = ["resources"]
6+
7+
8+
resources = importlib.resources.files(__name__)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-07/schema",
3+
"$id": "https://github.com/scientific-python/repo-review/blob/main/src/repo_review/resources/repo-review.schema.json",
4+
"description": "Repo-review's settings.",
5+
"type": "object",
6+
"additionalProperties": false,
7+
"properties": {
8+
"select": {
9+
"$ref": "#/$defs/checks"
10+
},
11+
"ignore": {
12+
"$ref": "#/$defs/checks"
13+
}
14+
},
15+
"$defs": {
16+
"checks": {
17+
"type": "array",
18+
"items": {
19+
"type": "string",
20+
"pattern": "^[A-Z]+[0-9]*$"
21+
}
22+
}
23+
}
24+
}

src/repo_review/schema.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
"""
2+
This accesses the schema for repo-review's tool section.
3+
"""
4+
5+
from __future__ import annotations
6+
7+
import json
8+
from typing import Any
9+
10+
from .resources import resources
11+
12+
__all__ = ["get_schema"]
13+
14+
15+
def __dir__() -> list[str]:
16+
return __all__
17+
18+
19+
def get_schema(tool_name: str = "repo-review") -> dict[str, Any]:
20+
"Get the stored complete schema for repo-review settings."
21+
assert tool_name == "repo-review", "Only repo-review is supported."
22+
23+
with resources.joinpath("repo-review.schema.json").open(encoding="utf-8") as f:
24+
return json.load(f) # type: ignore[no-any-return]

tests/test_package.py

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from __future__ import annotations
22

3+
import textwrap
34
from pathlib import Path
45

56
import pytest
67

78
import repo_review as m
8-
from repo_review.ghpath import GHPath
99
from repo_review.processor import process
1010

1111
DIR = Path(__file__).parent.resolve()
@@ -15,15 +15,33 @@ def test_version():
1515
assert m.__version__
1616

1717

18-
@pytest.mark.skip(reason="Can be rate limited")
19-
def test_pyodide():
20-
pytest.importorskip("sp_repo_review")
21-
package = GHPath(repo="scientific-python/repo-review", branch="main")
22-
results = process(package)
23-
assert results
24-
25-
2618
def test_local():
19+
pytest.importorskip("sp_repo_review")
20+
pytest.importorskip("validate_pyproject")
2721
package = DIR.parent
2822
results = process(package)
29-
assert results
23+
assert "hatchling.build" in results.families["general"]["description"]
24+
assert "BSD License" in results.families["general"]["description"]
25+
assert "[tool.repo-review]" in results.families["validate-pyproject"]["description"]
26+
for result in results.results:
27+
if result.name in {"PC111"}: # TODO: update after next sp-repo-review release
28+
continue
29+
assert result.result
30+
31+
32+
def test_broken_validate_pyproject(tmp_path: Path) -> None:
33+
pytest.importorskip("validate_pyproject")
34+
tmp_path.joinpath("pyproject.toml").write_text(
35+
textwrap.dedent(
36+
"""\
37+
[tool.repo-review]
38+
ignore = ["a2"]
39+
"""
40+
)
41+
)
42+
43+
results = process(tmp_path)
44+
45+
(result,) = (r for r in results.results if r.name == "VPP001")
46+
assert "must match pattern" in result.err_msg
47+
assert not result.result

0 commit comments

Comments
 (0)