diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2fe2e13..2520907 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,7 +10,7 @@ Prerequisites: # Arch Linux pacman -S uv just # optional -pacman -S just-lsp yamlfmt shellcheck typos +pacman -S just-lsp yamlfmt shellcheck typos git-delta ``` The development environment and testing requires multiple specific Python versions; they can be installed with (inside the pulled git project directory): diff --git a/justfile b/justfile index 869c7e7..a298867 100644 --- a/justfile +++ b/justfile @@ -67,7 +67,7 @@ ci-gen: docs uv run --only-group=check ruff format --diff . echo "running formatter; yamlfmt (YAML)" - uv run yamlfmt -lint -quiet -output_format default -formatter indent=2,indentless_arrays=true,retain_line_breaks_single=true,trim_trailing_whitespace=true . + scripts/yamlfmt-diff.sh . | delta # fix formatting [group('dev')] @@ -121,7 +121,7 @@ ci-gen: docs [group('dev')] @schema-check: echo "running schema checker (dbyaml config)" - uv run scripts/generate_schema.py | diff - src/dbyaml/resources/dbyaml.schema.json + uv run scripts/generate_schema.py | diff src/dbyaml/resources/dbyaml.schema.json - # generate all docs [group('dev')] diff --git a/src/dbyaml/cli.py b/src/dbyaml/cli.py index d86f18c..7e118c0 100644 --- a/src/dbyaml/cli.py +++ b/src/dbyaml/cli.py @@ -163,11 +163,24 @@ else: def main(ctx, filename, config, format_type, quiet, verbose, debug): """The uncompromising db(yaml) utility.""" if ctx.invoked_subcommand is None: - ctx.invoke(list) + ctx.invoke(lst) - @main.command + @main.command("list") + @click.option( + "-k", + "--keys", + is_flag=True, + help="List keys.", + ) @pass_context - def list(ctx): + def lst(ctx, keys): data = load(ctx.obj["filename"]) - res = dump(data, format_type=ctx.obj["format_type"]) + if keys: + if isinstance(data, dict): + df = list(data.keys()) + elif isinstance(data, list): + df = len(data) + else: + df = data + res = dump(df, format_type=ctx.obj["format_type"]) print(res) diff --git a/src/dbyaml/db.pyi b/src/dbyaml/db.pyi index 246d53f..951483b 100644 --- a/src/dbyaml/db.pyi +++ b/src/dbyaml/db.pyi @@ -1,3 +1,3 @@ def load(filename: str) -> list | dict: ... -def dump(data: list | dict, format_type: str) -> str: ... +def dump(data: object, format_type: str) -> str: ... def run_shebang(script: str) -> None: ... diff --git a/src/dbyaml/resources/dbyaml.schema.json b/src/dbyaml/resources/dbyaml.schema.json index f45c2b0..dcbe3aa 100644 --- a/src/dbyaml/resources/dbyaml.schema.json +++ b/src/dbyaml/resources/dbyaml.schema.json @@ -31,7 +31,13 @@ "list": { "type": "object", "additionalProperties": false, - "properties": {} + "properties": { + "keys": { + "type": "boolean", + "description": "List keys.", + "default": false + } + } } } } diff --git a/tests/test_cli.py b/tests/test_cli.py index 5807181..8e0c808 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -7,7 +7,7 @@ from dbyaml.cli import pass_context, uses_decorator # ty: ignore[unresolved-imp def test_uses_decorator_cli(): assert uses_decorator("main", "pass_context", dbyaml.cli.__file__) - assert uses_decorator("list", "pass_context", dbyaml.cli.__file__) + assert uses_decorator("lst", "pass_context", dbyaml.cli.__file__) def test_uses_decorator_wo():