Skip to content

Commit daff557

Browse files
Implement Dependency.to_requirements_string (#861)
* Implement `Dependency.to_requirements_string` * Use `Dependency.to_requirements_string()` in `Dependency.__str__`
1 parent f34677b commit daff557

2 files changed

Lines changed: 21 additions & 2 deletions

File tree

src/usethis/_integrations/uv/deps.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,16 @@ class Dependency(BaseModel):
1717
extras: frozenset[str] = frozenset()
1818

1919
def __str__(self) -> str:
20-
extras = sorted(self.extras or set())
21-
return self.name + "".join(f"[{extra}]" for extra in extras)
20+
return self.to_requirements_string()
2221

2322
def __hash__(self) -> int:
2423
return hash((self.__class__.__name__, self.name, self.extras))
2524

25+
def to_requirements_string(self) -> str:
26+
"""Convert the dependency to a requirements string."""
27+
extras_str = f"[{','.join(sorted(self.extras))}]" if self.extras else ""
28+
return f"{self.name}{extras_str}"
29+
2630

2731
def get_project_deps() -> list[Dependency]:
2832
"""Get all project dependencies.

tests/usethis/_integrations/uv/test_deps.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,21 @@
2828
from usethis._test import change_cwd
2929

3030

31+
class TestDependency:
32+
class TestToRequirementsString:
33+
def test_no_extras(self):
34+
dep = Dependency(name="requests")
35+
assert dep.to_requirements_string() == "requests"
36+
37+
def test_single_extra(self):
38+
dep = Dependency(name="requests", extras=frozenset({"security"}))
39+
assert dep.to_requirements_string() == "requests[security]"
40+
41+
def test_multiple_extras(self):
42+
dep = Dependency(name="requests", extras=frozenset({"security", "socks"}))
43+
assert dep.to_requirements_string() == "requests[security,socks]"
44+
45+
3146
class TestGetProjectDeps:
3247
def test_no_pyproject(self, tmp_path: Path):
3348
# Arrange - No pyproject.toml file exists

0 commit comments

Comments
 (0)