-
Notifications
You must be signed in to change notification settings - Fork 0
Refactor to avoid duplication of config-file source of metadata #141
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
Changes from all commits
17cf57c
0da5b14
a44fc5d
390d673
e28a8fa
2f3dff4
b9df9b8
8ed2442
a570f43
995399c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,6 +4,10 @@ | |
|
|
||
| from autorelease.scripts.vendor import vendor_actions | ||
| from autorelease.scripts.check import run_checks | ||
| from autorelease.utils import split_setup_cfg_path | ||
| from autorelease.version import ( | ||
| ConfigParserError, get_setup_cfg, get_setup_name, get_setup_version | ||
| ) | ||
| # from autorelease import ReleaseNoteWriter | ||
| from autorelease.gh_api4.notes4 import NotesWriter, prs_since_latest_release | ||
|
|
||
|
|
@@ -77,6 +81,60 @@ def auth(auth): | |
| auth = load_auth(auth) | ||
| pprint(auth) | ||
|
|
||
| @cli.group() | ||
| def metadata(): | ||
| pass | ||
|
|
||
|
|
||
| @metadata.command(name="version") | ||
| @click.option("-c", "--conf", type=str, default="setup.cfg", | ||
| help="setup.cfg file to use") | ||
| def metadata_version(conf): | ||
| directory, filename = split_setup_cfg_path(conf) | ||
| try: | ||
| setup_cfg = get_setup_cfg(directory=directory, filename=filename) | ||
| except ConfigParserError as exc: | ||
| raise click.ClickException( | ||
| f"Unable to parse setup config: {conf}" | ||
| ) from exc | ||
| if setup_cfg is None: | ||
| raise click.ClickException( | ||
| f"Unable to find setup config: {conf}" | ||
| ) | ||
| value = get_setup_version(setup_cfg, default_version=None) | ||
| field = "version" | ||
|
|
||
| if value is None: | ||
| raise click.ClickException( | ||
| f"Missing [metadata] {field} in {conf}" | ||
| ) | ||
|
dwhswenson marked this conversation as resolved.
dwhswenson marked this conversation as resolved.
|
||
| click.echo(value) | ||
|
|
||
|
|
||
| @metadata.command(name="name") | ||
| @click.option("-c", "--conf", type=str, default="setup.cfg", | ||
| help="setup.cfg file to use") | ||
| def metadata_name(conf): | ||
| directory, filename = split_setup_cfg_path(conf) | ||
| try: | ||
| setup_cfg = get_setup_cfg(directory=directory, filename=filename) | ||
| except ConfigParserError as exc: | ||
| raise click.ClickException( | ||
| f"Unable to parse setup config: {conf}" | ||
| ) from exc | ||
| if setup_cfg is None: | ||
| raise click.ClickException( | ||
| f"Unable to find setup config: {conf}" | ||
| ) | ||
| value = get_setup_name(setup_cfg, default_name=None) | ||
| field = "name" | ||
|
|
||
| if value is None: | ||
| raise click.ClickException( | ||
| f"Missing [metadata] {field} in {conf}" | ||
| ) | ||
|
dwhswenson marked this conversation as resolved.
dwhswenson marked this conversation as resolved.
dwhswenson marked this conversation as resolved.
|
||
| click.echo(value) | ||
|
Comment on lines
+89
to
+136
|
||
|
|
||
|
|
||
| @cli.command() | ||
| @click.option('--conf', type=click.File('r')) | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,118 @@ | ||
| from click.testing import CliRunner | ||
|
|
||
| import autorelease.scripts.cli as cli_mod | ||
|
|
||
|
|
||
| def test_metadata_version(monkeypatch): | ||
| monkeypatch.setattr( | ||
| cli_mod, "get_setup_version", | ||
| lambda _conf, default_version=None: "1.2.3" | ||
| ) | ||
| runner = CliRunner() | ||
| result = runner.invoke(cli_mod.cli, ["metadata", "version"]) | ||
| assert result.exit_code == 0 | ||
| assert result.output.strip() == "1.2.3" | ||
|
|
||
|
|
||
| def test_metadata_name(monkeypatch): | ||
| monkeypatch.setattr( | ||
| cli_mod, "get_setup_name", | ||
| lambda _conf, default_name=None: "mypackage" | ||
| ) | ||
| runner = CliRunner() | ||
| result = runner.invoke(cli_mod.cli, ["metadata", "name"]) | ||
| assert result.exit_code == 0 | ||
| assert result.output.strip() == "mypackage" | ||
|
|
||
|
|
||
| def test_metadata_cli_name_and_version(tmp_path): | ||
| setup_cfg = tmp_path / "setup.cfg" | ||
| setup_cfg.write_text( | ||
| "[metadata]\n" | ||
| "name = mypkg\n" | ||
| "version = 1.2.3.dev0\n" | ||
| ) | ||
|
|
||
| runner = CliRunner() | ||
| name_result = runner.invoke( | ||
| cli_mod.cli, ["metadata", "name", "--conf", str(setup_cfg)] | ||
| ) | ||
| version_result = runner.invoke( | ||
| cli_mod.cli, ["metadata", "version", "--conf", str(setup_cfg)] | ||
| ) | ||
|
|
||
| assert name_result.exit_code == 0 | ||
| assert name_result.output == "mypkg\n" | ||
| assert version_result.exit_code == 0 | ||
| assert version_result.output == "1.2.3.dev0\n" | ||
|
|
||
|
|
||
| def test_metadata_cli_missing_file(tmp_path): | ||
| missing_cfg = tmp_path / "missing.cfg" | ||
| runner = CliRunner() | ||
|
|
||
| name_result = runner.invoke( | ||
| cli_mod.cli, ["metadata", "name", "--conf", str(missing_cfg)] | ||
| ) | ||
| version_result = runner.invoke( | ||
| cli_mod.cli, ["metadata", "version", "--conf", str(missing_cfg)] | ||
| ) | ||
|
|
||
| assert name_result.exit_code != 0 | ||
| assert f"Unable to find setup config: {missing_cfg}" in name_result.output | ||
| assert version_result.exit_code != 0 | ||
| assert f"Unable to find setup config: {missing_cfg}" in version_result.output | ||
|
|
||
|
|
||
| def test_metadata_cli_missing_fields(tmp_path): | ||
| no_name_cfg = tmp_path / "setup_no_name.cfg" | ||
| no_name_cfg.write_text( | ||
| "[metadata]\n" | ||
| "version = 2.0.0\n" | ||
| ) | ||
| no_version_cfg = tmp_path / "setup_no_version.cfg" | ||
| no_version_cfg.write_text( | ||
| "[metadata]\n" | ||
| "name = pkg-without-version\n" | ||
| ) | ||
|
|
||
| runner = CliRunner() | ||
| missing_name_result = runner.invoke( | ||
| cli_mod.cli, ["metadata", "name", "--conf", str(no_name_cfg)] | ||
| ) | ||
| missing_version_result = runner.invoke( | ||
| cli_mod.cli, ["metadata", "version", "--conf", str(no_version_cfg)] | ||
| ) | ||
|
|
||
| assert missing_name_result.exit_code != 0 | ||
| assert f"Missing [metadata] name in {no_name_cfg}" in missing_name_result.output | ||
| assert missing_version_result.exit_code != 0 | ||
| assert ( | ||
| f"Missing [metadata] version in {no_version_cfg}" | ||
| in missing_version_result.output | ||
| ) | ||
|
|
||
|
|
||
| def test_metadata_cli_malformed_cfg(tmp_path): | ||
| setup_cfg = tmp_path / "setup.cfg" | ||
| setup_cfg.write_text( | ||
| "[metadata\n" | ||
| "name = badpkg\n" | ||
| "version = 0.0.0\n" | ||
| ) | ||
|
|
||
| runner = CliRunner() | ||
| name_result = runner.invoke( | ||
| cli_mod.cli, ["metadata", "name", "--conf", str(setup_cfg)] | ||
| ) | ||
| version_result = runner.invoke( | ||
| cli_mod.cli, ["metadata", "version", "--conf", str(setup_cfg)] | ||
| ) | ||
|
|
||
| assert name_result.exit_code != 0 | ||
| assert f"Unable to parse setup config: {setup_cfg}" in name_result.output | ||
| assert version_result.exit_code != 0 | ||
| assert ( | ||
| f"Unable to parse setup config: {setup_cfg}" | ||
| in version_result.output | ||
| ) |
Uh oh!
There was an error while loading. Please reload this page.