strictcli 0.12.0__tar.gz → 0.13.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. strictcli-0.13.0/.rlsbl/changes/.validated +1 -0
  2. strictcli-0.13.0/.rlsbl/changes/0.13.0.jsonl +3 -0
  3. strictcli-0.13.0/.rlsbl/releases/v0.13.0.toml +4 -0
  4. {strictcli-0.12.0 → strictcli-0.13.0}/CHANGELOG.md +6 -0
  5. {strictcli-0.12.0 → strictcli-0.13.0}/PKG-INFO +1 -1
  6. {strictcli-0.12.0 → strictcli-0.13.0}/package-lock.json +2 -2
  7. {strictcli-0.12.0 → strictcli-0.13.0}/package.json +1 -1
  8. {strictcli-0.12.0 → strictcli-0.13.0}/pyproject.toml +1 -1
  9. {strictcli-0.12.0 → strictcli-0.13.0}/strictcli/__init__.py +34 -4
  10. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_check_schema.py +7 -0
  11. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_dump_schema.py +66 -0
  12. {strictcli-0.12.0 → strictcli-0.13.0}/uv.lock +1 -1
  13. strictcli-0.12.0/.rlsbl/changes/.validated +0 -1
  14. {strictcli-0.12.0 → strictcli-0.13.0}/.claude/settings.json +0 -0
  15. {strictcli-0.12.0 → strictcli-0.13.0}/.github/workflows/ci.yml +0 -0
  16. {strictcli-0.12.0 → strictcli-0.13.0}/.github/workflows/publish.yml +0 -0
  17. {strictcli-0.12.0 → strictcli-0.13.0}/.gitignore +0 -0
  18. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/.claude/settings.json +0 -0
  19. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/.github/workflows/ci.yml +0 -0
  20. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/.github/workflows/publish.yml +0 -0
  21. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/.gitignore +0 -0
  22. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/.rlsbl/hooks/post-release.sh +0 -0
  23. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/.rlsbl/hooks/pre-checks.sh +0 -0
  24. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/.rlsbl/hooks/pre-release.sh +0 -0
  25. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/.rlsbl/lint/go.toml +0 -0
  26. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/.rlsbl/lint/npm.toml +0 -0
  27. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/.rlsbl/lint/python.toml +0 -0
  28. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/CHANGELOG.md +0 -0
  29. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/CLAUDE.md +0 -0
  30. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/bases/LICENSE +0 -0
  31. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.10.0.jsonl +0 -0
  32. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.10.0.md +0 -0
  33. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.11.0.jsonl +0 -0
  34. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.11.0.md +0 -0
  35. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.12.0.jsonl +0 -0
  36. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.12.0.md +0 -0
  37. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.4.0.jsonl +0 -0
  38. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.4.0.md +0 -0
  39. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.4.1.jsonl +0 -0
  40. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.4.1.md +0 -0
  41. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.5.0.jsonl +0 -0
  42. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.5.0.md +0 -0
  43. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.6.0.jsonl +0 -0
  44. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.6.0.md +0 -0
  45. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.6.1.jsonl +0 -0
  46. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.6.1.md +0 -0
  47. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.7.0.jsonl +0 -0
  48. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.7.0.md +0 -0
  49. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.7.1.jsonl +0 -0
  50. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.7.1.md +0 -0
  51. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.0.jsonl +0 -0
  52. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.0.md +0 -0
  53. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.1.jsonl +0 -0
  54. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.1.md +0 -0
  55. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.2.jsonl +0 -0
  56. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.2.md +0 -0
  57. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.3.jsonl +0 -0
  58. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.3.md +0 -0
  59. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.4.jsonl +0 -0
  60. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.4.md +0 -0
  61. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.5.jsonl +0 -0
  62. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.5.md +0 -0
  63. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.6.jsonl +0 -0
  64. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.6.md +0 -0
  65. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.7.jsonl +0 -0
  66. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.8.7.md +0 -0
  67. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.9.0.jsonl +0 -0
  68. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.9.0.md +0 -0
  69. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.9.1.jsonl +0 -0
  70. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/0.9.1.md +0 -0
  71. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/changes/unreleased.jsonl +0 -0
  72. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/config.json +0 -0
  73. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/hashes.json +0 -0
  74. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/hooks/post-release.sh +0 -0
  75. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/hooks/pre-checks.sh +0 -0
  76. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/hooks/pre-release.sh +0 -0
  77. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/lint/go.toml +0 -0
  78. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/lint/npm.toml +0 -0
  79. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/lint/python.toml +0 -0
  80. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/releases/unreleased.toml +0 -0
  81. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/releases/v0.10.0.toml +0 -0
  82. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/releases/v0.11.0.toml +0 -0
  83. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/releases/v0.12.0.toml +0 -0
  84. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/releases/v0.8.5.toml +0 -0
  85. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/releases/v0.8.6.toml +0 -0
  86. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/releases/v0.8.7.toml +0 -0
  87. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/releases/v0.9.0.toml +0 -0
  88. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/releases/v0.9.1.toml +0 -0
  89. {strictcli-0.12.0 → strictcli-0.13.0}/.rlsbl/version +0 -0
  90. {strictcli-0.12.0 → strictcli-0.13.0}/.strictcli/schema.json +0 -0
  91. {strictcli-0.12.0 → strictcli-0.13.0}/CLAUDE.md +0 -0
  92. {strictcli-0.12.0 → strictcli-0.13.0}/LICENSE +0 -0
  93. {strictcli-0.12.0 → strictcli-0.13.0}/README.md +0 -0
  94. {strictcli-0.12.0 → strictcli-0.13.0}/index.js +0 -0
  95. {strictcli-0.12.0 → strictcli-0.13.0}/postinstall.js +0 -0
  96. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_arg_default.py +0 -0
  97. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_at_prefix.py +0 -0
  98. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_auto_version.py +0 -0
  99. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_check_command.py +0 -0
  100. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_check_discovery.py +0 -0
  101. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_check_runner.py +0 -0
  102. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_check_types.py +0 -0
  103. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_choices.py +0 -0
  104. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_command_help_suggestion.py +0 -0
  105. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_config.py +0 -0
  106. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_config_file_path.py +0 -0
  107. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_deep_nesting.py +0 -0
  108. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_dependencies.py +0 -0
  109. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_deprecated.py +0 -0
  110. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_e2e.py +0 -0
  111. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_env.py +0 -0
  112. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_exit_codes.py +0 -0
  113. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_float_type.py +0 -0
  114. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_global_flags.py +0 -0
  115. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_help.py +0 -0
  116. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_int_type.py +0 -0
  117. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_mutex.py +0 -0
  118. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_nesting.py +0 -0
  119. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_parser.py +0 -0
  120. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_passthrough.py +0 -0
  121. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_registration.py +0 -0
  122. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_repeatable.py +0 -0
  123. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_tagdsl.py +0 -0
  124. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_tags.py +0 -0
  125. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_toml_loading.py +0 -0
  126. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_validate.py +0 -0
  127. {strictcli-0.12.0 → strictcli-0.13.0}/tests/test_variadic.py +0 -0
  128. {strictcli-0.12.0 → strictcli-0.13.0}/todo/.defer/deferred.md +0 -0
  129. {strictcli-0.12.0 → strictcli-0.13.0}/todo/.done/original-idea.md +0 -0
