Skip to content

Commit 256a2e9

Browse files
author
Tim Kreitner
committed
feat(providers): add rye version provider
1 parent 3d705a2 commit 256a2e9

File tree

6 files changed

+70
-1
lines changed

6 files changed

+70
-1
lines changed

commitizen/providers/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from commitizen.providers.npm_provider import NpmProvider
1515
from commitizen.providers.pep621_provider import Pep621Provider
1616
from commitizen.providers.poetry_provider import PoetryProvider
17+
from commitizen.providers.rye_provider import RyeProvider
1718
from commitizen.providers.scm_provider import ScmProvider
1819

1920
__all__ = [
@@ -24,6 +25,7 @@
2425
"NpmProvider",
2526
"Pep621Provider",
2627
"PoetryProvider",
28+
"RyeProvider",
2729
"ScmProvider",
2830
]
2931

commitizen/providers/rye_provider.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from __future__ import annotations
2+
3+
import tomlkit
4+
5+
6+
from commitizen.providers.base_provider import TomlProvider
7+
8+
9+
class RyeProvider(TomlProvider):
10+
"""
11+
Rye version management
12+
"""
13+
14+
filename = "pyproject.toml"
15+
16+
def get(self, pyproject: tomlkit.TOMLDocument) -> str:
17+
return pyproject["tool"]["rye"]["version"] # type: ignore
18+
19+
def set(self, pyproject: tomlkit.TOMLDocument, version: str):
20+
pyproject["tool"]["rye"]["version"] = version # type: ignore

docs/config.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,7 @@ Commitizen provides some version providers for some well known formats:
332332
| `scm` | Fetch the version from git and does not need to set it back |
333333
| `pep621` | Get and set version from `pyproject.toml` `project.version` field |
334334
| `poetry` | Get and set version from `pyproject.toml` `tool.poetry.version` field |
335+
| `rye` | Get and set version from `pyproject.toml` `tool.rye.version` field |
335336
| `cargo` | Get and set version from `Cargo.toml` `project.version` field |
336337
| `npm` | Get and set version from `package.json` `version` field, `package-lock.json` `version,packages.''.version` fields if the file exists, and `npm-shrinkwrap.json` `version,packages.''.version` fields if the file exists |
337338
| `composer` | Get and set version from `composer.json` `project.version` field |

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ composer = "commitizen.providers:ComposerProvider"
9898
npm = "commitizen.providers:NpmProvider"
9999
pep621 = "commitizen.providers:Pep621Provider"
100100
poetry = "commitizen.providers:PoetryProvider"
101+
rye = "commitizen.providers:RyeProvider"
101102
scm = "commitizen.providers:ScmProvider"
102103

103104
[tool.poetry.plugins."commitizen.scheme"]

tests/providers/test_poetry_provider.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"content, expected",
2626
((POETRY_TOML, POETRY_EXPECTED),),
2727
)
28-
def test_cargo_provider(
28+
def test_poetry_provider(
2929
config: BaseConfig,
3030
chdir: Path,
3131
content: str,

tests/providers/test_rye_provider.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from __future__ import annotations
2+
3+
from pathlib import Path
4+
from textwrap import dedent
5+
6+
import pytest
7+
8+
from commitizen.config.base_config import BaseConfig
9+
from commitizen.providers import get_provider
10+
from commitizen.providers.base_provider import VersionProvider
11+
from commitizen.providers.rye_provider import RyeProvider
12+
13+
14+
RYE_TOML = """\
15+
[tool.rye]
16+
version = "0.1.0"
17+
"""
18+
19+
RYE_EXPECTED = """\
20+
[tool.rye]
21+
version = "42.1"
22+
"""
23+
24+
25+
@pytest.mark.parametrize(
26+
"content, expected",
27+
((RYE_TOML, RYE_EXPECTED),),
28+
)
29+
def test_rye_provider(
30+
config: BaseConfig,
31+
chdir: Path,
32+
content: str,
33+
expected: str,
34+
):
35+
filename = RyeProvider.filename
36+
file = chdir / filename
37+
file.write_text(dedent(content))
38+
config.settings["version_provider"] = "rye"
39+
40+
provider: VersionProvider = get_provider(config)
41+
assert isinstance(provider, RyeProvider)
42+
assert provider.get_version() == "0.1.0"
43+
44+
provider.set_version("42.1")
45+
assert file.read_text() == dedent(expected)

0 commit comments

Comments
 (0)