Skip to content

Commit 0283e7c

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

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

Diff for: commitizen/providers/uv_provider.py

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

0 commit comments

Comments
 (0)