@@ -0,0 +1 @@
1
+ 052122abb24b7318d56b1c0d657fbaf740d6f5a5
@@ -0,0 +1,3 @@
1
+ {"commits":["12ad7c022938b07cf1f44b20bdbe9de0ae6a84be"],"user_facing":true,"description":"**New feature.** Schema dump (--dump-schema) now includes a project_id field read from pyproject.toml, providing provenance for schema validation.","type":"feature"}
2
+ {"commits":["a50cf7899c938974b12e8e74201bdf58c0205a55"],"user_facing":false}
3
+ {"commits":["214721745a82a47189a13b2443fb9ddc59826347"],"user_facing":false}
@@ -0,0 +1,4 @@
1
+ # Version bump type: patch, minor, or major
2
+ bump = "minor"
3
+ include = ["pypi", "npm"]
4
+ exclude = []
@@ -2,6 +2,12 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## 0.13.0
6
+
7
+ ### Features
8
+
9
+ - **New feature.** Schema dump (--dump-schema) now includes a project_id field read from pyproject.toml, providing provenance for schema validation.
10
+
5
11
  ## 0.12.0
6
12
 
7
13
  ### Breaking
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: strictcli
3
- Version: 0.12.0
3
+ Version: 0.13.0
4
4
  Summary: A strict, zero-dependency CLI framework for Python
