Skip to content

Commit 1fa1b7c

Browse files
committed
feat(providers): add uv_provider
closes: #1349
1 parent 295f975 commit 1fa1b7c

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

commitizen/providers/uv_provider.py

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from __future__ import annotations
2+
3+
from pathlib import Path
4+
from typing import TYPE_CHECKING
5+
6+
import tomlkit
7+
8+
from commitizen.providers.base_provider import TomlProvider
9+
10+
if TYPE_CHECKING:
11+
import tomlkit.items
12+
13+
14+
class UvProvider(TomlProvider):
15+
"""
16+
uv.lock and pyproject.tom version management
17+
"""
18+
19+
filename = "pyproject.toml"
20+
lock_filename = "uv.lock"
21+
22+
@property
23+
def lock_file(self) -> Path:
24+
return Path() / self.lock_filename
25+
26+
def set_version(self, version: str) -> None:
27+
super().set_version(version)
28+
self.set_lock_version(version)
29+
30+
def set_lock_version(self, version: str) -> None:
31+
pyproject_toml_content = tomlkit.parse(self.file.read_text())
32+
project_name = pyproject_toml_content["project"]["name"] # type: ignore[index]
33+
34+
document = tomlkit.parse(self.lock_file.read_text())
35+
36+
packages: tomlkit.items.AoT = document["package"] # type: ignore[assignment]
37+
for i, package in enumerate(packages):
38+
if package["name"] == project_name:
39+
document["package"][i]["version"] = version # type: ignore[index]
40+
break
41+
self.lock_file.write_text(tomlkit.dumps(document))

0 commit comments

Comments
 (0)