Skip to content

Commit

Permalink
feat: add a simple CLI
Browse files Browse the repository at this point in the history
Signed-off-by: Henry Schreiner <[email protected]>
  • Loading branch information
henryiii committed Oct 10, 2024
1 parent bd15fbf commit f900010
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
8 changes: 8 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,19 @@ test = [
'tomli>=1.0.0;python_version<"3.11"',
'exceptiongroup;python_version<"3.11"', # Optional
]
cli = [
"tomli;python_version<'3.11'",
'exceptiongroup;python_version<"3.11"',
]

[project.urls]
changelog = "https://pep621.readthedocs.io/en/stable/changelog.html"
homepage = "https://github.com/pypa/pyproject-metadata"

[project.scripts]
pyproject-metadata = "pyproject_metadata.__main__:main"


[tool.flit.sdist]
include = ["LICENSE", "tests/**", "docs/**", ".gitignore"]

Expand Down
73 changes: 73 additions & 0 deletions pyproject_metadata/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import argparse
import json
import sys
from pathlib import Path

import pyproject_metadata
import pyproject_metadata.errors


def json_command(args: argparse.Namespace) -> None:
if sys.version_info < (3, 11):
import tomli as tomllib
import exceptiongroup

pyproject_metadata.errors.ExceptionGroup = exceptiongroup.ExceptionGroup
else:
import tomllib

with args.input.open("rb") as f:
pyproject = tomllib.load(f)
metadata = pyproject_metadata.StandardMetadata.from_pyproject(pyproject, allow_extra_keys=True, all_errors=True)
json.dump(metadata.as_json(), sys.stdout, indent=2)


def validate_command(args: argparse.Namespace) -> None:
if sys.version_info < (3, 11):
import tomli as tomllib
from exceptiongroup import ExceptionGroup

pyproject_metadata.errors.ExceptionGroup = ExceptionGroup

else:
import tomllib

with args.input.open("rb") as f:
pyproject = tomllib.load(f)
try:
pyproject_metadata.StandardMetadata.from_pyproject(pyproject, allow_extra_keys=False, all_errors=True)
except ExceptionGroup as e:
extra_keys_top = pyproject_metadata.extras_top_level(pyproject)
if extra_keys_top:
msg = f"Unknown keys in top-level of pyproject.toml: {', '.join(extra_keys_top)}"
e = ExceptionGroup(
e.message, (*e.exceptions, pyproject_metadata.errors.ConfigurationError(msg))
)
extra_keys_build = pyproject_metadata.extras_build_system(pyproject)
if extra_keys_build:
msg = f"Unknown keys in build-system of pyproject.toml: {', '.join(extra_keys_build)}"
e = ExceptionGroup(
e.message, (*e.exceptions, pyproject_metadata.errors.ConfigurationError(msg))
)
raise e from None

def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument('-v,--version', action='version', version=f'validate-pyproject {pyproject_metadata.__version__}')

subparsers = parser.add_subparsers(required=True)

json_parser = subparsers.add_parser("json")
json_parser.add_argument("input", type=Path, nargs="?", help="Path to pyproject.toml file", default=Path("pyproject.toml"))
json_parser.set_defaults(func=json_command)

validate_parser = subparsers.add_parser("validate")
validate_parser.add_argument("input", type=Path, nargs="?", help="Path to pyproject.toml file", default=Path("pyproject.toml"))
validate_parser.set_defaults(func=validate_command)

args = parser.parse_args()
args.func(args)


if __name__ == "__main__":
main()

0 comments on commit f900010

Please sign in to comment.