5
5
  Project-URL: Homepage, https://github.com/smm-h/strictcli
6
6
  Project-URL: Repository, https://github.com/smm-h/strictcli
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "strictcli",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "strictcli",
9
- "version": "0.12.0",
9
+ "version": "0.13.0",
10
10
  "hasInstallScript": true,
11
11
  "license": "MIT"
12
12
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "strictcli",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "A strict, zero-dependency CLI framework for Python (npm wrapper)",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "strictcli"
7
- version = "0.12.0"
7
+ version = "0.13.0"
8
8
  description = "A strict, zero-dependency CLI framework for Python"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- __version__ = "0.12.0"
5
+ __version__ = "0.13.0"
6
6
 
7
7
  __all__ = [
8
8
  "App", "Flag", "Arg", "Tag", "MutexGroup", "CoRequired", "Requires",
@@ -1460,7 +1460,11 @@ class App:
1460
1460
  print(_format_version(self))
1461
1461
  sys.exit(0)
1462
1462
  except _DumpSchemaRequested:
1463
- path = _write_schema(self)
1463
+ try:
1464
+ path = _write_schema(self)
1465
+ except RuntimeError as e:
1466
+ print(f"error: {e}", file=sys.stderr)
1467
+ sys.exit(1)
1464
1468
  print(path)
1465
1469
  sys.exit(0)
1466
1470
  except _ParseError as e:
@@ -1503,8 +1507,13 @@ class App:
1503
1507
  except _VersionRequested:
1504
1508
  stdout_buf.write(_format_version(self) + "\n")
1505
1509
  except _DumpSchemaRequested:
1506
- path = _write_schema(self)
1507
- stdout_buf.write(path + "\n")
1510
+ try:
1511
+ path = _write_schema(self)
1512
+ except RuntimeError as e:
1513
+ stderr_buf.write(f"error: {e}\n")
1514
+ exit_code = 1
1515
+ else:
1516
+ stdout_buf.write(path + "\n")
1508
1517
  except _ParseError as e:
1509
1518
  stderr_buf.write(f"error: {e}\n")
1510
1519
  prefix = e.command_prefix or self.name
@@ -3087,14 +3096,35 @@ def _build_schema_defaults() -> dict:
3087
3096
  }
3088
3097
 
3089
3098
 
3099
+ def _read_project_id() -> str:
3100
+ """Read project name from pyproject.toml in the current working directory."""
3101
+ pyproject_path = Path(os.getcwd()) / "pyproject.toml"
3102
+ if not pyproject_path.exists():
3103
+ raise RuntimeError(
3104
+ "Cannot determine project_id: pyproject.toml not found "
3105
+ "or missing [project].name"
3106
+ )
3107
+ with open(pyproject_path, "rb") as f:
3108
+ data = tomllib.load(f)
3109
+ project_name = data.get("project", {}).get("name")
3110
+ if not project_name:
3111
+ raise RuntimeError(
3112
+ "Cannot determine project_id: pyproject.toml not found "
3113
+ "or missing [project].name"
3114
+ )
3115
+ return project_name
3116
+
3117
+
3090
3118
  def _dump_schema(app: App) -> dict:
3091
3119
  """Produce a JSON-serializable dict representing the app's command tree.
3092
3120
 
3093
3121
  Fields whose values match the schema defaults are omitted.
3094
3122
  The top-level ``defaults`` key documents what each missing field means.
3095
3123
  """
3124
+ project_id = _read_project_id()
3096
3125
  schema: dict = {
3097
3126
  "defaults": _build_schema_defaults(),
3127
+ "project_id": project_id,
3098
3128
  "name": app.name,
3099
3129
  "version": app.version,
3100
3130
  "help": app.help,
@@ -2,9 +2,16 @@
2
2
 
3
3
  import json
4
4
 
5
+ import pytest
5
6
  import strictcli
6
7
 
7
8
 
9
+ @pytest.fixture(autouse=True)
10
+ def _pyproject_in_tmp(tmp_path):
11
+ """Ensure every test that uses tmp_path has a pyproject.toml for project_id."""
12
+ (tmp_path / "pyproject.toml").write_text('[project]\nname = "testproject"\n')
13
+
14
+
8
15
  CHECKS_TOML = """\
9
16
  app = "testapp"
10
17
 
@@ -5,8 +5,17 @@ from __future__ import annotations
5
5
  import json
6
6
  import os
7
7
 
8
+ import pytest
8
9
  import strictcli
9
10
 
11
+ _PYPROJECT_TOML = '[project]\nname = "testproject"\n'
12
+
13
+
14
+ @pytest.fixture(autouse=True)
15
+ def _pyproject_in_tmp(tmp_path):
16
+ """Ensure every test that uses tmp_path has a pyproject.toml for project_id."""
17
+ (tmp_path / "pyproject.toml").write_text(_PYPROJECT_TOML)
18
+
10
19
 
11
20
  def _make_app(**kwargs):
12
21
  """Create a minimal app for testing."""
@@ -662,3 +671,60 @@ class TestSchemaNonDefaultValues:
662
671
  app.test(["--dump-schema"])
663
672
  data = json.loads((tmp_path / ".strictcli" / "schema.json").read_text())
664
673
  assert data["config"] is True
674
+
675
+
676
+ class TestSchemaProjectId:
677
+ """Schema contains project_id from pyproject.toml."""
678
+
679
+ def test_project_id_present(self, tmp_path, monkeypatch):
680
+ monkeypatch.chdir(tmp_path)
681
+ app = _make_app()
682
+
683
+ @app.command("noop", help="Does nothing")
684
+ def noop():
685
+ pass
686
+
687
+ app.test(["--dump-schema"])
688
+ data = json.loads((tmp_path / ".strictcli" / "schema.json").read_text())
689
+ assert data["project_id"] == "testproject"
690
+
691
+ def test_project_id_custom_name(self, tmp_path, monkeypatch):
692
+ (tmp_path / "pyproject.toml").write_text(
693
+ '[project]\nname = "my-custom-tool"\n'
694
+ )
695
+ monkeypatch.chdir(tmp_path)
696
+ app = _make_app()
697
+
698
+ @app.command("noop", help="Does nothing")
699
+ def noop():
700
+ pass
701
+
702
+ app.test(["--dump-schema"])
703
+ data = json.loads((tmp_path / ".strictcli" / "schema.json").read_text())
704
+ assert data["project_id"] == "my-custom-tool"
705
+
706
+ def test_project_id_error_no_pyproject(self, tmp_path, monkeypatch):
707
+ os.remove(tmp_path / "pyproject.toml")
708
+ monkeypatch.chdir(tmp_path)
709
+ app = _make_app()
710
+
711
+ @app.command("noop", help="Does nothing")
712
+ def noop():
713
+ pass
714
+
715
+ result = app.test(["--dump-schema"])
716
+ assert result.exit_code != 0
717
+ assert "project_id" in result.stderr
718
+
719
+ def test_project_id_error_no_project_name(self, tmp_path, monkeypatch):
720
+ (tmp_path / "pyproject.toml").write_text("[tool.something]\nkey = 1\n")
721
+ monkeypatch.chdir(tmp_path)
722
+ app = _make_app()
723
+
724
+ @app.command("noop", help="Does nothing")
725
+ def noop():
726
+ pass
727
+
728
+ result = app.test(["--dump-schema"])
729
+ assert result.exit_code != 0
730
+ assert "project_id" in result.stderr
@@ -232,7 +232,7 @@ wheels = [
232
232
 
233
233
  [[package]]
234
234
  name = "strictcli"
235
- version = "0.12.0"
235
+ version = "0.13.0"
236
236
  source = { editable = "." }
237
237
 
238
238
  [package.dev-dependencies]
@@ -1 +0,0 @@
1
- c161283293520cc94f39d9cfec589f6f4cf5a352
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes